我是cuda编码的新手,最近我在编码时遇到了一个racecheck错误,这里是非常简化的代码我可以重复错误:(在Linux和Windows上测试)
//test.cu:
__global__ void kernel(){
__shared__ double s1;
__shared__ double s2;
__shared__ double s3;
__shared__ double a1;
__shared__ double a2;
__shared__ double a3;
s1=1.0E-3;
s2=1.0E-3;
s3=1.0E-3;
a1=1.0E-3; // line 14
a2=1.0E-3; // line 15
a3=1.0E-3; // line 16
__syncthreads();
}
int main(){
dim3 blockdim(32,32);
kernel<<<1,blockdim>>>();
cudaDeviceReset();
return 0;
}
然后使用以下代码编译代码: nvcc -G -g test.cu -o test
然后用以下代码测试代码: cuda-memcheck --tool racecheck test
我得到的错误如下: =========错误:在test.cu:14:kernel(void) =========中写入访问权限为0x00000350,在test.cu:14中为0x00000350进行写入访问: kernel(void)[1098危害]
如果反复运行,可以通过14,15或16行随机触发此错误。 如果我对以下列表执行任何操作,则可以删除该错误:
这真让我很困惑,并引导我有一个天真的问题,是每个线程试图执行内核函数中的每个句子吗? 谢谢!