在 VIsual Studio 2017 使用 CUDA 9.2

| | 0 Comments| 16:36
Categories:

雖然 Heresy 個人算是滿早期開始接觸 NVIDIA CUDA 的,但是其實已經沒有在碰 NVIDIA CUDA 程式好一段時間了…不過,由於在開發的專案裡面,還是有一些地方有用到別人寫的 CUDA 程式,所以在維護的時候,還是需要去考慮他。

而根據從以前到現在的經驗,NVIDIA 針對 Visual Studio 的支援,一向不是做得很快、很好;往往 Visual Studio 已經出了新版本了,CUDA 才終於支援上一個版本…

某方面來說,這應該也是由於 NVIDIA CUDA 的重點是高速計算、大部分這個領域的用戶,其實都是把程式放在 Linux 叢集上跑的關係吧?但是,這對於一般 Windows 的開發者來說,其實還滿麻煩的…

最近,Heresy 在把手邊的專案移植到 Visual Studio 2017 上,CUDA 又出現問題了… orz

首先,第一個碰到的問題,就是 CUDA 9.2 在 WIndows 上會因為「Visual Studio Integration」這個模組的關係,根本裝不起來!

而且,這個問題似乎和顯示卡驅動程式的版本有關,而且應該是從 CUDA 9.1 版就開始出現了,但是 NVIDIA 卻始終沒有修復他…(參考

而儘管 NVIDIA 官方是在 Release Note 裡面號稱有支援 VIsual Studio 2017,但是就算手動把對應的檔案拿出來用,讓整個 Visual Studio 的 CUDA 建置環境完成,結果就算是官方範例,還是無法正確建置;而錯誤訊息,也是讓人頗為無奈的「不支援的 Visual Studio 版本」…

更無奈地,是他還貼心地列出他支援 2012、2013、2015 和 2017 呢…
(你前面告訴我不支援,後面又告訴我支援,是想幹嘛?)


至於解決方法呢? 目前在官方論壇的《CUDA 9.2: "NVIDIA Installer Failed"》中,是有人有提出可用的解法。

在安裝的部分,其流程如下:

  1. 下載完整的安裝版本(exe (local)),以目前的版本來說,檔名應該會是「cuda_9.2.88_win10.exe」(下載頁面

  2. 不要直接執行這個程式,而是將這個檔案用解壓縮軟體(例如 7-Zip)解壓縮到一個資料夾。

  3. 找到「CUDAVisualStudioIntegrationCUDAVisualStudioIntegration.nvi」這個檔案,用純文字檔編輯器打開,並將 88 到 111 行的內容刪除。刪除的內容如下:

     

    <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 CorporationNsightNsight_${{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 CorporationNsightNVIDIA_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 CorporationNsightNVIDIA_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"/>

  4. 執行解壓縮出來的資料夾下的「setup.exe」來進行安裝。
    這邊安裝的步驟會和直接執行「cuda_9.2.88_win10.exe」一樣,不過理論上應該不會出錯了。

  5. 手動安裝「CUDAVisualStudioIntegration」資料夾下的「NVIDIA NVTX Installer.x86_64.Release.v1.21018621.Win64.msi」和「NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi」這兩個檔案。

理論上,這樣可以把 CUDA 9.2 SDK 成功安裝完成。

至於不能編譯的錯誤,則是要去修改「C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.2includecrthost_config.h」這個檔案的第 131 行。

他本來的版本檢查是寫成:

 

#if _MSC_VER < 1600 || _MSC_VER > 1913

把它改成

 

#if _MSC_VER < 1600

這樣子,理論上就可以在 Visual Studio 2017 下面,使用 CUDA 9.2 了!

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *