13

CUDA 4.0 がインストールされており、Compute Capability 2.0 (GTX 460 カード) を備えたデバイスがあります。

「cubin」ファイルと「ptx」ファイルの違いは何ですか?

cubin は GPU のネイティブ コードなので、これはマイクロ アーキテクチャ固有のものであり、ptx は JIT コンパイルを介して Fermi デバイス (Geforce GTX 460 など) で実行される中間言語です。ソース ファイルをコンパイルするときに.cu、ptx または cubin ターゲットを選択できます。cubin ファイルが必要な場合は、code=sm_20. しかし、ptx ファイルが必要な場合は、code=compute_20.

それが正しいか?

4

1 に答える 1

18

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