0

命令は、通常はサイクルごとに一度に 1 つずつフェッチされ、デコードされます。

2 つの命令を同時にフェッチしてデコードすると、どのような影響があるのだろうと考えていました。変更が必要なアーキテクチャの変更は何ですか?

4

1 に答える 1

2

命令がサイクルごとに一度に1つずつフェッチおよびデコードされるという考えは、一般的に真実ではありません。

いくつかの簡単なことを邪魔にならないようにしましょう。複数のコアを持つことができ、それらのコアはそれぞれ独立して実行されます。これが、Intelなどが1サイクルあたりの命令数(IPC)を増やす主な方法です。また、同じコアで2つの独立したスレッドを実行する同時マルチスレッディング(Intelの場合はハイパースレッディング)もあります。これは、過去10年間にIPCを増やすために一般的であったもう1つの方法です(Sunのナイアガラチップには多くのスレッドがありました)。

さて、あなたがおそらく本当に望んでいる答えのために。最新のプロセッサのほとんどは、単一の実行スレッド内で、サイクルごとに複数の命令をフェッチおよびデコードできます(これは通常、スーパースカラーと呼ばれます)。ほとんどすべての最新の高性能プロセッサがこれを実行します。例外は、非常に低電力のプロセッサと、スループットのためにシングルスレッドのパフォーマンスを明示的に犠牲にするプロセッサです(多くのスレッドを使用するナイアガラ)

次に、アーキテクチャの変更について説明します(無数のオプションがあります)。最大の内訳は、固定長命令(ARM)か可変長命令(x86)かです。

固定長の命令を使用すると、命令の境界が何であるかがわかるため、クロックごとにたとえば8つの命令をフェッチし、それらすべてをデコードできるシステムを比較的簡単に構築できます。通常、フェッチ幅は実行幅よりも大きくなります。これは、分岐命令があり、フェッチが整列される可能性が高いのに対し、分岐はどこにでも到達できるためです。これらのシステムでは、最大の課題は、分岐予測子(実際には、命令予測子の次のブロック)を適切に機能させることです。

可変長の命令では、それは単に苦痛の世界です。x86の世界では、最近、これらの可変長の「マクロ」命令を(ほとんど)固定幅の「マイクロ」命令に変換します。次に、これらのマイクロ命令を特別なキャッシュ(トレースキャッシュと呼ばれることが多い)に保存できます。特定のアドレスについて、トレースキャッシュでヒットが発生した場合、マクロ命令をデコードする必要はなく、マイクロ命令を処理するだけで済みます。(トレースキャッシュはさらに多くのことを実行でき、固定幅のマシンでも使用できます。ブロックの再調整などのトリックを実行したり、分岐を含む命令のシーケンスシーケンスをまとめたりできるため、「トレース」という名前が付けられています)。このトレースキャッシュアプ​​ローチを使用しても、高いパフォーマンスを得たい場合は、サイクルごとに複数のマクロ命令をフェッチする必要があります。通常、システムはいくつかのことを実行でき、基本的に予測子を使用して、命令の境界がどのようになる可能性があるかを示します。

ハザードと依存関係が頻繁に発生するため、順序付けされたマシンで2つ以上の命令を並行して実行しようとすることは一般にあまり意味がないため、非常に複雑なもののほとんどは、順序が正しくないプロセッサでのみ検出されます。何かをもっと実用的にします。

于 2012-12-15T18:33:59.147 に答える