繁体   English   中英

CUDA如何在运行时在共享内存的内核中创建数组?

[英]CUDA how to create arrays in runtime in kernel in shared memory?

我的任务是运行大量线程,每个线程执行一个小的矩阵乘法。 所有小矩阵均已加载到全局存储器中。 我希望通过让每个线程将其较小的矩阵加载到共享内存中,然后计算乘积来提高性能。 但是问题是我在编译时不知道矩阵的大小。 因此,我无法像__shared__ double mat1[XSIZE][YSIZE]那样创建变量。 在PC上,我会进行动态分配。 但是我不知道是否可以在共享内存上执行此操作。 如果在内核中调用malloc仅在全局内存中进行分配(假设可以进行此类调用),那么这也无济于事。

有没有一种方法可以在内核运行时声明数组? 还有其他解决方法吗?

您可以在CUDA中声明动态大小的共享内存分配,如下所示

__global__ void kernel()
{
    extern __shared__ double *mat1;
}

然后像这样启动你的内核

kernel<<<grid,block,XSIZE*YSIZE*sizeof(double)>>>();

CUDA编程指南中对此进行了更详细的讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM