web-dev-qa-db-ja.com

CPU SIMD対GPU SIMD?

GPUは [〜#〜] simd [〜#〜] パラダイムを使用します。つまり、コードの同じ部分が並列に実行され、データセットのさまざまな要素に適用されます。

ただし、CPUはSIMDも使用し、命令レベルの並列処理を提供します。たとえば、私の知る限り、SSEのような命令は並列処理でデータ要素を処理します。

SIMDパラダイムはGPUとCPUで異なる方法で使用されているようですが、GPUはCPUよりもSIMDパワーが高いですか?

CPUの並列計算機能は、GPUの並列計算機能よりもどのように「弱い」のですか?

ありがとう

26
carmellose

それは同様のアイデアで、次のようになります(非常に非公式に言えば)。

  • CPUには、パックされた値で実行できる一連の関数があります。 CPUのブランドとバージョンによっては、SSE2、3、4、3dnowなどにアクセスでき、それぞれがより多くの機能にアクセスできます。レジスターのサイズと、操作するデータ型が大きいほど、並行して使用できる値が少なくなります。 SIMD命令と従来のx86/x64命令を自由に組み合わせて使用​​できます。
  • GPUを使用すると、テクスチャのピクセルごとにパイプライン全体を書き込むことができます。テクスチャサイズはパイプラインの長さに依存しません。つまり、1サイクルで影響できる値の数はGPU以外には依存せず、チェーンできる関数(ピクセルシェーダー)はほとんど何でもかまいません。値のセットアップとリードバックがやや遅く、ワンショットプロセス(値の読み込み、シェーダーの実行、値の読み取り)であるという点で、より厳格ですが、それ以外はまったくマッサージできないため、実際に必要です。価値があるように多くの値を使用する。
12
Blindy

CPUとGPUはどちらもSIMDを提供し、最も標準的な概念単位は16バイト/ 128ビットです。たとえば、4つの浮動小数点数(x、y、z、w)のベクター。

簡素化:

次に、CPUは、将来の命令をパイプライン化することでより多くの並列化を行い、プログラムの処理を高速化します。次に、独立したプログラムを実行する複数のコアがあります。

一方、GPUは、SIMDアプローチを継続し、同じプログラムを複数回実行することで並列化します。両方とも、プログラムのセットがロックステップで実行される純粋なSIMDによって(ifステートメントの両側が実行される必要があるため、GPUでの分岐が悪い理由です)、ロックステッププログラムが同じように進行するように1つの結果が破棄されます割合);また、 単一プログラム、複数データ(SPMD) でも同じプログラムのセットのグループが並行して進行しますが、必ずしもロックステップではありません。

GPUアプローチは、まったく同じ処理を大量のデータに適用する必要がある場合に最適です。たとえば、同じ方法で変換する必要のある100万の頂点や、色を生成するための処理を必要とする何百万のピクセル。それらがデータブロック/パイプライン停止にならないと仮定すると、GPUプログラムは一般に、その制限により、より予測可能な時間制限付き実行を提供します。これも時間的な並列処理に適しています。プログラムは、たとえば60 fpsで毎秒60回(16ミリ秒)の特定のレートでサイクルを繰り返す必要があります。

ただし、CPUアプローチは、複数の異なるタスクを同時に決定して実行し、変化する入力と要求を処理するのに適しています。

他の多くの用途と目的は別として、CPUはGPUが実行する作業を調整するために使用されます。

17
Ben Adams