En los últimos años, han aparecido varias bibliotecas / proyectos de software que ofrecen una forma u otra de paralelismo de memoria compartida de uso general basado en datos.
La idea principal es que, en lugar de escribir un código explícitamente enhebrado, los programadores implementan sus algoritmos como tareas interdependientes que luego son programadas dinámicamente por un middleware de propósito general en una máquina de memoria compartida.
Ejemplos de tales bibliotecas son:
QUARK : Originalmente diseñado para la biblioteca de álgebra lineal paralela MAGMA , parece que también se ha utilizado para un método multipolar rápido paralelo .
Cilk : Originalmente, un proyecto basado en MIT, ahora respaldado por Intel, implementado como extensiones de lenguaje / compilador para C, utilizado en el software de ajedrez informático Cilkchess y experimentalmente en FFTW .
SMP superscalar : Desarrollado en el Centro de Supercomputación de Barcelona, similar a Cilk en muchos aspectos, basado en
#pragma
extensiones.StarPU : "codelets" basados en bibliotecas similares que se pueden compilar y programar en varias arquitecturas diferentes, incluidas las GPU.
Tareas de OpenMP: a partir de la versión 3.0, OpenMP introdujo "tareas" que se pueden programar de forma asincrónica (consulte la Sección 2.7 de la especificación).
Intel's Threading Building Blocks : utiliza clases de C ++ para crear y ejecutar tareas asincrónicas, consulte la Sección 11 del Tutorial.
OpenCL : admite paralelismo basado en tareas en núcleos múltiples.
Si bien hay mucha literatura que describe el funcionamiento interno de estas bibliotecas / extensiones de lenguaje y su aplicación a problemas específicos, solo he encontrado muy pocos ejemplos de que se utilicen en la práctica en aplicaciones informáticas científicas.
Así que aquí está la pregunta: ¿Alguien sabe de códigos informáticos científicos que utilicen alguna de estas bibliotecas / extensiones de lenguaje, o similares, para el paralelismo de memoria compartida?