编译opencl程序可以存储为单独的二进制文件吗?

时间:2013-02-20 15:32:00

标签: python opencl gpgpu pyopencl amd-processor

我在单独的文件上有2个两个python脚本。第一个有opencl程序,对传递给它的图像执行一些图像处理并返回结果。第二个脚本从文件读取图像并调用第一个脚本将读取的图像作为参数传递,并获取由其返回的结果,用于进一步处理。

现在,我在文件夹中有100张图片。所以第二个脚本调用第一个脚本100次,每次调用第一个脚本时,编译opencl内核,这是绝对不必要的,因为所有图像都具有相同的格式和尺寸。有没有办法首先编译opencl内核一次,以二进制格式存储并在需要时调用它?当然,我可以将所有代码放在一个大文件中,编译一次内核并在循环中调用它100次,但为了方便起见我想要单独的文件。

设备:

CPU:AMD A8 APU,AMD Phenom 2 X4

GPU:AMD Radeon HD 7640G + 7670M双显卡,ATI Radeon HD5770

2 个答案:

答案 0 :(得分:2)

是的,您可以通过clGetProgramInfo()获取程序的已编译“二进制”并存储它。然后,您将使用clCreateProgramWithBinary()而不是clCreateProgramWithSource()加载程序。

但是你正在使用PyOpenCL automatically caches程序二进制文件。

答案 1 :(得分:1)

在NVIDIA上,二进制文件将采用ptx格式。 获得二进制大小 clGetProgramInfo()使用标志CL_PROGRAM_BINARY_SIZES

将二进制文件存储在ptx文件中。 clGetProgramInfo()使用标志CL_PROGRAM_BINARIES

clCreateProgramWithBinary(),将ptx文件作为输入。