據說每個內核寄存器的數量對於CUDA優化非常重要,並且該數字的上邊界可以通過nvcc中的「-maxrregcount = N」來設置。我無法理解這一點,因爲我認爲寄存器的數量可以通過計算內核中的局部變量(以及可能傳遞的參數)來確定。我知道我錯了,因爲來自「nvcc --ptxas-options = -v」的報告遠遠超過了我以我的想法計算的數據。有人能對此有所考慮嗎?如何在CUDA編譯中分配寄存器
3
A
回答
2
每個線程有最大數量的寄存器,具有計算能力2.1的設備中的GPU當前有63個寄存器。每個流式多處理器包含有限數量的寄存器,這些寄存器分佈在線程塊中執行的線程中。如果每個塊的線程數量很少可以確定線程將獲得最大數量的寄存器,但是如果線程很多,它們將獲得較少數量的寄存器(這全部取決於所使用的內存總量通過線程和需求tayloring每個應用程序)。
現在,所有變量不能存儲在寄存器中,因爲它們缺少它們進入本地存儲器,這是全局設備存儲器的一部分,與寄存器相比,存儲器延遲時間很長。這稱爲寄存器溢出,您可以在這裏閱讀更多信息http://www.ece.umn.edu/~wxiao/ee5940/lecture8-2.pdf
嘗試將所有變量保留在寄存器中非常重要。新Cuda開發商往往低估了註冊溢出的影響。我做了一些測試,其中人爲地使線程的內存使用量增加了一倍,並導致寄存器溢出而沒有任何其他計算成本,並且它增加了5次計算的時間! 在小型CUDA應用中,寄存器的數量就足夠了。您可以按照上述pdf中的說明找出有多少變量進入本地存儲器。
相關問題
- 1. 編譯器中的寄存器分配
- 2. 在CPU寄存器中分配寄存器變量的標準?
- 3. cuda SM寄存器限制
- 4. cuda寄存器的單位
- 5. 爲什麼編譯器將變量存儲在寄存器中?
- 6. Verilog:將值保存在寄存器中(分配給相同的寄存器)
- 7. 如何在Verilog中將值分配給輸出寄存器?
- 8. Verilog:將寄存器分配給寄存器
- 9. 如何強制C++編譯器使用寄存器?
- 10. XOR寄存器,寄存器(彙編)
- 11. 圖着色寄存器分配器
- 12. 編譯代碼生成 - 條件塊內部的寄存器分配
- 13. GCC避免編譯分支鏈接寄存器(blr)語句
- 14. 如何分配內存寄存器的名稱?
- 15. 編譯器/彙編程序如何理解處理器內核寄存器?
- 16. 標量變量和寄存器:CUDA
- 17. 分配4位至8位寄存器
- 18. 將值0xB33C分配給寄存器$ t0
- 19. 寄存器分配算法的效率
- 20. Jamod Modbus從 - 分配寄存器
- 21. CUDA編譯器如何知道經線的分歧行爲?
- 22. cuda nvcc交叉編譯器
- 23. CUDA編譯器(nvcc)宏
- 24. CUDA NVCC編譯器錯誤
- 25. 編譯器如何爲此結構分配內存?
- 26. 編譯器如何爲類分配內存?
- 27. c編譯器如何爲結構分配內存?
- 28. MIPS編譯器中的寄存器 - 使用哪個?
- 29. 說服編譯器在循環外設置寄存器
- 30. 如何在Visual Studio 2010中設置CUDA編譯器標誌?