[問題] CUDA在windows下的運算時間問題....?

看板C_and_CPP (C/C++)作者 (天行者)時間15年前 (2011/07/07 02:16), 編輯推噓1(1017)
留言18則, 4人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) CUDA 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) CUDA 問題(Question): 程式主要是在計算 所有點 到 所有點的最短距離,一開始用的是floyd演算 法,但後來覺得不適合平行運算,因此改成了 dijkstra 演算法,計算n次,如 此一來,n次的計算就可以完全用cuda平行化來解決。 A. 以n = 760個點為例子: 1. 作業系統:windows XP 32 bit 顯卡:9500GT (僅此一張,接著螢幕) 不論一口氣用一個kernel func run完 或 用迴圈分成多個部分call kernel func 都沒有任何問題,答案也是對的。 2. 作業系統:windows 7 64 bit 顯卡:GTX580 & GTX580 (兩張一樣的顯卡,一張接螢幕,另一張沒有) 用迴圈分成每次運算16個點是對的 但分成每次運算32個點,就會跳error出來 而且每次執行跳出來的error還會不一樣... 主要都是timeout error 和 unknown error這兩個一直在交換 32個點都爆了,更大的測一側結果也都差不多 16個點以下也都OK 兩張顯卡也都試過,結果差不多... ( cudaSetDevice( 0 ); 和 cudaSetDevice( 1 ); ) 在32個點時,用cudaSetDevice( 1 )迴圈可以跑2圈才錯 用cudaSetDevice( 0 )迴圈1圈就爆了 超過32個點都差不多1圈就爆了。 B. 以n = 1900個點為例子: 1. 用上面第1個環境執行 每次運算16個點OK 超過16個點就出error了,通常一圈就爆了 主要都是unspecified launch failure timeout error比較少看到 2. 用上面第2個環境執行 光1個點,用cudaSetDevice( 1 )迴圈第3圈就爆了 用cudaSetDevice( 0 )第一圈就爆了... error也跟上面n=760所得到差不多 (補充一下:迴圈每執行完一次,會Sleep 2秒,不讓他Sleep只會讓程式更容易爆.. Sleep 很久 似乎對於run一次就需要大量的運算也是沒什麼幫助) 起初一開始還覺得有可能是記憶體的問題,便將記憶體壓到了一定的程度 ( 初始距離陣列用稀疏矩陣的方法處理 存結果的陣列看迴圈一次執行多少個點就配多少空間 ) 但結果完全沒變 所以我個人認為這應該是傳說中的windows 5秒 的時間限制 但我覺得非常奇怪的是用第二個環境執行,明明就1~2秒而已,結果就爆了... 拜過谷哥大神之後,理論上應該有三種解決辦法: 1. 用linux,有指令可以關掉watchdog 2. 用windows + 一張沒事做的獨立顯卡 3. 用windows + 改系統參數!? (大家都說很危險..@@?) 很明顯的,我在上面的測試例子中,第二個環境應該是非常符合第2點的條件才對... 可是為什麼他還是照樣爆掉??? 雖然說沒接好像比有接螢幕的顯卡多跑了一些這樣.. 我發現了一個東西 cuda_runtime.h 之下的 cudaDeviceProp 結構內的 kernelExecTimeoutEnabled member int kernelExecTimeoutEnabled → Specified whether there is a run time limit on kernels. 官網是這樣說的 我拿他去測了一下 結果發現兩個環境,三張顯卡全部output為1..... 有人能夠解釋一下我到底遇到了什麼問題嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.75.190 ※ 編輯: tedd15550325 來自: 203.70.75.190 (07/07 02:17)

07/07 11:25, , 1F
GTX580問題很多, 注意shared mem有沒有讀寫不存在的位
07/07 11:25, 1F

07/07 11:26, , 2F
置 然後把SLI關掉看看 看起來不是因為5秒的問題
07/07 11:26, 2F

07/07 14:17, , 3F
回樓上 我用版本3.6.752.0的面板控制,幾乎能關的東
07/07 14:17, 3F

07/07 14:18, , 4F
西都關了,PhysX也設定專用有接螢幕的顯卡,但還是差
07/07 14:18, 4F

07/07 14:18, , 5F
不多
07/07 14:18, 5F

07/07 14:33, , 7F
上面是版面設定的圖片,還OK嗎?
07/07 14:33, 7F

07/07 14:46, , 8F
至於有沒有out of bound,應該是沒有,假設有的話,
07/07 14:46, 8F

07/07 14:51, , 9F
那n=760的測試應該要錯掉才對?
07/07 14:51, 9F

07/07 21:53, , 10F
嘗試過 cuda-memcheck 嗎?
07/07 21:53, 10F

07/07 22:23, , 11F
回樓上 我把.cu檔放在cuda-memcheck.exe的目錄下,為
07/07 22:23, 11F

07/07 22:23, , 12F
啥他還是會說Error: could not run sample ???
07/07 22:23, 12F

07/07 22:24, , 13F
我是在console視窗輸入指令:cuda-memcheck sample
07/07 22:24, 13F

07/07 22:25, , 14F
(當然有先用 cd 跳到cuda-memcheck.exe的目錄
07/07 22:25, 14F

07/07 22:45, , 15F
我認為是跟記憶體使用有關啦 overflow之類的 但這部份你
07/07 22:45, 15F

07/07 22:45, , 16F
只能靠自己check了
07/07 22:45, 16F

07/08 01:11, , 17F
akasan大可以提是一下嗎@@? 我google了好久都沒有人
07/08 01:11, 17F

07/08 01:11, , 18F
提到檔案路徑....只有看到linux的~______~"
07/08 01:11, 18F
文章代碼(AID): #1E5AQH_R (C_and_CPP)
文章代碼(AID): #1E5AQH_R (C_and_CPP)