我最近购买了配备 Intel i5 第 7 代处理器的 Dell Inspiron 3000 系列笔记本电脑。这台机器预装了 Windows 8,但作为 Ubuntu 的忠实拥护者,我在上面安装了 Ubuntu 16.04。
我需要在我的笔记本电脑上使用 OpenCL,为此我遵循了此线程中列出的程序(OpenCL On ubuntu 16.04, Intel Sandy Bridge CPU)并安装了 PyOpenCL(顺便说一下,这个线程非常适合我在工作中的工作站有一台至强机)
我使用以下 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 格式适合我的硬件。
任何建议都会非常棒:)
好的,所以我想通了。此外,这不是火箭科学:/
我之前关注的链接(OpenCL On ubuntu 16.04, Intel Sandy Bridge CPU)非常完美,因为我在 Xeon 机器上工作。它不会在我的笔记本电脑上工作(大惊喜!),因为它显然不是 Xeon 机器。
我需要使用sdk for linux,填写表格后可用。填写表格后,您将被重定向到一个页面,您可以在其中选择产品和版本并下载 .gz 文件或 .tgz 文件。.tgz 用于Yocto操作系统,但在安装过程中,您可以运行它而不会丢失 Ubuntu 16.04 的通用性。
安装相当简单,因为有一个非常方便的可执行 install.sh shell 脚本可供使用。
要遵循的一般步骤是:
提取文件夹
运行外壳脚本
然后 python 脚本的输出显示:
在花费超过 16 个小时让 OpenCL 在 Windows 和 Linux 上运行后,我意识到OpenCL 在 ubuntu 16.04 上,Intel Sandy Bridge CPU是最接近它运行的。
对我不起作用的是驱动程序的安装和配置,之后我尝试了更多的地方。是的,版本不一样。我尽可能地考虑到了这一点。但是,这是我第一次安装库和链接。所以,我希望这对像我这样的新手有所帮助。我只介绍了英特尔 GPU 上的部分
让 OpenCL 工作
检查 clinfo 的输出
检查是否包含 GPU。如果没有像
在输出中,GPU 还不支持 OpenCL。在这种情况下,尝试安装 beignet-opencl-icd、mesa-opencl-icd 等 - 可能一次安装一个。继续检查
clinfo
每个之后的输出。如果它包括上面的行,你就完成了。安装英特尔 OpenCL 驱动程序
如果这不起作用,请从https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_driver安装英特尔的 opencl 驱动程序。自动安装需要大量的时间和空间。不过还有另一种方法。解压缩存档。安装外星人,如果你还没有: sudo apt install alien
cd
进入解压后的文件夹,运行再次检查“clinfo”的输出。它应该有一个 GPU。信息 | grep “GPU”
此时,您将拥有 OpenCL 的工作实现。
但是,在尝试示例时(来自此处),我发现大多数示例都适用于英特尔的库(见下文),有些示例不适用于随发行版安装的库(安装在上面)。(我猜,这是因为涉及到不同的 openCL 版本。)
安装英特尔的 OpenCL SDK
从此处Intel OpenCL SDK for Linux向他们安装 Intel OpenCL SDK for Linux(免费注册后)。只需运行安装程序脚本 - 无需处理使其与 Eclipse 和所有功能一起工作的部分。你可能需要
此时,您应该准备好所有东西。
如果你是新手(像我一样)
了解C程序的编译过程:首先生成目标文件,然后链接。请参阅https://stackoverflow.com/questions/31179452/what-exactly-is-in-aoa-so-file。
在 IDE(我不知道终端)中,处理库有两个部分。首先是包含头文件的路径。其次是在项目中包含库文件。
我正在使用代码块。所以,喜欢 Linux 的原因是,这个答案的第一个命令将文件发送到他们想要的地方。头文件位于“CL”文件夹下的 /usr/include 目录中。该库(在我的情况下)位于 /usr/lib/x86_64-linux-gnu 下,名为“libOpenCL.so”。你不需要做任何进一步的事情来使用它们。您可以开始编码 -
对于英特尔 OpenCL SDK,头文件位于 /opt/intel/opencl-sdk/include 下;而库文件在安装后,检查 /opt/intel/opencl 的内容以获取内容。这些也有图书馆。但是,其中一个库文件给了我一个语法错误(libclang.so)。英特尔 OpenCL SDK 的下载主要用于以下位置的头文件:/opt/intel/opencl-sdk/lib64 - 仅 .so 文件。(我发现 libclang.so 文件出现语法错误。在运行程序时检查。)
在CodeBlocks的情况下,要使用这些英特尔的文件 - 非默认文件 - 创建一个新项目。右键单击管理器子窗口中的项目。转到“构建选项”。在左侧窗格中选择项目名称 - 因此,设置将应用于发布和调试版本。在链接器设置 -> 链接库中,单击“添加”。在这里,添加库(不是头文件;所有的 .so 文件):在 /opt/intel/opencl-sdk/lib64。在“搜索目录”选项卡的“编译器”下,添加 /opt/intel/opencl/include(或您的头文件所在的任何位置)。
在Eclipse的情况下,首先,安装 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 在第二部分。代码块的默认设置不起作用。也许,它是由于版本,或者我没有正确尝试 - Eclipse 对我来说是新的。
完毕。
以下应该运行和编译:https ://github.com/bgaster/opencl-book-samples/blob/master/src/Chapter_3/OpenCLInfo/OpenCLInfo.cpp
学分:互联网