2013-07-09 45 views
7

Khi tôi hiểu chính xác các thiết bị khả năng tính toán 2.x có giới hạn đăng ký là 63 cho mỗi chủ đề. Bạn có biết giới hạn đăng ký cho mỗi luồng cho các thiết bị có khả năng tính toán 1.3 không?Đăng ký Cuda cho mỗi chủ đề

Tôi có một hạt nhân lớn mà tôi đang thử nghiệm trên GTX260. Tôi khá chắc chắn tôi đang sử dụng rất nhiều thanh ghi kể từ khi hạt nhân là rất phức tạp và tôi cần rất nhiều biến địa phương. Theo hồ sơ Cuda, đăng ký sử dụng của tôi là 63 (Static Smem là 68 mặc dù tôi không chắc chắn điều đó nghĩa là gì và Smem động là 0), mặc dù tôi khá chắc rằng tôi có hơn 63 biến cục bộ, vì vậy tôi đã tìm ra trình biên dịch đang sử dụng lại thanh ghi hoặc chèn chúng vào bộ nhớ cục bộ.

Bây giờ tôi nghĩ các thiết bị có khả năng tính toán 1.3 có giới hạn đăng ký trên mỗi luồng cao hơn so với các thiết bị 2.x. Dự đoán của tôi là trình biên dịch đã chọn giới hạn 63 vì tôi đang sử dụng khối 256 chủ đề trong trường hợp 256 * 63 là 16128 trong khi 256 * 64 là 16384 là số lượng đăng ký cho SM của thiết bị này. Vì vậy, tôi đoán là nếu tôi giảm số lượng các chủ đề cho mỗi khối tôi có thể tăng số lượng đăng ký sử dụng. Vì vậy, tôi chạy hạt nhân với các khối của 196 chủ đề. Nhưng một lần nữa profiler cho thấy 63 đăng ký mặc dù 63 * 192 là 12096 và 64 * 192 là 12288 là cách bên trong giới hạn 16384 của SM.

Vì vậy, bất kỳ ý tưởng nào tại sao trình biên dịch tự giới hạn đến 63 đăng ký? Nó có thể là tất cả vì đăng ký tái sử dụng hoặc là nó vẫn tràn đăng ký?

+1

Câu trả lời có thể cho phần đầu tiên của câu hỏi của bạn là [ở đây] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-technical-specifications.xml) – talonmies

+0

Vâng tôi đã nhìn vào điều đó trước đó. Trong bảng nó nói "Số lượng đăng ký 32 bit trên mỗi bộ xử lý" là 16K nhưng những gì tôi cần là số lượng đăng ký tối đa được phép ** cho mỗi luồng ** mà không được chỉ định ở đó. Tôi biết rằng đối với các thiết bị 2.x giới hạn là 63 nhưng có giới hạn cho 1.3 không? – Atirag

+2

Tiếp tục tìm kiếm, mỗi số chủ đề nằm ngay bên dưới – talonmies

Trả lời

13

đăng ký tối đa cho mỗi chủ đề là tài liệu here

Đó là 63 cho cc 2.x và 3.0, 128 cho cc 1.x và 255 cho cc 3,5

Trình biên dịch có thể đã quyết định rằng 63 thanh ghi là đủ và không sử dụng cho các thanh ghi bổ sung. Đăng ký có thể được tái sử dụng, vì vậy chỉ vì bạn có nhiều biến cục bộ, không nhất thiết có nghĩa là các thanh ghi trên mỗi luồng phải cao.

Đề nghị của tôi sẽ được sử dụng nvcc -maxrregcountoption để xác định giới hạn khác nhau, và sau đó sử dụng -Xptxas -voption có trình biên dịch cho bạn biết có bao nhiêu thanh ghi nó được sử dụng khi nó tạo ra PTX.

+0

Cảm ơn bạn rất nhiều! – Atirag

+2

Bạn cũng có thể sử dụng [giới hạn khởi chạy] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#launch-bounds) để kiểm soát chính xác hơn các thanh ghi cho mỗi giới hạn luồng trên một cho mỗi hạt nhân. –