CUDA 5.5 と Visual Studio Express 2012
はじめに
Visual Studio Express 2012 for Windows Desktop (以下、VS) の環境下で CUDA 5.5 を入れてみたのですが、VS で「新しいプロジェクト」を選んでみても CUDA 用のプロジェクトテンプレートがありません。そういえば CUDA のインストール中に製品版の VS がないとかなんとか怒られたような。詰みました。
本に書いてあるコードを動かしてみたいだけなんだけど・・・。それだけのために製品版の VS は買えねぇ
というわけで、CUDA 5.5 用のプロジェクトテンプレートを自作してみました。OS は Windows 7 Home Premium (64bit) です。
前提
- VS がインストール済み
- CUDA 5.5 (https://developer.nvidia.com/cuda-downloads) がインストールされていて、VS 上でサンプルのビルド、実行ができること
手元の環境では VS 上でサンプルのビルドと実行はすんなりとできましたので、そこらへんは割愛します。
手順
おおまかな手順です。
- 最小限のプロジェクトを作り、ビルドを確認する
- プロジェクトをテンプレート化する
- できたテンプレートを調整
各手順について説明します。フォルダは自分の環境で標準的なインストールを行った場合ですので、適宜読み替えてください。なお、以下の手順を行うことによって生じた、いかなる損害についても私は一切責任を負いませんのでご了承ください。
1.最小限のプロジェクトを作り、ビルドを確認する
プロジェクトのもとになるファイルがありましたので、それを使いました。
C:\Program Files\NVIDIA Corporation\Installer2\CUDAToolkit_5.5.{9C48FAF2-E992-4121-8062-47C5BBFC6558}\extras\visual_studio_integration\CudaProjectVsWizards\Templates\Projects\CUDA\CudaRuntime
にある、
- CudaRuntime-VS11.0.filters
- CudaRuntime-VS11.0.vcxproj
- CudaRuntime-VS11.0-Cuda5.5.vstemplate
- kernel.cu
を使います。これらのファイルをコピーして適当なフォルダに入れておきます。CudaRuntime-VS11.0.filters は、 CudaRuntime-VS11.0.vcxproj.filters にリネームしてください。既存のファイル名だとフィルタが効かないようです。
ここで CudaRuntime-VS11.0.vcxproj ファイルを開いてみても、エラーが出てプロジェクトが読み込まれないはずです。
.vcxproj ファイルを適当なエディタで開き、以下のように編集します。
1.
$if$ ($cudamaxclversion$ == 2008)
<PlatformToolset>v90</PlatformToolset>
$endif$
$if$ ($cudamaxclversion$ == 2010)
<PlatformToolset>v100</PlatformToolset>
$endif$
$if$ ($cudamaxclversion$ == 2012)
<PlatformToolset>v110</PlatformToolset>
$endif$
を、
<PlatformToolset>v110</PlatformToolset>
に置換する
2.
$cudamajorver$.$cudaminorver$
を、
5.5
に置換する
置換したら、 CudaRuntime-VS11.0.vcxproj を開いてください。ビルドして、実行できることを確認してください。
2. プロジェクトをテンプレート化する
ビルド・実行できることを確認したら、「ファイル(F)」>「テンプレートのエクスポート」を選んでください。「テンプレートの種類の選択」では、「プロジェクトのテンプレート」を選択してください。「テンプレート オプションの選択」は適当に変更してください。そのままでもいいです。
完了したら、VS 上で新しいプロジェクトを作成してみます。すると、「インストール済み」>「テンプレート」>「Visual C++」に、先ほど作成したテンプレートが表示されています。プロジェクトが生成できるかどうか確認しましょう。
ここまでで、ちょっとしたコードを動かすには十分かと思います。
3. できたテンプレートを調整
C:\Users\[ユーザ名]\Documents\Visual Studio 2012\Templates\ProjectTemplates
の下に、「[テンプレート名].zip」というファイルができていると思います。これがテンプレートの本体です*1。解凍して中身を編集し、再度 zip ファイルにすればテンプレートを更新できます。(このとき、zip ファイルの中にフォルダが入るとダメみたいですよ)
わざわざ zip ファイルにしなくても、VS は解凍された状態でもテンプレートとして認識します。編集した結果をすぐ「新しいプロジェクト」から確認できるので楽です。
特にテンプレートの挙動が変わるわけではありませんが、1. でやった変更を元に戻して、テンプレートっぽくしておきます。
まず、テンプレートの zip ファイルを展開してください。展開したファイルにある
CudaRuntime-VS11.0.vcxproj を、オリジナルのもの (C:\Program Files\NVIDIA Corporation\Installer2\ ... のやつです) で上書きしてください。
続いて、MyTemplate.vstemplate とオリジナルの CudaRuntime-VS11.0-Cuda5.5.vstemplate をエディタ等で開き、オリジナルの <CustomParameters>~</CustomParameters> の部分を MyTemplate.vstemplate (</Project> と </TemplateContent> の間) にコピーしてください。
ここまでで、新しい CUDA のプロジェクトが作成できるかどうか確認してください。お好みで zip ファイルにしてください。
終わりに
わざわざこんなことをしなければならないなんて、自分がなにか盛大に勘違いをしているか、もっとスマートな方法があるんでしょうなぁ。
参考
プロジェクト テンプレートの作成 @MSDN
http://msdn.microsoft.com/ja-jp/library/vstudio/ms247120(v=vs.100).aspx
*1:これをバラまけばいいような・・・