看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++2010, Win7 64位元, CUDA 4.1, Tesla C2050 (Compute Capability:2.0) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 大家好! 小弟想請教一個問題: 有一個矩陣p,大小為7*65536,現在想要用CUDA來實做p乘以p的轉置矩陣,動手以後卻發 現遠比想像中的難,能請各位高手提供小弟一個方向或是具體的做法嗎?小弟感激不盡 ! 之所以會覺得很難的原因,是就小弟的認知,p矩陣要切,才有辦法用CUDA做運算 ,難就難在要怎麼切,以及切了以後要怎麼送進device做運算,還有做完運算以後要怎麼 組合以得到正確的答案。以上,有請各位高手指教! m(_ _)m 餵入的資料(Input): 以下的程式碼是給定p矩陣的初始值: for(i=0;i<7;i++){ for(j=0;j<65536;j++){ if(j/2==0){ p[i][j]=1; } else if(j/7==0){ p[i][j]=2; } else p[i][j]=0; } } 預期的正確結果(Expected Output): 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) p矩陣乘以p的轉置矩陣(未使用CUDA): for(i=0;i<7;i++) { for(j=0;j<7;j++){ for(k=0;k<65536;k++){ q[i][j]+=p[i][k]*p[j][k]; } } } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.229.94
Feis:最簡單的方法就是不要自己做.. 矩陣相乘是 CUDA 標準範例 02/28 18:46
Feis:請找 CUDA 的 Programming guide 和 Tutorial 02/28 18:47
Feis:原理上是拆成 block 02/28 18:48
lopohsiung:謝謝樓上,Programming guide 小弟有看過~ 02/28 19:07
lopohsiung:但是每個區塊的最大x維數或y維數有1024的限制呀 02/28 19:09
lopohsiung:(以Tesla C2050來說) 02/28 19:10
lopohsiung:這樣子真的不知道該怎麼辦! 02/28 19:11
lopohsiung:65536遠超過1024 02/28 19:14
sunneo:用gridDim啊 02/28 20:03
DJWS:http://zh.wikipedia.org/wiki/分塊矩陣 (這個?) 02/28 20:03
lopohsiung:謝謝sunneo和DJWS! 02/28 22:02
bugmens:http://i.imgur.com/DnViP.jpg 02/28 22:14
bugmens:http://i.imgur.com/pV50i.jpg 02/28 22:14
bugmens:http://i.imgur.com/0vB2P.jpg 02/28 22:15
bugmens:http://i.imgur.com/hyAVt.jpg 02/28 22:15
bugmens:出自"GPU之高效能運算CUDA",看看對你有沒有幫助 02/28 22:15
lopohsiung:嗯!謝謝bugmens!有幫助! 02/29 11:10