コンパイル フェーズを選択するオプション (-ptx
および-cubin
) と、ターゲットにするデバイスを制御するオプション( ) を混同している-code
ため、ドキュメントを再確認する必要があります。
NVCC は NVIDIA コンパイラ ドライバです。-ptx
およびオプションは、コンパイルの特定のフェーズを選択するために使用されます。-cubin
デフォルトでは、フェーズ固有のオプションなしで、nvcc は入力から実行可能ファイルを生成しようとします。ほとんどの人は、この-c
オプションを使用して nvcc にオブジェクト ファイルを生成させます。このファイルは、後でデフォルトのプラットフォーム リンカーによって実行可能ファイルにリンクされます。-ptx
および-cubin
オプションは、ドライバー API を使用している場合にのみ本当に役立ちます。中間段階の詳細については、CUDA ツールキットのインストール時にインストールされる nvcc マニュアルを確認してください。
- からの出力
-ptx
はプレーンテキストの PTX ファイルです。PTX は NVIDIA GPU 用の中間アセンブリ言語であり、まだ完全には最適化されておらず、後でデバイス固有のコードにアセンブルされます (たとえば、デバイスによってレジスタ数が異なるため、PTX を完全に最適化するのは正しくありません)。
- からの出力
-cubin
は、1 つまたは複数のデバイス固有のバイナリ イメージと (オプションで) PTX を含むファット バイナリです。
あなた-code
が言及している議論は、まったく異なる目的を持っています。いくつかの例を含む nvcc のドキュメントを確認することをお勧めします。一般的には、-gencode
代わりにこのオプションを使用することをお勧めします。これにより、より多くの制御が可能になり、1 つのバイナリで複数のデバイスをターゲットにできるからです。簡単な例として:
-gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\'
これにより、nvcc は計算機能 xx (arch=
ビット) を持つすべてのデバイスをターゲットにし、PTX ( code=compute_xx
) と sm_yy および sm_zz のデバイス固有のバイナリを最終的なファット バイナリに埋め込みます。