我有一个运行良好的OpenCL内核,但我想查看中间代码。我使用getprograminfo来取出二进制文件并将其保存到文本文件中。我用nVidia,AMD,i7和Xeon试过这个。
在所有这些情况下,二进制文件都是不可读的。
据我所知,在OS X上,返回的数据块实际上是二进制plist。我找到了使用plutil将其转换为xml的说明,它们可以正常工作。
它仍然是不可读的......虽然我在网上看到这是你找到PTX代码的地方(在我的AMD 5870的情况下)。有预期的clBinaryData密钥,但该密钥下的数据仍然是一大块东西,而不是文本形式的可读IL指令。
我真的想检查中间语言,以评估我使用gpu时的低效率。这在Xcode下根本不可能吗?或者,我做错了什么?
感谢您提供任何信息!...
答案 0 :(得分:1)
如果使用以下环境变量集运行程序,则应在目录中看到.IL和.ISA文件。
$ GPU_DUMP_DEVICE_KERNEL=3 ./my-program
另一种方法是使用AMD APP Kernel Analyzer(与AMD APP SDK一起提供)来查看中间文件,即IL和ISA。 (我不确定AMD APP SDK是否可用于MAC)。
根据APP SDK文档的另一个选项,将以下内容放在您的主机代码中。
putenv("GPU_DUMP_DEVICE_KERNEL=3");
参考
答案 1 :(得分:0)
(将此作为顶级答案,以便我可以进行一些格式化。)
ocluser的答案非常有用,因为它很有启发性,并且引起了很好的学习,尽管它没有解决问题。
我已经验证了所描述的环境变量是正在设置,并且在从xcode中运行时可用于我的应用程序。但是,它没有(在OSX下)在Linux下具有非常理想的效果。
但是,我现在知道如何以8种不同方式中的7种设置环境变量。我还设置了“tracer”envars来告诉我哪些方法在我的应用范围内是有效的。从下面可以看出,添加参数的“编辑方案”的方法都有效,而ocluser建议的“putenv”也是如此。没有在该范围内设置的内容:〜/ .MACOS / environment.plist,特定于应用程序的plist,.profile,以及添加构建阶段以运行自定义脚本(我在xcode中至少找到了另一种方法来设置一个但是忘记了我所说的跟踪器,现在找不到它;也许是在另一台机器上......)
GPU_DUMP_DEVICE_KERNEL为3
GPU_DUMP_TRK_ENVPLIST为(null)
GPU_DUMP_TRK_APPPLIST为(null)
GPU_DUMP_TRK_DOTPROFILE是(null)
GPU_DUMP_TRK_RUNSCRIPT是(null)
GPU_DUMP_TRK_SCHARGS为1
GPU_DUMP_TRK_PUTENV为1
...所以,这不是真的回答这个问题,而是对它进行了一些扩展。对不起,如果形式不好谢谢!
如果我找到了解决方案,请不要放弃并提供实际的问题解决方案。