opencl1.1和1.2的区别: https://streamcomputing.eu/blog/2011-11-19/difference-between-opencl-1-2-and-1-1/ opencl编程框架: 1 主机编程:包括 a 基本的数据结构:获取平台、设备信息、创建上下文,命令队列,编译、打包内核,设置内核参数(包括内存分配:为作为主机和设备之间数据传输的基本载体的cl_mem进行分配内存,分配内存是通过存在的数据的结构创建内存对象,然后调用函数clSetKernelArg将这个内存对象发送给设备),然后用以clEnqueue开头的函数,通过命令队列向设备发送执行命令。执行后,如果有数据需要从设备端发送到主机端,则需要通过clEnqueueReadBuffer(如果是缓存对象的话)函数,将数据结果从设备端读取到主机端 b 数据传输和数据划分: 1 opencl的内存对象由cl_mem结构来表示,而内存对象的类型一般有两种:缓存对象、图像对象。如果处理的数据是像素点,对应的内存对象就是图像对象,初次之外的任何与图像无关的数据的都可以使用缓存对象来作为载体。 2 图像对象可以是2维或者3维,而缓存对象只能够以一维的形式来访问,但是clEnqueueNDRangeKernel函数可以不关心维度,比如,如果处理的对象是图像,只需要将其维度参数work_dims设置为2或3,而如果是缓存对象,维度的取值可以很随意,如果缓存对象所包含的数据是一个二维的矩阵,就需要将work_dims设置为2.只有clEnqueueNDRangeKernel函数可以在单个设备上进行数据划分,其允许在设备上的不同处理资源间分配、执行内核。 opencl中关于地址对齐: http://blog.csdn.net/10km/article/details/51187819