我正在开发Linux& CPP(使用Eclipse SDK)。 我是OpenCL(GPU编程)的新手 我想在GPU上执行我的一些代码(用openCL重写一些函数并在GPU上运行它们)。
我有点迷惑 - 如果我要编写一些代码(.cl文件),我怎样才能从我的cpp应用程序中调用它们? 我没有看到任何这种需要的例子。
答案 0 :(得分:1)
如果你想使用opencl,有两部分代码。
一个。内核代码。 由1到多个内核函数组成,用于在设备上执行计算。
B中。主机代码 普通的c / c ++代码。这里发生了什么:
选择要在其上计算内核的设备(gpu / cpu / igpu / xeon phi / ...) 在opencl中,你有一组可以包含几个不同设备的平台。所以你选择一个平台和一个设备。 例: 平台:intel cpu + gpu opencl 1.2 device:cpu OR IGPU
构建你的内核
const char * code = load_program_source(“kernel.cl”); cl_program program = clCreateProgramWithSource(context,1,(const char **)& code,NULL,& err); errWrapper(“clCreateProgramWithSource”,错误);
为内存传输到设备创建缓冲区:
cl_mem devInput1 = clCreateBuffer(context,CL_MEM_READ_ONLY,variable1 * sizeof(int),NULL,& err);
转移到设备
errWrapper(“setKernel”,clSetKernelArg(countKeyCardinality,0,sizeof(cl_mem),& devInput1));
启动内核
errWrapper(“clEnqueueNDRangeKernel”,clEnqueueNDRangeKernel(command_queue,kernel_function1,1,NULL,&taskize,NULL,0,NULL,NULL));
等待终止 clFinish(command_queue)
从设备中获取结果 使用
clEnqueueReadBuffer
使用opencl计算创建的结果继续执行c ++代码。
这就是在代码中使用opencl的基本思路。 最好开始做一个完整的opencl教程。 (只是google它,你将被淹没在opencl教程中)
你应该熟悉的概念: opencl host api 命令队列 内核参数。 工作组 当地规模 本地记忆 全球记忆 cl_mem对象
调试opencl是可能的,但很痛苦。我建议用NORMAL C Code进行调试,如果有效的话,将它移植到opencl。
所有命令的主要来源是官方API文档,可在此处找到:opencl 1.2 api
编辑:您不需要特殊的IDE来编写opencl代码。