RISC / CISC命令の実行には何クロックサイクルかかりますか?


13

よると、デジタルデザインとコンピュータアーキテクチャハリスとハリスによって、以下を含むMIPSプロセッサを実装するにはいくつかの方法があります:

シングルサイクルマイクロアーキテクチャは、 1サイクルで全体命令を実行します。(...)

マルチサイクルマイクロアーキテクチャの短い一連のサイクルで実行される命令。(...)

パイプライン化されたマイクロアーキテクチャは、シングルサイクルマイクロアーキテクチャにパイプライン化を適用します。

アーキテクチャは、多くの場合、RISCまたはCISCに分類されます。RISC対CISCから:

RISCプロセッサは、1クロックサイクル内で実行できる単純な命令のみを使用します。

MIPSはRISCアーキテクチャであるため、私は上記の定義に混乱しており、それらの間に何らかの矛盾がないのではないかと考えています。すなわち:

  1. RISC命令をより短いサイクル(フェッチ、デコードなど)に分割できる場合、命令全体を実行するのに1クロックサイクルしかかからないと言えるでしょうか。ステップを実行するのに1クロックサイクルかかりませんか?
  2. それはない本当に 1つのRISC命令を実行するために1つのクロックサイクルを取りますか?たとえば、キャッシュミスが発生し、プロセッサが遅いDRAMを待たなければならない場合はどうなりますか?これは、命令の実行をかなり長くするべきではありませんか?
  3. 1命令サイクルとは正確には何ですか?1つの命令が完了するのにかかる時間ですか(つまり、1つまたは複数のクロックサイクル)。
  4. 1つのCISC命令はクロック/命令サイクルにどれくらいかかりますか?

2
通常、1つ以上:-)。
ラッセルマクマホン

回答:


22

RISCとCISCの実際的な定義は非常に不明瞭でぼやけているため、ほとんど意味がありません。今では、RISC命令セットは必要最低限​​でありながら高速である一方で、CISCアーキテクチャにはより強力な個別命令(たとえばDIVなど)を備えたより豊富な命令セットがあるという意味で、「哲学」に関するものと考えるのが最善です。コンパイラに任せて複雑な操作を実装します。CISC命令セット(x86など)でさえ、IntelチップとAMDチップの両方で内部命令に変換され、RISCプロセッサのように実装されます。質問に答えるには:

  1. オリジナルのアカデミックRISCプロセッサー(およびおそらく最初の商用バージョン)は、フェッチとデコードを含め、サイクルごとに実際に1つの命令を実行しました。これは、各ステージの操作がシンプルで明確に定義されていたため、データパスが非常にきれいだったために可能になりました。(ここでのトレードオフは、この方法で実装できる非常に単純な命令のみです)。それが現実の世界にぶつかると、物事はぼやけてきました。パイプライン化やスーパースカラーアーキテクチャのようなものは、単純なRISC / CISCの二分法を不可能にします。

  2. 元のRISCチップは、サイクルごとに1つの命令を実行しようとしましたが、レジスタファイルでデータが利用可能だった場合は実行できました。もちろん、プロセッサがDRAMにアクセスする必要がある場合、それは(多くの)時間がかかります。RISCとは、サイクルごとに命令を「試行」することです。

  3. 1命令サイクルは、フェッチ間にかかる時間です。

  4. 命令と命令セットのアーキテクチャに大きく依存します。CISCアーキテクチャでも、一部の命令は非常に高速に実行できます(たとえば、左または右へのシフトなど)。実行が非常に遅いものもあります(数十サイクル以上)。VAXアーキテクチャ(おそらくCISC哲学の頂点)には、本当に複雑な命令がありました。ちなみに、CISCアーキテクチャは通常、RISCアーキテクチャよりもアセンブリでプログラミングする方が簡単です。なぜなら、それはほとんど高級言語に似ているからです!


5

短い答え

  1. 命令のデコードと実行のステップは、前の命令の次のステップと並行して実行されます。この手法は、パイプライン処理として知られています。以下のRISCプロセッサーについてを参照してください。

  2. 単一発行のRISCアーキテクチャは、通常、レジスタごとに登録するのではなく、メモリをヒットするロード/ストア操作の待機状態と時間がかかるため、サイクルごとに平均して1命令よりわずかに少なくなります。遅延スロットは、この時間の一部を取り戻すことができるアーキテクチャフックを提供します。以下のRISCプロセッサーについてを参照してください。

  3. 命令サイクルは、命令の実行に必要な時間の長さです。これは、アーキテクチャと(場合によっては)命令によって異なります。たとえば、MIPS R2000 / 3000などのほとんどの命令は1サイクルかかります。メモリアクセス(ロード/ストア、ブランチ)を伴う命令は、1サイクル以上かかりますが、遅延スロットは、遅延スロットで他の何か(おそらくNOP)を実行できる可能性があることを意味します。パイプライン化されていないアーキテクチャは、数クロックサイクルの命令サイクルを持つことができ、多くの場合、アドレッシングモードによって異なります。参照オンRISCプロセッサ、従来のCISCのarchitecuresハードワイヤードアーキテクチャ以下。

    複数の問題のデザインでは、複数の命令を並行して実行することにより、この概念を多少曖昧にすることができます。

  4. 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チップの実際のスループットは、メモリアクセスパターンの効率に大きく依存する可能性があります。このためのコードの最適化に関する書籍はすべて書かれており、それ自体が複雑なトピックです。


3

学生にとっては簡単です。

すべての非自明なプロセッサはパイプライン化されています。一端に命令をシャベルするプリフェッチユニット、実際の作業を行う中央に多数の実行ユニット、およびレジスタまたはメモリへの書き込みが完了した後に完了した命令を宣言する発行ユニットがあります。複数の実行ユニット(整数ALU、浮動小数点ALU、ベクトルユニットなど)がある場合、クロックサイクルごとに複数の命令を発行(「リタイア」と呼ばれることもあります)できる場合があります。CPUはどのようにしてサイクルごとに複数の命令を配信できますか?これについてはさらに詳しく説明します。

あなたが言うように、キャッシュミスの遅延がある場合はどうなりますか?Intel Hyperthreadingは、これに対する新しいソリューションです。2つのCPU状態レジスタ、1つの制御ロジック、および発行ユニットです。1つの仮想CPUがストールするとすぐに、もう一方の状態にスワップします。(これは非常に単純化しすぎです)

その結果、最新のCPUマニュアルではあいまいな命令タイミングが与えられ、たとえば、対応できないハードウェアからリアルタイムでビデオ出力しようとしている場合、サイクルに正確なタイミングコードを記述することははるかに困難です。

(「1つのCISC命令がクロック/命令サイクルにどれくらいかかるか?」に対する具体的な回答は、「製造元のリファレンスマニュアルを参照してください。命令ごとのタイミングがあります」)


0

他の人はたくさんの良い資料を書いているので、私は答えを短くしておきます:昔(1980年代はここ)、その日の8ビットプロセッサ(6800、6502、Z80、6809など)は考慮されていましたCISC。一部の命令は2クロックサイクルで実行できますが、これらはプロセッサステータスレジスタのフラグビットの設定/クリアなどの単純な命令です。他の命令の実行には、2〜6クロックから最大9クロックサイクルかかります。これらのプロセッサにはかなり強力な命令があり、Z80にはメモリ内の一連のバイトに同じ値を書き込むメモリブロッククリア命令があり、1つの命令で大きなブロックを効果的にクリアし、いくつかのレジスタを設定して実行しますLDIR命令(ロード、インクリメント、繰り返し)。

(メモリからの)6502プロセッサには56命令がありましたが、13のアドレッシングモードが強力な命令セットを作成しました。

RISCは長くなり、異なるアプローチを採用し、すべてが単一のクロックサイクルで実行される少数の命令を使用しました。プログラムは実行する操作が単純であるため、より多くのプログラムが必要になるため、プログラムはより長くなり、より多くのメモリを占有する傾向があります。

RISCアーキテクチャで最初に試みたのは、トランスピューターまたはAcorn Riscプロセッサーでしたか?


おそらく、パイプライン化された最初のRISCタイプのアーキテクチャは、シーモアクレイが設計したCDC 6600でした。RISCという用語が広く使用されるようになるのは、数十年前のことです。MIPS、ARM、およびその他のいくつかのRISCマイクロプロセッサの設計は、1980年代から1985年代に遡り、これらのチップを使用した最初の商用ハードウェアが1980年代中頃に登場しました。
ConcernedOfTunbridgeWells

個々のトランスピュータチップは非常に高速でしたが、RISCチップに通常関連付けられているものと同じタイプのアーキテクチャではありませんでした。 en.wikipedia.org/wiki/Transputer#Architecture
ConcernedOfTunbridgeWells

静電気防止のケースには、歴史的なマイクロプロセッサコレクションの一部であるトランスピュータが数台あります。それらを使用したことはありませんでしたが、当時はそれらを試してみるのはとても楽しかったでしょう。
ディーン

@ConcernedOfTunbridgeWells私はCDC 6600の命令セットを見ました。デザインはRISCの原理の一部を具体化(および予測)しているように見えますが、浮動小数点除算命令の実行には29サイクルかかります!そして、除算命令を含めることは典型的なRISC原則に反するものですが、非常に興味深いコメントをありがとう!
crgrace

主なRISCのような属性は、パイプライン化された命令フェッチ/デコード/実行メカニズムとロードストアアーキテクチャでした(つまり、アドレスを計算するための暗黙的なメモリアクセスを伴うアドレス指定モードはありません)。実際、一部のRISC命令セット(IBM POWERなど)は実際には非常に大きいですが、ロード/ストアアプローチを使用して、一貫した実行時間を確保しています。
ConcernedOfTunbridgeWells
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.