首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL联机编译:从cl::program cl::内核获取程序集

OpenCL联机编译:从cl::program cl::内核获取程序集
EN

Stack Overflow用户
提问于 2018-07-25 13:18:59
回答 2查看 1.4K关注 0票数 5

我正在使用OpenCL运行内核基准测试。我知道我可以使用来自OpenCL供应商的各种工具(即ioc64poclcc)脱机编译内核。问题是,我获得的性能结果无法通过这些工具、OpenCL运行时开销或类似的工具来解释。

我希望看到由我的基准程序编译和执行的在线编译内核的组装。有什么办法吗?

我的方法是从cl::programcl::kernel对象中获取这个程序集,但我没有找到任何方法。我感谢你的建议或解决方案。

EN

回答 2

Stack Overflow用户

发布于 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可能有类似的工具,但我不太熟悉他们。

票数 5
EN

Stack Overflow用户

发布于 2018-07-27 19:30:24

clBuildProgram调用中,您可以传递编译器选项。

  1. 包含带有-I的路径
  2. 带-D的标志
  3. 强制编译器使用-save-temps删除程序集文件。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51519918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档