上牧製作所日誌

たまにつれづれ

CUDAがおかしい時に確認すること

使用するGPUによってはCUDAが正常に動かないときがある(特に古い物)
その時の対処法(一例)

下のサイトで自分のグラボをさがす
https://developer.nvidia.com/cuda-gpus

自分のボードを見つけたら,右横に書いてあるCompute Capabilityの数字を控えておく.
※ サンプルプログラムのdeviceQueryでも確認できる.
この場合はCUDA Capability Major/Minor version numberという項目

VSの"プロジェクト"->"プロパティ"->"構成プロパティ"->"CUDA C/C++"->"Device"を開いて,"Code Generation"を編集する.
compute_xx,sm_xx (xxは数字)となっている筈なので,
先程メモったCompute Capabilityの値を10倍した数に書き換える.

eg)GPUのCCが3.5の場合 : compute_35,sm_35 と書き換える.


CUDAのバージョンによって世代毎に使用できる関数などが決まっており,
このバージョンをCapability Major(CM)と呼ぶ.
この値は世代が新しくなるごとに増えていく.
そのため,GPUのCMよりソフトウェアのCMが低い場合は動作するが,
逆にソフトウェアのCMが高い場合,動作しないことがある.
筆者が経験した例ではFFTの画像シフトが正常に動作しなかった.(CMを下げることで解決した)
CMに起因する誤動作の原因は他にもあるようなので,ggってみるのも良いだろう.