Nos últimos anos, surgiram várias bibliotecas / projetos de software que oferecem uma forma ou outra de paralelismo de memória compartilhada de uso geral orientado a dados.
A idéia principal é que, em vez de escrever um código explicitamente encadeado, os programadores implementam seus algoritmos como tarefas interdependentes, que são agendadas dinamicamente por um middleware de uso geral em uma máquina de memória compartilhada.
Exemplos dessas bibliotecas são:
QUARK : Originalmente projetado para a biblioteca de álgebra linear paralela MAGMA , parece ter sido usado também para um método multipolar rápido paralelo .
Cilk : Originalmente, um projeto baseado no MIT, agora suportado pela Intel, implementado como extensões de linguagem / compilador para C, usado no software de xadrez para computador Cilkchess e experimentalmente em FFTW .
Superescalar SMP : desenvolvido no Barcelona Supercomputing Center, semelhante ao Cilk em muitos aspectos, com base em
#pragma
extensões.StarPU : "codelets" baseados em bibliotecas semelhantes, que podem ser compilados e agendados em várias arquiteturas diferentes, incluindo GPUs.
Tarefas do OpenMP: A partir da versão 3.0, o OpenMP introduziu "tarefas" que podem ser agendadas de forma assíncrona (consulte a Seção 2.7 da especificação).
Blocos de construção de encadeamento da Intel : usa classes C ++ para criar e iniciar tarefas assíncronas, consulte a Seção 11 do Tutorial.
OpenCL : Suporta paralelismo baseado em tarefas em múltiplos núcleos.
Embora exista muita literatura descrevendo o trabalho interno dessas extensões de bibliotecas / linguagem e sua aplicação a problemas específicos, encontrei apenas poucos exemplos deles sendo utilizados na prática em aplicativos de computação científica.
Então, aqui está a pergunta: alguém sabe de códigos de computação científica usando alguma dessas bibliotecas / extensões de linguagem, ou similar, para paralelismo de memória compartilhada?