2017年12月10日 星期日

安裝 OpenCL 程式框架 (六):Intel GPU 和 CPU 並用 (OpenCL 2.0)

Intel 提供 Linux 的 OpenCL 2.0 GPU/CPU 驅動程式,不過只限在第五~七代的 Core 處理器才可以用,當然得試試看。網頁上除了提供 OpenCL 驅動程式外,也有 OpenCL SDK 可下載。不過,因為想與其它支援 OpenCL 的顯示卡混用,就只安裝驅動程式。

一、下載安裝檔,並解壓縮

Intel 的官方網頁下載 OpenCL 2.0 驅動程式,檔案名稱為 SRB5.0_linux64.zip。以 unzip 解壓縮到 SRB5.0_linux64 這個目錄,
[SiB@A550V Temp]$ unzip -d SRB5.0_linux64 SRB5.0_linux64.zip
在 SRB5.0_linux64 目錄中,可以看到這些檔案,
[SiB@A550V Temp]$ ls -1 SRB5.0_linux64
intel-opencl-cpu-r5.0-63503.x86_64.rpm
intel-opencl-cpu-r5.0-63503.x86_64.tar.xz
intel-opencl-cpu-r5.0-63503.x86_64.tar.xz.sig
intel-opencl-devel-r5.0-63503.x86_64.rpm
intel-opencl-devel-r5.0-63503.x86_64.tar.xz
intel-opencl-devel-r5.0-63503.x86_64.tar.xz.sig
intel-opencl-r5.0-63503.x86_64.rpm
intel-opencl-r5.0-63503.x86_64.tar.xz
intel-opencl-r5.0-63503.x86_64.tar.xz.sig
vpg_ocl_linux_rpmdeb.public
其中,以紅色標註的兩個檔案,就是 OpenCL 2.0 驅動程式,分別為 CPU 及 GPU 使用。

二、安裝 OpenCL 2.0 驅動程式

接下來就是安裝驅動程式,要先安裝 GPU 的驅動程式
[root@A550V ~]# dnf install /home/SiB/Temp/SRB5.0_linux64/intel-opencl-r5.0-63503.x86_64.rpm
若只想使用 GPU 來跑 OpenCL,到這個步驟就可以了。也想使用 CPU 來執行 OpenCL 就要再安裝 CPU 的驅動程式,
[root@A550V ~]# dnf install /home/SiB/Temp/SRB5.0_linux64/intel-opencl-cpu-r5.0-63503.x86_64.rpm
接著,測試一下電腦上所有的 OpenCL 是否都成功安裝,並可執行運算。
[SiB@A550V ~]$ ./Hello_All_OpenCL
There are 2 platforms in this system.
1.Intel(R) OpenCL, OpenCL 2.0 , 2 devices.
    1-1.[GPU] Intel(R) HD Graphics, r5.0.63503, 24 Compute Units, 1050 MHz,
            OpenCL 2.0 , OpenCL C 2.0 (2.0), 64-bit Little-Endian
            Computed '1000000/1000000' correct values!  (  0.016927 us)
    1-2.[CPU] Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 1.2.0.475, 8 Compute Units, 2600 MHz,
            OpenCL 2.0 (Build 475), OpenCL C 2.0 (2.0), 64-bit Little-Endian
            Computed '1000000/1000000' correct values!  (  0.013356 us)
2.NVIDIA CUDA, OpenCL 1.2 CUDA 9.0.130, 1 device.
    2-1.[GPU] GeForce GTX 950M, 384.59, 5 Compute Units, 928 MHz,
            OpenCL 1.2 CUDA, OpenCL C 1.2 (1.2), 64-bit Little-Endian
            Computed '1000000/1000000' correct values!  (  0.223919 us)
由上面的結果可以看到,電腦中有兩個 OpenCL 平台,分別是 Intel 及 NVIDIA。而在 Intel 平台上又有兩個 OpenCL 裝置,分別是 GPU (24 個計算單元) 及 CPU (8 個計算單元)。

三、設定只使用 Intel CPU 執行 OpenCL 運算

有時在背景執行 OpenCL 運算時,也繼續在前景使用其它程式。這時,若圖形化使用者介面(GUI)是使用 Intel 顯示晶片,畫面就會『卡卡』的。將 Intel GPU 排除在 OpenCL 的運算資源就可以免去這個問題。將 /etc/OpenCL/vendors/ 目錄中,名為 intel.icd 這個檔案內容改為
/opt/intel/opencl/libintelocl.so
就可以了。再測試一次 OpenCL 執行狀況
[SiB@A550V ~]# ./Hello_All_OpenCL
There are 2 platforms in this system.
1.Intel(R) OpenCL, OpenCL 2.0 LINUX, 1 device.
    1-1.[CPU] Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz, 1.2.0.475, 8 Compute Units, 2600 MHz,
            OpenCL 2.0 (Build 475), OpenCL C 2.0 (2.0), 64-bit Little-Endian
            Computed '1000000/1000000' correct values!  (  0.011879 us)
2.NVIDIA CUDA, OpenCL 1.2 CUDA 9.0.130, 1 device.
    2-1.[GPU] GeForce GTX 950M, 384.59, 5 Compute Units, 928 MHz,
            OpenCL 1.2 CUDA, OpenCL C 1.2 (1.2), 64-bit Little-Endian
            Computed '1000000/1000000' correct values!  (  0.217677 us)

四、方便切換 OpenCL 執行裝置的設定

每次都要改設定檔的內容也有些麻煩,筆者是在 root 的家目錄中放兩個檔案,分別是 intel-all 內容為
#!/bin/bash
echo "/opt/intel/opencl/libIntelOpenCL.so" > /etc/OpenCL/vendors/intel.icd
及 intel-cpu 內容為
#!/bin/bash
echo "/opt/intel/opencl/libintelocl.so" > /etc/OpenCL/vendors/intel.icd
另外,得將這個檔案設定為『可執行』,命令為
[root@A550V ~]# chmod 755 intel-all
[root@A550V ~]# chmod 755 intel-cpu
再用這兩個命令切換 OpenCL 的執行裝置
[root@A550V ~]# ./intel-all
[root@A550V ~]# ./intel-cpu
第一個命令是切換為使用 Intel GPU 及 CPU,而第二個命令是切換為只使用 CPU。

已測試版本:

  • Fedora: 26

沒有留言:

張貼留言

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