我正在使用OpenCL运行内核基准测试。我知道我可以使用来自OpenCL供应商的各种工具(即ioc64或poclcc)脱机编译内核。问题是,我获得的性能结果无法通过这些工具、OpenCL运行时开销或类似的工具来解释。
我希望看到由我的基准程序编译和执行的在线编译内核的组装。有什么办法吗?
我的方法是从cl::program或cl::kernel对象中获取这个程序集,但我没有找到任何方法。我感谢你的建议或解决方案。
发布于 2018-07-25 17:33:00
对于Intel,您可以使用clGetKernelInfo(...,CL_KERNEL_BINARY_PROGRAM_INTEL,...)直接获取内核ISA位。要拆卸这些位元,您可以获得最新的GEN反汇编程序,并按照描述的这里构建它。具体来说,请参阅关于Building an Intel GPU ISA Disassembler的部分。我已经有一段时间没有使用它了,但是Intel曾经做得更好(不是OpenCL用户)。这是一篇很好的文章,介绍了如何使用该工具来检查程序集。
对于NVidia,clGetProgramInfo(...CL_PROGRAM_BINARIES...)返回的“二进制”实际上返回ptx。这可能就足够了,但是如果您想要执行精确的着色器程序集,那么您实际上可以将ptx提供给ptxas,然后使用--dump-sass选项反汇编cuobjdump以获得最低级别的程序集。注意,我们只能猜测NVidia驱动程序使用的算法与ptxas相同,但这似乎是合乎逻辑的。
AMD可能有类似的工具,但我不太熟悉他们。
发布于 2018-07-27 19:30:24
在clBuildProgram调用中,您可以传递编译器选项。
https://stackoverflow.com/questions/51519918
复制相似问题