3

Capabilities 3.5、CUDA 5、VS 2010 (および明らかに Windows) を使用しています。

C コードの変更の影響をよりよく理解するために、コンパイルされたコードを読むことに興味があります。

  • 読みやすくするためにコードをコンパイルするには、VS でどのような構成が必要ですか (コンパイルを PTX に設定するのは十分ですか?)。
  • 生成された PTX をリバース エンジニアリングして読み取れるようにするには、どのツールが必要ですか?
4

1 に答える 1

8

通常、特定の .cu ファイルの ptx バージョンを作成するには、次のコマンドを使用します。

nvcc -ptx mycode.cu

mycode.ptxこれにより、使用したファイルに対応する ptx コードを含むファイルが生成されます。-src-in-ptxオプションを使用することもおそらく有益です。

nvcc -ptx -src-in-ptx mycode.cu

ソースコードの行と、それらが対応する ptx の行が散在します。

ptx を理解するには、ドキュメントから始めます。

コンパイラは、最適化のために、ソース コードにうまく対応していないか、混乱を招くような ptx コードを生成する可能性があることに注意してください。-G最適化されていないバージョンがどのように比較されるかを確認するために、スイッチを使用していくつかのテスト ケースをコンパイルすることもできます (おそらく洞察を得るために) 。

Windows 環境はマシンごとに異なる可能性があるため、特定のバージョンの のmsvc++呼び出しに使用しているパスを確認nvcc し (コンパイル時にプロジェクトの 1 つからのコンソール出力を確認します)、コマンドを前に追加する方が簡単だと思います。上記でそのパスを示します。ptx から実行可能ファイルコンパイルする特別な必要がない限り、これを Visual Studio に直接ビルドしようとしてもあまり有用であるかどうかはわかりません。何らかの方法で ptx に関係するサンプル コードも いくつかあります。

また、完全を期すために、ptx は実際にはデバイスによって実行されるものではないことに注意してください (ただし、一般的にはかなり近いものです)。nvccこれは、GPU ドライバーにも存在するコンパイラーまたはコンパイラーの一部によって、ファミリー内のデバイスに再ターゲットできる中間コードです。デバイスによって実行される実際のコードを確認するには、ソース コードの代わりに実行可能ファイルを使用します。マシン アセンブリ コードを抽出するツールは次のとおりです。

cuobjdump -sass mycode.exe

必要に応じて、適切なパスを先頭に追加することに関する同様の警告。私はptxから始めます。やりたいことはそれで十分だと思います。

于 2013-06-01T18:14:53.583 に答える