本の内容と自分が知っている業務で出てきた処理の内容が頭の中で混乱してしまったので
基本情報とは別に記述しようと思います。
逐次制御方式
命令1 A→B→C→D
命令2 A→B→C→D
命令3 A→B→C→D
A 命令の取り出し
B 命令の解読
C 対象データ読み出し
D 命令実行
命令1が終わったら後に命令2に移行します。一つの処理が終わったら次の処理に移ります。
パイプライン処理
1 2 3 4 5 6 7 8 9 10 11 12
命令1 A→B→C→D
命令2 A→B→C→D
命令3 A→B→C→D
---------------------------
12クロック
1 2 3 4 5 6
命令1 A→B→C→D
命令2 A→B→C→D
命令3 A→B→C→D
---------------------------
6クロック
命令実行手順の各段階のことをステージと呼びます。
上記は1つのステージを1クロックで処理できるCPUだと仮定しています。
6クロックで処理した方をパイプライン処理と呼びます。
分岐予測と投機実行
命令3 → 命令4
→ 命令5
上記のような命令の際に、命令4に行くか命令5に行くか分岐の結果がわからないと、次の命令の処理を開始することができません。
そこで、この分岐が実施されるのか、その場合の次の命令をどれかを予測することで無駄な待ち時間を生じさせないようにします。これを分岐予測といいます。
予測に基づいて分岐先の命令を実行する手法を投機実行といいます。
スーパーパイプラインとスーパースカラ
パイプライン処理による高速化を進める手法としてスーパーパイプラインとスーパースカラがあります。
スーパーパイプラインは各ステージの中身をさらに細かいステージに分割することで、パイプライン処理の効率アップを図るものだそうです。
簡単にいうとパイプラインを更に細かくしたイメージですね。
命令1 A¹A²A³→B¹B²B³→C¹C²C³→D¹D²D³
命令2 ↓ A¹A²A³→B¹B²B³→C¹C²C³→D¹D²D³
命令3 ↓ A¹A²A³→B¹B²B³→C¹C²C³→D¹D²D³
並行して処理できる範囲が増えたので効率がアップします。
スーパースカラはパイプライン処理を行う回路を複数持たせることで、まったく同時に複数の命令を実行できるようにしたものです。
命令1 A→B→C→D
命令2 A→B→C→D
命令3 A→B→C→D
命令4 A→B→C→D
同時に複数のパイプラインを走らせます。
CISCとRISC
CPUのアーキテクチャの話になります。
CPUには高機能な命令を持つCISCと単純な命令のみで構成されるRISCという2つのアーキテクチャがあります。
CISC(Complex Instruction Set Computer)
CISCはCPUに高機能な命令を持たせることによって、ひとつの命令で複雑な処理を実現するアーキテクチャです。
特徴は下記です。
・ マイクロプログラムを内部に記憶させることで高機能な命令を実現できる
・ 命令の追加や変更が容易
・ 便利な命令がそろっているので、機械語のプログラム作成がラク
・ 命令の実行速度は遅い
・ 命令の長さや実行速度がバラバラ
RISC(Reduced Instruction Set Computer)
RISCはCPU内部に単純な命令しか持たない代わりに、それらをハードウェアのみで実装して
ひとつひとつの命令を高速に処理するアーキテクチャです。
・ ワイヤードロジックによって全ての命令をハードウェア的に実装
・ 命令の追加や変更は難しい
・ 単純な命令があるだけなので手作業による機械語のプログラム作成は困難
・ 命令の実行速度が速い
・ 命令の長さや実行速度がほとんど等しい
まとめ
CPUの中でも細分化されて様々な処理が走っていることがわかりました。
中身を知っていることは業務で行っているプログラミングの理解にも影響するので
基本情報の内容はしっかりと覚えていきます。