1、Opencl c代码(编写的代码在Opencl设备上执行)称为程序,是称为kernel的函数的集合,kernel是被调度安排到设备上运行的执行单元。
2、Opencl程序运行时通过调用一系列API进行编译,编译系统针对具体的设备进行优化。
3、Opencl应用程序能够同时移植到AMD、NVIDIA以及Intel的设备上,则不需要对这些平台分别进行预编译。
4、Opencl软件仅连接到一个公共运行层(称之为ICD),所有平台特定的SDK通过一个动态库接口委托给某个厂商的运行时。新建kernel的步骤如下:
(1)、Opencl源代码以字符串的形式存储。如果代码保存在文件中,则必须读到内存并存储为字符串数组。
(2)、源代码通过调用clCreateProgramWithSource()转化为一个cl_program对象。
(3)、然后,使用clBuildProgram()在多个支持Opencl的设备上编译程序对象,如果出现编译错误,则报告错误信息。
5、程序准确的二进制表示因具体设备而异。在AMD运行时中,主要有两类设备:x86CPU和GPU。
(1)、对于x86CPU,clBuildProgram()会产生x86指令并且在该设备上执行。
(2)、对于GPU,首先新建AMD GPU中间语言以及表示单个work-item的高级中间语言,随之针对该架构进行实时编译,产生ISA(即具体指令架构上代码)