アプリケーションで倍精度計算が必要です。Googleで見つけたものによると、フラグ「-arch sm_13」または「-arch sm_20」を追加する必要があります。
Q1: 「-arch sm_13」と「-arch sm_20」の違いは何ですか?
Q2: 「-arch sm_13」と「-arch sm_20」で性能に違いはありますか?
私の GPU: GTX 570。
ありがとう。
SM は Streaming Multiprocessor の略で、番号はアーキテクチャでサポートされている機能を示します。CUDA プログラミング ガイドのセクション 3.1.2 ~ 3.1.4に適切な説明があり、付録 F の表で各アーキテクチャに関連付けられている機能を確認できます。
NVCCマニュアル(ツールキットにも含まれています) から:
アーキテクチャの進化を可能にするために、NVIDIA GPU はさまざまな世代でリリースされています。新世代では、機能やチップ アーキテクチャが大幅に改善されていますが、同世代の GPU モデルでは、機能、パフォーマンス、またはその両方に「中程度」の影響を与える小さな構成の違いが見られます。
GPU には Compute Capability 2.0 があるため、sm_20 を使用して、コンパイラが古いアーキテクチャでは利用できない機能を使用できるようにする必要があります。下位互換性が必要な場合は、sm_13 (または sm_1x) をターゲットにすることも-gencode
できます。nvccの 1 回の呼び出しで複数のアーキテクチャをターゲットにするために nvcc のオプションを使用する方法については、上記のドキュメントを参照してください。
パフォーマンスに関して注意すべきことの 1 つは、sm_1x が IEEE754 浮動小数点をサポートしていないことです。そのため、sm_13 をターゲットにして、Compute Capability 2.0 以降を搭載したデバイスで実行すると、浮動小数点の実行速度が速くなることがあります。正確なパス。オプションを使用して、sm_20 以降で精度の低いパスを強制することもでき-ftz=true -prec-div=false -prec-sqrt=false
ます。詳細については、CUDA プログラミング ガイドのセクション 5.4.1 を参照してください。