柦椷儗儀儖暲楍 I

# 命令レベル並列　I

#### 6.1.1　並列処理

ユーザと設計者がCPU性能を議論する場合、最終的な性能測定基準はCPU実行時間である。

あるプログラムのCPU実行時間　＝　CPUクロック・サイクル数　X　クロック・サイクル時間

あるプログラムのCPU実行時間　＝　CPUクロック・サイクル数　／　クロック・サイクル周波数

CPUクロック・サイクル数＝プログラム中の実行命令数　X　1命令当たりの平均クロック数（CPI）

命令当たりの平均クロック･サイクル数（clock cycle per
instruction）CPI

以下の公式も便利

CPU時間　＝　実行命令数　X　CPI　X　クロック･サイクル時間

パイプライン化によりCPIが１に近い値に低減された
命令レベル並列でCPIを１以下にすることができる。

#### 6.1.2　並列パイプライン

図６．２

このような並列実行を行うには、④並列実効の制御にあるように　同時実行する命令に依存性がないことを保証する必要がある。依存関係のある命令が同時にフェッチされた場合、どちらかを待たせるなどの工夫が必要。

④の解決法１：　並列実行できる命令の組をコンパイラが指定する　→　VLIW

④の解決方法２：ハードウエアが並列可能な命令を選んで並列実行する　→　スーパースカラー

#### 6.2　VLIW (Very Long Instruction Word) 方式

- １命令中に複数の演算を入れたアーキテクチャ
- 命令長が１００ビット以上にもなるので、VLIWという
- コンパイラーが命令中のハザードを解決ずみ（静的スケジューリング）である。

特徴：　並列化によって生じるハザードを検出するハードウエアが不要

これにより、アセンブラプログラムが他のプロセッサと互換性がない。

また、静的なスケジューリングでは並列化の限界が低い

#### 6.3　スーパースカラ

通常の逐次実行のアセンブラプログラムを実行時に、ハードウエアがハザードを検出し、並列化可能な命令を選んで並列実行する。
ハードウエアが複雑になる。

図６．３

#### 6.4　静的最適化

あらかじめ機械語を最適化することを静的最適化という。静的最適化を行うのはコンパイラである。

ハザードを減らすために、依存関係を解消したり、減らしたりする。

依存関係のある命令をプログラム中で離れた位置に置く。

もちろん、プログラムの意味を変えてはならない。（あたりまえ）

ループアンローリング

分岐命令の頻度を下げる（数を減らす）ことで、分岐命令によるハザードを減らす。

ソフトウエアパイプライニング

トレーススケジューリング

#### 6.5　アウトオブオーダー処理

図６．８

#### 6.6　レジスタリネーミング

レジスタの番号の置き換えによって並列性を向上

#### 6.7　スーパースカラプロセッサの構成