Index / Reload
ありがとうございます。> なんらかの方法でパイプラインを巻き戻しているようだ。大半のプロセッサは分岐予測と同様に、ロードも予測ミスした命令から再フェッチしているはずです。Pentium4はリオーダバッファに細工がしてありそこから再実行すべき命令が供給されていたと思うのですが(Selective Replay)、P4とP6系ではそのへんの構造がまったく異なりますから、不採用かもしれません。マイクロアーキテクチャ的にもP6ではP4での時ほどの効果は出ないはずですし。
> ふるかわさん情報ありがとうございます。Core 系はアドレスが決まったものはロードもストアも投機的に issue し、、後で memory ordering buffer が調停するようです。実際テストプログラムを書いても 48 ロード & 32 ストアまできっちり out-of-order 実行されています。
選択的再実行そのものは原理的にはメモリデータフローの予測ミスにも使えるはずですが、L1-L2の予測ミスだけであれば、固定サイクルだけバブルを挿入するというシンプルな実装もありえます。(そうするとメモリデーターフローのような非同期的なイベントは扱えません)
Pentium4にはSelective Replayという、ロードレイテンシを予測ミスした場合、依存する命令だけを再実行する機構がついていました。(常に1次キャッシュにヒットすると予測するんだったかな)この例のようにメモリデータフロー依存がある場合についての動作はわかりません。Core iがどうなっているのかもわかりません。
ありがとうございます。
> なんらかの方法でパイプラインを巻き戻しているようだ。
大半のプロセッサは分岐予測と同様に、ロードも予測ミスした命令から再フェッチしているはずです。
Pentium4はリオーダバッファに細工がしてありそこから再実行すべき命令が供給されていたと思うのですが(Selective Replay)、P4とP6系ではそのへんの構造がまったく異なりますから、不採用かもしれません。
マイクロアーキテクチャ的にもP6ではP4での時ほどの効果は出ないはずですし。
> ふるかわさん
情報ありがとうございます。
Core 系はアドレスが決まったものはロードもストアも投機的に issue し、、後で memory ordering buffer が調停するようです。
実際テストプログラムを書いても 48 ロード & 32 ストアまできっちり out-of-order 実行されています。
選択的再実行そのものは原理的にはメモリデータフローの予測ミスにも使えるはずですが、L1-L2の予測ミスだけであれば、固定サイクルだけバブルを挿入するというシンプルな実装もありえます。
(そうするとメモリデーターフローのような非同期的なイベントは扱えません)
Pentium4にはSelective Replayという、ロードレイテンシを予測ミスした場合、依存する命令だけを再実行する機構がついていました。(常に1次キャッシュにヒットすると予測するんだったかな)
この例のようにメモリデータフロー依存がある場合についての動作はわかりません。
Core iがどうなっているのかもわかりません。