Xcode(10.7) - clGetProgramBinaries结果不可读

时间:2012-08-31 18:32:00

标签: osx-lion opencl

我有一个运行良好的OpenCL内核,但我想查看中间代码。我使用getprograminfo来取出二进制文件并将其保存到文本文件中。我用nVidia,AMD,i7和Xeon试过这个。

在所有这些情况下,二进制文件都是不可读的。

据我所知,在OS X上,返回的数据块实际上是二进制plist。我找到了使用plutil将其转换为xml的说明,它们可以正常工作。

它仍然是不可读的......虽然我在网上看到这是你找到PTX代码的地方(在我的AMD 5870的情况下)。有预期的clBinaryData密钥,但该密钥下的数据仍然是一大块东西,而不是文本形式的可读IL指令。

我真的想检查中间语言,以评估我使用gpu时的低效率。这在Xcode下根本不可能吗?或者,我做错了什么?

感谢您提供任何信息!...

2 个答案:

答案 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. AMD OpenCL Programming Guide
  2. AMD Devgurus forum

答案 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

...所以,这不是真的回答这个问题,而是对它进行了一些扩展。对不起,如果形式不好谢谢!

如果我找到了解决方案,请不要放弃并提供实际的问题解决方案。