Perpustakaan pemrograman paralel? (+ beberapa fitur)

8

Catatan : ini adalah pengeposan ulang karena pertanyaannya dianggap tidak cocok untuk forum Stack Overflow dan seharusnya diposting di sini. Topik asli ada di sana .

Saya ingin berbicara tentang multithreading, paralelisme, dan perpustakaan yang tersedia saat ini untuk mencapai pekerjaan itu. Saya terutama bertanya-tanya apakah perpustakaan yang mudah digunakan untuk mencapai konsep ini (diberikan di bawah) sudah ada, atau apakah harus ditulis, dan seberapa sulitnya.

Tujuan perpustakaan yang saya cari:

  • dapat diakses oleh sebagian besar pengembang, tidak hanya untuk insinyur atau orang yang sangat lulus (ini harus berarti pengembang INGIN menggunakannya, tidak takut akan itu)
  • tersedia untuk pengembang C ++
  • portabel (mulai dengan Windows, Mac OS X dan Linux, kemudian lanjutkan ke perangkat seluler)
  • ringan
  • mudah digunakan (terkait dengan aksesibilitas)

Fitur terpenting yang saya cari:

  • paralelisme tugas
  • pembatalan tugas (dengan cara yang lembut dan tiba-tiba)
  • dependensi tugas

Perpustakaan terkait yang ada :

  • Thread Building Blocks : benar-benar rumit untuk digunakan, dan agak membatasi lisensi (GPL / komersial), itu satu-satunya perpustakaan yang saya temukan dan itu termasuk semua fitur yang saya cari
  • Grand Central Dispatch : saat ini tidak portabel, tidak terlalu rumit, tidak ada pembatalan tugas (setelah dimulai), tidak ada dependensi tugas, tidak ada dukungan dependensi otomatis (hanya manual)
  • PFunc : Hanya unix, masih sedikit rumit, tidak ada ketergantungan tugas, tidak ada pembatalan tugas
  • Microsoft Task Parallel Library : Platform MS dan .NET saja, tidak ada pembatalan keras, dependensi, dan dependensi tugas manual (satu tugas tidak dapat membangunkan lebih dari satu tugas lain)
  • OpenCL : saat ini tidak tersedia di semua platform, tidak lebih dari perpustakaan tugas paralel GPU (tidak setinggi yang saya inginkan)
  • OpenMP : didukung secara luas kecuali versi gratis Visual Studio, tidak ada pembatalan tugas atau dependensi tugas otomatis

Jadi apa pendapat Anda tentang semua ini? Menurut Anda mengapa ada begitu sedikit perpustakaan yang sesuai dengan kebutuhan ini? Atau apakah saya melewatkan perpustakaan yang bagus? Dan menurut Anda apakah itu berarti terlalu banyak pekerjaan untuk mencapainya? Atau tidak cukup menarik? Perhatikan bahwa kekurangan yang saya tulis adalah yang saya temukan dengan beberapa pencarian, saya bukan ahli di salah satu perpustakaan ini.

Tujuan akhir dari perpustakaan ini, bahkan jika itu adalah mimpi, adalah pemrograman secara paralel semudah yang biasanya Anda lakukan dengan pemrograman berurutan.

Ceylo

Ceylo
sumber
Ini bukan forum.
DeadMG
meskipun tidak berkaitan dengan pertanyaan Anda - apakah Anda sudah melihat Erlang
treecoder
@DeadMG - hanya ingin tahu, apa perbedaan antara ini dan forum?
Zeke Hansell
Perbedaannya adalah ini hanya Q&A. Forum adalah untuk diskusi. Tempat ini bukan untuk diskusi.
DeadMG
@DeadMG - Saya kira itu menjawab pertanyaan saya. Dan saya kira dengan mengatakan demikian, saya hanya memberi tahu Anda bahwa Anda menjawab pertanyaan saya. Saya tidak ingin dituduh berdiskusi di situs tanya jawab. ;-)
Zeke Hansell

Jawaban:

6

TBB hampir semuanya ada yang datang dekat. boost::threadtingkat terlalu rendah. Anda mencari di tempat yang salah di TPL, dengan cara - Microsoft mengirimkan perpustakaan terpisah yang disebut PPL untuk kode asli. Itu, tentu saja, hanya mendukung Windows.

Namun, jika Anda menganggap TBB rumit untuk digunakan, saya akan mempertanyakan apakah pengembang yang Anda pikirkan benar-benar mampu membuat aplikasi paralel. TBB memiliki salah satu antarmuka yang paling ramah dengan hal-hal sederhana seperti parallel_for_each. Jika Anda tidak dapat mengatasi beberapa lambda, saya merasa sulit untuk melihat bagaimana Anda akan mengatasi konkurensi.

DeadMG
sumber
Ok saya sudah melihat lebih dekat pada TBB dan memang sepertinya tidak sulit untuk digunakan. Saya terutama bingung tentang pembatalan tugas dan ketergantungan, tetapi yang pertama dapat dicapai tetapi membatalkan kelompok tugas dan yang kedua dengan membangun grafik ketergantungan. Terima kasih. Lisensi TBB masih menjadi masalah, tetapi saya kira ketika seseorang membutuhkan kualitas paralelisasi, membeli lisensi komersial tidak masalah. Satu- satunya pengembang yang tersisa adalah mereka yang mengembangkan perangkat lunak sumber terbuka dan dapat digunakan secara komersial.
Ceylo
Harus mengakui, lisensi itu bisa menyusahkan. Sebagai seorang siswa saya mendapatkan Visual Studio secara gratis, jadi saya tidak pernah harus berkeliling.
DeadMG
Apa maksudmu? Apakah Anda menggunakan TPL atau TBB dikirimkan bersama edisi Visual Studio Anda?
Ceylo
@ Cheylo: Seperti yang saya katakan dalam jawaban saya, Microsoft mengirimkan perpustakaan yang disebut PPL untuk kode asli. Ini sangat mirip dengan TBB, tetapi tidak identik, sangat bagus, tetapi tidak memenuhi persyaratan portabilitas Anda.
DeadMG