Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays CUDA:使用多线程访问全局内存_Arrays_Cuda_Global Variables - Fatal编程技术网

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

Arrays CUDA:使用多线程访问全局内存,arrays,cuda,global-variables,Arrays,Cuda,Global Variables,我对以下内核有一个问题(我用compute\u 30、sm\u 30编译了这个): \uuuu全局\uuuuu无效内核(){ //全局线程ID: int tidX=threadIdx.x+blockIdx.x*blockDim.x; 布尔*数组; if(tidX==1)array=newbool[10];//为每个线程分配全局数组?! 如果(tidX

我对以下内核有一个问题(我用compute\u 30、sm\u 30编译了这个):

\uuuu全局\uuuuu无效内核(){
//全局线程ID:
int tidX=threadIdx.x+blockIdx.x*blockDim.x;
布尔*数组;
if(tidX==1)array=newbool[10];//为每个线程分配全局数组?!
如果(tidX<10)
{
数组[tidX]=计算某物;
}
读取数组。。。。。
}
在这里,CUDA调试器有时会抱怨9次访问冲突,而我在访问阵列时只得到零


有人知道为什么吗?

发生错误是因为
array
是运行时堆中的线程作用域位置。您仅将其分配给
tidX=1
的线程。具有
tidX={0,2,3,4,5,6,7,8,9}
的线程正在尝试取消对未初始化指针的引用。显然,这将导致运行时出现访问错误

编辑:


如果希望阵列对同一块中的每个线程都可见并可访问,可以使用
\uuuuu共享\uuuu
内存空间。如果希望数组对内核启动中的每个线程都可见,则必须将其作为参数传递给内核,或者在转换单元范围内将其声明为
\uuuu设备\uuuuu
内存。

好,我看到问题了。。。。但是我如何使这个数组对每个线程都可访问(而不声明线程数?@user3694255:如果这回答了您的问题,请接受此选项,以便将其从未回答的问题队列中删除,并在下一个问题出现的人的搜索结果中更为可见。您可以将其改为
\uuuuuuuuuuuuuuuuuuuuuuuuuuu共享
变量。
__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.....

}