11得票3回答
OpenCL本地内存是否有限制?

今天我在内核中添加了四个更多的__local变量,以便倾倒中间结果。但是,只将这四个变量添加到内核签名中,并添加相应的内核参数,会使内核的所有输出都变为“0”。没有任何cl函数返回错误代码。 我进一步尝试仅添加两个较小变量中的一个。如果我只添加其中一个,它可以正常工作,但如果我添加两个,它会...

11得票2回答
具有动态共享内存的模板化CUDA内核

我想在一个程序中调用不同实例的具有动态分配共享内存的模板化CUDA内核。我的第一个天真的尝试是编写以下代码: template<typename T> __global__ void kernel(T* ptr) { extern __shared__ T smem[]; ...

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

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

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

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

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

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

13得票2回答
GPU 共享内存银行冲突

我正在尝试理解银行冲突是如何发生的。 我在全局内存中有一个大小为256的数组,并且我有一个单一块中的256个线程,我想将该数组复制到共享内存。因此,每个线程都复制一个元素。 shared_a[threadIdx.x]=global_a[threadIdx.x] 这个简单的操作会导致银行冲...

9得票4回答
基于共享内存的一维stencil CUDA实现中的负数组索引

我目前正在进行CUDA编程,并尝试从我在网上找到的研讨会幻灯片中学习,可以在这里找到。我遇到的问题出现在第48张幻灯片上。以下代码可以在那里找到: __global__ void stencil_1d(int *in, int *out) { __shared__ int temp...

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

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

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

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

10得票1回答
GPU 2D 共享内存动态分配

我知道如何动态分配一维数组,但是如何为二维数组进行动态分配呢? myKernel<<<blocks, threads,sizeofSharedMemoryinBytes>>>(); .... __global__ void myKerne...