【问题标题】:Getting detailed information about compiled OpenCL kernel on NVidia获取有关 NVidia 上已编译 OpenCL 内核的详细信息
【发布时间】:2018-06-14 08:14:25
【问题描述】:
有没有办法获得有关如何在 NVidia 平台(或其他平台)上编译 OpenCL 内核的详细信息。可以放入内核的外部工具或测试。具体来说:
矢量化是否成功,工作项是如何分组到 warp 中的?
如果工作组内的工作项进入不同的分支,编译器是否对其进行了优化以使其仍并行执行?
私有内存变量是否被映射到多处理器中的寄存器,或者它们是否被放入本地/全局内存? (有些架构的每个工作组的私有内存比本地内存多)
可以在 PTX 程序集输出中看到此信息,还是更高级别?
【问题讨论】:
标签:
opencl
gpu
nvidia
gpgpu
ptx
【解决方案1】:
您总是可以只生成 PTX 程序集并查看它:
program.build("-cl-fast-relaxed-math");
cout << program.getInfo<CL_PROGRAM_BINARIES>()[0] << endl;
在 PTX 中,您可以准确地看到编译器是如何翻译 OpenCL 代码的。查找 PTX 文档here。
【解决方案2】:
这是所有编译器级别的元数据;其中一些可通过通用 OpenCL API 获得,但您请求的那些太低级了。可能可以通过一些 Nvidia OpenCL 扩展获得,但我不熟悉这些。最好的选择可能是找到一些在 PTX 级别上工作的工具并将其提供给 OpenCL 程序二进制文件。