Hinweis : Dies ist ein Reposting, da die Frage als nicht für das Stack Overflow-Forum geeignet angesehen wurde und hier hätte veröffentlicht werden müssen. Das ursprüngliche Thema ist da .
Ich möchte über Multithreading, Parallelität und die heute verfügbaren Bibliotheken sprechen, um diese Arbeit zu erreichen. Ich frage mich besonders, ob es bereits eine benutzerfreundliche Bibliothek gibt, um dieses Konzept zu erreichen (siehe unten), oder ob es geschrieben werden müsste und wie schwierig es wäre.
Die Zwecke der Bibliothek, die ich suche:
- Für die meisten Entwickler zugänglich, nicht nur für Ingenieure oder Hochschulabsolventen (dies sollte bedeuten, dass Entwickler es verwenden möchten, ohne Angst davor zu haben).
- verfügbar für C ++ - Entwickler
- portabel (beginnen Sie mit Windows, Mac OS X und Linux und erstrecken Sie sich dann auf mobile Geräte)
- Leicht
- einfach zu bedienen (im Zusammenhang mit der Zugänglichkeit)
Die wichtigsten Funktionen, die ich suche:
- Aufgabenparallelität
- Aufgabenabbruch (sanft und abrupt)
- Aufgabenabhängigkeiten
Die vorhandenen verwandten Bibliotheken :
- Thread-Bausteine : Die Verwendung ist sehr kompliziert und die Lizenz ist ziemlich restriktiv (GPL / kommerziell). Es ist die einzige Bibliothek, die ich gefunden habe und die alle Funktionen enthält, nach denen ich suche
- Grand Central Dispatch : Derzeit nicht portabel, nicht zu kompliziert, keine Aufgabenabbruch (einmal gestartet), keine Aufgabenabhängigkeiten, keine automatische Abhängigkeitsunterstützung (nur manuell)
- PFunc : Nur Unix, immer noch etwas kompliziert, keine Aufgabenabhängigkeit, keine Aufgabenabbruch
- Microsoft Task Parallel Library : Nur MS-Plattform und .NET, keine harte Stornierung, eingeschränkte und manuelle Aufgabenabhängigkeiten (eine Aufgabe kann nicht mehr als eine andere Aufgabe aktivieren)
- OpenCL : Derzeit nicht auf allen Plattformen verfügbar, nicht viel mehr als eine GPU-Bibliothek für parallele Aufgaben (nicht so hoch, wie ich es mir wünschen würde)
- OpenMP : weit verbreitet, außer kostenlose Versionen von Visual Studio, keine Aufgabenabbruch oder automatische Aufgabenabhängigkeiten
Was denkst du über all das? Warum gibt es Ihrer Meinung nach so wenige Bibliotheken, die diesen Anforderungen entsprechen? Oder habe ich eine tolle Bibliothek vermisst? Und denkst du, es würde zu viel Arbeit bedeuten, um eine zu erreichen? Oder nicht interessant genug? Beachten Sie, dass die Mängel, die ich geschrieben habe, diejenigen sind, die ich bei einigen Suchanfragen herausgefunden habe. Ich bin kein Experte in einer dieser Bibliotheken.
Der endgültige Zweck dieser Bibliothek, auch wenn es sich eher um einen Traum handelt, besteht darin, parallel zu programmieren, so einfach wie Sie es normalerweise mit sequentieller Programmierung tun.
Ceylo
Antworten:
TBB ist so ziemlich alles, was nahe kommt.
boost::thread
ist viel zu niedrig. Sie suchen übrigens an der falschen Stelle in der TPL - Microsoft liefert eine separate Bibliothek namens PPL für nativen Code aus. Es unterstützt natürlich nur Windows.Wenn Sie jedoch feststellen, dass die Verwendung von TBB kompliziert ist, würde ich fragen, ob die Entwickler, an die Sie denken, tatsächlich in der Lage sind, parallele Anwendungen zu erstellen. TBB hat eine der freundlichsten Schnittstellen mit einfachen Dingen wie
parallel_for_each
. Wenn Sie mit ein paar Lambdas nicht fertig werden, fällt es mir schwer zu sehen, wie Sie mit Parallelität umgehen werden.quelle