CUDA 開發環境設定與簡易程式範例 - Neutrino's Blog
文章推薦指數: 80 %
如果裝了CUDA 幾本上OpenCL 也可以順便裝,因為Nvidia GPU 使用OpenCL 也是吃CUDA,這樣之後要跑OpenCL 就可以直接用。
$ sudo apt install -y nvidia- ...
CUDA開發環境設定與簡易程式範例
2020-12-10
Liu,An-Chi劉安齊
¶1.簡介
GPU以前是用來算圖形介面,後來有了通用GPU運算(GeneralPurposeGPU,GPGPU)技術的誕生,因為GPU架構擁有非常多執行緒,在跑程式的時候可以將大量的數值運算交給GPU,而邏輯的部分交給CPU,這也是常見的GPGPU使用方式。
其中Nvidia便是第一個提出GPGPU概念的公司,其公司提出CUDA技術,讓開發者可以用一般寫C的語法去驅動GPU來做運算。
¶2.CUDA安裝
CUDA有很多個版本,如果直接用aptinstallcuda不一定安裝到自己需要的版本。
除了一般的CUDA程式,我們可能還會想要給Pytorch或Tensorflow使用。
比較好的做法是去官方網站找自己需要的版本,不過要記住要去CUDAToolkitArchive的頁面選版本,不然Nvidia官網會直接導引到最新的版本。
大家可以照著我下面指示安裝。
¶2.1CUDA安裝
以下以CUDA11.0版本為範例。
首先去Archive頁面,選11.0點進去,然後照個你的需求把選項勾一勾。
例如上面就是選x86Ubuntu20.04版本,然後你可以選runfile、deblocal或debnetwork。
三種差異分別是一大包安裝檔、deb包裝好的一大包安裝檔、完全靠網路下載的deb安裝檔。
有沒有deb差異在於之後可不可以用套件管理員去管理。
通常我會選deblocal,你也可以用其他的,端看個人習慣。
選完之後他很貼心,就會給你一大串指令,基本上照著打就安裝完了。
Cuda11.0Ubuntu20.04x86安裝流程:
wgethttps://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudomvcuda-ubuntu2004.pin/etc/apt/preferences.d/cuda-repository-pin-600
wgethttps://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda-repo-ubuntu2004-11-0-local_11.0.3-450.51.06-1_amd64.deb
sudodpkg-icuda-repo-ubuntu2004-11-0-local_11.0.3-450.51.06-1_amd64.deb
sudoapt-keyadd/var/cuda-repo-ubuntu2004-11-0-local/7fa2af80.pub
sudoapt-getupdate
sudoapt-get-yinstallcuda
其中dpkg-i如果有問題的話,也可以直接用apt./xxx.deb來代替。
¶2.2CuDNN安裝
我們可以順便裝一下CuDNN,這是CUDA針對DeepLearning優化過的函數庫,假設有使用Pytorch就會用到。
記得根據你的作業系統改一下連結,像是ubuntu18.04是指Ubuntu18。
$sudobash-c'echo"debhttp://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/">/etc/apt/sources.list.d/cuda_learn.list'
$sudoaptinstalllibcudnn7
¶2.3OpenCL安裝
如果裝了CUDA幾本上OpenCL也可以順便裝,因為NvidiaGPU使用OpenCL也是吃CUDA,這樣之後要跑OpenCL就可以直接用。
$sudoaptinstall-ynvidia-opencl-dev
$sudoaptinstallopencl-headers
¶2.4系統設定
然後首先要重新開機,這非常重要!!!!
順利裝完之後記得要把路徑設定好,在~/.bashrc裡面加入
exportPATH=$PATH:/usr/local/cuda/bin
exportCUDADIR=/usr/local/cuda
¶2.5檢查安裝
然後我們就可以檢查一下有沒有裝好。
CUDA有裝好的話,以下指令應該都有反應。
$nvidia-smi#Driver
$nvcc--version#CUDA
$/sbin/ldconfig-N-v$(sed's/://'<</dev/null|greplibcudnn#CuDNN
¶2.6其他
如果上面安裝方法沒用的話,也可以參考這幾篇有用的文章:
EasyinstallationofCudaToolkitonUbuntu18.04
Tutorial:[email protected]
InstallingCUDA10.1onUbuntu20.04
¶3.CUDA程式範例
想學好CUDA最好的辦法是看官方教學文件CUDAC++ProgrammingGuide,畢竟是Nvidia自己家的產品。
Gerassimos寫的MulticoreandGPUProgramming:AnIntegratedApproach這本書也挺好的,很適合入門。
這邊提供一個簡單的範例:
matadd.cu:
#include
那我們看到使用Kernel時語法是MatAdd<<
可以參考上圖,GPU包含許多Block,每個Block又有許多Thread。
所以我們在跑Kernel時要指定要用多少Block,以及裡面使用多少Thread。
大概知道在幹嘛之後,我們就可以編譯執行囉!
$nvccmatadd.cu;./a.out
PASS
跑的時候可以在另一個視窗呼叫nvidia-smi,就可以看到matadd使用GPU狀況。
我們也可以用nvprof來看一下CUDA的效能:
$nvprof./a.out
==27161==NVPROFisprofilingprocess27161,command:./a.out
PASS
==27161==Profilingapplication:./a.out
==27161==Profilingresult:
TypeTime(%)TimeCallsAvgMinMaxName
GPUactivities:70.06%263.96us387.986us87.581us88.285us[CUDAmemcpyHtoD]
21.55%81.181us181.181us81.181us81.181us[CUDAmemcpyDtoH]
8.40%31.647us131.647us31.647us31.647usMatAdd(float*,float*,float*)
APIcalls:98.65%133.57ms344.524ms3.6540us133.50mscudaMalloc
0.78%1.0564ms4264.10us169.89us383.89uscudaMemcpy
0.19%256.03us385.342us20.249us148.41uscudaFree
0.14%187.38us1187.38us187.38us187.38uscuDeviceTotalMem
0.13%169.85us971.7510us193ns69.776uscuDeviceGetAttribute
0.07%98.576us198.576us98.576us98.576uscudaDeviceSynchronize
0.02%29.226us129.226us29.226us29.226uscudaLaunchKernel
0.02%26.508us126.508us26.508us26.508uscuDeviceGetName
0.00%4.0950us14.0950us4.0950us4.0950uscuDeviceGetPCIBusId
0.00%1.3720us3457ns266ns811nscuDeviceGetCount
0.00%1.0800us2540ns192ns888nscuDeviceGet
0.00%365ns1365ns365ns365nscuDeviceGetUuid
上面顯示我們大部時間都花在搬資料,的確合理,因為我們運算的東西很簡單,導致Overhead發生在記憶體搬移上。
¶4.結論
本文簡單介紹CUDA開發環境設置,並解說簡單的CUDA程式範例。
GPGPU幫助我們在大量運算時可以有效加速計算,許多數值計算函式庫抑或機器學習、深度學習框架也都會使用GPGPU來加速計算。
tags:
parallelprogramming
,
cuda
,
gpu
,
Ad
Thismayhelpmeearnsomemoney.(Ofcourseyoucandonatemedirectly)
Comments
可以去全站留言板來留言喔!
AboutMe
Liu,An-Chi劉安齊
SoftwareEngineer
@tigercosmos
TOC
1.簡介2.CUDA安裝2.1CUDA安裝2.2CuDNN安裝2.3OpenCL安裝2.4系統設定2.5檢查安裝2.6其他3.CUDA程式範例4.結論
RecentPosts
2021米蘭理工交換教戰手冊—米蘭理工概況與心得
2021米蘭理工交換教戰手冊—抵達米蘭與生存篇
2021米蘭理工交換教戰手冊—出國前準備篇
出發到抵達米蘭頭兩天雜記
如何在台灣申請義大利學生簽證
交大觀察與心得(五):碩二下—科技X藝術
JavaScript遍歷Array的四種方法:for、for-in、for-of、forEach()
計算攝影學(ComputationalPhotography)簡介(一)
「台灣社交距離」App背後技術原理:接觸通知系統與保護隱私的接觸追蹤技術
深入理解Reentrancy和Thread-safe
Ad
Search
贊助寫作
謝謝您的協助,請作者喝一杯咖啡,能讓作者用來更有動力為讀者提供品質更加優良的文章與閱讀環境
Archives
20211420204720191620185820174720162120153
Tags
20212dpattern30天javascript從入門到進階angular2之30天邁向神乎其技之路boostcgicpuspecenglishfacebookhdritalyjavascriptmilansharedarraybuffervocabularytitanwebassemblyxr專題aialgorithmamdmi50angularangular5angular2arrayatomicatomicsbagofvisualwordsbagofwordsbeginnerbenchmarkbiasbotbottenderbrowserbrowserarchitecturebrowserscc++cameracameracalibrationchaoschatbotchromiumcloudmosacollisiondetectioncompareandswapcomputationalphotographycomputeranimationcomputersciencecomputervisioncoscupcovid-19cpucublascudacudnndebugdeeplearningdeeplearninghardwaredenodigitalprocessingdnsdockerdup2elixirenglishfeaturematchingfloating-pointnumberforkforwardkinematicsfrontenddevelopmentgdbgitgithubappgooglenetgpugrowinguphowthingsworkhttpserverhybridimageimageprocessingimagestitchingimpulseinferenceinterninversekinematicsjacobianjointconstraintkeypointlet'sbuildadbmslinebotlinuxlocalizationlockfreemachinelearningmeasurementmmapmobiledevicemozillamozillataiwannetworknetworkprogrammingnewyearresolutionnlpnodejsnoteopensourceopenclpaperparallelprogrammingperfperformanceanalysisphysicspipepolimiprobotprogrammingpseudoinversepthreadpuffinbrowserpuffinosphonepullrequestpythonpytorchransacredblacktreereentrancyrelationaldatabaserevisioncontrolrigidbodyrustrusttaiwanscienceservosharedmemorysharedobjectshellsideprojectsigactionsignalsimulationsirsocketsoftwaresoftwareengineersoftwareengineeringspecaccelspeccpusquidstellarsqlstorysystemsystemsoftwaretensorflowthecleancoderthread-safetimestackingtimewarpingtopcommandtputraditionalchineseunixvgg16visaweatherbotwebwebworkerwindowsieee754交大觀察與心得交大課程交大資工所來做個網路瀏覽器吧!傳染病全球集思論壇公共衛生公司函式助教反向動力法台大台大網媒所台大觀察與心得國網中心基本素養大學大學生活大氣女友學習指南安琪兒專案工作工作環境布朗運動平行化平行程式必修課悅讀源碼想法接觸通知系統推甄故事故宮效能分析新年新希望時間扭曲法校系選擇條件判斷模擬機率檔案讀寫正向動力法氣象喵氣象機器人源始碼演算法瀏覽器物件物理獎學金玉山培育傑出人才獎學金玉山文教生機省思研究所碩士科學科學班科展程式程式設計入門筆記簽證米蘭米蘭理工米蘭理工交換教戰手冊紅黑樹美術社義大利自序自然語言處理臺灣金融科技公司藝術資工資訊工程軟體工程軟體工程師迴圈鐵人賽開源陣列隨筆電腦動畫電腦動畫與特效電腦視覺面試高中
延伸文章資訊
- 1Tensorflow-GPU 環境配置 - iT 邦幫忙
作為CUDA 的一個深度學習加速庫, cuDNN 的版本必須配合CUDA 才能正常運行。下面我們將演示如何正確的安裝cuDNN 。 首先,前往NVIDIA DEVELOPER 官網,點擊下載cu...
- 2CUDA 總複習:CUDA 入門 - NVIDIA 台灣官方部落格-
NVIDIA 發明了CUDA 程式設計模型並解決這些挑戰。CUDA 是用於圖形處理單元(graphical ... 透過CUDA,您可以利用GPU 的運算能力加速應用程式。
- 3CUDA GPU 設定 - 軟體兄弟
CUDA GPU 設定,2020年10月27日— 科學和商業的進步使對運算資源和工作負載加速的需求變得永無止境。平行程式設計是一種深奧的方式,讓開發人員能加快應用程式。
- 4顯示卡設定解決遊戲不順(Intel+Nvidia) | HP®顧客支援
3. Intel + NVIDIA 雙顯示卡切換設定。 △桌面空白處按下滑鼠右鍵,打開“NVIDIA控制面板,”左側選擇“管理3D設定”,“慣用的 ...
- 5Win10 安裝CUDA、cuDNN 教學. 上一篇有介紹如何 ... - Medium
首先,查看電腦的NVIDIA 版本是否支援CUDA 以及能夠配置的CUDA 版本 ... 接著在本機右鍵-> 內容-> 進階系統設定-> 進階-> 環境變數.