Introduction

CUDA Toolkitには、Visual Studioと統合されるVisual Studio Integrationが含まれています。
しかしながら、このツール、Visual Studioのバージョンをチェックしているのか、2018/09/01現在、最新のCUDA Toolkit、cuda_9.2.148_win10.exeでもインストールに失敗します。
というのも公式にも対応しているのは、Visual Studio 2017 15.6となっており対応していないことがうかがえます。
既に、15.8の登場が控えている状況でこれは非常にまずいです。

ということでその対応。

Resolution

公式のフォーラムでもこの問題は話題になっています。
Nvidiaの対応に不満の声が。
そんな中、下記のスレッドの**installing CUDA 9.2 with VS2017 integration worked for me this way:**と言う投稿で対応策が提示されました。

要点は、

  1. cuda_9.2.88_win10.exeをWinRARとかで展開
  2. CUDAVisualStudioIntegration\CUDAVisualStudioIntegration.nviを書き換える
  3. setup.exeを実行
  4. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include\crt\host_config.hを書き換える

です。
私の試した手順だと、

  1. cuda_9.2.88_win10.exeを実行し、インストーラを起動して最初の画面で待機
  2. CUDAVisualStudioIntegration.nviを書き換える
  3. インストール続行
  4. C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include\crt\host_config.hを書き換える

でOKでした。
少し具体的に書くと、

CUDAVisualStudioIntegration.nvi を書き換える

インストーラを起動してから書き換える場合は、**”%TEMP%\CUDA\CUDAVisualStudioIntegration\CUDAVisualStudioIntegration.nvi**が書き換える対象です。
そして、テキストエディタでCUDAVisualStudioIntegration.nviを開き、下記の箇所を削除します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    <custom phase="handleExistingNsight" action="HandleExistingNsight"/>
<custom phase="detectDisableCallHome" action="DetectDisableCallHome"/>
<msi platform="x86" phase="NsightMSINoTraffic" name="${{NsightMSI}}" condition="NsightMSIActionActiveAndNoTraffic" installText="Installing Nsight Visual Studio Edition">
<arg name="CUDAINSTALLER" value="true"/>
<arg name="DISABLE_NV_CH" value="1"/>
</msi>
<msi platform="x86" phase="NsightMSITraffic" name="${{NsightMSI}}" condition="NsightMSIActionActiveAndTraffic" installText="Installing Nsight Visual Studio Edition">
<arg name="CUDAINSTALLER" value="true"/>
<arg name="DISABLE_NV_CH" value="0"/>
</msi>
<confirm phase="Confirm-install" when="install" condition="NsightMSIActionActive">
<fileExists target="${{CommonAppData}}\NVIDIA Corporation\Nsight\Nsight_${{nsightVersion}}_InstallSummary.xml"/>
</confirm>
<standard phase="copytemp" condition="NsightMSIActionActive">
<copyFile source="NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi" target="${{CommonAppData}}\NVIDIA Corporation\Nsight\NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi" />
</standard>

<standard phase="createStartMenuStortcuts" condition="NsightMSIActionActive">
<createShortcutGroup location="startMenu" linkGroup="${{NsightProgramGroup}}"/>
<createShortcutLink location="startMenu" targetPath="${{CommonAppData}}\NVIDIA Corporation\Nsight\NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi" linkGroup="${{NsightProgramGroup}}" linkName="Nsight Redistributable"/>
</standard>
<custom phase="ParseWarningPage" action="ReadWarningPage" condition="NsightMSIActionActive"/>

<msi platform="x86" phase="NVTXMSI" name="${{NVTXMSI}}" installText="Installing NVTX"/>

host_config.h を書き換える

インストール完了後、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include\crt\host_config.hを書き換えます。
これを書き換えないと、CUDAを使ってコンパイルする際にエラーが出てコンパイルが停止します。
130行目付近の

1
2
3
#if _MSC_VER < 1600 || _MSC_VER > 1913
#error -- unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!
#elif _MSC_VER == 1600 /* _MSC_VERION == 1600 */

を、下記のようにします。

1
2
3
4
/*#if _MSC_VER < 1600 || _MSC_VER > 1913*/
#if _MSC_VER < 1600
#error -- unsupported Microsoft Visual Studio version! Only the versions 2012, 2013, 2015 and 2017 are supported!
#elif _MSC_VER == 1600 /* _MSC_VERION == 1600 */