我的代码运行正常,但我不明白这个警告.
警告:具有非空构造函数或解构函数的共享内存变量(线程之间的潜在竞争)
我有一个名为facet_cuda的结构
struct facet_cuda {
IS_Vector_cuda v[3];
IS_Vector_cuda normal;
double z; };
Run Code Online (Sandbox Code Playgroud)
IS_Vector_cuda 是一个具有默认构造函数的类.
在全局函数内部,我在共享内存中创建一个facet数组,由块中的每个线程填充
__shared__ facet_cuda Faces[BlockSize];
Run Code Online (Sandbox Code Playgroud)
不确定可能发生什么样的竞争条件.
谢谢
竞争条件的出现是因为你声明了一个数组struct facet_cuda.
在C++中,每当声明一个类的数组时,都会调用默认构造函数来初始化该数组的所有元素.默认构造函数不是空函数.编译器发出警告,因为它没有在CUDA模型中定义如何初始化共享内存(即,哪个线程或线程应该实际运行构造函数来设置值).你应该能够通过为设备定义一个空构造函数来解决这个问题
struct facet_cuda {
IS_Vector_cuda v[3];
IS_Vector_cuda normal;
double z;
__device__ facet_cuda() {};
};
Run Code Online (Sandbox Code Playgroud)
编译器应该优化构造函数,警告应该消失(注意完全未经测试......).
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |