Dalam beberapa tahun terakhir, beberapa proyek perpustakaan / perangkat lunak telah muncul yang menawarkan beberapa bentuk atau paralelisme memori bersama untuk keperluan umum yang didorong oleh data.
Gagasan utamanya adalah bahwa alih-alih menulis kode yang diulir secara eksplisit, pemrogram mengimplementasikan algoritme mereka sebagai tugas yang saling tergantung yang kemudian dijadwalkan secara dinamis oleh middleware tujuan umum pada mesin memori bersama.
Contoh perpustakaan tersebut adalah:
QUARK : Awalnya dirancang untuk perpustakaan aljabar linier paralel MAGMA , tampaknya telah digunakan untuk Metode Multipole Cepat paralel juga.
Cilk : Awalnya proyek berbasis MIT, sekarang didukung oleh Intel, diimplementasikan sebagai ekstensi bahasa / kompiler ke C, digunakan dalam perangkat lunak catur komputer Cilkchess dan secara eksperimental dalam FFTW .
Superscalar SMP : Dikembangkan di Barcelona Supercomputing Center, mirip dengan Cilk dalam banyak hal, berdasarkan
#pragma
ekstensi.StarPU : "Codelet" berbasis perpustakaan serupa yang dapat dikompilasi dan dijadwalkan pada beberapa arsitektur yang berbeda, termasuk GPU.
Tugas OpenMP: Pada versi 3.0, OpenMP memperkenalkan "tugas" yang dapat dijadwalkan secara tidak sinkron (lihat Bagian 2.7 dari spesifikasi).
Blok Bangunan Threading Intel : Menggunakan kelas C ++ untuk membuat dan meluncurkan tugas asinkron, lihat Bagian 11 dari Tutorial.
OpenCL : Mendukung paralelisme berbasis tugas pada multi-core.
Meskipun ada banyak literatur yang menggambarkan kerja dalam dari perpustakaan / ekstensi bahasa ini dan aplikasinya untuk masalah-masalah spesifik, saya hanya menemukan sedikit sekali contoh yang digunakan dalam praktiknya dalam aplikasi komputasi ilmiah.
Jadi, inilah pertanyaannya: Apakah ada yang tahu kode komputasi ilmiah yang menggunakan pustaka / ekstensi bahasa ini, atau yang serupa, untuk paralelisme memori bersama?