In den letzten Jahren sind mehrere Bibliotheken / Softwareprojekte erschienen, die die eine oder andere Form der datengesteuerten Parallelität für gemeinsam genutzten Speicher für allgemeine Zwecke bieten.
Die Hauptidee ist, dass Programmierer ihre Algorithmen nicht als explizit getunten Code schreiben, sondern als voneinander abhängige Aufgaben implementieren, die dann von einer Allzweck-Middleware auf einem Shared-Memory-Computer dynamisch geplant werden.
Beispiele für solche Bibliotheken sind:
QUARK : Ursprünglich für die MAGMA- Bibliothek für parallele lineare Algebra entwickelt, scheint sie auch für eine parallele schnelle Multipolmethode verwendet worden zu sein.
Cilk : Ursprünglich ein MIT-basiertes Projekt, die jetzt von Intel unterstützt, implementiert als Sprache / Compiler Erweiterungen C, in der verwendeten Cilkchess Computer Schach - Software und experimentell in FFTW .
SMP-Superskalar : Entwickelt im Barcelona Supercomputing Center, ähnlich wie Cilk in vielerlei Hinsicht, basierend auf
#pragma
Erweiterungen.StarPU : Ähnliche bibliotheksbasierte "Codelets", die für verschiedene Architekturen, einschließlich GPUs, kompiliert und geplant werden können.
OpenMP-Tasks: Ab Version 3.0 hat OpenMP "Tasks" eingeführt, die asynchron geplant werden können (siehe Abschnitt 2.7 der Spezifikation).
Intels Threading-Bausteine : Verwendet C ++ - Klassen zum Erstellen und Starten asynchroner Aufgaben (siehe Abschnitt 11 des Lernprogramms).
OpenCL : Unterstützt aufgabenbasierte Parallelität auf mehreren Kernen.
Obwohl es eine Menge Literatur gibt, die das Innenleben dieser Bibliotheken / Spracherweiterungen und ihre Anwendung auf bestimmte Probleme beschreibt, bin ich nur auf sehr wenige Beispiele gestoßen, die in der Praxis in wissenschaftlichen Computeranwendungen verwendet werden.
Hier ist also die Frage: Kennt jemand wissenschaftliche Computercodes, die eine dieser Bibliotheken / Spracherweiterungen oder ähnliches für die Parallelität von gemeinsamem Speicher verwenden?
Antworten:
deal.II verwendet die Threading-Bausteine in der gesamten Bibliothek und im Großen und Ganzen sind wir ziemlich zufrieden damit. Wir haben uns einige Alternativen angesehen, insbesondere OpenMP, da jeder diese für einfachere Codes zu verwenden scheint, aber festgestellt hat, dass sie fehlen. Insbesondere hat OpenMP den großen Nachteil, dass das Aufgabenmodell es Ihnen nicht ermöglicht, ein Handle für eine gestartete Aufgabe zu erhalten, und folglich ist es schwierig, auf den Status einer Aufgabe zuzugreifen (z. B. auf deren Abschluss zu warten) oder Werte von zurückzugeben Funktionen, die Sie für eine separate Aufgabe ausführen. OpenMP eignet sich in erster Linie für die Parallelisierung der innersten Schleifen. Sie erzielen jedoch eine parallele Effizienz, indem Sie die äußersten , komplexen Schleifen parallelisieren. OpenMP ist nicht das Werkzeug dafür, während die TBB dafür einigermaßen gut geeignet sind.
quelle
Meiner Meinung nach waren diese Systeme vor allem aus folgenden Gründen relativ erfolglos.
MPI_Comm
das es verschiedenen Bibliotheken ermöglicht, umfangreiche Operationen ohne Kollision auszuführen sowie den Kontext zwischen Bibliotheken zu übergeben und die erforderlichen Attribute wiederherzustellen. Die vom "Kommunikator" bereitgestellte Abstraktion ist wichtig für die Bibliothekszusammensetzung, unabhängig davon, ob gemeinsamer oder verteilter Speicher verwendet wird.quelle