作者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