嗨,我想知道是否可以在nvidia cuda内核中进行以下操作
__global__ void compute(long *c1, long size, ...)
{
...
long d[1000];
...
}
或者以下内容__global__ void compute(long *c1, long size, ...)
{
...
long d[size];
...
}
你可以完成#1,但请注意这将在每个线程中都执行!
你的第二个代码片段不会起作用,因为内核运行时不支持动态内存分配。
当您启动内核时,可以动态分配共享内存。
__global__ void compute(long *c1, long size, ...)
{
...
extern __shared__ float shared[];
...
}
compute <<< dimGrid, dimBlock, sharedMemSize >>>( blah blah );
CUDA编程指南:
数组的大小在启动时确定(见第4.2.3节)。
内核运行时支持动态内存分配,可以查看 SDK 示例中的 new delete 功能。