「atomicCAS」および「atomicExch」識別子が見つからないというエラーに直面しています。オンラインで解決策を検索しましたが、まだ問題を解決できません。
また、プロジェクト構成でコード生成を compute_20、sm_20 に変更しました。
「構成プロパティ -> CUDA C/C++ -> デバイス -> コード生成」
この項目を「編集」しようとしたところ、「継承された値: compute_10,sm_10」が見つかりました。
また、関数「atomicCAS」または「atomicExch」を右クリックし、メニュー「定義へ移動(F12)」から選択しようとすると、「$(CudaToolkitIncludeDir)\sm_11_atomic_functions.h(191)」を指すことがわかりました。 "。
1. 継承された compute_10、sm_10 の値をどのように取得しますか?
2. sm_20_atomic_functions の代わりに sm_11_atomic_functions.h のアトミック関数を使用するのはなぜですか?
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__
見つかりませんでした。