0

私は正常に動作する OpenCL カーネルを持っていますが、中間コードを見たいと思っています。getprograminfo を使用してバイナリを取り出し、テキスト ファイルに保存します。nVidia、AMD、i7、および Xeon でこれを試しました。

これらのすべてのケースで、バイナリは読み取り不能です。

OS X では、返されるデータのチャンクが実際にはバイナリ plist であることを理解しています。plutil を使用して xml に変換する手順を見つけましたが、それらは機能します。

これはまだ判読できません...ただし、これが PTX コードを見つける場所であるという指示をオンラインで見ました (私の AMD 5870 の場合)。期待される clBinaryData キーがありますが、そのキーの下のデータはまだ 1 つの大きな塊であり、テキスト形式で読み取り可能な IL​​ 命令ではありません。

GPU の使用における非効率性を評価するために、中間言語を調べたいと思います。これは Xcode では不可能ですか? または、私は何を間違っていますか?

情報ありがとうございます!...

4

2 に答える 2

1

次の環境変数を設定してプログラムを実行すると、ディレクトリに .IL および .ISA ファイルが表示されます。

$ GPU_DUMP_DEVICE_KERNEL=3 ./my-program

もう 1 つの方法は、AMD APP Kernel Analyzer (AMD APP SDK に付属) を使用して中間ファイル、つまり IL と ISA を調べることです。(AMD APP SDKがMACで利用できるかどうかはわかりません)。

APP SDK ドキュメントによるもう 1 つのオプションとして、ホスト コードに以下を記述します。

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 つの方法で環境変数を設定する方法を知っています。また、「トレーサー」環境変数を設定して、アプリケーションの範囲内でどのメソッドが効果的かを教えてくれます。以下から、ocluser によって提案された「putenv」と同様に、引数を追加する「編集スキーム」の両方の方法が機能することがわかります。そのスコープで設定しなかったもの: ~/.MACOS/environment.plist、アプリ固有の plist、.profile、カスタム スクリプトを実行するためのビルド フェーズの追加 (xcode 内で少なくとも 1 つの方法を見つけて設定しました)しかし、私がトレーサーと呼んだものを忘れてしまい、今は見つけることができません; 多分それは別のマシンにあります....)

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 です

…いいえ、これは実際には質問に答えませんが、少し拡張します。フォームが悪い場合は申し訳ありません。ありがとう!

あきらめず、実際の問題解決者を見つけたら提供します。

于 2012-09-02T21:21:19.147 に答える