如题,temp是int类型 ,shared_array是一个数组,tx是threadIdx.x。我就搞不懂为什么可以把共享内存里的数组赋给temp,那temp有几个值,代表什么。请懂的人帮忙,谢谢!
不明白你要问什么。这是很正常的一个赋值语句阿,没什么特别的。就是将shared mem中的一个数据(下标是tx)赋值给寄存器temp。temp是每个线程私有的寄存器变量,当然是一个值了。
楼上说对了,temp是每个线程私有的寄存器变量。在kernel中声明一个变量(如 int x 、float x)时,每个线程就都会产生一个变量x,放在各自私有的寄存器中。对于每个线程,shared_array[tx] 值不同,自已temp变量当然也会得到不同的值了~如果temp在显存中,才会出现你所说的竞写而得到不确定值的情况。
建议看看cuda存储器模型~
哈哈,希望是对上了你的问题:)我也是新手啊,可惜问的问题都没人回答哎!
‘‘对于每个线程,shared_array[tx] 值不同,自已temp变量当然也会得到不同的值了~’’
把上面这句话修改一下:
对于某一个线程tx,自己的temp变量得到的值是唯一的,就是shared_array[tx]了~:)
太感谢了,是我理解错误,把temp当成global men中的一个变量,你这样一说我就理解了。谢谢。
谢谢你无私的分享,我理解错了temp所在的位置,但是既然temp是放在kernel中,为什么不可以认为它是在global men中,而一定是在寄存器中。
这个是语法问题嘛~就是这么规定滴~:)
你可以看看矩阵相乘的程序,你完全搞懂之后,就明白很多东西了,在cudasdk/projects/matrixMul/ 里就有,或者cuda编程指南中都有~
真的很感谢你~~~