条件付きストア命令が発生したときに x86 プロセッサが何をするかを調べようとしています。たとえば、パイプラインのフロント エンドを停止し、ROB バッファが空になるのを待ってから、フロント エンドの停止を停止して SC を実行しますか? 基本的に、プロセッサを非投機的にするように強制します...
ありがとう
条件付きストア命令が発生したときに x86 プロセッサが何をするかを調べようとしています。たとえば、パイプラインのフロント エンドを停止し、ROB バッファが空になるのを待ってから、フロント エンドの停止を停止して SC を実行しますか? 基本的に、プロセッサを非投機的にするように強制します...
ありがとう
指示を参照していると思います。CMOVcc
古いx86プロセッサについてはわかりませんが、最近のプロセッサ(投機的で故障したため)は、条件付きストアを次のように実装しています。
old value = mem[dest address]
if (condition)
mem[dest address] = new value
else
mem[dest address] = old value
条件部分は、次のようなハードウェアで実装できます。
cond
|\ |
----| \|
new | \
| | dest
| |---------
| | |
__| / |
| | / |
| |/ |
|____________|
したがって、憶測を破る必要はありません。実際に店が開かれます。条件によって、書き込まれるデータが古い値になるか新しい値になるかが決まります。
(汎用) x86 プロセッサは、あなたが言及したことを何もしません。命令を次々とフェッチして実行するだけです。
他のすべては透過的に処理され、見ているプロセッサに大きく依存するため、質問に対する一般的な答えはありません。
ストールの問題を回避する方法に興味がある場合は、x86のウィキペディアのページから始めてください(名前を変更して名前を登録します。取得されていないブランチから結果を破棄するだけです)。