web-dev-qa-db-ja.com

スーパースカラーとベクトルプロセッサの違いは何ですか?

どちらも同時に複数の命令を処理できますが、2つの名前がある理由を説明する根本的な違いがあり、スーパースカラーの名前を常に使用するように切り替えていないのではないでしょうか。

また、私が正しく理解していれば、スカラーとベクトルの両方の命令が最新のCPUに存在するので、これら2つは相互に排他的ではないと思います(movやaddなどのスカラー命令はスーパースカラーで実行され、たとえば、ドット積はベクトルで計算されます-lyいくつかの特別な黒魔術のようなもので)?

8
Luke

スーパースカラープロセッサは、単一のプログラム内で複数の命令を並列に実行できます。これは、命令ストリームを分析して、どの命令が相互に依存していないかを判別し、プロセッサー内に複数の実行ユニットを使用して同時に作業を行うことによって行われます(たとえば、複数の ALUs )。通常、機能は完全にハードウェアで実装されるため、スーパースカラープロセッサのコードを最適化するために、コンパイラサポートは通常必要ありません1

ベクトルプロセッサには、複数のデータ値のグループ全体を一度に操作するように特別に設計された命令が含まれています(配列と呼ばれます)またはvectors)。最近のほとんどの高性能プロセッサには、何らかの形式のベクトル処理機能が含まれています。例えば;ほとんどのx86プロセッサで使用できる [〜#〜] sse [〜#〜]ADDPS命令は、4つの単精度値をそれぞれ含む2つのベクトルの合計を計算します。コンパイラー、開発者、およびオペレーティングシステムのサポートは、通常、ベクトル命令を使用するために必要であり、すべてのプロセッサーが、現在の世代であっても、最新のベクトル命令をサポートしているわけではありません(例:でもIntel CeleronおよびPentiumプロセッサー) Kaby Lake、サポートしていません [〜#〜] avx [〜#〜] )。

今日のプロセッサがどのようにして高パフォーマンスを達成するかについての詳細な技術情報は この答え にあります。


1 別の、かなり珍しいデザインアプローチは、複数の実行ユニットを使用することですが、各クロックサイクルで各実行ユニットに発行する命令をコンパイラに決定させます。これは 非常に長い命令ワード と呼ばれ、通常、専用のプロセッサでのみ見られます。

3
bwDraco

誰も答えを見つけなかったので、その間に私はそれを理解したと思います。

スカラープロセッサは、通常のプロセッサであり、一度に1つの数値を処理するスカラー命令を実行します。特にない。

ベクトルプロセッサ反対側では、同時に複数の数値を処理することになっているベクトル命令を使用します。この目的のために特別な、より広いレジスターがあります(たとえば、SSEの128ビットxmm *に複数の値をパックできます。たとえば、32ビット整数4つ。AVX-512は、最も広いIみつけることができた)。ベクトル演算は、その目的のために作られたプロセッサの特別なユニットによって行われます。ベクトルプロセッサの典型的な例は、GPUです。これは、ベクトル計算のみを実行します。

スーパースカラーは、特定の最適化を示すために使用される用語で、異なる「通常の」実行ユニット(複数のALUなど)でスカラー命令を並列に実行できるようにします。命令を複数の「ストリーム」に分割し(この用語を作成したところ)、同時に実行します。

では、それらはベクターの対応物とどう違うのですか? スカラー命令はそのように実行されることを意図していません。データや手順の依存関係など、完全な並列実行を妨げる可能性のある複数の危険が考えられます。その場合、その命令の実行は、依存関係が満たされるまで待機して、その「ストリーム」の実行を一時停止する必要があります。 CPUは、データの破損を回避するためにすべての依存関係に注意する必要があるため、この方法で実行を最適化する際には、特別な注意が必要です。

また、新しい命令も導入されていません。すべてが通常のスカラーCPUの動作に見えます。一方、ベクトルCPUには、ベクトル演算用の特別な命令があります。主な違いは、ベクトル演算の場合、プログラマー(またはコンパイラー)がデータを処理する必要があることと、異なるレジスターを同時に操作しないため(すべての値がワイドレジスターにパックされることに注意)、さまざまな危険回避されます。一方、スーパースカラーCPUは、どの命令が互いに独立しているかを把握し、同時に実行するために最善を尽くします。


どのカテゴリも相互に排他的であると私が言ったことがないことに注意してください。そうではありません。ベクトルユニットはベクトル命令を実行し、CPUはスカラーのものを並列化する最良の方法を見つけようとします。実際、最近のすべてのCPUは、ベクトル命令(SSE *、3DNow!、AVXなど)と、「スーパースカラー」の方法で実行されるスカラー命令(x86)の両方をサポートしています。

0
Luke