2012-12-04 23 views
5

Tôi hiểu rằng trong CUDA, 32 chủ đề liền kề trong cùng một khối sẽ được lên lịch như một sợi dọc. Nhưng tôi thường xuyên tìm thấy một số mã CUDA hướng dẫn có nhiều khối với 1 chuỗi cho mỗi khối. Trong mô hình này, sẽ 32 chủ đề từ 32 khối được lên kế hoạch như một sợi dọc? Nếu không, tôi có thể nói mô hình này không hiệu quả như tổ chức thành 32 luồng cho mỗi khối? Cảm ơn!Sẽ 32 chủ đề từ 32 khối được lên kế hoạch như một sợi dọc?

Trả lời

6

Không, chủ đề từ các khối khác nhau không thể lên lịch trong cùng một sợi dọc. Nếu bạn tạo lưới các luồng chỉ bằng một chuỗi duy nhất, chắc chắn bạn sẽ không nhận được hiệu suất đầy đủ từ máy. Nó ít hiệu quả hơn so với việc có 32 (hoặc một bội số nguyên của 32) chủ đề cho mỗi khối. Ví dụ, Fermi SM có 32 làn đường dọc có thể được sử dụng. Nếu bạn đang lên lịch các khối của một sợi đơn, thì chỉ có 1 trong số 32 làn đường đó có thể được sử dụng tại bất kỳ thời điểm nào.

Chủ đề có ID chủ đề (biến tích hợp threadIdx) được xác định bên trong (và duy nhất cho) một khối duy nhất.

Phần đa luồng phần cứng của hướng dẫn lập trình C cho a formula which defines the total number of warps in a single block.

0

Một điểm khác cần thêm. Tính toán trong CUDA LUÔN LUÔN xảy ra qua warps, vì vậy ngay cả khi bạn phân bổ ít hơn 32 luồng cho mỗi khối (1,2,,8,16), tính toán xảy ra cho một sợi dọc (32 luồng), tài nguyên bị ngừng cho 32 luồng khối.

Nếu bạn đang phân bổ 32 khối với một chuỗi mỗi, bạn đang trì hoãn tài nguyên cho chuỗi 32X32. Tránh điều này nếu bạn có thể.

Các vấn đề liên quan