【发布时间】:2016-11-21 21:46:31
【问题描述】:
我是 CUDA 的初学者,我正在尝试为双精度数据类型和指向双精度数据类型的指针分配共享内存。我正在使用
分配数据extern __shared__ double dataShared[];
在这里,我想要在特定位置指向此数据的指针
int v = threadIdx.x;
dataShared[v] = &dataShared[v + (v+1)*data.V];
我想要一个二维双数据数组和一维指针数组,它们指向共享内存中二维数组的每一列。由于性能影响,这里我避免动态分配指针数组。这里指针数组被移位并用于访问列,因此二维数组将被列移位。
但是这是不允许的,还有其他方法可以实现吗?目前我正在使用 cuda 7.5,如果有人可以建议 cuda 8.0 中是否有任何新功能来实现这一点,那就更好了。
【问题讨论】:
-
不清楚你在问什么。这一行:
dataShared[v] = &dataShared[...]没有意义,因为您将指针类型的值分配给 double 类型的数组元素。我严重怀疑 CUDA 是否存在问题。您可能想首先尝试为纯 C 提出解决方案。它当然也适用于 CUDA。为了获得有意义的答案,您需要发布更多代码和/或更好地解释您的意图。它也可能是XY problem,因此您可能需要添加一些有关您尝试解决的问题的上下文的更多信息
标签: c++ cuda shared-memory