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?
Jawaban:
deal.II menggunakan Blok Bangunan Threading di seluruh perpustakaan dan pada umumnya kami cukup senang dengan itu. Kami telah melihat beberapa alternatif, khususnya OpenMP karena semua orang tampaknya menggunakan itu untuk kode yang lebih sederhana, tetapi ternyata kurang. Secara khusus, OpenMP memiliki kelemahan besar bahwa model tugasnya tidak memungkinkan Anda untuk menangani tugas yang Anda mulai, dan akibatnya sulit untuk mengakses keadaan tugas (misalnya menunggu sampai selesai) atau mengembalikan nilai dari fungsi yang Anda jalankan pada tugas yang terpisah. OpenMP terutama baik untuk memparalelkan loop paling dalam tetapi Anda mendapatkan efisiensi paralel dengan memaralelkan loop terluar , kompleks, dan OpenMP bukan alat untuk itu sementara TBB cukup baik untuk itu.
sumber
Menurut pendapat saya, sistem ini relatif tidak berhasil terutama karena alasan berikut.
MPI_Comm
yang memungkinkan pustaka yang berbeda untuk melakukan operasi yang kaya tanpa bertabrakan, serta untuk melewatkan konteks antara pustaka dan memulihkan atribut yang diperlukan. Abstraksi yang disediakan oleh "komunikator" penting untuk komposisi perpustakaan terlepas dari apakah memori bersama atau didistribusikan digunakan.sumber