试图编译OpenCL 1.2示例

时间:2018-03-25 15:46:31

标签: c++ opencl ubuntu-16.04

系统:

Ryzen 1600,r9 270(radeon driver),ubuntu 16.04

我试图让我的编译器(gcc 5.4.1)用OpenCL编译一些C ++,但是不能让它找到头文件。

TEST.CPP:

    #include <CL/cl.hpp>
    int main(){}

我运行 g ++ test.cpp -lOpenCL 但是得到致命错误:CL / cl.hpp:没有这样的文件或目录

对于在StackOverflow上遇到相同问题的其他人,问题是未安装libOpenCL。但我有,我安装了所有这些包:

opencl-headers,ocl-icd-opencl-dev,ocl-icd-libopencl1,mesa-opencl-icd,clinfo,libclc-dev,libclc-amdgcn,libclcr600 (已搜索&#39 ; opencl&#39; in synaptic)

运行&#34;找到libOpenCL&#34;提供了许多条目,包括&#34; /usr/local/lib/libOpenCL.so"哪个应该被-lOpenCL标志??

选中

clinfo:

平台数量1   平台名称三叶草   平台供应商Mesa   平台版本OpenCL 1.1 Mesa 17.2.8   平台配置文件FULL_PROFILE   平台扩展cl_khr_icd   平台扩展功能后缀MESA

平台名称Clover 设备数量1   设备名称AMD PITCAIRN(DRM 2.50.0 / 4.13.0-37-generic,LLVM 5.0.0)   设备供应商AMD   设备供应商ID 0x1002   设备版本OpenCL 1.1 Mesa 17.2.8   驱动程序版本17.2.8   设备OpenCL C版本OpenCL C 1.1   设备类型GPU   设备配置文件FULL_PROFILE   最大计算单位20   最大时钟频率955MHz   最大工作项目尺寸3   最大工作项目大小256x256x256   最大工作组大小256   首选工作组大小为64   优选/原始载体大小
    char 16/16
    短8/8
    int 4/4
    长2/2     半0/0(不适用)     浮4/4
    双2/2(cl_khr_fp64)   半精度浮点支持(n / a)   单精度浮点支持(核心)     非正规数     Infinity和NANs是的     舍入到最近的是     回合零号     圆到无穷大     IEEE754-2008融合乘法 - 加号     支持在软件编号中模拟     正确的分割和sqrt操作No.   双精度浮点支持(cl_khr_fp64)     Denormals是的     Infinity和NANs是的     舍入到最近的是     圆到零是的     圆到无限是的     IEEE754-2008融合乘法加是     支持在软件编号中模拟     正确的分割和sqrt操作No.   地址位64,Little-Endian   全局内存大小2147483648(2GiB)   纠错支持号   最大内存分配1503238553(1.4GiB)   主机和设备的统一内存   任何数据类型的最小对齐128字节   基址的对齐1024位(128字节)   全局内存缓存类型无   图片支持号   本地内存类型本地   本地内存大小32768(32KiB)   最大恒定缓冲区大小1503238553(1.4GiB)   最大常数args 16   内核参数的最大大小1024   队列属性
    无序执行号     分析是的   分析计时器分辨率0ns   执行能力
    运行OpenCL内核是的     运行本机内核号   设备可用是   编译器可用是   设备扩展cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_fp64

NULL平台行为   clGetPlatformInfo(NULL,CL_PLATFORM_NAME,...)Clover   clGetDeviceIDs(NULL,CL_DEVICE_TYPE_ALL,...)成功[MESA]   clCreateContext(NULL,...)[默认]成功[MESA]   clCreateContextFromType(NULL,CL_DEVICE_TYPE_CPU)平台中找不到设备   clCreateContextFromType(NULL,CL_DEVICE_TYPE_GPU)成功(1)     平台名称三叶草     设备名称AMD PITCAIRN(DRM 2.50.0 / 4.13.0-37-generic,LLVM 5.0.0)   clCreateContextFromType(NULL,CL_DEVICE_TYPE_ACCELERATOR)平台中找不到设备   clCreateContextFromType(NULL,CL_DEVICE_TYPE_CUSTOM)在平台中找不到设备   clCreateContextFromType(NULL,CL_DEVICE_TYPE_ALL)成功(1)     平台名称三叶草     设备名称AMD PITCAIRN(DRM 2.50.0 / 4.13.0-37-generic,LLVM 5.0.0)

ICD加载程序属性   ICD加载程序名称OpenCL ICD Loader   ICD装载机供应商OCL Icd免费软件   ICD加载器版本2.2.8   ICD loader Profile OpenCL 1.2         注意:您的OpenCL库声明支持OpenCL 1.2,                 但它似乎也支持OpenCL 2.1。

2 个答案:

答案 0 :(得分:0)

您要从此处下载cl.hpp:https://www.khronos.org/registry/OpenCL/api/2.1/cl.hpp。 并确保您链接到OpenCL。

OpenCL是一种C风格的API,因此有许多用于处理指向整数的指针的函数。

cl.hpp是一种C ++样式的API,因此很多类都具有可读的方法来播放指向int的指针。

它们是分开的东西。

答案 1 :(得分:0)

在Linux上,您需要一个通常名为opencl-headers的软件包。另外请注意,不同的OpenCL版本不兼容,因此,如果您的示例是1.2,则需要确保标头也为1.2