在OpenCl的在线编译中,我们要做...
program = clCreateProgramWithSource(context, 1, (const char **)&source_str, (const size_t *)&source_size, &ret);
但是,对于 opencl 程序的离线创建..
program = clCreateProgramWithBinary(context, 1, &device_id, (const size_t *)&binary_size, (const unsigned char **)&binary_buf, &binary_status, &ret);
其中 binary_buf 是...
fread(binary_buf, 1, MAX_BINARY_SIZE, fp);
因此,在离线编译中,我们可以跳过 clBuildProgram 这一步,这使得这一步更快。 (这种方法正确吗?我们可以一次又一次地重复使用该二进制文件来运行程序吗?)
所以,我的问题是如何创建 opencl 二进制文件,以便我可以跳过构建 cl 程序的步骤?
创建程序后,您可以使用cl获取节目信息 with CL_PROGRAM_BINARY_SIZES
进而CL_PROGRAM_BINARIES
,将生成的二进制程序(上下文中的每个设备一个)存储到您提供的缓冲区中。然后,您可以将此二进制数据保存到磁盘以供以后运行时使用。
并非所有设备都支持二进制文件,因此您需要检查CL_PROGRAM_BINARY_SIZES
结果(如果不支持二进制文件,它将返回该设备的零大小)。
为了节省将来的时间(例如在应用程序的未来运行中),您可以使用clCreateProgramWithBinary
与返回的二进制文件。但是,您只想使用完全相同的硬件来执行此操作。即使相同硬件的图形驱动程序发生更改,您也可能希望丢弃二进制文件并重新构建,因为新驱动程序中的 OpenCL 编译器可能具有错误修复和/或性能改进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)