XE 7 - Parallel Programming Library
Hallo zusammen,
ich weiß,XE7 ist heute erst rausgekommen aber vielleicht füllt sich ja der Thread dadurch in den nächsten Tagen ;-) Wollte mich mal schlau machen, wie das "Parallel Programming Library" in XE7 aussieht. Muss man da nur etwas einbinden damit es "von selber" so abläuft? Muss man da etwas an seinem Programmen anpassen damit es überhaupt funktionieren kann? Vielleicht schreibt hier mal einer rein, der es ausprobiert hat oder weiß wie es genau funktioniert ;-) Viele Grüße |
AW: XE 7 - Parallel Programming Library
Von allein geht es nicht. Kann ja auch nicht funktionieren. Der Programmierer muss natürlich festlegen, was parallel abgearbeitet werden kann bzw. was unbedingt sequentiell.
https://www.youtube.com/embed/Ni3JDx...de=transparent |
AW: XE 7 - Parallel Programming Library
Darauf bin ich auch ziemlich gespannt, aber das DocWiki zum Thema ist noch leer. Mehr als dieses 38-sekündige Promovideo kenne ich auch nicht.
Aber dazu kommt bei Embarcaderos Skill Sprints hoffentlich bald was :) |
AW: XE 7 - Parallel Programming Library
Ich frage mich folgendes:
Angenommen ich habe 50 Threads (einfach eine in den Raum gestellte Zahl die keiner weiteren Nachfrage und Sinnhaftigkeit bedarf), die alle unabhängig voneinander etwas tun und irgendwann fertig werden können bzw. immer irgendwelche Sachen abarbeiten. Dies kann ich ja jetzt aktuell nicht wirklich beeinflussen, auf wie viele Kerne das ausgelagert wird, damit es parallel erfolgen kann. Bringt mir für diesen Anwendungsfall das "Parallel Programming Library" auch etwas? Viele Grüße |
AW: XE 7 - Parallel Programming Library
Der Code zum Demo:http://sourceforge.net/p/radstudiode...llel%20Library
Jein. Mit der Bibliothek legst Du fest, welcher Code parallel ausgeführt werden kann. Wenn genügend Ressourcen (Kerne) vorhanden sind, laufen dann alle "Threads" parallel. Sonst halt so viele wie gehen und die anderen nach Abschluss einer anderen Aufgabe. |
AW: XE 7 - Parallel Programming Library
Bei C# kann man mit PLINQ einfach Schleifenoperationen parallel durchführen. Also: Gib mir mal aus der Liste alle Elemente mit X>3, sortiere nach Name.
Code:
D.h. etwas aufzählbares wird so aufbereitet ('AsParallel'), das Threads damit parallel klarkommen.
var q = List.Where (l=>l.x>3).OrderBy(l=>l.Name);
foreach (var item in q) ... // ==> var q = List.AsParallel.Where (l=>l.x>3).OrderBy(l=>l.Name).Take(10).Sum(l=>l.z); foreach (var item in q) ... <--- Abarbeitung in Threads und parallel Ich gehe mal davon aus, das die Parallel-Library von Emba auch so ähnlich funktioniert. Threads an sich kann man ja schon programmieren und hier wird es kaum einen Einsatz geben. Nur noch ohne LINQ, aber das ist hier zweitrangig. Ergo wird sich der Mehrwert dadurch ergeben, das Du es bei Schleifen dem Framework überlässt, die Aufgaben an Threads zu verteilen. Windows wird dann die Verteilung auf die Kerne schon selbst übernehmen. An sich eine großartige Sache. Jetzt noch LINQ für Delphi... :mrgreen: PS: @mkinzler - kein Code im Link.. noch nicht. |
AW: XE 7 - Parallel Programming Library
Zitat:
Wenn du in deinen 50 Threads sehr CPU-instensiven Code laufen lässt, dann bremst du deinen Rechner aus, sprich es wird langsamer. Darum ist es besser, diese Verarbeitung immer nur mit <Anzahl-CPU-Kerne> Threads zu verarbeiten. Wenn du in deinen 50 Threads Daten aus dem Internet holen möchtest, dann kann das je nach Internet-Anbindung gut oder schlecht sein. |
AW: XE 7 - Parallel Programming Library
Gibts dann eigentlich auch ein "await" ? Hatte angefangen mir das selber zu schreiben, aber fertig wäre das natürlich schöner.
|
AW: XE 7 - Parallel Programming Library
Zitat:
svn://svn.code.sf.net/p/radstudiodemos/code/trunk/Object Pascal/RTL/Parallel Library Schlau werde ich aus einem Haufen hunderter unkommentierter Zeilen aber spontan auch nicht. |
AW: XE 7 - Parallel Programming Library
Im Video hat man kurz gesehen, das aus einer 'Liste' eine parallel abarbeitbare (watn Wort) Enumeration wird. Ähnlich, wie ich das beschrieben habe: Die ForEach-Methode verteilt die Liste an Threads und jeder führt die Action für einzelne Elmente aus. Also irgendwie so jedenfalls. Das Relevante sind aber nur ein paar wenige Zeilen. Edit: Eigentlich nur eine:
Delphi-Quellcode:
TParallel.For (lowerBound, upperBound, Method);
Theoretisch und ginge das (fast so) auch mit Delphi 7, nur ohne anonyme Methoden. Und vielleicht nicht ganz so optimal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz