我的CUDA代碼在調試模式下產生正確的結果。但是,在發佈模式下,相同的代碼會產生垃圾結果。調試模式與發佈模式之間線程之間的同步行爲可能有所不同嗎?cuda代碼在釋放模式下產生不正確的結果
2
A
回答
1
我想,你有比賽條件問題。您可以重新組織代碼並在需要的地方添加同步。在調試模式下,你的線程通常按順序執行,你不能得到這個問題。
2
使用-O0生成的代碼會導致不太理想的代碼以及顯着更多的全局和本地內存訪問,這些訪問可能會隱藏競爭條件。如果您認爲共享內存中可能存在爭用條件,則可嘗試使用新的CUDA 5.0預覽內存檢查程序,該檢查程序支持某些形式的競態條件檢測。您最好的選擇是查找您在兩個線程之間共享內存的任何位置,並確定是否缺少同步線程的線程範圍。
相關問題
- 1. 浮點限制代碼不能產生正確的結果
- 2. NSComparisonResult不會產生正確的結果
- 3. 不正確的結果在C代碼
- 4. rect.contain()在下面的代碼中不顯示正確的結果
- 5. 隱式強制轉換產生不正確的結果
- 6. 爲什麼執行mergesort的代碼不能產生正確的結果?
- 7. C++代碼不正確的結果
- 8. ZIP沒有產生正確的結果
- 9. iphone在調試模式下釋放內存但不在釋放模式下
- 10. 總結表中的列不會產生正確的結果
- 11. cuda,addAtomic產生奇數結果
- 12. CUDA atomicAdd()產生錯誤結果
- 13. CUDA內核結果在發佈模式下不同
- 14. PHP:Curl_exec不使用下面的代碼返回結果正確
- 15. string.compareTo(串)產生不正確的結果在排序
- 16. 「是三角觸摸」式的代碼不給正確的結果
- 17. 爲什麼此cuda內核會產生非確定性結果?
- 18. 在釋放/調試模式下與Haar級聯的不同結果
- 19. 拖放產生不良結果
- 20. 正確的註釋代碼
- 21. C#Hackerrank代碼在數據類型挑戰30天的代碼產生正確的結果,但說我錯了
- 22. MySQL複雜的查詢不產生正確的結果
- 23. MySQL的「其中」產生正確的結果,但「WHERE NOT IN」不
- 24. 的QByteArray到整數轉換產生不正確的結果
- 25. SQL中的Sum()+ DCount()組合不會產生正確的結果
- 26. 有條件的elif語句不會產生正確的結果
- 27. append_before_filter在生產模式下
- 28. ASP.NET MVC - 在釋放模式產生怪異的風格
- 29. 加密AES/CBC/NoPadding不會產生正確的結果
- 30. 暗號RANGE()函數不會產生正確的結果
「在調試模式下,你的線程通常按某種順序執行,你不能得到這個問題」。你能指出哪裏有記錄嗎? – talonmies
@talonmies CUDA調試沒有很好地記錄。這是我們的猜測。我認爲這是因爲生成了許多額外的調試代碼。你有沒有任何相反的信息? – geek
我這樣做,而且我相信硬件執行或調度模型以某種方式根據編譯器的變化而變化是專利廢話。構建調試的任務是消除一些優化,並將共享內存和寄存器泄漏到本地內存,以便主機可以在執行期間檢查其狀態。根據體系結構的不同,這可以通過移除某些硬件內存保護以及使用不同的指令(以及JIT優化)在塊本地內存上運行來顯着改變行爲。 – talonmies