13
在内核函数中,我想要两个向量的共享内存,都与size
长度(实际上sizeof(float)*size
)。使用动态共享内存分配两个不同的向量
既然是不可能的,如果需要一个变量以在内核函数直接分配内存,我必须动态地分配它,如:
myKernel<<<numBlocks, numThreads, 2*sizeof(float)*size>>> (...);
和,在内核中:
extern __shared__ float row[];
extern __shared__ float results[];
但是,这不起作用。
取而代之,我只用一个向量extern __shared__ float rowresults[]
包含所有数据,使用2*size
分配的内存。所以row
通话仍然是一样的,并且results
通话就像rowresults[size+previousIndex]
。这确实有用。
这不是一个大问题,因为我得到了我的预期结果,但是有什么办法将我动态分配的共享内存拆分成两个(或更多)不同的变量吗?只为美丽。
一个更美丽的方式来做到这一点,这就是我一直在寻找的。谢谢。 – machlas 2013-03-15 15:20:27
@Imortenson此方法是否支持内存中元素的动态访问对齐的好处?如果你已经将内存分配为'sizeof(float)'或者访问将遵循'float' allignment,那么'float4'是否会以'32byte'对齐的方式被访问?谢谢。 – BugShotGG 2014-09-12 11:09:39
在你的例子中,你知道你的数组的大小;那么为什么不定义一个'struct',而是将共享内存重新解释为那个结构? – einpoklum 2017-02-17 23:23:29