Parallele Programmierbibliothek? (+ einige Funktionen)

8

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

Ceylo
quelle
Dies ist kein Forum.
DeadMG
obwohl nicht relevant für
Ihre
@DeadMG - nur neugierig, was ist der Unterschied zwischen diesem und einem Forum?
Zeke Hansell
Der Unterschied besteht darin, dass dies nur Fragen und Antworten sind. Foren stehen zur Diskussion. Dieser Ort ist nicht zur Diskussion.
DeadMG
@DeadMG - Ich denke, das beantwortet meine Frage. Und ich denke, indem ich das sage, lasse ich Sie nur wissen, dass Sie meine Frage beantwortet haben. Ich möchte nicht beschuldigt werden, eine Diskussion auf einer Q & A-Site zu führen. ;-)
Zeke Hansell

Antworten:

6

TBB ist so ziemlich alles, was nahe kommt. boost::threadist 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.

DeadMG
quelle
Ok, ich habe mir TBB genauer angesehen und es scheint in der Tat nicht so schwierig zu sein. Ich war besonders verwirrt über das Abbrechen und die Abhängigkeit von Aufgaben, aber das erste kann erreicht werden, aber das Abbrechen der Aufgabengruppe und das zweite durch Erstellen eines Abhängigkeitsdiagramms. Vielen Dank. Die Lizenz von TBB ist immer noch ein Problem, aber ich nehme an, wenn man diese Parallelisierungsqualität benötigt, ist der Kauf einer kommerziellen Lizenz in Ordnung. Die einzigen verbleibenden Entwickler sind diejenigen, die Open Source UND kommerziell verwendbare Software entwickeln.
Ceylo
Ich muss zugeben, dass die Lizenz ein Schmerz sein könnte. Als Student bekomme ich Visual Studio kostenlos, so dass ich nie einkaufen musste.
DeadMG
Was meinst du? Verwenden Sie TPL oder wird TBB mit Ihrer Visual Studio Edition geliefert?
Ceylo
@ Ceylo: Wie ich in meiner Antwort sagte, liefert Microsoft eine Bibliothek namens PPL für nativen Code aus. Es ist TBB sehr ähnlich, aber nicht identisch, sehr schön, entspricht aber nicht Ihren Anforderungen an die Portabilität.
DeadMG