W ostatnich latach pojawiło się kilka projektów bibliotek / oprogramowania, które oferują jakąś formę równoległego zarządzania pamięcią współużytkowaną opartą na danych ogólnych.
Główną ideą jest to, że zamiast pisać kod z jawnym wątkiem, programiści implementują swoje algorytmy jako zadania współzależne, które są następnie dynamicznie planowane przez oprogramowanie pośredniczące ogólnego przeznaczenia na maszynie z pamięcią współużytkowaną.
Przykładami takich bibliotek są:
QUARK : Pierwotnie zaprojektowany dla biblioteki algebry liniowej równoległej MAGMA , wydaje się być również używany do równoległej szybkiej metody wielobiegunowej .
Cilk : Pierwotnie projekt oparty na MIT, teraz obsługiwany przez Intel, wdrożony jako rozszerzenia języka / kompilatora do C, używany w oprogramowaniu komputerowym szachów Cilkchess i eksperymentalnie w FFTW .
Superskalarny SMP : Opracowany w Barcelona Supercomputing Center, pod wieloma względami podobny do Cilk, w oparciu o
#pragma
rozszerzenia.StarPU : Podobne oparte na bibliotece „kodeki”, które można kompilować i planować na kilku różnych architekturach, w tym na GPU.
Zadania OpenMP: Od wersji 3.0 OpenMP wprowadził „zadania”, które można planować asynchronicznie (patrz rozdział 2.7 specyfikacji).
Elementy składowe wątków Intela : Używa klas C ++ do tworzenia i uruchamiania zadań asynchronicznych, patrz sekcja 11 samouczka.
OpenCL : obsługuje równoległość zadaniową na wielu rdzeniach.
Chociaż istnieje wiele literatury opisującej wewnętrzne działanie tych bibliotek / rozszerzeń języka i ich zastosowania do konkretnych problemów, natknąłem się na bardzo niewiele przykładów ich zastosowania w praktyce w naukowych aplikacjach komputerowych.
Oto pytanie: czy ktoś wie o naukowych kodach obliczeniowych wykorzystujących którąkolwiek z tych bibliotek / rozszerzeń językowych lub podobnych, do równoległości pamięci wspólnej?