今日デバッグで非常に困ったためメモ
CUDAを用いた並列プログラミングを行う際、"illegal memory access was encountered"が発生する場合がある。
通常だとグローバルメモリ、シェアードメモリへのアクセス違反を疑うが、それらを確認してもミスがない場合、動的スケジューリング処理に用いている変数に対して"volatile"をつけることで解決することがある。
宣言時にvolatileをつける。
volatile 型名 変数名 といった感じ。
コンパイラの最適化とキャッシュからの読み込みを行わなくなるらしい。
詳しくはここを参照。
docs.nvidia.com