0

現代の高性能コンピューティングは、NVIDIA GPU の SIMT 命令のようなベクトル命令を使用します (はい、SIMT が完全に SIMD ではないことは知っていますが、その違いがこの質問に影響を与えるとは思いません)。より多くのコアを持つよりもベクトルを操作する方が良い理由を知りたいです。

具体的に言うと、GPU が 32 倍のコアを持つよりも 32 ワードのベクトルで動作する方が優れているのはなぜですか? 勝手に推測してみましたが、実際に何を言っているのかわかる方の意見をお聞きしたいです。

ここに私の推測があります:

  • 各コアにいくつかの制御ハードウェアといくつかの ALU ハードウェアがある場合、ベクトル コアは 32 個の ALU 間で制御ハードウェアの 1 つのブロックを共有するため、計算に費やされる合計トランジスタ バジェットの割合が増加します。

  • とにかく自然にベクトル化可能な操作を行っている場合、複数のコアは、ベクトル命令では発生しない同期の問題を引き起こすだけです。

  • 異なるコアとは異なり、ベクトル内の異なる単語は互いに隣接しているため、最終的に 32 単語のブロックでメモリを読み込んで操作することになります。これはキャッシュにとって非常に便利です。

本当の答えは何ですか?

4

3 に答える 3

0

I think it's a matter of synchronization. A single-core operation on a vector completes in a much more deterministic time than several cores (threads) operating on multiple data items. Eventually you'll need a wait to synchronize them and for inherintly-vector operations, SIMD is cheaper.

于 2012-10-11T15:29:45.833 に答える
0

別のコア CPU を追加するには、設計者はパイプラインのすべての部分を複製する必要があり、キャッシュの一貫性を維持するためにいくつかの構造を追加する必要があります。SIMD 命令の幅を 2 ​​倍にするには、実行ユニットの幅を 2 ​​倍にするだけでよく、パイプラインの他のすべてのステージは同じままです。

于 2012-10-11T16:14:49.190 に答える
0

これは、使用するシリコンの量と得られる機能のトレードオフです。SIMD をコアに追加することは、ベクトル演算のスループットを 4 倍、8 倍、または 16 倍向上させる可能性があるため、チップ領域の比較的小さな増分コストです。コア数を 4 倍、8 倍、または 16 倍に増やすと、チップ面積が大幅に増加します (ただし、コードをベクトル化する必要がないという利点があります)。

于 2012-10-11T16:13:00.807 に答える