new*_*2f7 5 assembly compilation opencl
我正在使用OpenCL运行内核基准测试。我知道我可以使用OpenCL供应商(即ioc64或poclcc)的各种工具离线编译内核。问题是我无法从这些工具,OpenCL运行时开销或类似的程序集获得无法解释的性能结果。
我希望看到由我的基准程序编译和执行的在线编译内核的组装。有什么办法吗?
我的方法是从cl::program或cl::kernel对象中获取此程序集,但我没有找到任何方法来执行此操作。感谢您的建议或解决方案。
对于英特尔显卡,您可以使用clGetKernelInfo(...,CL_KERNEL_BINARY_PROGRAM_INTEL,...)它直接获取内核 ISA 位。要反汇编这些位,您可以获取最新的 GEN ISA 反汇编程序并按照此处所述进行构建。具体请参见 部分Building an Intel GPU ISA Disassembler。我已经有一段时间没有使用它了,但是 Intel OpenCL SDK 曾经做得更好(不是 GUI 人员)。而这是一个关于如何使用该工具审议大会的好文章。
对于 NVidia,返回的“二进制”clGetProgramInfo(...CL_PROGRAM_BINARIES...)实际上返回 ptx。这可能就足够了,但是如果您想要执行确切的着色器程序集,那么您实际上可以将 ptx 输入ptxas,然后cuobjdump使用--dump-sass选项进行反汇编以获得最低级别的程序集。请注意,我们只能猜测 NVidia 驱动程序使用与 相同的算法ptxas,但这似乎是合乎逻辑的。
AMD 可能有类似的工具,但我对它们不太熟悉。