いつか、技術ブログを

新人SE(OJT中)が技術ブログを書きたがっているブログです

パイプライン制御とは?

応用情報(午前)の、パイプラインに関する問題を解けなかったので復習しました!

解けなかった問題

解けなかった問題はこちらです↓
平成28年秋期問8 パイプライン制御|応用情報技術者試験.com

「平成28年度応用情報技術者試験 秋期 午前 問8」です。 問題文を書いておくと、

すべての命令が5サイクルで完了するように設計された、パイプライン制御のコンピュータがある。20命令を実行するのには何サイクル必要となるか。ここで、すべての命令は途中で停止することなく実行でき、パイプラインの各ステージは1サイクルで動作を完了するものとする。

という問題です。

問題の解き方

パイプライン制御では、1つの命令を、いくつかのステージに分けて、並行して動作させます。
問題を読んでいきましょう。

すべての命令が5サイクルで完了するように設計された、パイプライン制御のコンピュータがある。

パイプラインの各ステージは1サイクルで動作を完了するものとする。

とあるので、1ステージ=1サイクルと考えていいと思います。
そして、1命令を全て完了するのに5サイクル(=5ステージ)かかるということなので、以下のような図に表せます。
f:id:ramenchahan:20180325155254p:plain

20命令を実行するのには何サイクル必要となるか。

とあるのですが、20命令を考えるのは多くて大変なので、まずは5命令の実行に必要なサイクルを考え、そこから「ステージ数M、命令数N」の場合を導いてみます。

f:id:ramenchahan:20180325155650p:plain

サイクル数=M+(N-1)
という計算をすればサイクル数を求められることがわかりました。
問題ではステージ数が5、命令数が20なので、
サイクル数=5+(20-1)=24
となりますね!

そもそも、なんでパイプライン制御できるの?

なんで処理を並行して行えるのか?並行したらちょっとずつしか進められなくて結局同じ時間かかるんじゃないの?と私は思ってしまいました。
ですが、↓のページを読んでコンピュータの基本的なことを思い出しました。

コンピュータアーキテクチャの話(123) コンピュータの命令処理 | マイナビニュース
コンピュータアーキテクチャの話(124) パイプライン処理と構造的ハザード | マイナビニュース

CPUの1命令は、「命令取り出し(フェッチ)」、「命令解読」、「オペランド読み出し」、「演算実行」というような段階を踏んでいます。
そこで、「命令取り出し」を行なっているときは演算器は休んでいる、など、段階別にCPUの使っている場所が違う(?)ため、並行して実行できるんですね!

感想

式を覚えていなくても、試験中に上記のような表をかければ式を導けると思います。
パイプライン制御とはどういうものか、ということだけは忘れないようにしたいです!