46得票3回答
CUDA共享内存和全局内存有什么区别?

我对如何在CUDA中使用共享内存和全局内存感到困惑,特别是以下方面: 当我们使用cudaMalloc()时,我们会得到一个指向共享内存还是全局内存的指针? 全局内存位于主机还是设备上? 它们中有大小限制吗? 哪个访问速度更快? 将变量存储在共享内存中是否与通过内核传递其地址相同?即,而不是...

43得票5回答
分配共享内存

我正在尝试使用常量参数分配共享内存,但是遇到了错误。我的内核看起来像这样:__global__ void Kernel(const int count) { __shared__ int a[count]; } 我收到了一个错误信息: 错误:表达式必须具有常量值 count...

27得票3回答
CUDA:何时使用共享内存,何时依赖于L1缓存?

在Compute Capability 2.0(Fermi)发布之后,我一直在想是否还有任何用例可以使用共享内存。也就是说,在什么情况下使用共享内存比让L1在后台执行更好? 共享内存只是为了让设计针对CC < 2.0的算法能够高效运行而存在吗? 要通过共享内存进行协作,块中的线程将写...

23得票1回答
CUDA:使用共享内存的瓦片矩阵乘法,以及矩阵大小不是块大小的倍数。

我正在尝试熟悉CUDA编程,并且感到非常有趣。我目前正在查看this处理矩阵乘法的PDF,其中包括使用和不使用共享内存的方法。两个版本的完整代码可以在here找到。这段代码几乎与CUDA矩阵乘法示例中的代码完全相同。虽然非共享内存版本具有在任何矩阵大小下运行的能力,而不受块大小的限制,但共享内...

22得票2回答
何时在共享CUDA内存中使用volatile

在什么情况下,您应该在CUDA内核的共享内存中使用volatile关键字?我知道volatile告诉编译器永远不要缓存任何值,但我的问题是关于共享数组的行为: __shared__ float products[THREADS_PER_ACTION]; // some computatio...

18得票3回答
有没有一种方法可以为共享内存数组设置默认值?

考虑下面的代码: __global__ void kernel(int *something) { extern __shared__ int shared_array[]; // Some operations on shared_array here. } ...

18得票3回答
Cuda 共享内存数组变量

我正在尝试声明一个矩阵乘法的变量,如下所示: __shared__ float As[BLOCK_SIZE][BLOCK_SIZE]; 我正在尝试让用户输入矩阵的大小以进行计算,但这意味着需要更改BLOCK_SIZE。我已经更改了它,但是我遇到了编译器错误: error: consta...

18得票3回答
GPU共享内存大小非常小 - 我该怎么办?

今天大多数nVIDIA GPU的共享内存(在OpenCL术语中称为“本地内存”)大小仅为16 KiB。 我有一个应用程序,需要创建一个包含10,000个整数的数组。所以我需要的内存量为10,000 * 4b = 40kb。 如何解决这个问题? 是否有任何GPU具有超过16 KiB的共享内存?

16得票1回答
CUDA中,本地内存比共享内存慢吗?

我只发现一条注释,说本地内存比寄存器内存慢,每个线程两种类型。 共享内存应该很快,但它比线程的本地内存更快吗? 我想做的是一种中位数滤波器,但使用给定的百分位数而不是中位数。因此,我需要取出列表的块,对它们进行排序,然后选择一个合适的块。但如果我开始对共享内存列表进行排序,事情就会出错。如...

15得票1回答
CUDA中的动态共享内存

有类似于我将要询问的问题,但我觉得它们都没有涉及到我真正寻找的核心。我现在拥有一个需要将两个数组定义到共享内存中的CUDA方法。现在,数组的大小由一个在程序执行开始后读入程序的变量给出。因此,我不能使用该变量来定义数组的大小,因为定义共享数组的大小需要在编译时知道值。我不想像这样做 __sha...