2

我在单独的文件上有 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

4

2 回答 2

2

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

但是您使用的是 PyOpenCL,它会自动缓存程序二进制文件。

于 2013-02-20T16:59:00.907 回答
1

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

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

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

于 2013-02-22T06:02:58.307 回答