我在amd平台的opencl程序中观察到我们需要两次构建程序.一旦使用clBuildProgram ...(); 当我们构建整个代码时.为什么我们这样做两次?
小智 10
在OpenCL主机代码编译和内核代码编译是两个单独的步骤.
当你编译你所指的整个代码时,你基本上只是编译主机代码,即编排和控制OpenCL内核执行的代码.
将在支持OpenCL的设备(CPU,GPU,DSP,FPGA,加速器......)上执行的内核代码有两个主要的编译选项:
program
传递给对象clBuildProgram
与clCreateProgramWithSource
.然后,主机代码可以在运行时使用在线编译器来编译内核,以获得要在其上运行内核的OpenCL功能设备的所需体系结构.这样做的好处是您不需要事先知道(在创建主机程序时)OpenCL设备的架构(Intel,AMD,Nvidia,...).您可能甚至没有该架构的编译器.缺点是你的内核源代码是可见的,如果你有嵌入有价值的IP,这是不可取的.program
传递给对象clBuildProgram
与clCreateProgramWithBinary
.您可能还想查看SPIR规范,该规范结合了两种方法的优点,并允许您发布内核的中间表示,因此您不必拥有所有目标OpenCL编译器,也不必发送内核的普通源代码.
归档时间: |
|
查看次数: |
1000 次 |
最近记录: |