如何在 Visual Studio 2022 安裝 CUDA GUP 計算功能
CUDA 是 Visual Studio 呼叫 NVIDIA GPU 平行計算的一種架構,可以利用 GPU 的核心計算能力來提昇軟體系統效能,而且 GPU 的核心數量非常多,從 100 到 10,000 核心數都有,其數量遠遠大於 CPU ,很適合進行大量平行計算。
CUDA 是 NVIDIA 提供的功能,你的電腦需要先安裝 NVIDIA 顯示卡才會有此功能,NVIDIA 的三大產品系列 GeForce, Quadro NVS, Tesla 都可使用 CUDA。
CUDA 的語法是 C 語言,如果要寫 CUDA 程式,就要先學習 C 語言及 CUDA 專屬語法,才能在 CUDA 控制 GPU 計算,但這點也不用太擔心,通常 CUDA 只是系統的輔助程式,專門處理大量的數量運算,學會基本的語法就很好用了。
檢查 NVIDIA 顯示卡是否支援 CUDA
請先確認你的電腦已安裝 NVIDIA 顯示卡,以及驅動程式,才會有以下的畫面。
在桌面按滑鼠右鍵,選擇「NVIDIA 控制面板」,
然後點擊左下角的「系統資訊」
從詳細資料裡面可以檢查「驅動程式版本」與「CUDA 核心」,CUDA 核心的數字表示你的 NVIDIA 可用的 GPU 核心數量。
我這是一張超過 5 年的普通顯示卡,核心數量就有 384 個。現在最新的顯示卡核心數差不多都破萬了。
然後換頁籤到「元素」,從「NVCUDA64.DLL」看到可支援的 CUDA 版本。
你可以看一下目前驅動程式版與 CUDA 版本的對應關係,網址: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
通常只要更新顯示卡版本,就會支援新的 CUDA 版本。
如果需要更新的顯示卡版本,可以點此下載安裝。
安裝 CUDA
在安裝之前,你最好先更新 GPU 驅動程式版本,然後安裝好 Visual Studio 2022,可參考安裝說明,
然後至官網下載工具包,預設會下載 CUDA 最新版本。
這時候記得看一下上面在「NVCUDA64.DLL」顯示可支援的版本,是否包含最新版。
我以 Windows 為示範。
然後依照你電腦的規格選擇下載檔案。
下載後直接安裝,建議安裝時,先關閉 VS,因為會更新 VS 套件。
如果你需要較舊的 CUDA 版本,可參考這裡。
安裝時,可直接選「快速」,快速則會全裝所有套件,或者依個人需求調整。
安裝完成後,打開「命令提示字元」,輸入「nvcc –V」,如果有看到正確顯示安裝版本就完成了。
建立 CUDA 專案
當安裝好之後,打開 VS 2022 選擇「建立新的專案」,在搜尋區輸入「CUDA」,就可以找到專案範本。
輸入專案名稱、位置,就可以建立專案了。
VS 預設就幫你建置一個範本讓你參考,你可以先按 <F5> 執行看看,如果正常執行就會顯示以下畫面。
此範例是模擬兩個一維陣列相加,利用 GPU 計算的結果,是一個簡單的範例,但初學者需要好好理解一下語法內容。
CUDA 錯誤排除
因為 CUDA 比較複雜,當有錯誤時,可能是版本不對、支援計算能力不足或是設定有誤。
我首次安裝時就遇到一個錯誤,我來說明一下我如何排除錯誤。
以我的錯誤為範例,我的顯示卡是 NVIDIA GeForce 940MX,驅動程式版本是 516.94,CUDA 版本是 11.7。
在執行範例時,遇到錯誤如下:
這個錯誤是程式在調用 GPU 計算時,發生了錯誤,所以來檢查一下問題。
在每一個不同的顯示卡,可支援計算能力不一樣,我們可以看一下 CUDA 維基百科的說明文件有說明不同計算能力對應的顯示卡列表。
左邊的計算能力類似 CUDA 版本,而中間的顯示卡型號表示可支援的計算能力(版本)。
這時候來檢查一下設定,在專案按右鍵選擇「屬性」。
在「CUDA C/C++ > Device」屬性內可以看到「Code Generation」最低支援的運算能力 (版本) 是 5.2。compute_52,sm_52 就是指 5.2 版本。
然後我從 CUDA 維基百科的說明文件中,搜尋我的顯示卡型號 940M,所查到支援的運算能力 (版本) 是 5.0。
那就要把專案的最低支援運算能力從 5.2 調降至 5.0,或者你也可以直接調降支援更低的支援能力到 2.0 或 3.5。
每一個版本支援的 CUDA 語法不同,它也在迭代更新,你可以想像這版本就像 .Net Framework 一樣,較低的版本可以支援較舊型的電腦。
但另一個問題就是考量你所用到的程式碼,是否支援更低的版本。
我以調降為 3.5 為例,將「compute_52,sm_52」,調整成「compute_35,sm_35」。
調整支援運算能力時,再來按 <F5> 就可以正常運作了。
執行成功。恭喜你完成了 CUDA 的 Hello World!,想繼續學習的話,就要繼續學習 CUDA 的語法,以及如何在 C# 調用 CUDA 程式。
CUDA 參考資料
以下提供幾個不錯的學習文件給各位參考:
- 官方安裝說明
- NVIDIA CUDA 编程指南
- Github NVIDIA/cuda-samples
- https://chenhh.gitbooks.io/parallel_processing/content/cuda/
CUDA 使用經驗
因為 GPU 核心數量非常多,當呼叫 GPU 運算時,在 CUDA 會有一些調度時間,他會先組成數個不同串流處理器 (Streaming Multiprocessor, SM),而每個串流處理器底下才有 GPU 運算核心,有點像是群組的概念,每次使用時會佔用一些記憶體來傳遞資料到 GPU。
而且 GPU 的核心雖然多,但每一核的效能不會太高,時脈比 CPU 慢很多,但是核心數量多,比較適合做平行計算,通常會用到 GPU 的情況,是遇到大量的數學運算,迴圈次數超過 10,000 以上,場景是計算數學公式或是統計資料,這種情況我才會使用 CUDA 來分擔 CPU 工作。
而 GPU 還有一個問題是資料傳輸的速度很慢,一般在 CPU 取得記憶體資料很快,可是我們將資料傳給 GPU 的 I/O 處理就比較慢,而 GPU 運算結束後如果要將大量資料回傳至 CPU 也需要再消耗一些 I/O 時間。
以上就是在 Visual Studio 2022 安裝 CUDA 的分享,可能 CUDA 對你來說是一個全新的技術,其實對我來說也是,但是我第一次認識它時,就對它產生了興趣,覺得是值得學的新技術,當學會之後,對於接下來的軟體開發架構加入 GPU 計算又會拉高一個新的層次。
如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝