问题 如何在Ubuntu上编译OpenCL?


问题:需要什么标题和驱动程序,我将在哪里使用gcc / g ++在ubuntu上编译打开CL?


信息:有一段时间我现在一直在试图找出如何在我的桌面上安装开放式CL以及如果可能的话我的上网本。有一些教程我已经尝试但似乎没有工作。此外,他们都只是一步一步地解释为什么对于特定的IDE特定的,甚至更糟的是,所以你必须学习IDE才能做任何事情。

所以我的桌面上有一台NVIDA GX465,上网本中有集成显卡。我的首要任务当然是我的桌面,上网本只是为了便于开发(两者都运行ubuntu 11.04,一出现就会运行11.10)。有人可以告诉我究竟需要什么来获得它所以我可以实际编译代码并使其运行。如果你还能解释每件作品的作用,那么我就能理解它的重要性。


12382
2017-09-25 00:21


起源



答案:


要在Linux下编译和运行OpenCL代码,您需要做四件事:

1)支持OpenCL的NVIDIA驱动程序。与Ubuntu打包的驱动程序有点 旧的,但他们应该仍然工作得很好。除非你明确需要当前 驱动程序,你应该坚持使用Ubuntu打包的驱动程序。要清楚,这些是 通过受限制的驱动程序管理器安装相同的驱动OpenCL库包含驱动程序,因此只需运行OpenCL程序驱动程序即可。

2)CUDA工具包。这包括编译OpenCL代码所需的头文件。将其安装到默认位置。

3)GPU计算SDK(可选)。这包括各种NVIDIA特定支持工具以及OpenCL代码示例。

所有这三个项目都可以在 http://developer.nvidia.com/cuda-toolkit-40

4)OpenCL C ++绑定(可选)。奇怪的是,它们不包含在CUDA Toolkit中,但是如果您使用C ++,它们可以使您的代码更加可更新。你可以从中下载它们 http://www.khronos.org/registry/cl/api/1.1/cl.hpp,只需将它放在/ usr / local / cuda / include / CL中即可。

安装完成后,您需要执行一些步骤才能在NVIDIA SDK之外编译和运行OpenCL。

1)CUDA工具包将包含OpenCL头文件(在 http://www.khronos.org/registry/cl/),可能它们位于/ usr / local / cuda / include / CL目录中。要使这些头在系统范围内可用,您应该将此目录链接到/ usr / include /,以便可以将它们作为/ usr / include / CL / [headerfilename]进行访问。您可以添加/ usr / local / cuda / include而不是创建符号链接 C_INCLUDE_PATH 和 CPLUS_INCLUDE_PATH 环境变量,但这只会持续当前的会话。

2)确保/ usr / lib中存在OpenCL库(libOpenCL.so)。这应该由司机实施,所以你不应该做任何事情。

你已经准备好编写代码了。一定要包括 CL/cl.h (要么 CL/cl.hpp 如果您想在任何进行OpenCL API调用的C(++)程序中使用C ++版本的API。编译时,请确保链接到OpenCL库(传递gcc) -lOpenCL 旗)。

就您的上网本而言,集成显卡通常不支持OpenCL。理论上, AMD的APP加速 支持在CPU上运行OpenCL,但目前尚不清楚它是否真的有效。


9
2017-09-25 03:07



AMD APP适用于任何支持SSE3的CPU(不仅仅是AMD的),还有Intel OpenCL SDK(需要SSE4支持)。但是如果你的目标是GPU,它们几乎没用:CPU和GPU之间存在太多的架构差异,无法从内核CPU性能上得出任何结论。 - aland
@Virtuallinux我究竟将LD_LIBRARY_PATH设置为什么?它没有在安装过程中说明。我尝试将其设置为“/ usr / local / cuda / include / CL /”然后使用“gcc -lOpenCL cltest.c -o cltest”进行编译并得到“致命错误:OpenCL / opencl.h:没有这样的文件或目录:“有什么建议吗? - Narcolapser
@aland哦我不指望任何一种性能,但它真的不是性能问题,而是我总是拥有我的上网本,而不是总是在桌面上。因此,能够远离我的桌面工作只是方便,只需在这里和那里工作。但是当我完成测试并运行真实的程序时,是的,我不会在那里使用我的上网本,这将是我的桌面。 - Narcolapser
@Narcolapser编辑的答案要更清楚。 - aland
喜极而泣 自4月以来,我一直在尝试让openCL工作。自从2月2日以来,我一直想在我的显卡上进行编码。我很高兴我终于得到了一个编译程序。非常非常感谢你! (现在我明白我在做什么,而不只是跟着走了!) - Narcolapser


答案:


要在Linux下编译和运行OpenCL代码,您需要做四件事:

1)支持OpenCL的NVIDIA驱动程序。与Ubuntu打包的驱动程序有点 旧的,但他们应该仍然工作得很好。除非你明确需要当前 驱动程序,你应该坚持使用Ubuntu打包的驱动程序。要清楚,这些是 通过受限制的驱动程序管理器安装相同的驱动OpenCL库包含驱动程序,因此只需运行OpenCL程序驱动程序即可。

2)CUDA工具包。这包括编译OpenCL代码所需的头文件。将其安装到默认位置。

3)GPU计算SDK(可选)。这包括各种NVIDIA特定支持工具以及OpenCL代码示例。

所有这三个项目都可以在 http://developer.nvidia.com/cuda-toolkit-40

4)OpenCL C ++绑定(可选)。奇怪的是,它们不包含在CUDA Toolkit中,但是如果您使用C ++,它们可以使您的代码更加可更新。你可以从中下载它们 http://www.khronos.org/registry/cl/api/1.1/cl.hpp,只需将它放在/ usr / local / cuda / include / CL中即可。

安装完成后,您需要执行一些步骤才能在NVIDIA SDK之外编译和运行OpenCL。

1)CUDA工具包将包含OpenCL头文件(在 http://www.khronos.org/registry/cl/),可能它们位于/ usr / local / cuda / include / CL目录中。要使这些头在系统范围内可用,您应该将此目录链接到/ usr / include /,以便可以将它们作为/ usr / include / CL / [headerfilename]进行访问。您可以添加/ usr / local / cuda / include而不是创建符号链接 C_INCLUDE_PATH 和 CPLUS_INCLUDE_PATH 环境变量,但这只会持续当前的会话。

2)确保/ usr / lib中存在OpenCL库(libOpenCL.so)。这应该由司机实施,所以你不应该做任何事情。

你已经准备好编写代码了。一定要包括 CL/cl.h (要么 CL/cl.hpp 如果您想在任何进行OpenCL API调用的C(++)程序中使用C ++版本的API。编译时,请确保链接到OpenCL库(传递gcc) -lOpenCL 旗)。

就您的上网本而言,集成显卡通常不支持OpenCL。理论上, AMD的APP加速 支持在CPU上运行OpenCL,但目前尚不清楚它是否真的有效。


9
2017-09-25 03:07



AMD APP适用于任何支持SSE3的CPU(不仅仅是AMD的),还有Intel OpenCL SDK(需要SSE4支持)。但是如果你的目标是GPU,它们几乎没用:CPU和GPU之间存在太多的架构差异,无法从内核CPU性能上得出任何结论。 - aland
@Virtuallinux我究竟将LD_LIBRARY_PATH设置为什么?它没有在安装过程中说明。我尝试将其设置为“/ usr / local / cuda / include / CL /”然后使用“gcc -lOpenCL cltest.c -o cltest”进行编译并得到“致命错误:OpenCL / opencl.h:没有这样的文件或目录:“有什么建议吗? - Narcolapser
@aland哦我不指望任何一种性能,但它真的不是性能问题,而是我总是拥有我的上网本,而不是总是在桌面上。因此,能够远离我的桌面工作只是方便,只需在这里和那里工作。但是当我完成测试并运行真实的程序时,是的,我不会在那里使用我的上网本,这将是我的桌面。 - Narcolapser
@Narcolapser编辑的答案要更清楚。 - aland
喜极而泣 自4月以来,我一直在尝试让openCL工作。自从2月2日以来,我一直想在我的显卡上进行编码。我很高兴我终于得到了一个编译程序。非常非常感谢你! (现在我明白我在做什么,而不只是跟着走了!) - Narcolapser


Ubuntu 15.10采用NVIDIA NVS 5400M,联想T430

sudo apt-get install nvidia-352 nvidia-352-dev nvidia-prime nvidia-modprobe
sudo ln -s /usr/include/nvidia-352/GL /usr/local/include
sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/local/lib/libOpenCL.so

然后使用标题:

#include <CL/cl.h>

并编译:

gcc -o main main.c -lOpenCL

笔记:

我真的建议升级到15.10以使其工作:我以前从未管理过。


4
2017-11-02 17:21



丢失的符号链接就可以了。 - Gambhiro
是 nvidia-prime 和 nvidia-modprobe 必要?我在15.04,并且 nvidia-modprobe 导致下一次启动无法启动Xorg。 - Gambhiro
@Nyiti我不太了解它。没有modprobe,它最初工作,但突然停止工作一天。我现在正在运行它,上面的规格很好:尝试升级到15.10:最近该区域似乎取得了很大进展。 - Ciro Santilli 新疆改造中心 六四事件 法轮功
那是C而不是C ++ - Lennart Rolland
@LennartRolland肯定,但是C ++并不是非常优秀的请求(快速提到 g++),官方API是C.但如果你使用这个设置让C ++工作,请告诉我如何:-) - Ciro Santilli 新疆改造中心 六四事件 法轮功


我最近在linux上使用类似的过程进行干净的构建,使用NVIDIA卡设置OpenCL。

我采取的步骤:

1 - 安装NVIDIA驱动程序。

2 - 安装CUDA工具包 - (参考指南中的步骤,有很多方法可以做到,但我使用.deb安装程序,指南可以在这里找到: http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/

3 - 使用apt-get安装OpenCL头文件。命令: sudo apt-get install opencl-headers

使用 : CL/opencl.h header我能够使用gcc / g ++和标志:-lOpenCL编译C / C ++代码

解释步骤

1 - 自我解释

2 - CUDA工具包还安装OpenCL库(libOpencl.so)但不安装标题(至少不在我的系统上)

3 - 因此可以使用apt-get安装标头。头文件存储在/ usr / include / CL目录中


2
2018-06-28 10:22





在Ubuntu 16.04中对我有用的东西

我已经安装了openCL:

SandyBridge CPU:仅限cpu

IvyBridge GPU

Nvidia GTX 950

安装包

OpenCL的通用ubuntu包

基本安装 sudo apt install ocl-icd-libopencl1 sudo apt install opencl-headers sudo apt install clinfo

允许编译OpenCL代码的包(我认为1.2)

需要链接和编译 sudo apt install ocl-icd-opencl-dev

适用于Intel GT核心

在Intel GT,IvyBridge及更高版本上启用runnig openCL的软件包

sudo apt install beignet

对于SandyBridge Intel CPU和其他可能的用户

下载此文件 适用于Ubuntu *(64位)的英特尔酷睿和英特尔至强处理器的OpenCL运行时16.1.1 上 https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_SDK_release

安装包以将rpm转到deb sudo apt-get install -y rpm alien libnuma1

Untar下载文件 tar -xvf opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25.tgz cd opencl_runtime_16.1.1_x64_ubuntu_6.4.0.25/rpm/ 将rpm文件转为deb fakeroot alien --to-deb opencl-1.2-base-6.4.0.25-1.x86_64.rpm fakeroot alien --to-deb opencl-1.2-intel-cpu-6.4.0.25-1.x86_64.rpm 安装.deb包 sudo dpkg -i opencl-1.2-base_6.4.0.25-2_amd64.deb sudo dpkg -i opencl-1.2-intel-cpu_6.4.0.25-2_amd64.deb 触摸本地配置文件 sudo touch /etc/ld.so.conf.d/intelOpenCL.conf 打开文件 sudo vim /etc/ld.so.conf.d/intelOpenCL.conf 并添加该行

/opt/intel/opencl-1.2-6.4.0.25/lib64/clinfo

创建供应商目录并添加intel.icd sudo mkdir -p /etc/OpenCL/vendors sudo ln /opt/intel/opencl-1.2-6.4.0.25/etc/intel64.icd /etc/OpenCL/vendors/intel64.icd sudo ldconfig

测试这是否有效

clinfo应列出您的设备 下载此文件

https://codeload.github.com/hpc12/tools/tar.gz/master

运行此代码以确保一切正常 tar xzvf tools-master.tar.gz cd tools-master make ./print-devices ./cl-demo 1000 10 这应该打印好GOOD到底

对于Nvidia

安装nvidia驱动程序(我使用370),这应包括所有运行时驱动程序


1
2017-12-29 23:48