Trong những năm gần đây, một số thư viện / dự án phần mềm đã xuất hiện cung cấp một số dạng hoặc dạng song song của bộ nhớ chia sẻ dữ liệu theo mục đích chung.
Ý tưởng chính là thay vì viết một mã được phân luồng rõ ràng, các lập trình viên thực hiện các thuật toán của họ dưới dạng các tác vụ phụ thuộc lẫn nhau, sau đó được lên lịch động bởi một phần mềm trung gian có mục đích chung trên máy bộ nhớ dùng chung.
Ví dụ về các thư viện đó là:
QUARK : Được thiết kế ban đầu cho thư viện đại số tuyến tính song song MAGMA , dường như cũng được sử dụng cho Phương pháp Đa cực nhanh song song .
Cilk : Ban đầu là một dự án có trụ sở tại MIT, hiện được Intel hỗ trợ, được triển khai dưới dạng phần mở rộng ngôn ngữ / trình biên dịch sang C, được sử dụng trong phần mềm cờ vua máy tính Cilkchess và thử nghiệm trong FFTW .
SMP superscalar : Được phát triển tại Trung tâm siêu máy tính Barcelona, tương tự như Cilk ở nhiều khía cạnh, dựa trên các
#pragma
phần mở rộng.StarPU : Các "bộ mã" dựa trên thư viện tương tự có thể được biên dịch và lên lịch trên một số kiến trúc khác nhau, bao gồm cả GPU.
Các tác vụ OpenMP: Kể từ phiên bản 3.0, OpenMP đã giới thiệu "các tác vụ" có thể được lên lịch không đồng bộ (xem Phần 2.7 của thông số kỹ thuật).
Các khối xây dựng luồng của Intel : Sử dụng các lớp C ++ để tạo và khởi chạy các tác vụ không đồng bộ, xem Phần 11 của Hướng dẫn.
OpenCL : Hỗ trợ song song dựa trên nhiệm vụ trên nhiều lõi.
Mặc dù có rất nhiều tài liệu mô tả hoạt động bên trong của các thư viện / phần mở rộng ngôn ngữ này và ứng dụng của chúng cho các vấn đề cụ thể, tôi chỉ bắt gặp rất ít ví dụ về chúng được sử dụng trong thực tế trong các ứng dụng máy tính khoa học.
Vì vậy, đây là câu hỏi: Có ai biết mã máy tính khoa học bằng cách sử dụng bất kỳ thư viện / phần mở rộng ngôn ngữ nào, hoặc tương tự, cho song song bộ nhớ chia sẻ không?