0

プロセッサが単一の命令を実行するとき、これはアトミック操作であると見なすことができます。しかし、プロセッサがパイプラインを使用する場合、それはどのように機能するのでしょうか? 命令は、すべて異なるステップで、他の多くの命令と並行して、いくつかのステップで実行されます。しかし、それらの他の命令の 1 つが私たちの命令を妨害するとしたらどうなるでしょうか? プロセッサが命令の影響を「ロールバック」したり、干渉を完全に回避したりするにはどうすればよいでしょうか?

4

2 に答える 2

3

さまざまなプロセッサで採用されている戦略はたくさんあると思います。私はかつて、シミュレートされたプロセッサにパイプラインを追加するプロジェクトがありました。私が採用した技術は

  1. バブリング。後の指示に干渉する可能性のある特定の操作については、干渉がどこまでさかのぼって発生する可能性があるかを知っています。たとえば、次の命令がパイプラインの1つのステージを通過するまで条件付きジャンプの評価が完了しない場合、実質的にNOPであるものを条件付きジャンプのすぐ後ろのパイプラインに配置することがあります。

  2. 転送。いくつかの条件下で、現在の命令より1〜2段階進んでいるが、通常アクセスするレジスタ/ゲートにまだコピーされていない命令の値が必要であることがわかりました。この場合、後の段階から直接アクセスします。

  3. 分岐予測と修正。予測の部分は、衝突を回避する方法についてはそれほど重要ではありませんが、注意することが重要です。条件付きジャンプの場合、何が発生するかを予測し、次の命令をできるだけ早くパイプラインにロードする必要があります。私は常に、ジャンプが行われないように条件が評価されると想定していました。これは、最初にジャンプアドレスを評価しなくても、次の命令をパイプラインにすぐにロードできるため、バブルの必要性を回避できるためです。

予測が実現したとき、イェーイ、私は幸せです。予測が実現しない場合は、楽観的に早期に開始した次の命令の影響を無効にする必要があります。これを行うには、前のカップルパイプラインステージ内のナンドゲートに信号を切り替えて、現在そこで実行されている命令を効果的にNOPアウトします。

これは私が私の唯一の個人的な経験から覚えていることです。命令パイプラインのウィキペディアのページを見て、同じアイデアがいくつか存在することを確認しました。はるかに優れた説明があります:) http://en.wikipedia.org/wiki/Instruction_pipeline

于 2012-04-26T20:04:15.207 に答える
1

これはプロセッサの設計者によって定義され、特定のプロセッサごとに異なる場合があります。たとえば、一般的な Intel/AMD x86/x64 プロセッサ ファミリを例にとると、単一の命令が常にアトミックであるとは限りません

話しているプロセッサの種類を常に指定する必要があります。また、x86/x64 以外のプラットフォームの場合は、ここではなく、 Electronics forumでより適切な回答が得られる可能性があります。

于 2012-04-26T19:45:47.453 に答える