您好我只是想知道是否有可能做的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例如,新的删除。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top