2016年4月9日 星期六

安裝 OpenCL 程式框架 (二):NVIDIA GPU

NVIDIA 在 2007 年 2 月 15 日釋出 CUDA 的 SDK,提供一個開發程式的框架,可使用 GPU 內大量的處理單元以加速程式的執行。在 2008 年 12 月 9 日,NVIDIA 也宣稱將支援 OpenCL 程式框架 。所以,符合 OpenCL 框架所開發的平行運算程式,將可以在多種不同的平台執行。
  將 NVIDIA 的 OpenCL 程式框架安裝過程,記錄、整理如下:

一、下載驅動程式及安裝準備

NVIDIA 的 OpenCL 程式框架是透過繪圖顯示的驅動程式來支援的,由官方的下載點下載適當的驅動程式。以目前最新版為例,也可以用這個命令下載,
[SiB@Core-i7 Temp]$ wget http://tw.download.nvidia.com/XFree86/Linux-x86_64/361.42/NVIDIA-Linux-x86_64-361.42.run
安裝的過程中需要編譯,因此這些套件要先安裝,
[root@Core-i7 ~]# dnf install kernel-devel gcc dkms
有關這些套件的詳細說明,請參考之前的發文〝安裝 Fedora 「編譯『核心模組』」所需套件〞。

二、安裝 OpenCL 驅動程式

有些電腦系統有兩套顯示輸出的控制晶片,尤其是筆記型電腦,為了提供更好的顯示效果,除了系統控制晶片所提供的顯示控制晶片外,也多有安裝額外的『獨立顯示』晶片(依使用需求,切換控制晶片)。因此,這步驟的安裝過程,會因為用途而有所不同。

NVIDIA 晶片即為畫面顯示的控制器

如果 Linux 系統的『圖形顯示』是由 NVIDIA 的繪圖晶片提供,則要安裝完整的驅動程式。最好是重新開機,並在 Linux 的『開機版本選單』畫面,選擇最新版本(反白),在以『linux16 . . .』為首的那一列命令的最後加入『nomodeset 3』,
linux16 /vmlinuz-4.4.6-300.fc23.x86_64 root=UUID=f942d72b-42ea-429d-84be-c109cd80e80e ro rhgb quiet LANG=zh_TW.UTF-8 nomodeset 3
上例中的『nomodeset』是強制 Linux 不載入任何顯示卡的驅動程式,而『3』則強制 Linux 以『文字模式』開機。
  在開機後,以『root』登入系統,並在「終端機」中下安裝命令。
[root@Core-i7 ~]# sh /home/SiB/Temp/NVIDIA-Linux-x86_64-361.42.run --disable-nouveau
上例中各項參數之說明如下表:
參  數功  能
--disable-nouveau在安裝過程中,會增加『不載入 Linux 系統附的 NVIDIA 驅動程式 nouveau』的設定。
--kernel-name=4.4.6-300.fc23.x86_64安裝依特定 Linux 核心編譯的驅動程式,若此版本核時即為目前執行中,此參數可省略。
依畫面指示操作(:除了第一個問題按【Accept】外,其餘大多按預設選項即可)。

NVIDIA 晶片不用於畫面顯示,只用於『運算加速

若平常的工作並不需要複雜的顯示輸出,使用系統控制晶片組所提供的顯示功能,多可符合一般的作業所需,也比較省電(:筆電的電源很珍貴)。常用於『獨立顯示』的 NVIDIA 晶片,既然不用於顯示,將它轉換為『運算加速』功能也不錯。
  由於 NVIDIA 晶片並不用於顯示用,因此安裝過程比較簡單,不需要重新開機,只要在「終端機」中下安裝命令即可。
[root@Core-i7 ~]# sh /home/SiB/Temp/NVIDIA-Linux-x86_64-361.42.run --disable-nouveau --no-opengl-files --no-x-check --kernel-name=4.4.6-300.fc23.x86_64
若只更新版本,可以不需再重覆『設定 nouveau 啟動時不載入』。
[root@Core-i7 ~]# sh /home/SiB/Temp/NVIDIA-Linux-x86_64-361.42.run --no-opengl-files --no-x-check --kernel-name=4.4.6-300.fc23.x86_64
上例中各項參數之說明如下表:
參  數功  能
--disable-nouveau在安裝過程中,會增加『不載入 Linux 系統附的 NVIDIA 驅動程式 nouveau』的設定。更新驅動程式時,不需重覆設定。
--no-opengl-files既然 NVIDIA 晶片不用於顯示輸出,就不用安裝 OpenGL。
--no-x-check同上,NVIDIA 晶片不用於顯示輸出,也不用檢查 x-Window 是否執行中。
--kernel-name=4.4.6-300.fc23.x86_64安裝依特定 Linux 核心編譯的驅動程式,若此版本核心即為目前執行中,此參數可省略。
--no-nouveau-check不檢查 Linux 系統附的 NVIDIA 驅動程式 nouveau 目前是否執行中;Linux 系統會自動載入可辨認的硬體驅動程式,儘管最後不使用它。安裝 NVIDIA 原廠驅動程式時,若檢查出有 nouveau 正在執行中,將會中斷安裝程序。

三、查詢 OpenCL

安裝後,就用 CLInfo 查詢安裝結果,
[SiB@Core-i7 ~]# clinfo
Number of platforms1
 Platform NameNVIDIA CUDA
Platform VendorNVIDIA Corporation
Platform VersionOpenCL 1.2 CUDA 8.0.20
Platform ProfileFULL_PROFILE
Platform Extensionscl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts
Platform Extensions function suffixNV

Platform NameNVIDIA CUDA
Number of devices1
Device NameGeForce GTX 950M
Device VendorNVIDIA Corporation
Device Vendor ID0x10de
Device VersionOpenCL 1.2 CUDA
Driver Version361.42
Device OpenCL C VersionOpenCL C 1.2
Device TypeGPU
Device ProfileFULL_PROFILE
Device Topology (NV)PCI-E, 01:00.0
Max compute units5
Max clock frequency1124MHz
 ·  ·  ·  ·  ·  ·
Address bits64, Little-Endian
 ·  ·  ·  ·  ·  ·
NULL platform behavior
clGetPlatformInfo(NULL,  ...)No platform
 ·  ·  ·  ·  ·  ·
clCreateContextFromType( ...)No platform
由查詢結果可知,NVIDIA 的 OpenCL 程式框架已經安裝成功了。NVIDIA 的圖形顯示晶片為系統增加了 5 個運算單元,而這些運算單元只能透過 OpenCL 來使用它們。

後記:


已測試版本:

  • Fedora 23 + NVIDIA GeForce GTX 950M (361.42)
  • Fedora 23 + NVIDIA GeForce GT 520MX (361.42)
  • Fedora 21 + NVIDIA GeForce 7300 GT (304.131) : CLInfo 測試未成功。
    • 可能兩張 NVIDIA 顯卡驅動程式衝突所致,一張用 nouveau,一張是 nvidia。

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)