作者lopohsiung (年輕的心)
看板C_and_CPP
標題[問題] 大型矩陣相乘(CUDA)
時間Tue Feb 28 17:50:03 2012
開發平台(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
→ lopohsiung:謝謝sunneo和DJWS! 02/28 22:02
→ bugmens:出自"GPU之高效能運算CUDA",看看對你有沒有幫助 02/28 22:15
→ lopohsiung:嗯!謝謝bugmens!有幫助! 02/29 11:10