關於CUDA的bank conflict - 顯卡

Table of Contents

近來閱讀了版上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]等

--

All Comments

Ophelia avatarOphelia2009-06-21
看不懂你的舉例 你要做vector sum 還是 sum filter?
Edward Lewis avatarEdward Lewis2009-06-25
vector sum 直接做不會有bank conflict
Linda avatarLinda2009-06-28
sum filter用shared memory,thread個數開跟loading的個數
Hedda avatarHedda2009-07-03
一樣就不會global memory的bank conflict
Rae avatarRae2009-07-07
抱歉 剛剛寫錯 修改過了
Kumar avatarKumar2009-07-09
所以說是sum filter,那就用shared memory
@@看錯是vector sum
Ursula avatarUrsula2009-07-11
把for loop 幹掉 k=threadIdx.x 這樣才對吧?
Anthony avatarAnthony2009-07-12
感謝提醒