昨日の続き。
んで、CPUの内部は分担作業を順番にこなすことで高速化をしていて、
それをパイプラインというわけだ。
ところで、命令には色々あって条件によって分岐する命令もある。
昨日書いた、↓は、順序よくこなしている物の、1~3はある意味で先読みをして先行着手している状態だ。
1,メモリーから命令の読み出し
2,命令の解釈
3,命令に従って別のメモリーからデータの読み出し
4,読み出した命令の実行
5,実行結果をメモリーに書き出し
と言うことは、先行する命令が4で実行された結果、
先読みしていた1~3が無駄になる。
これを制御ストールという。
または、先行する命令の結果を受けて後続の命令が計算するためには、
先行する命令が5の処理を終えるまで、後続の命令は3の処理を待たないといけない。
これがデータストールという。
このように、パイプライン処理というのは非常に強力な武器ではある物の、
どこか一部で問題が生じるとトタンに遅延が発生するガラス細工のような物だ。
Pentium4等は、このパイプラインを数十段にする事で高速化をしたけど、
逆に、ストールが起きないプログラム作りをしないとパフォーマンスがかえって低下すると言うこととなる。
それが、Pentium4の悪評に繋がったわけだ。
また、このパイプラインとストールの話はなにもCPUに限った話では無く、
スケジュールをパイプライン化すると、
1つの作業の遅延が全体の遅延となるワケだ。
くわばらくわばら。