4

私は3年前にプロセッサアーキテクチャを学びました。

今日まで、私はシーケンシャルインストラクションの前になぜexecute位置していたのか理解できません。memory

命令の実行中に、[ mov (%eax) %ebx]メモリにアクセスする必要はありませんか?

ありがとう!

4

1 に答える 1

8

通常研究されている古典的な RISC パイプラインを思い出してみましょう: http://en.wikipedia.org/wiki/Classic_RISC_pipeline。その段階は次のとおりです。

  • IF = 命令フェッチ
  • ID = 命令デコード
  • EX = 実行
  • MEM = メモリアクセス
  • WB = レジスタライトバック

loadRISC では、メモリを操作するためにs とsのみを使用できstoreます。そしてEX、メモリアクセス命令のステージは、メモリ内のアドレスを計算します(レジスタファイルからアドレスを取得し、それをスケーリングするか、オフセットを追加します)。MEM次に、アドレスがステージに渡されます。

あなたの例mov (%eax), %ebxは、実際には追加の計算なしのメモリからのロードであり、RISC パイプラインでも表すことができます。

  • IF- 命令メモリから命令を取得する
  • ID- 命令をデコードし、「eax」レジスタをオペランドとして ALU に渡します。WBの出力として「ebx」を覚えておいてください(コントロールユニット内)。
  • EX- ALU で「eax+0」を計算し、結果を次のステージに渡しMEMます (メモリ内のアドレスとして)
  • MEM-EXステージから (ALU から) アドレスを取得し、メモリに移動して値を取得します (このステージでは、パイプラインのブロックにより、メモリに到達するまでに数ティックかかる場合があります)。値を渡すWB
  • WB- から値を取得しMEM、レジスタ ファイルに戻します。コントロールユニットはレジスタファイルを次のモードに設定する必要があります:「書き込み」+「EBX選択」

真の CISC 命令では、状況はより複雑です。たとえば、 (メモリからadd (%eax), %ebxワードをロードし、次に T+を にストアします)。この命令は、アドレス計算と ALU での加算の両方を必要とします。これは、最も単純な RISC (MIPS) パイプラインでは簡単に表すことができません。T[%eax]%ebx%ebx

最初の x86 CPU (8086) はパイプライン処理されず、常に 1 つの命令しか実行されませんでした。しかし、80386 以降では 6 ステージのパイプラインがあり、RISC よりも複雑です。MIPS と比較したパイプラインに関するプレゼンテーションがあります: http://www.academic.marist.edu/~jzbv/architecture/Projects/projects2004/INTEL%20X86%20PIPELINING.ppt

スライド 17 は次のように述べています。

  • Intel はmemEXステージを組み合わせてロードとストールを回避しますが、アドレス計算のストールを作成します
  • mips のすべての段階は 1 サイクルかかりますが、Intel では特定の段階で複数のサイクルが必要になる場合があります。これにより、非対称のパフォーマンスが作成されます

私の例では、いくつかの CPU ティックに対してadd結合された " " ステージで実行され、多くのストールが生成されます。MEM+EX

最新の x86 CPU はパイプラインが非常に長く (通常は 16 ステージ)、内部的に RISC に似た CPU です。デコーダー ステージ (3 ステージ以上) は、ほとんどの複雑な x86 命令を一連の内部 RISC のようなマイクロ操作に分割します (マイクロコードの助けを借りて、命令ごとに最大 450 のマイクロ操作が生成される場合があります。より一般的なのは 2 ~ 3 のマイクロ操作です)。複雑な ALU/MEM 操作の場合、アドレス計算用の microop、メモリ ロード用の microop、ALU アクション用の microop があります。マイクロオペレーションはそれらの間に依存し、異なる実行ポートに計画されます。

于 2012-12-07T05:28:44.987 に答える