2012-04-26 4 views
17

私のアプリケーションで倍精度計算が必要です。私がGoogleで見つけたことによると、フラグ "-arch sm_13"または "-arch sm_20"を追加する必要があります。"-arch sm_13"と "-arch sm_20"の違い

Q1: "-arch sm_13"と "-arch sm_20"の違いは何ですか?

Q2:「-arch sm_13」と「-arch sm_20」の間にパフォーマンスに違いはありますか?

マイGPU:GTX 570

感謝。

+0

あなたはsm_20を使用する必要があります。 sm_13は1.3枚のカードを計算するためのものです。 –

+0

それはとても簡単ですか?計算機能2.0 - > sm_20、計算機能1.3 - > sm_13? – user1281071

答えて

25

SMはStreaming Multiprocessorの略で、番号はアーキテクチャでサポートされている機能を示します。 (また、ツールキットに含まれる)NVCC manualから

F.

あなたは CUDA Programming Guideセクション3.1.2-3.1.4に良い説明を見つけることができますし、付録の表に、各アーキテクチャに関連する機能を見ることができます:

アーキテクチャの進化を可能にするために、NVIDIA GPUは異なる世代の でリリースされています。新世代では、 機能やチップアーキテクチャで大きな改善が見られますが、同じ 世代のGPUモデルでは、機能、パフォーマンス、またはその両方に「適度に」影響を与える小さな構成の違いがあります。

GPUにはCompute Capability 2.0が含まれているため、古いアーキテクチャでは利用できない機能をコンパイラが使用できるようにsm_20を使用する必要があります。下位互換性が必要な場合はターゲットsm_13(またはsm_1x)とすることができます.nvccへの単一コールで複数のアーキテクチャを対象にするには、-gencodeオプションをnvccに使用する方法について上記のドキュメントを参照してください。

sm_1xはIEEE754浮動小数点をサポートしていないことが分かります。sm_13をターゲットにしてCompute Capability 2.0以降のデバイスで実行すると、浮動小数点より正確でないパスを使用しています。詳細については、-ftz=true -prec-div=false -prec-sqrt=falseオプションを使用してsm_20以降の精度の低いパスを強制することもできます。詳しくは、「CUDAプログラミングガイド」のセクション5.4.1を参照してください。

+0

ありがとう!素晴らしい答え! – user1281071

関連する問題