命令レベル並列 I


6.1.1 並列処理

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

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

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

 

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

以下の公式も便利

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

6.1.2 並列パイプライン

図6.2

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

Cの解決法1: 並列実行できる命令の組をコンパイラが指定する  VLIW

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

6.2 VLIW (Very Long Instruction Word) 方式

·         1命令中に複数の演算を入れたアーキテクチャ

·         命令長が100ビット以上にもなるので、VLIWという

·         コンパイラーが命令中のハザードを解決ずみ(静的スケジューリング)である。

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

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

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

 

6.3 スーパースカラ

図6.3

6.4 静的最適化

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

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

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

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

ループアンローリング

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

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

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

 

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

図6.8

6.6 レジスタリネーミング

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

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

 


以上