Yunai

パイプライン方式

一つのCPUで複数の命令を少しずつ段階的にずらしながら同時実行する。一つの命令の実行中に次の命令の実行を始めてしまうことで高速化を図る。

Pipelineで実行した時の時間を表す式

N個の命令をD個ずつ同時に実行できるパイプラインで処理する際にかかる時間

具体的には、命令の数Nを同時に実行できる最大命令数Dで分割し、それにパイプラインピッチPをかけています。そして、各分割されたグループ(パイプラインステージ)を1ピッチずつ処理する時間を合計しています。

$$ \rm Time\ required\ to\ execute\ in\ N\ pipelines=P(N+D-1) $$

$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を走らせること。パイプラインを複数本用意して高速化。実行段階で実行可能の命令を複数のパイプラインに振り分ける。

ハザードへの対策

  1. 分岐処理をなるべく減らす。
  2. 分岐予測→投機実行で対応する。
  3. 分岐命令の前にある命令の中で分岐命令の後に移動しても結果が変わらない命令のいくつかを分岐命令の後に移動して、その命令を無条件に実行した後、実際の分岐を行う。

命令が固定長(?)なので各命令の実行時間を均一化できる→パイプライン制御を効率的に行える。