2013年6月9日日曜日

Visual Studio2012でCUDA5.0を動かす

GPGPUの環境を整える為、CUDAをインストールする。
CPUの都合により、TITANはPCIe2.0x16での動作となるが、i7 4930kの発売を待つか、Xeon E5 1650を購入するまではこの環境でテストを行う事にする。

【環境】
CPU: intel i7 3930k
GPU: nVidia GeForce TITAN
Mem: DDR3 1600 16GB
SSD: M5P 256GB
OS: Windows7 64bit
Visual Studio Professional 2012

CUDA5.0とVisualStudio2012の情報があまりにも少なすぎてインストールに半日掛かってしまった・・・。特に日本語の情報が殆ど無かった為、これから同じ環境で構築しようと考えている人の参考になるような感じで記そうと思う。

(Visual Studio 2010で構築する場合は別の情報を参照されたし。)


■事前準備
 ・nVidia グラフィックボード(最新ドライバ)
 ・Visual Studio 2012のインストール

■ダウンロード
(1) CUDA 5.0 Toolkit 32bit版のダウンロード
https://developer.nvidia.com/cuda-downloads
開発するアプリケーションによって32bitか64bitを選ぶそうだが、最初は32bitを選んだほうが無難。

■インストール
(1) ダウンロードした CUDA5.0 Toolkitを起動し、インストール。
(2) 英語表記だが全てデフォルトでOK。

//// ここから面倒 ////
(3) C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\extras\visual_studio_integration\MSBuildExtensionsに格納されているのはビルド カスタマイズファイルだが、デフォルトではVS2012に対応しない為、直接中身を弄ってやる必要がある。
.propsファイルと.targetsファイルは上書き防止の為、デスクトップにコピーし、デスクトップで編集すること。

・CUDA 5.0.props
  ↓を50行目に追加
 <CudaClVersion Condition="'$(PlatformToolset)' == 'v110'">2010</CudaClVersion>

・CUDA 5.0.targets
  Microsoftの公式では変更するように記載されているが、何故か変更しなくてもコンパイルが通る。
 この辺りがよくわからないので、もし分かる方がいらっしゃるようでしたらコメントへお願いします。
・CUDA 5.0.xml
 変更点なし。

・Nvda.Build.CudaTasks.v5.0.dll
 変更点なし。

(4)C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizationsへ
・CUDA 5.0.props
・CUDA 5.0.targets
・CUDA 5.0.xml
・Nvda.Build.CudaTasks.v5.0.dll
上記のファイルを放り込む。

(5)C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\includeのhost_config.hをメモ帳で開き、90行目を下記のように変更する。

#if _MSC_VER < 1400 || _MSC_VER > 1700




(6)C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\extras\visual_studio_integration\rulesにある
・NvCudaRuntimeApi.v5.0.rules
・NvCudaLinker.v5.0.rules
・NvCudaDriverApi.v5.0.rules

上記のファイルを

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCProjectDefaultsへコピー

■コンパイルテスト
手順としてはCUDAのサンプルプログラムをコピーしてビルドして動かす、と簡単な内容だが、この部分に殆どの時間を要した・・・。
とりあえず、成功した手順だけ記しておく。
(1) C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0\0_Simpleフォルダにある「template」フォルダをコピーし、「practice」へリネームする。
(2) Visual Studio 2012を起動
(3) ファイル > 開く > プロジェクトソリューションから practiceを開く。
(4) VC++コンパイラとライブラリを更新しますと出るので 「更新する」を選択。
   (カスタムビルドファイルに間違いがなければ読み取りが成功する)
(5) ソリューションを右クリックし、ビルド カスタマイズファイルでCUDA5.0を選択
  (自分の環境では複数現れた為、$(VCTargetsPath)から始まる方を選択した)
  

(5) ビルド実行
   (同様、カスタムビルドとhost_config.hの設定が間違っていなければ成功する。)
(6)エラーが発生せず、コンソールが起動すればとりあえずOK
   (Unicode 形式で保存してください。といった警報が多発しますが今回はスルー。)

書いてみれば大した内容じゃないのにこんなことに半日費やしたのが悔しいっ・・・!
とはいえ、色んなエラーに遭遇したお蔭で勉強にもなったので良しとしよう。


■おまけのトラブルシューティング
導入までに遭遇したトラブルの処置をここに記そうと思う。
.・nvcc : fatal error : '-ccbin': expected a number
 原因:カスタムビルドファイルの設定ミス(CUDA 5.0.props or CUDA 5.0.targets)
 対処:インストール手順(3) 参照

■Microsoft Visual Studio 2012 + CUDA5.0 セットアップ(スクリーンショット付き)
http://code.msdn.microsoft.com/windowsdesktop/CUDA-50-and-Visual-Studio-20e71aa1

0 件のコメント:

コメントを投稿