首页 / 软件开发 / C++ / GPGPU OpenCL编程步骤与简单实例
GPGPU OpenCL编程步骤与简单实例2014-04-03 博客园 旭东的博客1.OpenCL概念OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPUI、GPU或其他类型的处理器组成。 OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并 控制平台的API组成。OpenCL提供了两种层面的并行机制:任务并行与数据并行。2.OpenCL与CUDA的区别不同点:OpenCL是通用的异构平台编程语言,为了兼顾不同设备,使用繁琐。CUDA是nvidia公司发明的专门在其GPGPU上的编程的框架,使用简单,好入门。相同点:都是基于任务并行与数据并行。3.OpenCL的编程步骤(1)Discover and initialize the platforms调用两次clGetPlatformIDs函数,第一次获取可用的平台数量,第二次获取一个可用的平台。(2)Discover and initialize the devices调用两次clGetDeviceIDs函数,第一次获取可用的设备数量,第二次获取一个可用的设备。(3)Create a context(调用clCreateContext函数)上下文context可能会管理多个设备device。(4)Create a command queue(调用clCreateCommandQueue函数)一个设备device对应一个command queue。上下文conetxt将命令发送到设备对应的command queue,设备就可以执行命令队列里的命令。(5)Create device buffers(调用clCreateBuffer函数)Buffer中保存的是数据对象,就是设备执行程序需要的数据保存在其中。Buffer由上下文conetxt创建,这样上下文管理的多个设备就会共享Buffer中的数据。(6)Write host data to device buffers(调用clEnqueueWriteBuffer函数)(7)Create and compile the program创建程序对象,程序对象就代表你的程序源文件或者二进制代码数据。(8)Create the kernel(调用clCreateKernel函数)根据你的程序对象,生成kernel对象,表示设备程序的入口。(9)Set the kernel arguments(调用clSetKernelArg函数)(10)Configure the work-item structure(设置worksize)配置work-item的组织形式(维数,group组成等)(11)Enqueue the kernel for execution(调用clEnqueueNDRangeKernel函数)将kernel对象,以及 work-item参数放入命令队列中进行执行。(12)Read the output buffer back to the host(调用clEnqueueReadBuffer函数)(13)Release OpenCL resources(至此结束整个运行过程)