我有使用OpenCL进行计算的程序,OpenCL代码很大,编译时间约为2分钟,CPU负载为100%。当然我保存了编译的二进制结果。第二次启动从二进制加载opencl程序。我可以在具有相同芯片但具有不同特性(RAM,CLOCK等)的另一个视频卡上使用相同的二进制文件吗?
答案 0 :(得分:4)
就OpenCL规范而言,您只能保证程序二进制文件可以在创建它的同一设备上重复使用。
实际上,许多OpenCL实现返回的二进制文件与同一供应商提供的更广泛的设备兼容。例如,当您从其实现请求二进制文件时,NVIDIA返回PTX,这是一个相当高级别的中间表示(即非本机指令)。这肯定与使用其创建的相同架构的其他设备兼容(例如,所有GK110设备或所有GF104设备),并且很可能也可以在一系列其他NVIDIA GPU架构中移植。其他供应商也返回各种类型的中间表示(通常基于LLVM IR),允许这种二进制兼容性。
所以,是的,您可以在具有相同架构的不同设备上重复使用二进制文件,但您真的只需要尝试并查看。您总是可以实现一个尝试使用二进制文件的方案,并且无法使用二进制代码。
将来,我们希望看到大量供应商支持最近批准的SPIR specification,这是OpenCL设备程序的平台可移植中间代表。这将允许您生成二进制文件,这些二进制文件不仅与单个供应商的体系结构中的设备兼容,而且还与许多其他支持SPIR的供应商的设备兼容。显然会有一些剩余的编译开销将SPIR降低到本机指令集,但与编译原始OpenCL C代码相比,这仍然会导致显着的加速。