GPGPUがある場合、なぜSIMDを使用するのですか?


13

この質問はStack ExchangeのCSの部分でより適切に処理されると思いました。CUDAやOpenCLなどの言語を使用するGPGPUができたので、マルチメディアSIMD拡張機能(SSE / AVX / NEON)はまだ目的を果たしていますか?

最近、SSE命令を使用してソートネットワークを加速する方法についての記事を読みました。私はこれはかなりきちんとしていると思いましたが、私のcomp arch教授に言ったとき、彼は笑い、GPUで同様のコードを実行するとSIMDバージョンを破壊すると言った。SSEは非常にシンプルで、GPUはより多くの並列処理を備えた大規模で複雑なアクセラレーターであるため、これは疑いありませんが、マルチメディアSIMD拡張機能がGPUを使用するよりも便利なシナリオはたくさんありますか?

GPGPUがSIMDを冗長にする場合、インテルはなぜSIMDサポートを増やすのですか?SSEは128ビットでしたが、AVXでは256ビットになり、来年は512ビットになります。GPGPUがデータ並列処理を備えたより優れた処理コードである場合、インテルはなぜこれらのSIMD拡張機能をプッシュするのですか?それらは、同等のリソース(研究と領域)をより大きなキャッシュと分岐予測子に入れることができ、それによりシリアルパフォーマンスが向上します。

GPGPUではなくSIMDを使用する理由


2
GPUをビジー状態に保つのに十分なデータをGPUに供給すること自体が課題です。ホストとデバイス間のデータ転送は、事実上常にボトルネックです。特定の操作は、CPUでより適切にサポートされます(例:桁上げのない乗算。PCLMULQDQを参照)。
Juho

2
@Juho AMDのAPUなどの新しいデバイスには、GPUとCPUが同じダイ上にありませんか?これはボトルネックを解消しますか?
jonfrazen 2014

1
すべてが言われて完了しても、ベクトル命令は依然として単一の命令であり、それをスケジュールして実行するためのコストは、他のどの単一の命令と同じです。GPUでジョブを実行するのは、メリットがコストを上回る場合にのみ意味があります。また、コアごとに1つのSIMDユニットを取得しますが、通常はシャーシごとに1つのGPUのみであり、GPUは現時点では共有リソースです。これにより、GPUで実行できるジョブの数が制限されます。(コアの数は常に増加していますが、GPUの数は増加していません。)
Pseudonym

IntelはGPU(Larrabee / Knights Landingを除く)に関して多くのことをしていないので、彼らがAVXをプッシュしようとするのは当然だと思います。AVXを頻繁に使用するとパフォーマンスが向上する可能性がありますが、新しいCPUでダウンクロックが発生するため、何かで限界に達している可能性があります。
nsandersen 2017

回答:


16

無料のものはありません。GPGPU SIMDです。GPGPUのSIMD命令は、CPUのSIMD命令よりも幅が広い傾向があります。GPGPUは、きめ細かいマルチスレッド化される傾向があります(CPUよりも多くのハードウェアコンテキストを備えています)。GPGPUはストリーミング用に最適化されています。それらは、より大きな割合の領域を浮動小数点ユニットに割り当て、より低い割合の領域をキャッシュに、そしてより低い割合の領域を整数パフォーマンスに割り当てる傾向があります。

比較してみましょう。Intelのコアi7-5960xには8コアがあり、それぞれが4ワイド(倍精度)SIMD、3 GHz(3.5 GHzターボ)、20M L3キャッシュで動作し、356mm ^ 2と140Wを消費し、コスト 1000 ドルです。したがって、8 * 4 * 3 * 4 = 384倍精度のGFlops。(追加の4xは、サイクルごとにベクトルレーンごとに2つの融合乗算加算を実行できるためです。)768の単精度GFlopsを実行できます。これは、約1.08 DP GFlops / mm ^ 2および2.75 DP GFlops / Wattです。約57.5 KB / mm ^ 2のオンチップキャッシュもあります。

NVidiaのGeForce GTX Titan Blackには15のSMXがあり、それぞれ890MHz(980MHzターボ)で動作する32倍の倍精度SIMD、3.5MのL1 + L2キャッシュ、561mm ^ 2、250Wを消費し、コスト 1000 ドルです。したがって、15 * 32 * .89 * 4 = 1709倍精度GFlops。(サイクルごとのベクトルレーンごとに2つの融合乗加算の同じ4倍。)5126単精度GFlopsを実行できます。これは、約3.05 DP GFlops / mm ^ 2および6.8 DP GFlops / Wattです。したがって、単位面積あたりのDP浮動小数点密度の3倍、DP浮動小数点電力効率の3倍になります。そしてトレードオフ?6.4 KB / mm ^ 2のオンチップキャッシュ。CPUの約9分の1の密度です。

したがって、主な違いは、GPUがキャッシュよりも浮動小数点(特に単精度浮動小数点)を強く支持するエリアバランスを選択したことです。I / Oを実行するためにCPUとGPUの間でデータを前後にコピーする必要があるという事実を無視しても、GPUがCPUと比較してどの程度うまく機能するかは、実行しているプログラムによって異なります。

制御の相違がほとんどないデータパラレル浮動小数点プログラム(すべてのベクトルレーンが同時に同じことを実行している)があり、プログラムがストリーミングしている(キャッシュから利益を得られない)場合、GPUは単位面積あたりまたはワットあたり3倍の効率。ただし、かなりの量の分岐制御、データ並列以外の作業が必要な場合、または大量の読み取り回数のデータ構造からメリットを得られる場合は、CPUの方が優れています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.