最近、コアの数が3倍になったことでCUDAコードのパフォーマンスが大幅に向上することを期待して、GTX480からGTX680にアップグレードしました。恐ろしいことに、GTX680でメモリを集中的に使用するCUDAカーネルの実行速度が30〜50%遅いことがわかりました。
これは厳密にはプログラミングの問題ではありませんが、さまざまなデバイスでのCUDAカーネルのパフォーマンスに直接影響することを理解しています。誰でもCUDAデバイスの仕様と、それらを使用してCUDA Cカーネルでのパフォーマンスを推定する方法を理解できますか?
質問に対する正確な回答ではありませんが、GK104(Kepler、GTX680)とGF110(Fermi、GTX580)のパフォーマンスを理解するのに役立つ可能性があるいくつかの情報:
フェルミでは、コアは残りのロジックの2倍の周波数で実行されます。ケプラーでは、同じ周波数で実行されます。フェルミと比較してリンゴ同士の比較をもっと行いたい場合、ケプラーのコア数は事実上半分になります。したがって、GK104(ケプラー)は1536/2 = 768の「Fermi相当のコア」となります。これは、GF110(Fermi)の512コアよりも50%多いだけです。
トランジスタ数を見ると、GF110には30億個、GK104には35億個のトランジスタがあります。したがって、Keplerのコア数は3倍ですが、トランジスタの数はわずかに多くなっています。したがって、Keplerの「Fermi相当コア」はFermiよりも50%だけ多いだけでなく、これらの各コアはFermiのコアよりもはるかに単純でなければなりません。
したがって、これらの2つの問題は、多くのプロジェクトがKeplerへの移植時に速度が低下する理由を説明していると考えられます。
さらに、GK104はグラフィックスカード用に作成されたKeplerのバージョンであり、スレッド間の連携がFermiよりも遅くなるように調整されています(そのような連携はグラフィックスにとってそれほど重要ではないため)。上記の事実を考慮した後の潜在的な潜在的なパフォーマンスの向上は、これによって打ち消される可能性があります。
また、倍精度浮動小数点のパフォーマンスの問題もあります。Teslaカードで使用されるGF110のバージョンは、単精度の1/2のパフォーマンスで倍精度浮動小数点を実行できます。チップがグラフィックスカードで使用される場合、倍精度のパフォーマンスは人工的に単精度の1/8に制限されますが、これはGK104の1/24倍精度のパフォーマンスよりもはるかに優れています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加