Numba CUDA在运行时共享内存大小?

chi*_*era 2 python cuda numba

在CUDA C中,可以直接定义在运行时指定的大小的共享内存.我怎么能用Numba/NumbaPro CUDA做到这一点?

到目前为止我所做的只是导致错误消息"参数'形状'必须是常数".

编辑:只是为了澄清,我想要的是C CUDA中的以下内容(示例采用并从此处改编:

__global__ void dynamicReverse(int *d, int n)
{
  extern __shared__ int s[];

  // some work in the kernel with the shared memory
}

int main(void)
{
  const int n = 64;
  int a[n];

  // run dynamic shared memory version
  dynamicReverse<<<1,n,n*sizeof(int)>>>(a, n);

}
Run Code Online (Sandbox Code Playgroud)

chi*_*era 6

我找到了解决方案(通过非常有用的Continuum Analytics用户支持).我们所做的是按照我们通常的方式定义共享内存,但将形状设置为0.然后,要定义共享数组的大小,我们必须将其作为第四个参数(在流标识符之后)提供给内核.例如:

@cuda.autojit
def myKernel(a):
   sm = cuda.shared.array(shape=0,dtype=numba.int32)

   # do stuff

arga = np.arange(512)
grid = 1
block = 512
stream = 0
sm_size = arga.size * arga.dtype.itemsize
myKernel[grid,block,stream,sm_size](arga)
Run Code Online (Sandbox Code Playgroud)

  • 你能用这种方式创建2个不同大小的共享内存数组吗? (3认同)