パイプライン処理は、命令の処理を複数の工程に分け、違う命令の工程を重ねて進める方式です。工場の流れ作業のように、単位時間当たりに完了する命令を増やします。
この記事では工程の重なり・スループット・ハザードを整理します。具体的な処理時間や高速化率の計算は、最後の無料noteで練習できます。
1.違う命令の工程を重ねる

取得 → 解読 → 実行 → 書込みの4工程で考えます。工程を重ねない場合は命令Aの全工程を終えてからBを始めます。パイプラインではAが解読へ進む間にBを取得できます。実際の工程数や構成はCPUにより異なります。
2.増えるのはスループット
レイテンシは1命令が開始してから完了するまでの時間、スループットは単位時間当たりの完了数です。パイプラインは工程を重ねてスループットを高めます。1命令の時間まで必ず短くなるとは限りません。
単純なモデルでは、パイプラインが満たされた後は次々に命令が完了します。図の4工程・3命令では、工程を重ねない12クロックに対し、停止なしなら全体6クロックです。
3.ハザードで工程が止まることがある
| 種類 | 原因 |
|---|---|
| データハザード | 前の命令の結果が必要 |
| 制御ハザード | 分岐先がまだ確定していない |
| 構造ハザード | 同じ資源を同時に使おうとする |
フォワーディングは結果を後続の処理へ渡し、分岐予測は分岐先を予測して先へ進むための工夫です。予測が外れた場合などは、処理のやり直しが必要になります。
4.並列処理との関係
パイプラインも処理を重ねる技法の一つです。複数コアで別の仕事を同時に処理する方式とは、重ねる対象が異なります。「並列処理は必ずCPUを分割する」とは限定せず、工程の重なりと複数の実行資源を区別しましょう。
理解を確かめる確認問題
パイプライン処理の主な目的はどれでしょうか。
ア:主記憶容量を増やす イ:命令処理のスループットを高める ウ:データを圧縮する エ:通信速度を上げる
解答・解説を見る
正解はイです。工程を重ねて、一定時間に完了する命令数を増やします。
まとめ:工程の重なりから、全体の時間を考える
パイプラインは工程を分けて重ねる仕組みです。単一命令のレイテンシと、命令全体の完了時間を分けて確認しましょう。
参考:Arm:命令パイプライン

コメント