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?