看板 VideoCard 關於我們 聯絡資訊
近來閱讀了版上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
dulcet:看不懂你的舉例 你要做vector sum 還是 sum filter? 06/18 17:14
dulcet:vector sum 直接做不會有bank conflict 06/18 17:16
dulcet:sum filter用shared memory,thread個數開跟loading的個數 06/18 17:20
dulcet:一樣就不會global memory的bank conflict 06/18 17:22
※ 編輯: rick209 來自: 140.113.152.194 (06/18 17:29)
rick209:抱歉 剛剛寫錯 修改過了 06/18 17:30
dulcet:所以說是sum filter,那就用shared memory 06/18 17:33
dulcet:@@看錯是vector sum 06/18 17:33
dulcet:把for loop 幹掉 k=threadIdx.x 這樣才對吧? 06/18 17:35
※ 編輯: rick209 來自: 140.113.152.194 (06/18 17:40)
rick209:感謝提醒 06/18 17:40