我遇到了“atomicCAS”和“atomicExch”标识符未找到错误。我在网上搜索了解决方案,但仍然无法解决我的问题。
我还在项目配置中将代码生成更改为compute_20、sm_20:
“配置属性 -> CUDA C/C++ -> 设备 -> 代码生成”
当我试图“编辑”这个项目时,我发现“继承的值:compute_10,sm_10”。
此外,当我尝试右键单击函数“atomicCAS”或“atomicExch”并从菜单中选择“Go To Definition (F12)”时,我发现它指向“$(CudaToolkitIncludeDir)\sm_11_atomic_functions.h(191) ”。
1.如何克服继承的compute_10、sm_10值?
2. 为什么它使用 sm_11_atomic_functions.h 中的原子函数而不是 sm_20_atomic_functions?
3.或者任何人都可以帮助详细描述如何解决这个问题。
非常感谢。
更新:
我们以下面的代码为例。
struct Lock {
int *mutex;
Lock( void ) {
HANDLE_ERROR( cudaMalloc( (void**)&mutex, sizeof(int) ) );
HANDLE_ERROR( cudaMemset( mutex, 0, sizeof(int) ) );
}
~Lock( void ) {
cudaFree( mutex );
}
__device__ void lock( void ) {
#if __CUDA_ARCH__ >= 200
while( atomicCAS( mutex, 0, 1 ) != 0 );
#endif
}
__device__ void unlock( void ) {
#if __CUDA_ARCH__ >= 200
atomicExch( mutex, 0 );
#endif
}
};
我收到一条消息:__CUDA_ARCH__
找不到符号“ ”的定义。