Wann sollte ich AsParallel () in linq / plinq verwenden?

8

Ich schaue, nutzen Sie die Vorteile der parallelen Programmierung in linq mit Plinq, ich bin nicht sicher, ich verstehe die Verwendung völlig abgesehen von der Tatsache, dass alle CPU-Kerne effizienter zu nutzen, so dass es für eine große Abfrage könnte schneller sein. Kann ich einfach AsParallel () für Linq-Aufrufe aufrufen, um die Eplinq-Funktionalität zu nutzen, und es wird immer schneller? Oder sollte ich es nur verwenden, wenn viele Daten abzufragen oder zu verarbeiten sind?

    
Froggy 12.11.2010, 10:59
quelle

2 Antworten

7

Sie können nicht einfach davon ausgehen, dass die parallele Ausführung immer schneller ist. Es kommt darauf an. In manchen Situationen werden Sie viel von Multi-Core-Prozessoren profitieren, wenn Sie parallel vorgehen. In anderen Fällen werden Sie die Dinge nur verlangsamen, da parallele Schleifen eine kleine Überhitzung über einfache Schleifen haben.

Siehe zum Beispiel meine andere Antwort was erklärt, warum eingebettete parallele Schleifen ein Desaster sein können.

Nun ist es am besten zu wissen, ob es sinnvoll ist, eine Parallelschleife in einem präzisen Kontext zu verwenden, um parallele und nicht parallele Implementierungen zu testen und die benötigte Zeit zu messen. p>     

Arseni Mourzenko 12.11.2010 11:06
quelle
3

Um die Antwort noch weiter zu ergänzen, kommt es auch auf Ihre Daten an. Wenn du ein bisschen "alte Schule" für einen Moment gehst, könntest du die Straße des Schleifens abrollen, anstatt für foreach und so weiter und so weiter.

Sie müssen jedoch wirklich sicherstellen, dass Sie nicht mikrooptimiert sind. Abhängig von Ihren Datenabrufen und der Größe der Daten (sicherlich mit ausgelagerten Daten), können Sie wahrscheinlich damit davonkommen, es nicht zu benutzen.

Das heißt nicht, dass es nicht cool ist, Ihren linq-mult-core bewusst zu machen. Aber seien Sie sich der Setup-Kosten bewusst, mit denen Sie so etwas machen, und können Sie die Vorteile gegenüber der Komplexität des Wartens und Debuggens dieses Codes abwägen.

Wenn Ihr Algorithmus bereits erstklassig ist, dann können Sie sich die Plinq-Erweiterungen anschauen, ein Kartenreduzierungsmechanismus oder ähnliches ist der richtige Weg. Aber überprüfen Sie zuerst Ihren Algorithmus und Ihre allgemeinen Vorteile. Mit der richtigen Art von Sammlung (etc) in der richtigen Art und Weise zu arbeiten bringt immer seine eigenen Vorteile (und Probleme!).

Was versuchst du zu lösen?

    
Simon 12.11.2010 11:12
quelle

Tags und Links