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

Python 编译后的opencl程序可以存储为单独的二进制文件吗?,python,opencl,gpgpu,pyopencl,amd-processor,Python,Opencl,Gpgpu,Pyopencl,Amd Processor,我有两个单独文件上的python脚本。第一个是opencl程序,它对传递给它的图像执行一些图像处理并返回结果。第二个脚本从文件中读取图像,并调用将读取的图像作为参数传递的第一个脚本,并获取其返回的结果,用于进一步处理 现在,我的文件夹里有100张图片。因此,第二个脚本调用第一个脚本100次,每次调用第一个脚本时,都会编译opencl内核,这是绝对不必要的,因为所有图像都具有相同的格式和维度。有没有办法先编译一次opencl内核,以二进制格式存储它,并在需要时调用它?当然,我可以将所有代码放在一个

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

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

硬件:

CPU:AMD A8 APU,AMD Phenom 2 X4


GPU:AMD Radeon HD 7640G+7670M双图形,ATI Radeon HD5770

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


但是您使用的是PyOpenCL,该程序的二进制文件。

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

将二进制文件存储在ptx文件中。 使用标志CL_程序_二进制文件的clGetProgramInfo()


使用ptx文件作为输入的clCreateProgramWithBinary()。

你真的认为有两个脚本,其中一个编译并缓存OpenCL程序,比简单地将两个脚本重构为一个更方便吗?Python提供了模块支持,可以清晰地实现这一点。事实上,您是对的,将2个脚本组合成1个脚本很方便,但这两个脚本是10个脚本集合的一部分。我知道python的模块支持,并且正在使用它。我只是想知道是否有可能将opencl内核编译并存储为二进制文件,并在需要时加载它,而不是在每次需要时都在运行时编译它……如果这样做,编译仍然会发生。PTX只是在硬件上运行的最终代码的中间表示形式,驱动程序需要编译后才能使用。@user1822771抱歉,没有提供有关硬件的信息。我已经更新了我的帖子。我用的是AMD的硬件,它会一样吗?完全一样。此外,NVIDIA会自动缓存二进制文件。第一次编译比所有后续编译花费的时间都长。