[問題] CUDA穩定性很差

看板C_and_CPP作者 (大色狼來襲)時間13年前 (2012/07/31 14:15), 編輯推噓4(4012)
留言16則, 11人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) CUDA 4.1 問題(Question): CUDA 穩定性很差 有時候對有時候會錯 case 1: 當我定義 dim3 b(32,32,1); 我使用逐步執行會發現 b.x = 64 b.y = xxxxxxx <---每次run都不太一樣 但都5還6位數(位數忘記了 反正很大) b.z = xxx 就覺得很扯 所以我改用 dim3 b; b.x = 32; b.y = 32; b.z = 1; 逐步執行 發現內容結果一樣是錯的 不然就是有的時候會發現監看式說 b不存在 逐步執行的時候 個別指定法 (分別給x,y,z) 會直接跳過... 可是最扯是 假設我是 dim b, c; 然後 b和c都分成x,y,z個別給值 只是 c.x = num/b.x; c.y = num/b.y; c.z = 1; 結果上面的c 逐步執行不會跳過 但是b的會直接跳過 最後解決方法是 只要寫 printf("%d %d",b.x, b.y); 就是顯示出來 逐步執行就不會跳過 且正常 case 2: 我有寫2個矩陣相乘 一個用gobal memory的寫法 一個用share memory 我是寫在副程式 及 main -> 呼叫 副程式 -> 呼叫kernal 如果我只使用一個kernal 2種寫法的結果都OK 可是如果我 呼叫kernal 執行結束回到 副程式 在run另一個kernal 出現結果是 gobal(第一個kernal)的會錯 share(第二個kernal)是正確的 就很奇怪..... 補充說明(Supplement): 我有想到是 可能我沒安裝好(但run 版上a大的教學文章中的陣列相加是正確的) 另一種就是CUDA和VS2008 結合性不夠好 被最佳化掉了.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.190.114

07/31 22:32, , 1F
先懷疑是不是自己寫錯
07/31 22:32, 1F

07/31 22:34, , 2F
被最佳化掉==自己寫錯啊... Orz
07/31 22:34, 2F

07/31 22:44, , 3F
不會用說工具爛的典範...XD
07/31 22:44, 3F

07/31 23:36, , 4F
通常這種情況是有 race condition
07/31 23:36, 4F

08/01 09:14, , 5F
直覺就是race condition
08/01 09:14, 5F

08/01 21:38, , 6F
電腦是不會錯的,一定是你不了解它程式寫錯!
08/01 21:38, 6F

08/01 22:01, , 7F
想到一句話,程式不是照你想的跑,是照你寫的跑。
08/01 22:01, 7F

08/01 22:05, , 8F
開發者也是人也會出錯啊,Hello World都能被當成病毒了
08/01 22:05, 8F

08/01 22:05, , 9F
當然機率比較低就是了,一般還是先懷疑自己這邊錯卡實際
08/01 22:05, 9F

08/01 22:42, , 10F
其實沒有重開機就要偷笑了,以前寫cuda時跑一次重開機一次
08/01 22:42, 10F

08/02 14:49, , 11F
直覺就是你有寫錯...
08/02 14:49, 11F

08/03 22:32, , 12F
case2裡的兩個kernel有sync嗎? 程式流並不會block在CPU
08/03 22:32, 12F

08/03 22:33, , 13F
而是你副程式call完第一個kernel就會馬上call第二個ker
08/03 22:33, 13F

08/03 22:34, , 14F
nel ...CUDA 4以後已經沒什麼bug了吧,問題應該是在devi
08/03 22:34, 14F

08/03 22:35, , 15F
ce和CPU間混淆了
08/03 22:35, 15F

08/03 23:14, , 16F
2個kernal之間有用cudathreadsync隔開
08/03 23:14, 16F
文章代碼(AID): #1G5-Xjm7 (C_and_CPP)