动态分配共享内存的数组和CUDA中的数据指针

问题描述:

我是CUDA的初学者,我试图为双数据类型和指向双数据类型的指针分配共享内存。我使用动态分配共享内存的数组和CUDA中的数据指针

extern __shared__ double dataShared[]; 

在这里,在我想指针在特定的地方

int v = threadIdx.x; 
dataShared[v] = &dataShared[v + (v+1)*data.V]; 

我希望有一个2D双数据阵列和1d指针数组指向共享2D arrayin的每一列此数据分配数据记忆。在这里,我避免了由于性能影响而导致的指针数组的动态分配。这里指针数组被移位并用于访问列,这样2d数组将被列移位。

但是,这是不允许的,是否有任何其他方式可以实现这一点。目前我正在使用cuda 7.5,如果有人可以建议cuda 8.0中有什么新功能来实现这一点,那会更好。

+1

目前还不清楚你在问什么。这行:'dataShared [v] =&dataShared [']'没有意义,因为您将指针类型的值赋给double类型的数组元素。我严重怀疑CUDA存在问题。你可能想试着想出一个简单的C的解决方案。它肯定也适用于CUDA。为了获得有意义的答案,您需要发布更多代码和/或更好地解释您的意图。它也可能是一个[XY问题](http://xyproblem.info/),所以你可能想要添加一些关于你试图解决的问题的上下文的更多信息 – Drop

您可以使用2个不同的指针,有不同的类型,以指向共享内存的同一块:

extern __shared__ char dataShared[]; 
double ** columns = (double **) dataShared; //Here you can store pointers to columns 
double * realData = (double *) (dataShared + N * sizeof(double *)); //N is the number of columns 

在这里,您使用的共享内存的一个块,但使用不同的偏移量为它的2个区域(指向列的偏移量为0,实际数据偏移量为N * sizeof(double *))。