在OpenCl的在线编译中,我们必须...
program = clCreateProgramWithSource(context, 1, (const char **)&source_str, (const size_t *)&source_size, &ret);
Run Code Online (Sandbox Code Playgroud)
但是,对于离线创建opencl的程序。
program = clCreateProgramWithBinary(context, 1, &device_id, (const size_t *)&binary_size, (const unsigned char **)&binary_buf, &binary_status, &ret);
Run Code Online (Sandbox Code Playgroud)
其中binary_buf是...
fread(binary_buf, 1, MAX_BINARY_SIZE, fp);
Run Code Online (Sandbox Code Playgroud)
因此,在脱机编译中,我们可以跳过clBuildProgram步骤,从而使此步骤更快。(这种方法正确吗,我们可以一次又一次地重复使用该二进制文件来运行程序?)
所以,我的问题是如何创建opencl二进制文件,以便我可以跳过构建cl程序的步骤?
创建程序后,可以将clGetProgramInfo与CL_PROGRAM_BINARY_SIZES
和一起使用,然后CL_PROGRAM_BINARIES
将生成的二进制程序(上下文中的每个设备一个)存储到您提供的缓冲区中。然后,您可以将该二进制数据保存到磁盘以供以后运行。
并非所有设备都支持二进制文件,因此您需要检查CL_PROGRAM_BINARY_SIZES
结果(如果不支持二进制文件,则该设备的大小为零)。
为了节省将来的时间(例如在应用程序的未来运行中),可以将clCreateProgramWithBinary
其与返回的二进制文件一起使用。但是,您将永远只想使用完全相同的硬件来执行此操作。即使图形驱动程序针对相同的硬件进行了更改,您仍可能希望丢弃二进制文件并进行重建,因为新驱动程序中的OpenCL编译器可能会修正错误和/或改善性能。
归档时间: |
|
查看次数: |
1321 次 |
最近记录: |