有没有办法获得有关如何在NVidia平台(或其他平台)上编译OpenCL内核的详细信息。可以放入内核的外部工具或测试。具体做法是:
矢量化是否成功,工作项如何分组为经线?
如果工作组内的工作项进入不同的分支,编译器是否对其进行优化以使它们仍然并行执行?
私有内存变量是否映射到多处理器中的寄存器,还是放入本地/全局内存? (某些体系结构每个工作组的私有内存多于本地内存)
可以在PTX装配输出中看到此信息,还是更高级别?
答案 0 :(得分:1)
这是所有编译器级元数据;其中一些可通过通用OpenCL API获得,但您请求的太低级别。可能通过一些Nvidia OpenCL扩展可用,我不熟悉那些。可能你最好的选择是找到一些工具在PTX级别工作并将其提供给OpenCL程序二进制文件。
答案 1 :(得分:0)
你总是可以只生成 PTX 程序集并查看它:
program.build("-cl-fast-relaxed-math");
cout << program.getInfo<CL_PROGRAM_BINARIES>()[0] << endl;
在 PTX 中,您可以准确地看到编译器如何翻译 OpenCL 代码。查找 PTX 文档 here。