В останні роки з'явилося кілька бібліотек / програмних проектів, які пропонують ту чи іншу форму загального призначення паралелізму спільної пам'яті, керованого даними.
Основна ідея полягає в тому, що замість написання явно потокового коду програмісти реалізують свої алгоритми як взаємозалежні завдання, які потім динамічно плануються середнім програмним забезпеченням загального призначення на машині спільної пам'яті.
Прикладами таких бібліотек є:
КВАРТ : Спочатку розроблений для паралельної лінійної алгебри MAGMA паралельної лінійної алгебри, здається, використовувався і для паралельного методу швидкого багатополюсності .
Cilk : Спочатку проект на базі MIT, який зараз підтримується Intel, реалізований як розширення мови / компілятора на C, який використовується в комп'ютерному шаховому програмному забезпеченні Cilkchess та експериментально в FFTW .
Суперскаляр SMP : розроблений в Барселонському центрі суперкомп'ютерів, багато в чому схожий на Cilk, заснований на
#pragma
розширеннях.StarPU : Подібні "бібліотеки" на основі бібліотеки, які можна скласти і запланувати в декількох різних архітектурах, включаючи GPU.
Завдання OpenMP: Починаючи з версії 3.0, OpenMP представив "завдання", які можна запланувати асинхронно (див. Розділ 2.7 специфікації).
Інтелектуальні будівельні блоки Intel : Використовують класи C ++ для створення та запуску асинхронних завдань, див. Розділ 11 Підручника.
OpenCL : підтримує паралелізм на основі задач на декількох ядрах.
Хоча є багато літератури, яка описує внутрішню роботу цих бібліотек / розширень мови та їх застосування до конкретних проблем, я натрапив на дуже мало прикладів їх використання на практиці в наукових обчислювальних програмах.
Тож ось питання: Хтось знає про наукові обчислювальні коди, що використовують будь-яке з цих бібліотек / розширень мови або подібне, для паралелізму спільної пам'яті?