Tôi đang cố gắng phân tích một số mã tôi đã tìm thấy trực tuyến và tôi tiếp tục suy nghĩ mình vào một góc. Tôi đang xem xét hạt nhân histogram được khởi chạy với các tham số sauHiểu về hạt nhân CUDA này khởi động tham số
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
Tôi biết rằng thông số là lưới, khối, kích thước bộ nhớ dùng chung. Vì vậy, điều đó có nghĩa là có 2500 khối của numBins
chủ đề mỗi, mỗi khối cũng có một bộ nhớ chia sẻ có sẵn cho chủ đề của nó là numBins * sizeof(unsigned int)
không? Không.
Ngoài ra, trong chính hạt nhân có các cuộc gọi đến __syncthreads()
, ở đó có 2500 bộ gọi numBins
đến __syncthreads()
trong quá trình gọi hạt nhân không?
Câu hỏi đầu tiên: có.Câu hỏi thứ hai: luồng bên trong khối 2500, độc lập với các chuỗi khác, sẽ đạt tới điểm '__syncthreads()', ở lại cho đến khi tất cả các luồng trong khối kết thúc cập nhật của chúng vào bộ nhớ chia sẻ cho đến điểm đó và đến, và sau đó tiếp tục thực hiện thêm hướng dẫn. Tất cả các luồng bên trong khối sẽ phải xem '__syncthreads()' để bạn có thể nói rằng có * 2500 tập hợp các lệnh 'numBins' đến' __syncthreads() '*, nhưng nó khác với lệnh gọi hàm thông thường. Đó là một thói quen hàng rào cho đồng bộ hóa thread trong khối. – Farzad