CUDA:使用多个线程访问全局内存

石棉

我对以下内核有问题(我使用compute_30,sm_30对其进行了编译):

__global__ void kernel(){
// globalThreadID:
int tidX = threadIdx.x + blockIdx.x * blockDim.x;

bool* array;
if (tidX == 1) array = new bool[10]; // allocate global array for every thread?!

if (tidX < 10)
{
    array[tidX] = calculate something;
}


read the array.....

}

在这里,CUDA调试器有时会抱怨9种访问冲突,而访问数组时我只会得到零!

有人知道为什么吗?

看守人

错误发生,因为array是一个螺纹范围在运行时堆aloocation。您仅使用为其分配线程tidX = 1具有的线程tidX = {0,2,3,4,5,6,7,8,9}正试图取消引用未初始化的指针。显然,这将导致运行时访问失败。

编辑:

如果希望该数组对同一块中的每个线程可见并且可访问,则可以使用__shared__内存空间。如果希望数组对内核启动中的每个线程可见,则必须将其作为参数传递给内核,或者__device__在转换单元范围内将其声明为内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

CUDA 对全局内存的低效访问模式

CUDA内核中的Heisenbug,全局内存访问

在CUDA中访问全局内存的速度很慢

线程与全局内存的交互

矩阵乘法:在CUDA中合并全局内存访问后,性能下降

如何在CUDA中正确添加全局内存?

CUDA动态并行和全局内存同步

CUDA中的静态分配的全局内存结构

为什么在平铺矩阵乘法中CUDA共享内存比全局内存要慢?

用CUDA中的全局内存初始化共享内存时出错

1D纹理内存访问是否比1D全局内存访问快?

全局内存分段错误

将线程本地内存刷新到全局内存是什么意思?

将数据从全局内存移动到共享内存是否会使线程停止?

CUDA 写入其他经线看不到的全局内存

如何在CUDA中安全地将全局内存中的数据加载到共享内存中?

Nvidia GPU同时访问全局内存中的单个位置

连续 1 字节写入全局内存会导致多个事务

GTX Titan Z全局内存

当许多线程同时读取全局内存中的某个位置时,存在多少个事务?

如何为每个活动线程块处理重用的全局内存的唯一部分?

使用向量将OpenCL中的全局内存读取最小化?

使用纹理缓存与缓存命中率低的合并全局内存?

有什么方法可以让内核根据数据大小使用常量或全局内存

如何从全局内存到本地内存进行跨步复制?

在哪种特定情况下,只读数据缓存的性能将优于全局内存访问?

CUDA:使用 atomicAdd 遇到非法内存访问

移动OpenCL本地存储库冲突。为什么使用本地内存比内核中的全局内存要慢?

多线程访问内存