0

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

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

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

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

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

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

4

2 回答 2

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 编程指南
  2. AMD Devgurus 论坛
于 2012-09-01T10:42:14.327 回答
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 为(空)

GPU_DUMP_TRK_APPPLIST 为(空)

GPU_DUMP_TRK_DOTPROFILE 为(空)

GPU_DUMP_TRK_RUNSCRIPT 为(空)

GPU_DUMP_TRK_SCHARGS 为 1

GPU_DUMP_TRK_PUTENV 为 1

...所以,不,这并不能真正回答问题,而是对其进行了一些扩展。对不起,如果形式不佳。谢谢!

没有放弃,如果我找到一个,将提供一个实际的问题解决者。

于 2012-09-02T21:21:19.147 回答