リプレイシステム

リプレイシステム（英: Replay system）は、Intel Pentium 4 プロセッサのあまり知られていないサブシステムである。リプレイシステムの主要な機能は、プロセッサの命令スケジューラによって誤って実行に回された処理を捕捉することである。リプレイシステムによって捕捉された処理は、その後適切な実行に必要な条件が満たされるまでループの中で再実行される。

リプレイシステムの起源 
リプレイシステムはインテルの、クロックスピードを増加させ続けるという今や存在しない探求の結果として生まれた。こうした高いクロックスピードは、非常に長いパイプラインを必要とした(Prescott コアで 31 ステージ)。このため、Prescott コアはスケジューラと実行ユニットとの間にステージが6つも存在する。許容できるパフォーマンスを維持しようとする試みの中で、インテルの技術者はスケジューラを非常に楽観的な設計にしなければならなくなった。

リプレイシステムの動作 
Pentium 4 プロセッサのスケジューラは非常に積極的で、うまく実行できる保証がなくても命令を実行に回してしまう(特に、スケジューラはすべてのデータが L1 キャッシュに存在すると仮定している)。実行が失敗する典型的な理由はデータが利用できないことで、それはほぼキャッシュミスのためである。このとき、リプレイシステムは動作を開始する。リプレイシステムはスケジューラに停止するよう信号を送り、失敗した依存のある命令列を、実行が成功するまで繰り返し実行し続ける。

性能上の考察 
予期されるように、特定のケースでリプレイシステムが性能に非常に悪い影響を及ぼすことがある。通常の状況では、Pentium 4 の実行ユニットは、およそ 33% の時間使用されている。リプレイシステムが起動されると、ほぼすべてのサイクルで実行ユニットを占有してしまう。これは消費電力の増大をもたらすものの（消費電力は重要なアーキテクチャ設計における要素と見なされつつあるが）、どのみち実行できる命令は無いので、性能上のペナルティはない。しかし、ハイパースレッディング が使用されている場合、リプレイシステムが動作すると、他のスレッドが実行ユニットを活用できないようにしてしまう。これが、ハイパースレッディングに関してパフォーマンスの低下が見られた真の理由である。Prescott ではリプレイキューが装備され、リプレイシステムによる実行ユニット占有時間が低減された。

一方で、各スレッドが異なる種類の処理を実行している場合、リプレイシステムが処理を妨げることはなく、パフォーマンスの向上が見られる。ハイパースレッディングのパフォーマンスがアプリケーション依存であるのはこうした理由によるものである。

参考文献
Replay: Unknown Features of the NetBurst Core

インテル