让 OpenCL 工作

让 OpenCL 工作

我最近购买了一台配备英特尔 i5 第 7 代处理器的戴尔 Inspiron 3000 系列笔记本电脑。这台机器预装了 Windows 8,但作为 Ubuntu 的忠实粉丝,我在其上安装了 Ubuntu 16.04。

我需要在笔记本电脑上使用 OpenCL,为此我按照此线程中列出的步骤进行操作(OpenCL 在 Ubuntu 16.04、英特尔 Sandy Bridge CPU 上) 并安装了 PyOpenCL (顺便说一句,这个线程在我的工作站上运行良好,我的工作站有一台 Xeon 机器)

我使用了以下python脚本(https://github.com/benshope/PyOpenCL-Tutorial/blob/master/010_introspection.py)在我的笔记本电脑上获得此输出:

============================================================
OpenCL Platforms and Devices
============================================================
Platform - Name:  Intel Gen OCL Driver
Platform - Vendor:  Intel
Platform - Version:  OpenCL 1.2 beignet 1.1.1
Platform - Profile:  FULL_PROFILE
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)

我的工作站上的相同脚本给出:

============================================================
Platform - Name:  Intel(R) OpenCL
Platform - Vendor:  Intel(R) Corporation
Platform - Version:  OpenCL 2.0 LINUX
Platform - Profile:  FULL_PROFILE
--------------------------------------------------------
Device - Name:  Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
Device - Type:  CPU
Device - Max Clock Speed:  2200 Mhz
Device - Compute Units:  24
Device - Local Memory:  32 KB
Device - Constant Memory:  128 KB
Device - Global Memory: 31 GB
Device - Max Buffer/Image Size: 8013 MB
Device - Max Work Group Size: 8192

lspci 给我:

lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Device 5916 (rev 02)

(可能不相关的是,我还在笔记本电脑上安装了显卡驱动程序,而当我第一次尝试安装 OpenCL 时并没有这种情况)

基本上,我无法弄清楚哪种 OpenCL 格式适合我的硬件。

任何建议都非常好:)

答案1

好吧,我明白了。而且,这不是火箭科学 :/

链接 (OpenCL 在 Ubuntu 16.04、英特尔 Sandy Bridge CPU 上) 我之前遵循的方法是完美的,因为我当时在一台 Xeon 机器上工作。但它在我的笔记本电脑上却行不通(大吃一惊!)因为它显然不是一台 Xeon 机器。

我需要使用开发工具包填写表格后,您将获得适用于 Linux 的下载。填写表格后,您将被重定向到一个页面,您可以在该页面上选择产品和版本,并下载 .gz 文件或 .tgz 文件。.tgz 适用于约克托操作系统,但在安装过程中您可以运行它而不会损失 Ubuntu 16.04 的通用性。

安装相当简单,因为有一个非常方便的可执行 install.sh shell 脚本可供使用。

要遵循的一般步骤如下:

  1. 解压文件夹

    tar -xzvf intel_sdk_for_opencl_2017_yocto_7.0.0.2567_x64.tgz
    
  2. 运行 shell 脚本

    ./install.sh
    
  3. 按照说明进行操作

然后 Python 脚本的输出显示:

============================================================
OpenCL Platforms and Devices
============================================================
Platform - Name:  Intel Gen OCL Driver
Platform - Vendor:  Intel
Platform - Version:  OpenCL 1.2 beignet 1.1.1
Platform - Profile:  FULL_PROFILE
beignet-opencl-icd: no supported GPU found, this is probably the wrong opencl-icd package for this hardware
(If you have multiple ICDs installed and OpenCL works, you can ignore this message)
============================================================
Platform - Name:  Experimental OpenCL 2.1 CPU Only Platform
Platform - Vendor:  Intel(R) Corporation
Platform - Version:  OpenCL 2.1 LINUX
Platform - Profile:  FULL_PROFILE
    --------------------------------------------------------
    Device - Name:  Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
    Device - Type:  CPU
    Device - Max Clock Speed:  2500 Mhz
    Device - Compute Units:  4
    Device - Local Memory:  32 KB
    Device - Constant Memory:  128 KB
    Device - Global Memory: 8 GB
    Device - Max Buffer/Image Size: 1962 MB
    Device - Max Work Group Size: 8192
============================================================
Platform - Name:  Intel(R) OpenCL
Platform - Vendor:  Intel(R) Corporation
Platform - Version:  OpenCL 2.0 
Platform - Profile:  FULL_PROFILE
    --------------------------------------------------------
    Device - Name:  Intel(R) HD Graphics
    Device - Type:  GPU
    Device - Max Clock Speed:  1000 Mhz
    Device - Compute Units:  23
    Device - Local Memory:  64 KB
    Device - Constant Memory:  3209904 KB
    Device - Global Memory: 6 GB
    Device - Max Buffer/Image Size: 3135 MB
    Device - Max Work Group Size: 256
    --------------------------------------------------------
    Device - Name:  Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
    Device - Type:  CPU
    Device - Max Clock Speed:  2500 Mhz
    Device - Compute Units:  4
    Device - Local Memory:  32 KB
    Device - Constant Memory:  128 KB
    Device - Global Memory: 8 GB
    Device - Max Buffer/Image Size: 1962 MB
    Device - Max Work Group Size: 8192

答案2

在花了 16 个小时让 OpenCL 在 Windows 和 Linux 上运行之后,我意识到OpenCL 在 Ubuntu 16.04、英特尔 Sandy Bridge CPU 上是最接近使其工作的方法。

对我来说不起作用的是驱动程序的安装和配置,之后我尝试了更多的地方。是的,版本不同。我尽可能考虑到这一点。但是,这是我第一次安装库和链接。所以,我希望这对像我这样的新手有所帮助。我只介绍了英特尔 GPU 的部分

让 OpenCL 工作

sudo apt install clinfo ocl-icd-opencl-dev opencl-headers

检查 clinfo 的输出

clinfo | grep "GPU"

检查是否包含 GPU。如果没有类似

Device Type                            GPU

在输出中,则 GPU 尚不支持 OpenCL。在这种情况下,请尝试安装 beignet-opencl-icd、mesa-opencl-icd 等 - 可能一次一个。继续检查clinfo每个之后的输出。如果它包含上述行,则您已完成。

安装 Intel OpenCL 驱动程序

如果这不起作用,请从以下位置安装英特尔的 opencl 驱动程序https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_driver自动安装需要大量的时间和空间。不过还有另一种方法。解压存档。安装 alien,如果你还没有:sudo apt install alien

cd进入解压后的文件夹,然后运行

sudo alien -i *.rpm

再次检查“clinfo”的输出。它应该有一个 GPU。clinfo | grep “GPU”

此时,您已经拥有一个可运行的 OpenCL 实现。

然而,在尝试示例时(来自这里),我发现大多数示例都可以与英特尔的库一起使用(见下文),有些则不能与发行版安装的库一起使用(上面安装的)。 (我猜,这是因为涉及的 openCL 版本不同。)

安装英特尔的 OpenCL SDK

从这里安装适用于 Linux 的英特尔 OpenCL SDK(免费注册后)适用于 Linux 的英特尔 OpenCL SDK。只需运行安装程序脚本 - 无需处理使其与 Eclipse 配合使用的部分。您可能需要

sudo apt install dkms

至此,您应该已经准备好所有东西了。

如果你是新手(像我一样)

了解 C 程序的编译过程:首先生成目标文件,然后链接这些文件。参见https://stackoverflow.com/questions/31179452/what-exactly-is-in-aoa-so-file

在 IDE 中(我不知道终端),处理库有两个部分。首先是包含头文件的路径。其次是将库文件包含在项目中。

我正在使用 CodeBlocks。因此,Linux 之所以受欢迎是因为,这个答案的第一个命令将文件发送到它们想要的位置。头文件位于 /usr/include 目录中的“CL”文件夹下。库(在我的情况下)位于 /usr/lib/x86_64-linux-gnu 下,名为“libOpenCL.so”。您无需执行任何其他操作即可使用它们。您可以直接开始编码 -

#include<CL/cl.h>

对于 Intel OpenCL SDK,头文件位于 /opt/intel/opencl-sdk/include 下;而库文件位于 安装后,请检查 /opt/intel/opencl 的内容。这些也包含库。但是,其中一个库文件给出了语法错误(libclang.so)。下载 Intel OpenCL SDK 主要是因为它的头文件位于:/opt/intel/opencl-sdk/lib64 - 只有 .so 文件。(我发现 libclang.so 文件给出了语法错误。请在运行程序时检查。)

的情况下代码块,要使用这些 Intel 文件(非默认文件)- 创建一个新项目。右键单击管理器子窗口中的项目。转到“构建选项”。在左侧窗格中选择项目名称 - 这样,设置将应用于发布版本和调试版本。在链接器设置 -> 链接库中,单击“添加”。在这里,添加库(不是头文件;所有 .so 文件):在 /opt/intel/opencl-sdk/lib64。在“搜索目录”选项卡中的“编译器”下,添加 /opt/intel/opencl/include(或您的头文件所在的任何位置)。

的情况下首先,安装 CDT。然后,创建项目后,在 Project -> Properties -> C/C++ Build -> Settings -> Tool Settings 下,(1) 在 GCC C++ Compiler 下,includes,添加头文件目录。(2) 在 GCC C++ Linker 下,在 Libraries 部分,添加 OpenCL,在下半部分,在 Library Path 部分,添加路径。在我的例子中,为了使它工作,我在第一部分需要 /opt/intel/opencl/include,在第二部分需要 /opt/intel/opencl/SDK/lib64。Codeblocks 中的默认设置不起作用。也许是因为版本问题,或者我还没有正确尝试 - Eclipse 对我来说很新。

完毕。

以下内容应运行并编译:https://github.com/bgaster/opencl-book-sa​​mples/blob/master/src/Chapter_3/OpenCLInfo/OpenCLInfo.cpp

致谢:互联网

相关内容