基本情報技術者~CPU[5]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



今回はCPUの高速化について書いていきます!



今回でCPUの内容はラストです。



では早速始めましょう。



CPUの高速化技術



これまで、CPUの命令の実行手順について触れてきました。



内容を覚えていますでしょうか....。



CPUの性能指標というものがありましたね!



忘れたという方はぜひこちらの記事で読んでみてください!



potato-head0809.hatenablog.com



では今回どういうものを見ていくのか。



今まで、命令の実行手順には4つの段階があったのを覚えていますか?



「命令の取り出し」「命令の解読」「対象データの読み出し」「命令実行」



これら4つの段階です!



この命令実行を高速でするためには



どんな工夫が必要かということを見ていきます!



f:id:potato_head0809:20200715095205p:plain




高速にするためには、簡単に言うと



1つ1つ命令を実行するより、



複数の命令を並行して実行しよう!ということになります。



これまで学んできた命令実行の流れは



「逐次制御方式」というものですが、



効率を良くする手法として、



「パイプライン処理」というものを見ていきましょう!



パイプライン処理



では、早速パイプライン処理を図で見てみましょう。



f:id:potato_head0809:20200715095628p:plain



上の図のように、自分の処理が終わったら、



次の処理にバトンタッチをして、



そのあとは、次の命令に取り掛かることで、



待ち時間を無くして効率を上げています。



ちなみに、命令実行手順の各段階(A, B, C, D)を



「ステージ」と言います。覚えていてください!



この流れを全体で見てみると、次の図のようになります。



f:id:potato_head0809:20200715095850p:plain



では、ここで今まで学んできた「逐次制御方式」だと、



どのような感じになるのか比較してみます。



f:id:potato_head0809:20200715095948p:plain




ご覧の通り、図を見るだけでも効率が悪そうですよね。笑



ですが、パイプライン処理は次々と命令を先読みしています。



次に実行すべき命令はどれか?などの選択肢が出てきた場合、



間違ってしまうと先程見たバトンタッチが無駄になることもあります...。



この無駄になることを、「分岐ハザード」と言います。



分岐予測と投機実行



先程も言いましたが、次に実行する命令はどれか。という状況は起きます。



f:id:potato_head0809:20200715100407p:plain




パイプライン処理の良いところは命令を先読みして



効率化を図っていることでしたよね?



では、上の図のような分岐が起きたとき、



どのようにして判断しているのでしょうか。



それは「分岐予測」と言われるものです。



f:id:potato_head0809:20200715100632p:plain




予測??



そうなんです。予測です。笑



そして、その予測に基づいて、



「無駄になるかもしれないが、多分これだから先にやっておこう!」



と命令を実行していくのです。



この分岐先の命令を実行開始することを「投機実行」と言います。



f:id:potato_head0809:20200715100828p:plain




万が一予測が外れてしまうと...?



はい。全て無駄になります。



ですので、精度の高い予測を行ってもらうしかありません!



このようにして、CPUは高速化の為に頑張ってくれています!



スーパーパイプライン



スーパーパイプラインとは、パイプライン処理による高速化をさらに推し進める手法です。



f:id:potato_head0809:20200715101338p:plain




各ステージの中身をさらに細かく分けます。



そうすることで、パイプライン処理の効率アップを図るものです。



スーパースカラ



こちらの手法も、高速化を推し進める手法です。



f:id:potato_head0809:20200715101550p:plain




パイプライン処理を行う回路を複数持たせます。



そうすることで、同時に複数の命令を実行できるわけです。



さいごに。



今回で、CPUについては終了なります。



どうだったでしょうか。



何度か繰り返していると、理解できると思います。



しかし、あんまり何回も繰り返すのって辛いですよね。



1回で理解できるような記事を書くように努力していきます!



CPUの命令実行処理なんて分からなくてもパソコンは使えます。



でも、こういう処理が行われているのか。なんて分かったら



楽しくなりませんか?笑



次回は別の内容に触れていきます!



最後までご覧頂きありがとうございました。



よかったらTwitter(@potato_head0809)のフォローもお願いします!