Mengapa programmer mendefinisikan model pemrograman untuk menggantikan C / POSIX untuk paralelisme?

10

Penyedia arsitektur komputer baru secara teratur mencoba memperkenalkan model pemrograman baru, misalnya baru-baru ini CUDA / OpenCL untuk GPGPU, dan menggantikan C / POSIX sebagai antarmuka kontrol ke paralelisme platform. (Poss & Koening, AM3: Menuju akselerator Unix perangkat keras untuk banyak-core, 2015)

Mengapa desainer arsitektur mencoba merancang model pemrograman baru untuk menggantikan C / POSIX untuk komputasi paralel? Apakah C / POSIX tidak cocok untuk multiprosesor atau apakah penulis asli C / POSIX tidak memiliki kebutuhan untuk komputasi paralel dalam pikiran pada waktu desain C / POSIX? Atau apakah programmer membutuhkan lebih banyak kemampuan daripada yang dapat diberikan C / POSIX, sehingga beralih ke desain baru misalnya CUDA / OpenCL, dll?

codezombie
sumber
7
Ingat, perangkat lunak adalah abstraksi perangkat keras. Jika perangkat keras berubah terlalu banyak, maka abstraksi perangkat lunak mungkin tidak bagus lagi. Saya percaya ini tentu benar ketika mempertimbangkan menggunakan utas POSIX untuk GPU, tetapi saya akan menyerahkannya kepada orang lain untuk menjelaskan lebih lengkap dalam jawaban.

Jawaban:

10

Bandingkan utas POSIX dan Grand Central Dispatch, misalnya. Saya memiliki kode yang mengirimkan ke empat utas dalam delapan baris kode. Dengan POSIX, itu semua akan menjadi mimpi buruk absolut.

Di sisi lain, CUDA / OpenCL bukan tentang multithreading sama sekali, tetapi tentang menggunakan kemampuan vektor besar. (Mereka dapat melakukan multithreading juga, tetapi vektorisasi adalah hal yang penting).

gnasher729
sumber
9

Ada perbedaan antara pemrograman paralel SIMD dan model pemrograman paralel tradisional yang digunakan POSIX.

SIMD adalah model yang digunakan CUDA, OpenCL, dll. Ada satu set instruksi yang dijalankan secara bersamaan oleh banyak utas, masing-masing beroperasi pada kumpulan data mereka sendiri. Ini sangat berguna untuk hal-hal seperti grafik 3-D, di mana transformasi yang sama diterapkan pada sejumlah besar titik.

Model POSIX mengasumsikan bahwa setiap utas berjalan secara sinkron, dan setiap utas berpotensi mengeksekusi kode yang sama sekali berbeda.

Kedua model memiliki kekuatan dan kelemahan mereka - itulah sebabnya mereka berbeda. POSIX jauh lebih fleksibel, tetapi CUDA / OpenCL / dll. dapat memanfaatkan perangkat keras khusus, menjalankan ribuan utas (biasanya lebih sederhana) sekaligus.

Mike Harris
sumber