作者rick209 ()
看板VideoCard
標題[請益] 關於CUDA的bank conflict
時間Thu Jun 18 16:03:55 2009
近來閱讀了版上a大關於cuda的文章
因此想把自己的程式改寫成可利用GPU執行
但bank conflict卻始終困擾著我
舉例來說
int k=threadIdx.x
num1=data1[k]
num2=data2[k]
sum[k]=num1+num2;
若把num1 num2的記憶體配置在shared memory時
會因為不同執行緒存取到同一塊記憶體產生bank conflict的問題
但因為計算複雜 所需記憶體大的關係 也無法配置到暫存器上
想請教cuda有類似openMp中 for private()的指令嗎
還是就只能完全利用陣列運算 如把num1改變成陣列num1[k]等
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.152.194
1F:推 dulcet:看不懂你的舉例 你要做vector sum 還是 sum filter? 06/18 17:14
2F:→ dulcet:vector sum 直接做不會有bank conflict 06/18 17:16
3F:→ dulcet:sum filter用shared memory,thread個數開跟loading的個數 06/18 17:20
4F:→ dulcet:一樣就不會global memory的bank conflict 06/18 17:22
※ 編輯: rick209 來自: 140.113.152.194 (06/18 17:29)
5F:→ rick209:抱歉 剛剛寫錯 修改過了 06/18 17:30
6F:推 dulcet:所以說是sum filter,那就用shared memory 06/18 17:33
7F:→ dulcet:@@看錯是vector sum 06/18 17:33
8F:→ dulcet:把for loop 幹掉 k=threadIdx.x 這樣才對吧? 06/18 17:35
※ 編輯: rick209 來自: 140.113.152.194 (06/18 17:40)
9F:→ rick209:感謝提醒 06/18 17:40