CUDA

昨日まではそんな事が無かったのに、VisualStudioでCUDAの.cuファイルのコンパイルに延々と時間が掛かるようになってしまった。BuildのCancelをしても止まらないのでタスクマネージャーでMSBuild.exeのプロセスを強制終了…。

原因の切り分けの為にソースコードの #include を削ったりして空実装に変えたら数十秒くらいで応答が帰るようにはなった。

Visual Studio Command Prompt で nvcc.exe を呼び出すと普通にコンパイルされた。

>msbuild hoge.sln

とすると、AddCudaCompileDeps ターゲットで呼び出している cl.exe の実行に時間が掛かっている。
その cl.exe のコマンドラインの呼び出しをコピーして実際にやってみると延々と標準出力にコードを出力してプログラムの実行が終わらない。

>msbuild /v:diag hoge.sln > build_result.txt

等としてログを観察。。結論としては、

.cu.deps を作る為に cl.exe /E を呼び出すように C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations フォルダの Nvda.Build.CudaTasks.v6.5.dll とか Nvda.Build.CudaTasks.v7.0.dll とかに書かれていてそれを cl.exe /P を呼び出すように 0x45 から 0x50 に変更したらすぐ処理が終わるようになった。

副作用として .cu ファイルに対応する .i ファイルが出来るようになったけれどディスクを消費するくらいで弊害はそんなに無さそう。

しかしどうしてこうなった…。