题
您好我只是想知道是否有可能做的NVIDIA CUDA内核
里面的下面__global__ void compute(long *c1, long size, ...)
{
...
long d[1000];
...
}
或以下
__global__ void compute(long *c1, long size, ...)
{
...
long d[size];
...
}
解决方案
可以做第一例子中,我还没有尝试过的第二个。
不过,如果你能帮助它,你可能要重新设计你的程序不能做到这一点。你不想分配4000个字节的内存在内核。这将导致大量的使用CUDA本地内存的,因为你将不能够适应一切到寄存器中。 CUDA本地存储器慢(400个循环存储器等待时间的)。
其他提示
您可以做#1,但要注意这将在每一个线程来完成!
您第二片段不会工作,因为在内核运行时动态存储器分配是不受支持的。
可以动态地分配共享存储器当您启动内核。
__global__ void compute(long *c1, long size, ...)
{
...
extern __shared__ float shared[];
...
}
compute <<< dimGrid, dimBlock, sharedMemSize >>>( blah blah );
CUDA节目指南:
所述阵列的大小被在启动时确定的(见第4.2.3节)。
在内核运行时动态存储器分配被支撑,检查SDK例如,新的删除。
不隶属于 StackOverflow