Ubuntu16.04 + CUDA8.0 + OpenCL + Nvidia 安裝配置和問題總結
1. 安裝Nvidia的Driver(推薦配置時在其它移動裝置參考本文章,部分步驟會關閉圖形處理器,進入純命令列介面,如果沒有在別的地方開啟或是記住下面的步驟則無法進行下去)
The input tool was broken, so just use English.
I try to use runfile to install, but failed. There are some X file problem I could not solve. So I find other writing and use PPA.ubuntu16.04下NVIDIA GTX965M顯示卡驅動PPA安裝 - CSDN部落格
曾經嘗試使用.run檔案按照以下步驟安裝。提示安裝成功,nvidia-smi也有輸出,但是沒有正在執行中的執行緒,並且nvidia-settings語句提示錯誤。錯誤提示有關X檔案的錯誤,嘗試解決這個問題但是失敗,導致整個圖形介面無法進入。因此改用PPA的方式進行安裝。
.run檔案安裝到官網選擇適合的版本,下載.run檔案。網上提供了三種方法安裝,參考連結提供在下文。由於CUDA驅動中包括了Nvidia的驅動,但是這種打包的下載有可能引發問題。因此在先安裝單獨Nvidia的驅動。
- 首先在官網中下載合適自己系統和GPU的驅動:官網驅動地址
如果不知道自己GPU的資訊可通過以下語句查詢
$ lspci | grep -i nvidia
- 禁用nouveau
開啟配置檔案
在最後一行新增$ sudo gedit /etc/modprobe.d/blacklist.conf
更新核心blacklist vga16fb blacklist nouveau blacklist rivafb blacklist rivatv blacklist nvidiafb
sudo update-initramfs -u
關機後重啟進入boot,在boot中將security設定為enable,開機之後輸入$ lsmod | grep nouveau
沒有輸出則關閉成功。
- 安裝驅動,這裡開始會關閉圖形介面。
禁用X服務
按Ctrl+Alt+F1進入命令列介面(按Ctrl+Alt+F7可退出)$ sudo service lightdm stop
給run檔案賦予執行許可權安裝,這裡選擇了不安裝OpenGL,否則會發生衝突。$ sudo chmod a+x NVIDIA-Linux-x86_64-384.98.run
重啟,驗證是否安裝成功:$ sudo ./NVIDIA-Linux-x86_64-384.98.run –no-opengl-files
$ nvidia-smi
PPA安裝:
首先也是要禁用nouveau,步驟同上。
新增Graphic Drivers PPA查詢合適的版本$ sudo add-apt-repository ppa:graphics-drivers/ppa $ sudo apt-get update
其中一個driver後面加上了recommend字樣,記住該版本,如下圖,推薦版本是390。$ ubuntu-drivers devices
按ctrl+alt+F1進入終端模式,此時會關閉圖形介面。安裝driver,後面的數字修改為相應的版本號。$ sudo service lightdm stop
重啟。$ sudo apt-get install nvidia-390
驗證是否安裝成功$ sudo reboot
$ nvidia-smi
出現以上則安裝成功。
檢視setting的情況:$ nvidia-settings
2. 安裝CUDA8.0
目前CUDA的最新版本是9.1,但是安裝之後編譯失敗,有說法是Ubuntu16.04不能夠支援到這麼高的版本。因此解除安裝了之後安裝了8.0
在官網中選擇需要的版本的對應的系統等下載run檔案:CDUA下載
執行run檔案
安裝的時候,會出現比較長的介紹,可以不停的按空格鍵到100%,或者直接按Ctrl+C跳過;$ sudo sh cuda_8.0.61_375.26_linux.run
下面的選項中遇到提示是否安裝nvidia ,選擇no,否則前面安裝的驅動會被覆蓋。其他的可以全部同意。
安裝完成後執行sample驗證
進入sample所在路徑,make,在這裡會編譯所有的樣例,時間較長,也可以進入單獨的樣例去make。
../NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release裡面存放了執行檔案,./filename執行即可。
這裡執行的是deviceQuery,出現以上結果即可。
3. 配置OpenCL
至此OpenCL配置完畢。利用gcc執行OpenCL程式碼。需要提前確認gcc可行。
在命令列輸入以上語句可檢視gcc版本,若沒有安裝則提示未安裝。安裝網上gcc的安裝配置安裝即可。$ gcc -v
輸入上面的語句執行測試程式碼test.cpp,定義輸出檔案為test,呼叫OpenCL庫。$ gcc test.cpp -o test -lOpenCL
看了很多網路的教程,有一些只簡單說明OpenCL已經被包含在CUDA裡面。但是在本臺電腦上僅安裝成功CUDA之後是無法直接執行OpenCL的,它的庫檔案沒有被連結出現以下兩種錯誤。
- 找不到-lOpenCL
OpenCL庫(libOpenCL.so)並不存在於/ usr / lib,即系統庫中,並且OpenCL的庫所在地址沒有被連結。因此我們需要查詢libOpenCL.so檔案所在位置,新增到系統查詢庫的配置檔案中去。
經查詢,libOpenCL.so檔案被下載到了/usr/local/cuda-8.0/lib64中。
此處將庫檔案所在路徑新增進去。此時普通使用者可能會引發許可權不夠的問題,可以通過進入root獲得許可權。若是初次進入root需要先設定密碼。$ sudo echo '/usr/local/cuda-8.0/lib64/' >> /etc/ld.so.conf
完成之後利用以下語句可登入進root,然後再寫ld.so.conf檔案。$ sudo passwd root
然後執行以下語句更新路徑,使修改生效。sudo -s -H
下一步是修改環境變數。$ sudo ldconfig
$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64/' >> ~/.bashrc $ source ~/.bashrc第一句是寫入配置檔案,第二句是使之永久生效。
若修改變數LD_LIBRARY_PATH不奏效,則用同樣的方法修改LIBRARY_PATH。
以上完成之後應該就不會再出現找不到-lOpenCL的問題了。- 找不到CL/cl.h
錯誤提示:fatal error: CL/cl.h: 沒有那個檔案或目錄
將OpenCL的include檔案拷貝到/usr/local/include資料夾下即可。
因為語句是在CL資料夾下的cl.h,因此連帶CL資料夾需要拷貝進去。
不配置到系統,利用動態連結的方法也可以連結。//$ sudo cp -r /home/karin/CL/* /usr/local/include $ sudo cp -r /home/karin/CL /usr/local/include
g++ -l /home/karin/opencl ....
參考連結: