Tại sao các lập trình viên định nghĩa các mô hình lập trình để thay thế C / POSIX cho song song?


10

Các nhà cung cấp kiến ​​trúc máy tính mới thường xuyên cố gắng giới thiệu các mô hình lập trình mới, ví dụ CUDA / OpenCL gần đây cho GPGPU và thay thế C / POSIX làm giao diện điều khiển cho song song nền tảng. (Có thể & Koening, AM3: Hướng tới một bộ tăng tốc Unix phần cứng cho nhiều lõi, 2015)

Tại sao các nhà thiết kế kiến ​​trúc cố gắng thiết kế các mô hình lập trình mới để thay thế C / POSIX cho tính toán song song? Là C / POSIX không phù hợp với nhiều bộ xử lý hay các tác giả ban đầu của C / POSIX không có nhu cầu tính toán song song trong thời gian thiết kế C / POSIX? Hoặc đó là trường hợp mà các lập trình viên cần nhiều khả năng hơn C / POSIX có thể cung cấp, do đó dùng đến các thiết kế mới, ví dụ CUDA / OpenCL, v.v.?


7
Hãy nhớ rằng, phần mềm là một sự trừu tượng của phần cứng. Nếu phần cứng thay đổi quá nhiều, thì sự trừu tượng hóa phần mềm có thể không còn tốt nữa. Tôi tin rằng điều này chắc chắn là đúng khi xem xét sử dụng các luồng POSIX cho GPU, nhưng tôi sẽ để nó cho người khác giải thích đầy đủ hơn trong câu trả lời.

Câu trả lời:


10

So sánh các chủ đề POSIX và Grand Central Dispatch, ví dụ. Tôi có mã gửi đến bốn luồng trong tám dòng mã. Với POSIX, đó sẽ là một cơn ác mộng tuyệt đối.

Mặt khác, CUDA / OpenCL hoàn toàn không phải về đa luồng, mà là sử dụng các khả năng vectơ lớn. (Họ cũng có thể thực hiện đa luồng, nhưng vector hóa là điều quan trọng).


9

Có một sự khác biệt giữa lập trình song song SIMD và mô hình lập trình song song truyền thống hơn mà POSIX sử dụng.

SIMD là mô hình mà CUDA, OpenCL, v.v. sử dụng. Có một bộ hướng dẫn duy nhất được thực thi đồng thời bởi nhiều luồng, mỗi luồng hoạt động trên nhóm dữ liệu riêng của chúng. Điều này rất hữu ích cho những thứ như đồ họa 3 chiều, trong đó các phép biến đổi tương tự được áp dụng cho một số lượng lớn điểm.

Mô hình POSIX giả định rằng mỗi luồng chạy không đồng bộ và mỗi luồng có khả năng thực thi mã hoàn toàn khác nhau.

Cả hai mô hình đều có điểm mạnh và điểm yếu - đó là lý do tại sao chúng khác nhau. POSIX linh hoạt hơn nhiều, nhưng CUDA / OpenCL / vv. có thể tận dụng phần cứng chuyên dụng, chạy hàng ngàn luồng (thường đơn giản hơn) tại một thời điểm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.