Negli ultimi anni sono apparsi numerosi progetti di biblioteche / software che offrono in qualche modo un parallelismo della memoria condivisa basato sui dati per scopi generici.
L'idea principale è che invece di scrivere un codice esplicitamente thread, i programmatori implementano i loro algoritmi come attività interdipendenti che vengono quindi programmate dinamicamente da un middleware per uso generico su una macchina a memoria condivisa.
Esempi di tali librerie sono:
QUARK : Originariamente progettato per la libreria di algebra lineare parallela MAGMA , sembra essere stato usato anche per un metodo multipolare veloce parallelo .
Cilk : Originariamente un progetto basato sul MIT, ora supportato da Intel, implementato come estensioni di linguaggio / compilatore a C, utilizzato nel software di scacchi per computer Cilkchess e sperimentalmente in FFTW .
SMP superscalar : sviluppato presso il Centro di supercomputer di Barcellona, simile a Cilk per molti aspetti, basato su
#pragma
estensioni.StarPU : "codelet" basati su libreria simili che possono essere compilati e pianificati su diverse architetture diverse, comprese le GPU.
Attività OpenMP: a partire dalla versione 3.0, OpenMP ha introdotto "attività" che possono essere programmate in modo asincrono (vedere la Sezione 2.7 delle specifiche).
Intel Threading Building Blocks : utilizza le classi C ++ per creare e avviare attività asincrone, vedere la Sezione 11 del Tutorial.
OpenCL : supporta il parallelismo basato su attività su più core.
Mentre c'è molta letteratura che descrive il funzionamento interno di queste biblioteche / estensioni di linguaggio e la loro applicazione a problemi specifici, ho trovato solo pochissimi esempi di loro che vengono utilizzati nella pratica in applicazioni di informatica scientifica.
Quindi, ecco la domanda: qualcuno conosce i codici scientifici informatici che utilizzano una di queste librerie / estensioni di linguaggio o simili per il parallelismo della memoria condivisa?