結論
ヘッダファイル中に誤植があり、lockの値をunlockできないまま時間が経過したため
問題のファイル
書籍の記述に従うと以下のファイルができる
lock.h
#ifndef __LOCK_H__
#define __LOCK_H__
struct Lock {
int *mutex;
Lock(void ) {
int state = 0;
HANDLE_ERROR( cudaMalloc( (void**)&mutex, sizeof(int) ) );
HANDLE_ERROR( cudaMemcpy( mutex, &state, sizeof(int),
cudaMemcpyHostToDevice ) );
}
~Lock( void ) {
cudaFree( mutex );
}
__device__ void lock( void ) {
while( atomicCAS( mutex, 0, 1 ) != 0 );
}
__device__ void unlock( void ) {
atomicExch( mutex, 1 );
}
};
#endif // __LOCK_H__
変更点
unlockで書き込む値を1から0に変更
__device__ void lock( void ) {
while( atomicCAS( mutex, 0, 1 ) != 0 );