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

看板C_and_CPP (C/C++)作者 (天行者)時間15年前 (2011/07/12 03:23), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《tedd15550325 (天行者)》之銘言: : 開發平台(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..... : 有人能夠解釋一下我到底遇到了什麼問題嗎? 感謝某C大的站內信,讓我解決了這個問題XDDD 我參考了顯卡版 #1CNAGSKw 這篇文章 這個方法就是所謂的修改系統參數 我已經懶得管他到底危不危險了 程式先run出來比較重要~!!! 參數修改相關網址: http://msdn.microsoft.com/en-us/windows/hardware/gg487368.aspx http://msdn.microsoft.com/en-us/library/ff553890.aspx http://technet.microsoft.com/en-us/library/cc976062.aspx 至於cuda-memcheck這個工具 我發現官網說到應用的部分時只有提到linux和MacOS 令我強烈懷疑他根本沒有支援windows... cuda-gdb debug 工具 似乎也差不多的樣子 後來灌了Nsight debug工具 (windows VS2008/2010 專用debug工具,OS一定要vista以上...) 照著user guide做不到幾步馬上就卡住了... 什麼要連到host端 到底要怎麼連阿... 阿不就localhost就好了...到底是要連個什麼鬼阿....? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.51.71 ※ 編輯: tedd15550325 來自: 203.70.51.71 (07/12 03:23)
文章代碼(AID): #1E6qsONz (C_and_CPP)
文章代碼(AID): #1E6qsONz (C_and_CPP)