プロセッサは、周波数よりも多くのIPSを実行できますか?[複製]


14

これは私の頭を包み込むように思えないものでした。ほぼすべての最新のプロセッサは、その周波数よりも多くの命令を1秒あたりに実行できます。

低クラスのプロセッサが、その周波数よりも少ないIPSを実行できる理由を理解できます。たとえば、ATmega328は16 MHZで約16 MIPSを実行します(または少なくともそれは私が言ったことです)、Z80は4 MHzで0.5 MIPSを実行します。しかし、Pentium 4 Extremeはわずか3.2 GHzで9 GIPS以上を実行できます。これは、クロックサイクルごとに約3命令です!

これはどのように行われますか?また、AVRマイクロコントローラーなどのより小さなプロセッサーに実装されないのはなぜですか?

ここから、ATmega328を除くすべての情報を見つけまし


3
パイプライン、スーパースカラーアーキテクチャ、アウトオブオーダー実行、同時マルチスレッド、マルチコア、ベクトル拡張(SSE、...、AVX)、キャッシングなどの話題の言葉については、ウィキペディアをご覧ください。すべてのすべてのCPI値は1.0よりも低くすることができます。
ペベルズ

7
MIPSではなく、Pentium 4で9 GIPSを意味しましたか?
カリモ

5
自己宣伝:CPUはどのようにしてサイクルごとに複数の命令を配信できますか?Electrical Engineering Stack Exchangeで質問されました(私の答えは受け入れられ、おそらく非常に高く評価されました)。
ポールA.クレイトン

私はいつも疑問に思っていましたが、それがすでにあるべきだと思うほど高い場合、私は何かに投票するべきではありませんか?または、投稿の努力と質が報いに値すると思うなら、常に賛成ですか?
ピーターコーデス

@PeterCordesさまざまな投票哲学があります。「有用」が唯一の基準であると主張する人もいれば、相対的なメリット(回答用)を考慮する人もいます。私は絶対投票数(「いい」、「良い」、「素晴らしい」投稿バッジが考慮されるべきであることを意味します)および相対的な投票数(ランキングに答えるのに役立ちます)を考慮する傾向があります。驚いたことに、Meta.SEにはこのトピックに関する多くの情報が含まれていないようで、「どのように投票すればよいですか?」という答えすらありません。
ポールA.クレイトン

回答:


23

これは、最新のプロセッサの機能の組み合わせによるものです。

高IPSに貢献する最初のことは、最新のプロセッサが独立して動作できる複数の実行ユニットを持っているという事実です。下の画像(Wikipedia:Intel Core Microarchitectureから借用)では、すべての命令を同時に実行できる8つの実行ユニット(黄色で表示)があることがわかります。これらのユニットのすべてが同じタイプの命令を保護できるわけではありませんが、少なくとも5つのユニットがALU操作を実行でき、3つのSSE対応ユニットがあります。

ここに画像の説明を入力してください

それを、それらのユニットが命令を実行する準備ができている(必要に応じて順不同)命令を効率的にスタックできる長い命令パイプラインと組み合わせると、現代のプロセッサはいつでも多数の命令をオンザフライで実行できます。

各命令の実行には数クロックサイクルかかる場合がありますが、実行を効果的に並列化できる場合は、プロセッサの複雑さと熱出力を犠牲にして、IPSを大幅に向上させることができます。

これらの大きなパイプラインを命令で満たすには、命令とデータを事前に入力できる大きなキャッシュも必要です。これは、ダイのサイズと、プロセッサが生成する熱量の一因となります。

これがより小さなプロセッサで行われない理由は、処理コアの周りに必要な制御ロジックの量、必要なスペースの量、および発生する熱が大幅に増加するためです。小さくて低電力で応答性の高いプロセッサが必要な場合は、実際の機能コアを取り囲む「余分な」ものがあまりない短いパイプラインが必要です。そのため、通常はキャッシュを最小化し、命令の処理に必要な各タイプのユニットの1つのみに制限し、すべての部分の複雑さを軽減します。

彼らは可能性があり、より大きなプロセッサのような複雑なような小さなプロセッサを作り、同様の性能を達成したが、その後電源が描くと要件を冷却指数関数的に増加することになります。


特殊な実行ユニットが存在すること、そしてそれらが複数あることを私は知りませんでした。しかし、それでも、スーパースカラーのArduinoがあればいいと思います。より多くのスループットを意味するのであれば、電力と冷却の要件は気にしません。答えてくれてありがとう。
ハカ

1
スーパースカラープロセッサが必要な場合は、それを使用します。しかし、Arduinosは、スーパースカラープロセッサの電力と冷却の要件(およびコストと複雑さ)を気にする人にとってはニッチを占有します。
デビッドシュワルツ

4

想像するのは難しくありません。数千のトランジスタを切り替えるのに必要なのは1サイクルだけです。命令が並列に並んでいる限り、すべてを実行するには1サイクルで十分です。

自分で説明しようとするよりも、ここから始めるのが良いでしょう。


3

モクバイの答えよりも少し基本的なことを得るには:

スーパースカラーCPUは、命令間のデータ(およびその他の)依存関係について、命令ストリームを分析します。互いに依存しない命令は並行して実行できます。

典型的なx86デスクトップCPUは、クロックサイクルごとに16または32Bの命令をフェッチします。Intelは、Core2がサイクルごとに最大4つの命令を発行できるため、設計しています。(または、マクロ融合できる比較分岐がある場合は5)。

実際のCPUが、実行するコードから実行する命令レベルの並列処理と同じくらい多くのタスクを実行するためのリンクと詳細については、Mobukaiの素晴らしい回答を参照してください。

また、http://www.realworldtech.com/sandy-bridge/および他のCPUアーキテクチャに関する同様の記事で、内部の詳細を説明しています。


-2

前の回答は、プロセッサの「命令」の定義によって実行される命令をどのように取得するかを示し、それが実際に質問者の意図であると想像します。

しかし、それの別の原因は、各「命令」が実際にはプロセッサによる命令入力として扱われる一定量のデータである可能性があります。彼のソースのカウントが、プロセッサが命令とみなすものをカウントするだけの場合、以下は何も加えません。しかし、彼の情報源が人間が「命令」と呼ぶものをすべて数える場合は、次のように追加します。すべての命令が物理的に他のすべての命令と同じ長さではないことを追加します(12バイト、56バイトなど)。したがって、各サイクルで64バイトのマテリアルを「命令」(または64バイトにヒットする前にできる限り多くの完全な命令)としてロードし、その64バイトに6つの命令がある場合、6つの命令(あなたと私が考えるかもしれません) )はそのサイクルで終了します。

多くの非常に基本的な命令(「賢明な」定義)は初期の8バイトの命令の残り物であり、定義により、非常に基本的な命令はおそらく不釣り合いに使用されるため、これだけでより多くの「命令」を実行することができます頻度が許すようです。


これはCPUの実際の動作に少し近いですが、サイクルごとに複数のマシンのインをフェッチすることは、スーパースカラーCPUの動作の一部にすぎません。(およびx86の場合、平均イン長は4バイトに近い。)ディープパイプラインは、フェッチされる命令が15サイクル実行を完了しない可能性があることを意味します(または、キャッシュミスでホールドされた場合、さらに長いが、依存しない命令はあなたの説明は、パイプライン化された設計をまったく説明していません。また、8ビット8086 add al, blと80386の違いが何であるかについても明確ではありませんadd eax, ebx
ピーター・コーデス

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