7

カーネルをさらに最適化するために、カーネルのPTXコードを読むことをお勧めしますか?

一例:自動ループ展開が機能したかどうかをPTXコードから確認できることを読みました。そうでない場合は、カーネルコードでループを手動で展開する必要があります。

  • PTXコードの他のユースケースはありますか?
  • PTXコードを調べますか?
  • CUDAがカーネル用に生成したPTXコードを読み取る方法はどこで確認できますか?
4

1 に答える 1

14

PTXについて最初に指摘するのは、PTXは、仮想マシンアセンブリ言語であるGPUで実行されるコードの中間表現にすぎないということです。ptxasPTXは、コンパイル時または実行時のドライバーによって、ターゲットマシンコードにアセンブルされます。したがって、PTXを見るときは、コンパイラが出力したものを確認していますが、GPUが実際に実行する内容は確認していません。独自のPTXコードを最初から作成することも(これはCUDAでサポートされる唯一のJITコンパイルモデルです)、またはCUDA Cコードのインラインアセンブラセクションの一部として作成することもできます(後者はCUDA 4.0以降正式にサポートされていますが、 "非公式に」それよりはるかに長い間サポートされています)。CUDAには、ツールキットを備えたPTX言語の完全なガイドが常に付属しており、完全に文書化されています。オセロットプロジェクトこのドキュメントを使用して、独自のPTXクロスコンパイラを実装しました。これにより、CUDAコードを他のハードウェア(最初はx86プロセッサ、最近ではAMD GPU )でネイティブに実行できます。

GPUが実際に実行されているもの(コンパイラーが出力しているものではなく)を確認したい場合、NVIDIAは、FermiGPUcudaobjdump用にコンパイルされたコードで実際のマシンコードセグメントを表示できると呼ばれるバイナリ逆アセンブラーツールを提供します。decudaG80およびG90GPUで機能する、と呼ばれる古い非公式のツールがありました。

そうは言っても、PTX出力から学ぶべきことはたくさんあります。特に、コンパイラーが最適化をどのように適用しているか、特定のC構造を実装するためにどの命令を発行しているかについてです。NVIDIA CUDAツールキットのすべてのバージョンには、PTX言語のガイドnvccとドキュメントが付属しています。両方のドキュメントには、CUDA C / C ++カーネルコードをPTXにコンパイルする方法を学び、PTX命令が何をするかを理解するための情報がたくさん含まれています。

于 2011-11-10T15:12:17.010 に答える