短い答え
命令のデコードと実行のステップは、前の命令の次のステップと並行して実行されます。この手法は、パイプライン処理として知られています。以下のRISCプロセッサーについてを参照してください。
単一発行のRISCアーキテクチャは、通常、レジスタごとに登録するのではなく、メモリをヒットするロード/ストア操作の待機状態と時間がかかるため、サイクルごとに平均して1命令よりわずかに少なくなります。遅延スロットは、この時間の一部を取り戻すことができるアーキテクチャフックを提供します。以下のRISCプロセッサーについてを参照してください。
命令サイクルは、命令の実行に必要な時間の長さです。これは、アーキテクチャと(場合によっては)命令によって異なります。たとえば、MIPS R2000 / 3000などのほとんどの命令は1サイクルかかります。メモリアクセス(ロード/ストア、ブランチ)を伴う命令は、1サイクル以上かかりますが、遅延スロットは、遅延スロットで他の何か(おそらくNOP)を実行できる可能性があることを意味します。パイプライン化されていないアーキテクチャは、数クロックサイクルの命令サイクルを持つことができ、多くの場合、アドレッシングモードによって異なります。参照オンRISCプロセッサ、従来のCISCのarchitecuresとハードワイヤードアーキテクチャ以下。
複数の問題のデザインでは、複数の命令を並行して実行することにより、この概念を多少曖昧にすることができます。
CISCプロセッサは、さまざまな時間を要する命令を持つことができます。クロックサイクルの正確な数は、アーキテクチャと命令によって異なります。CISC ISAで使用されるクロックサイクルの数がさまざまであることが、パイプライン化されたアーキテクチャに組み込むことが難しい理由の1つです。以下の従来のCISCアーキテクチャを参照してください。
長い答え
単一の問題MIPS、SPARC、または他のCPUの場合、すべての(最初の概算で)命令は1サイクルで発行されますが、「遅延スロット」と呼ばれるものが含まれる場合があります。
RISCプロセッサについて
このコンテキストでは、単一の問題CPUは、CPUが最新のCPUのようにオンザフライの依存関係分析と命令の並列発行を行わない、つまり、命令を実行する実行ユニットを1つだけ持つCPUです。メモから読み取られる順序。これについては後で詳しく説明します。
ほとんどの古いRISCプロセッサは単一発行設計であり、これらのタイプは依然として組み込みシステムで広く使用されています。32ビットの単一発行整数RISCコアは約25,000〜30,000ゲートに実装できるため、このタイプのCPUコアは非常に低い消費電力と非常に小さなフットプリントを持ちます。これにより、SOC(システムオンチップ)製品への統合が簡単かつ安価になります。
RISC CPU設計はパイプライン化されています。命令の処理は複数の段階で行われ、各命令はクロックサイクルごとにパイプラインを介して次の段階に渡されます。ほとんどの場合、単一発行パイプラインCPUは、クロックサイクルごとに1つの命令に近いものを実行します。
一部のアーキテクチャには、メモリアクセスによる追加サイクルがコードから見える、メモリからの分岐やロード/ストアなどの命令があります。
たとえば、SPARC V7 / V8設計では、実際にブランチが実行された後、ブランチ自体が実行される前に次の命令が実行されます。通常、分岐後のスロットにNOPを配置しますが、何か便利なことがわかる場合は別の命令を挿入できます。
MIPS R2000 / R3000アーキテクチャには、ロード/ストア命令に同様の遅延スロットがありました。メモリから値をロードした場合、実際には別のサイクルでレジスタに表示されません。実行したばかりのロード操作に依存しない便利な操作が見つかった場合は、スロットにNOPを挿入するか、何か他の操作を行うことができます。
メモリがCPUよりも遅い場合(これがよくあるケースです)、メモリアクセスで追加の待機状態が発生する場合があります。待機状態では、メモリアクセスが完了するまで、1クロックサイクル以上CPUがフリーズします。実際には、これらの待機状態とメモリアクセスのための余分な時間は、単一発行のCPU設計がクロックサイクルごとに1命令よりもわずかに少ないことを意味します。遅延スロットを使用すると、メモリ操作の実行中に他の命令を実行してコードを最適化することができます。
従来のCISCプロセッサー
CISCプロセッサは、さまざまな長さの命令を実行できる設計でした。多くの場合、RISC CPU上のソフトウェアで実行する必要があるハードウェアに直接実装されたより複雑な命令がありました。
ほとんどのメインフレームアーキテクチャと、M68KおよびIntel 386までのほとんどすべてのPCデザインは、従来のマイクロコード化されたCISC CPUでした。これらの設計は、クロックあたりの処理速度が遅く、RISC CPUよりも多くのゲートを使用することが証明されました。
マイクロコード
マイクロコード化されたアーキテクチャ(MOS 6502)の例は、ここのエミュレーションで見ることができます。マイクロコードは画像の上部に表示されます。
マイクロコードは、命令を実行するためにCPU内でアクティブ化されるデータフローとアクションを制御します。マイクロコードのステップをループすることにより、CPUの一部をアクティブにし、ALUを介してデータを移動したり、他のステップを実行したりできます。CPU内の再利用可能なコンポーネントを複数のクロックサイクルにわたって調整して、命令を実行できます。6502の場合、マイクロコードによって一部のパイプラインアクションも実行できます。
マイクロコード化されたデザインは、命令を完了するのに数クロックサイクルかかる可能性を犠牲にして、ハードワイヤードチップよりも少ないシリコンを使用しました。設計に応じて、これらのCPUは命令ごとに異なる時間を要します。
ハードワイヤードアーキテクチャ
ハードワイヤード設計(必ずしもマイクロコードと相互に排他的ではない)は、命令を同期的に実行するか、複数のクロックサイクルにわたって何かを実行する独自のコーディネーターを持つ場合があります。これらは通常、専用のハードウェアをより多く使用するよりも高速であるため、同等の機能をマイクロコード化した設計よりも実装コストが高くなります。
これの有名な例は、元のAmdahl 470/6 CPUでした。これは、特定のIBM System / 370モデルのCPUのドロップイン代替品です。アムダールCPUは、IBMの370 CPUがマイクロコードに大きく基づいていた当時、ハードワイヤード設計でした。Amdahl CPUは、交換したIBM CPUの約3倍高速でした。
言うまでもなく、IBMは面白くなかったため、数年前に同意判決が期限切れになるまで、IBMがメインフレームアーキテクチャを開くことを余儀なくされた法廷闘争をもたらしました。
通常、このタイプのハードワイヤード設計は、さまざまな命令のタイミングと形式がRISC設計ほどパイプラインの範囲を許可しなかったため、RISC CPUほど高速なクロックではありませんでした。
複数号のデザイン
最新のCPUは、1つのスレッド内で一度に複数の命令を処理できる複数の問題アーキテクチャです。チップは、着信命令ストリームに対して動的な依存性分析を実行し、以前の計算の結果に依存性がない場合に並行して命令を発行できます。
これらのチップのスループットは、コードでどれだけの並列性を達成できるかに依存しますが、ほとんどの最新のCPUは、ほとんどのコードでサイクルごとに複数の命令を平均化します。
最新のIntelおよびその他のx86 / X64 ISA CPUには、旧式のCISC命令セットを、パイプライン化されたRISCスタイルの複数発行コアを介して供給することができるマイクロ命令に解釈するレイヤーがあります。これにより、パイプライン用に設計されたISA(ARMやPowerPCなどのRISCアーキテクチャ)を備えたCPUにはないオーバーヘッドが追加されます。
VLIWデザイン
Intel Itaniumがおそらく最もよく知られているVLIW設計は、主流のアーキテクチャとして取り上げられたことはありませんが、IIRCにはこのタイプの設計を使用するDSPアーキテクチャがいくつかあります。VLIW設計では、並行して発行される複数の命令を含む命令ワードを使用して、複数の問題を明示的にします。
これらは、並列化の依存関係と機会を特定し、各命令語で使用可能な複数のスロットに命令をドロップする、優れた最適化コンパイラに依存していました。
VLIWアーキテクチャは、マトリックス/配列演算が広範な並列処理の機会を提供する傾向があるため、数値アプリケーションで非常にうまく機能します。Itaniumにはしばらくの間、スーパーコンピューティングアプリケーションのニッチ市場があり、このタイプのISAを使用して少なくとも1つのスーパーコンピューターアーキテクチャ(Multiflow TRACE)が作成されました。
メモリとキャッシュ
最近のCPUはメモリよりもはるかに高速であるため、メモリからの直接読み取りは、メモリアクセスが完了するまでCPUをブロックする何百もの待機状態を生成する可能性があります。現在は複数の層で行われるキャッシュにより、最後に使用されたメモリの場所がキャッシュに保持されます。CPUは通常、ループでコードを実行するのに非常に多くの時間を費やすため、最近使用したメモリロケーションを再利用することで高いヒット率が得られることを意味します。このプロパティは「参照の局所性」と呼ばれます。
参照の局所性が得られる場合、CPUは最適速度に近い速度で動作できます。次のレベルまでキャッシュミスすると、多くの待機状態が発生します。メインメモリまでのキャッシュミスは数百に及ぶ可能性があります。
したがって、CPUチップの実際のスループットは、メモリアクセスパターンの効率に大きく依存する可能性があります。このためのコードの最適化に関する書籍はすべて書かれており、それ自体が複雑なトピックです。