9得票2回答
共享内存何时真正需要填充?

我对NVidia的两份文件感到困惑。CUDA最佳实践指出,共享内存是以银行方式组织的,在32位模式下,每4个字节就是一个银行(这是我的理解)。然而使用CUDA进行并行前缀求和(扫描)详细介绍了由于银行冲突而需要向扫描算法添加填充的细节。 问题在于,对于我所提供的此算法的基本类型为float,...

9得票2回答
共享内存带宽:Fermi与Kepler GPU的比较

Kepler在访问共享内存时,带宽是Fermi的两倍还是四倍? 编程指南中提到: 每个bank每两个时钟周期有32位的带宽 对于2.X版本,以及 每个bank每一个时钟周期有64位的带宽 对于3.X版本,因此暗示了带宽高达四倍?

8得票1回答
通过共享内存传递内核参数是否值得?

假设我们有一个数组int * data,每个线程将访问数组的一个元素。由于这个数组将在所有线程之间共享,因此它将保存在全局内存中。 让我们创建一个测试内核: __global__ void test(int *data, int a, int b, int c){ ... } 我确定...

8得票2回答
如何在运行时定义大小已知的CUDA共享内存?

在CUDA中,__shared__内存似乎需要在编译时知道其大小。然而,在我的问题中,__shared__内存的大小只有在运行时才能确定,即: int size=get_size(); __shared__ mem[size]; 这将导致 "错误:常量值未知",我不确定如何解决这个问题。

7得票1回答
Numba CUDA运行时的共享内存大小?

在CUDA C++中,可以直接定义一个在运行时指定大小的共享内存。那么我该如何使用Numba/NumbaPro CUDA来实现这个呢? 到目前为止,我的尝试都只导致了错误并显示以下信息: Argument 'shape' must be a constant 编辑:仅澄清一下,我想要的...

7得票3回答
在CUDA中,用什么指令将数据从全局内存加载到共享内存?

我目前正在学习CUDA,了解到有全局内存和共享内存。 我查阅了CUDA文档,发现GPU可以使用ld.shared/st.shared和ld.global/st.global指令访问共享内存和全局内存。 我想知道的是,从全局内存加载数据到共享内存使用哪个指令? 如果有人能告诉我就太好了。 ...

7得票3回答
共享内存随机访问时预期的银行冲突数量

假设在共享内存中有一个32位整数的正确对齐数组A。 如果单个warp尝试随机获取A的元素,那么预期的bank冲突次数是多少? 换句话说: __shared__ int A[N]; //N is some big constant integer ... int v = ...

7得票2回答
为什么成员变量不能共享?

我想在CUDA代码中实例化一个类,该类与同一块中的其他线程共享一些成员。 但是,当尝试编译以下代码时,我会收到错误提示: attribute "shared" does not apply here (nvcc版本4.2)。 class SharedSomething { publ...

7得票1回答
CUDA - 确定共享内存中的银行数

共享内存被“分成”了许多个bank。这就导致了整个bank冲突的问题,我们都知道。 问题: 但是你如何确定共享内存中有多少个bank(“条纹”)? (在NVIDIA“devtalk”论坛上搜索,似乎每个块的共享内存被“分成”了16个bank。但是我们怎么知道呢?建议这样做的线程已经有几年了...

7得票2回答
复制到CUDA共享内存

在CUDA编程中,如果我们想要使用共享内存,我们需要将数据从全局内存传输到共享内存。线程用于传输这些数据。 我在某个地方(在线资源中)读到过,最好不要让块中的所有线程都参与从全局内存复制数据到共享内存的操作。这种想法是有道理的,因为并不是所有的线程都会同时执行。一个warp中的线程是一起执行...