コンパイル フェーズを選択するオプション (-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 のデバイス固有のバイナリを最終的なファット バイナリに埋め込みます。