パイプライン方式
一つのCPUで複数の命令を少しずつ段階的にずらしながら同時実行する。一つの命令の実行中に次の命令の実行を始めてしまうことで高速化を図る。
-
自動車のライン生産方式の例
自動車工場では、一つの車を0から100まで作ってから次の車を作る、ということはせず、処理過程毎に行う。
Pipelineで実行した時の時間を表す式
N個の命令をD個ずつ同時に実行できるパイプラインで処理する際にかかる時間
具体的には、命令の数Nを同時に実行できる最大命令数Dで分割し、それにパイプラインピッチPをかけています。そして、各分割されたグループ(パイプラインステージ)を1ピッチずつ処理する時間を合計しています。
$$ \rm Time\ required\ to\ execute\ in\ N\ pipelines=P(N+D-1) $$
-
Nが10、Dが2、Pが1ピッチの場合
この場合、10個の命令を2個ずつ同時に処理できるパイプラインで処理するのに、合計で11ピッチの時間がかかることを意味します。
$\rm{Timerequired\ to\ execute\ in\ N\ pipelines} = P(N+D-1) = 1(10+2-1) = 11ピッチ$
$P:$ Pipeline Pitch (※Pipelineの各ステージは1pitchで処理されるとする。CSやEngineeringの分野では、周期的な出来事やプロセスの間隔)パイプラインの各ステージが1ピッチで処理される時間
$N:$ Number of instructionsパイプラインで処理する命令の総数
$D:$ 同時に実行できる最大命令数=1命令のステージ数に一致パイプライン内で同時に実行できる命令の最大数
clock pitchはプロセッサクロックの周期を指し、ディスクのトラックピッチはディスク上のトラック間の距離を表します。
パイプライン・ハザード(Pipeline hazards)
パイプライン処理を行うことによって起こる、プログラム処理の乱れのことです。 Pipeline processがスムーズに動作せず、先読みした命令が無駄になったり、待ち合わせが発生したりと、処理の乱れが起きる。
Control hazard(Branch hazard)
Structural hazard
ハードウェア資源の競合に起因する乱れ。
Data hazard
後続の命令で用いるデータが、他の命令の結果待ちになるパイプライン処理の乱れ。
Super Pipeline
パイプラインのstageを細分化して増やすことで高い周波数で動作できるようにし、さらなる高速化を図る。
Super Scholar
Pipeline processingを行う回路を複数持たせることで、全く同時に複数のpipelineを走らせること。パイプラインを複数本用意して高速化。実行段階で実行可能の命令を複数のパイプラインに振り分ける。
ハザードへの対策
- 分岐処理をなるべく減らす。
- 分岐予測→投機実行で対応する。
- 分岐命令の前にある命令の中で分岐命令の後に移動しても結果が変わらない命令のいくつかを分岐命令の後に移動して、その命令を無条件に実行した後、実際の分岐を行う。
- 分岐予測と投機実行
命令が固定長(?)なので各命令の実行時間を均一化できる→パイプライン制御を効率的に行える。