[問題] CUDA 大矩陣相乘

看板C_and_CPP (C/C++)作者 (samio)時間14年前 (2011/03/27 13:07), 編輯推噓0(0013)
留言13則, 4人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC (nvcc) Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) CUDA 問題(Question): 我寫了一個簡單的 kernel function 想要做大矩陣的陳法 維度在4000多的時候都正常 但是在維度接近5000時,每個矩陣的元素輸出結果都變成0 想請問版上的先進們為什麼會這樣? 不知道這個問題和 register 被用完有沒有關係 餵入的資料(Input): A.mat 和 B.mat A 是流水號的矩陣 e.g : 1 2 3 4 5 6 7 8 9 (維度是三) B 是identity e.g: 1 0 0 0 1 0 0 0 1 預期的正確結果(Expected Output): AxB 應該要和 A 一樣 錯誤結果(Wrong Output): 當矩陣維度接近5000時 AxB就變成零矩陣了 程式碼(Code):(請善用置底文網頁, 記得排版) kernel function : http://paste.plurk.com/show/407891/ sourse code : http://paste.plurk.com/show/407905/ 造 A.mat 和 B.mat 的程式碼 : http://paste.plurk.com/show/407908/ 補充說明(Supplement): 因為才剛開始寫,也還在測試階段 所以blockDim 還有 gridDim都沒有調整,直接設成最大值 GPU 是GTS 450, MAX_thread: 1024 MAX_block: 1024 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.234.211 ※ 編輯: fuqule 來自: 114.32.234.211 (03/27 13:08)

03/27 14:45, , 1F
請養成良好習慣看一下 cudaGetLastError() ...
03/27 14:45, 1F

03/27 14:46, , 2F
還有去學一下 cuda-memcheck 怎麼用
03/27 14:46, 2F

03/27 14:51, , 3F
另外請考慮 i,j >= SIZE 的情況
03/27 14:51, 3F

03/27 15:18, , 4F
a大ㄝ!你好XD 謝謝你的建議!
03/27 15:18, 4F

03/27 15:19, , 5F
我以為 i,j >= SIZE 時,該block就會結束ㄝ, 這樣有問題嗎?
03/27 15:19, 5F

03/27 15:22, , 6F
超過要讓它不計算
03/27 15:22, 6F

03/27 20:12, , 7F
順便問一下 CUDA遇到那麼多while 會不會影響運算速度??
03/27 20:12, 7F

03/27 20:12, , 8F
反而不會比CPU快@@?
03/27 20:12, 8F

03/27 20:26, , 9F
剛剛測試了一下 1000x1000 的矩陣乘法
03/27 20:26, 9F

03/27 20:27, , 10F
CPU:13.2 秒 , GPU:2.4 秒 而且還沒有用shared memory
03/27 20:27, 10F

03/27 20:33, , 11F
不過這測試也不公平, intel E3400 vs GTS 450 XD
03/27 20:33, 11F

03/27 20:58, , 12F
GPU 也只有算矩陣類的東西快阿 XD
03/27 20:58, 12F

03/27 21:28, , 13F
也是啦 不過算矩陣快就夠吸引人啦!
03/27 21:28, 13F
文章代碼(AID): #1DZiNz7u (C_and_CPP)
文章代碼(AID): #1DZiNz7u (C_and_CPP)