如何在Ubuntu上编译OpenCL?

如何在Ubuntu上编译OpenCL?,ubuntu,compilation,opencl,Ubuntu,Compilation,Opencl,问:需要什么标题和驱动程序?在ubuntu上使用gcc/g++编译OpenCL时,我从哪里获得它们 信息:一段时间以来,我一直在摸索如何在我的桌面上安装OpenCL,如果可能的话,在我的上网本上安装OpenCL。我尝试过一些教程,但似乎都不管用。而且,它们都只是一步一步地给出,没有真正解释为什么是what,或者更糟糕的是,它们是特定于特定IDE的,所以您必须学习IDE才能做任何事情 所以我的桌面上有一个NVIDA GX465,上网本上有集成图形。我优先考虑的当然是我的台式机,上网本只是为了方便

问:需要什么标题和驱动程序?在ubuntu上使用gcc/g++编译OpenCL时,我从哪里获得它们


信息:一段时间以来,我一直在摸索如何在我的桌面上安装OpenCL,如果可能的话,在我的上网本上安装OpenCL。我尝试过一些教程,但似乎都不管用。而且,它们都只是一步一步地给出,没有真正解释为什么是what,或者更糟糕的是,它们是特定于特定IDE的,所以您必须学习IDE才能做任何事情


所以我的桌面上有一个NVIDA GX465,上网本上有集成图形。我优先考虑的当然是我的台式机,上网本只是为了方便开发(都运行Ubuntu11.04,一旦推出,就将运行11.10)。有人能给我解释一下获得它需要什么,这样我才能真正编译代码并让它运行吗。如果您还可以解释每一部分的作用,以便我理解它的重要性。

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

1) 支持OpenCL的NVIDIA驱动程序。Ubuntu附带的驱动程序有些复杂 老了,但它们应该还能正常工作。除非你有明确的电流需求 驱动程序,您应该坚持使用Ubuntu打包的驱动程序。明确地说,这些是 通过受限驱动程序管理器安装的驱动程序相同。OpenCL库附带了驱动程序,所以只运行OpenCL程序驱动程序就足够了

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

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

所有这三个项目都可以在网站上找到

< P > 4)OpenCL C++绑定(可选)。奇怪的是,它们不包含在CUDA工具包中,但是如果您使用C++,它们可以使代码更易于编辑。您可以从下载它们,然后将其放在/usr/local/cuda/include/CL您的桌面上

一旦安装这些,您就需要执行几个步骤,以便能够在英伟达SDK之外编译和运行OpenCL。 1) CUDA工具包将包含OpenCL头(在中列出),它们可能位于目录/usr/local/CUDA/include/CL中。要使这些头在系统范围内可用,您应该将此目录链接到/usr/include/,以便可以作为/usr/include/CL/[headerfilename]访问它们。您可以将/usr/local/cuda/include添加到环境变量中,而不是创建符号链接,但这只适用于当前会话

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

您已经准备好编写代码了。在任何OpenCL API调用的C(++)程序中,请确保包含<代码> Cl/Cl.H./Cu>(或<代码> Cl/Cl.Hpp<<代码> >如果您愿意使用C++版本的API)。编译时,确保链接到OpenCL库(传递
-lOpenCL
标志)


就您的上网本而言,集成图形通常不支持OpenCL。从理论上讲,它支持在CPU上运行OpenCL,但目前还不清楚它是否能正常工作。

我最近在linux上的一个干净构建上使用了类似的过程,使用NVIDIA卡设置OpenCL

我采取的步骤:

1安装英伟达驱动程序。< /P> 2-安装CUDA工具包-(按照指南中的步骤进行操作,有很多方法,但我使用了.deb安装程序,指南可在此处找到:)

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

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

步骤说明

1-不言自明

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


3-因此可以使用apt get安装收割台。头文件存储在/usr/include/CL目录中,并带有NVIDIA Quadro M1200、Lenovo P51

自从我上次尝试以来,软件集成变得更好了,所以我将进行更新

首先,至少在图形方面,我需要调整一些BIOS设置,如中所述,但不确定OpenCL是否需要:

然后,我找到并安装可用的最新驱动程序:

apt-cache search nvidia-driver
sudo apt install nvidia-driver-435 nvidia-opencl-dev
您还可以在以下目录下搜索:

software-properties-gtk
在“其他驱动程序”选项卡中

现在我可以编译并运行以下测试程序:

main.c

#include <assert.h>
#include <stdlib.h>
#include <stdio.h>

#define CL_TARGET_OPENCL_VERSION 220
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>

int main() {
    cl_command_queue command_queue;
    cl_context context;
    cl_device_id device;
    cl_int input = 1;
    cl_int kernel_result = 0;
    cl_kernel kernel;
    cl_mem buffer;
    cl_platform_id platform;
    cl_program program;
    const char *source = "__kernel void increment(int in, __global int* out) { out[0] = in + 1; }";

    clGetPlatformIDs(1, &platform, NULL);
    clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, &device, NULL);
    context = clCreateContext(NULL, 1, &device, NULL, NULL, NULL);
    command_queue = clCreateCommandQueue(context, device, 0, NULL);
    buffer = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR, sizeof(cl_int), NULL, NULL);
    program = clCreateProgramWithSource(context, 1, &source, NULL, NULL);
    clBuildProgram(program, 1, &device, "", NULL, NULL);
    kernel = clCreateKernel(program, "increment", NULL);
    clSetKernelArg(kernel, 0, sizeof(cl_int), &input);
    clSetKernelArg(kernel, 1, sizeof(cl_mem), &buffer);
    clEnqueueTask(command_queue, kernel, 0, NULL, NULL);
    clFlush(command_queue);
    clFinish(command_queue);
    clEnqueueReadBuffer(command_queue, buffer, CL_TRUE, 0, sizeof (cl_int), &kernel_result, 0, NULL, NULL);

    assert(kernel_result == 2);
    return EXIT_SUCCESS;
}
注:

  • 查找您的GPU型号:
  • 测试驾驶员是否正在工作:
  • CUDA的类似答案:
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>
注:

  • 请勿安装nvidia current软件包。它是旧的。
    apt缓存搜索nvidia
    并获取最新版本,或者使用
    软件属性gtk
    的“其他驱动程序”选项卡
我真的建议升级到15.10以实现这一点:我以前从未管理过。

在Ubuntu 16.04中对我有用的东西 我已将openCL安装在:

SandyBridge CPU:仅限CPU

IvyBridge GPU

英伟达GTX 950

安装数据包 OpenCL的通用ubuntu包 基本安装

sudo apt安装ocl-icd-LIBONECL1
sudoapt安装opencl头
sudoapt安装clinfo

允许编译OpenCL代码的包(我认为是1.2) 需要链接和编译

sudo apt安装ocl icd opencl dev

英特尔GT核心 支持在Intel GT、IvyBridge及更高版本上运行openCL的软件包

sudo安装beignet

适用于SandyBridge Intel CPU和其他可能的CPU 下载此文件 打开
#include <CL/cl.h>
gcc -o main main.c -lOpenCL