Performance

# 性能の役割

## （２．１）はじめに

スループット：　一定時間内に終了した作業の総量

応答時間：　作業を開始してから終了するまでの時間であり、実行時間とも言う

（例題　P52)

下記の変更を行った場合、スループットが増大するか？応答時間が短縮されるか？
１）コンピュータのプロセッサを高速なものに取り替える
２）複数のプロセッサを用いて、タスクを分担しているシステムにプロセッサを追加

マシン性能を検討するにあたり、主に応答時間に注目する。

あるマシンXの性能を以下に定義する（性能は実行時間の逆数）

性能ｘ　＝　１／実行時間ｘ

すなわち、マシンXはマシンYよりｎ倍速いとは、

性能ｘ／性能y　＝　ｎ　＝実行時間ｙ／実行時間ｘ

（例題　P53)

同じプログラムを実行するのにかかる時間が、マシンAでは１０秒、マシンBでは１５秒とする。AはBよりもどれだけ速いか？

## （２．２）性能の測定

コンピュータの性能は実行時間で計測できる

応答時間（response time）、
経過時間（elapsed time） タスク完了に要した時間
ディスクアクセス、メモリアクセス、I/O動作、OSのオーバーヘッド等
色々な時間が含まれる
CPU実行時間（CPU execution time）、
CPU時間（CPU time） CPUが費やした時間であり、
入出力待ち時間や他のプログラムの実行時間は含まれない。
ユーザCPU時間（User CPU time） ユーザプログラム実行に費やされた時間
システムCPU時間（system CPU time） OSがユーザプログラムに代わって、タスクを遂行した時間

この本ではCPU性能とはユーザCPU時間を指す

マイクロプロセッサはクロックに基づいて動作を行う。

その時間間隔：　クロック・サイクル時間（clock
cycle time）、クロック周期（clock period）

その逆数を：　クロック周波数(clock
rate)といい、

1GHz Pentium4ではCPU内部のクロック周波数は1GHz=1000MHz、クロック周期は1nsである。

## （２．３）測定基準同士の関係

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

最も、基本的な測定基準（クロック・サイクル数とクロック・サイクル時間）をCPU時間と関連づける公式を以下にしめす。

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

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

すなわち、クロック周波数を上げるか、プログラムが必要とするクロック・サイクル数を減らせば、性能を向上できる。

（例題、P55)

400MHzのマシンAで１０秒で実行できるプログラムがある。このプログラムを6秒で実行できるコンピュータBを開発する。マシンBではクロックサイクルを上げると、１．２倍のクロック数が必要になる。マシンBのクロック周波数は幾らか？

この例題では命令の数には触れていないが、実行すべき命令数が増加すれば通常プログラム実行に必要なクロック・サイクル数は増加する。ここでCPIなる値を導入する。

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

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

（例題、P57）

同じ命令セット・アーキテクチャを実現した2種類のマシンがある。マシンAはクロック・サイクル時間が1nsで、あるプログラムではCPI=2.0であった。マシンBはクロック･サイクル時間が2nsで、CPI=1.2であるとする。どちらのマシンがどの程度高速か？

以下の公式も便利

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

CPU時間　＝　実行命令数　X　CPI　／　クロック周波数

性能を決める要因 尺度
CPU実行時間 プログラムの実行にかかった時間　（秒）
実行命令数 プログラム内で実行された命令数
１命令当たりの平均クロック・サイクル数　（CPI)　 平均クロックサイクル数／１命令
クロック・サイクル時間 秒／クロック・サイクル数

（例題、コード系列の比較、P59）

## （２．７）誤診（まちがって信じ込む）、と落とし穴（うっかり間違う）

あるマシン上で実行に１００秒かかるプログラムがあり、そのうちの８０秒が乗算で占められているとする。このプログラムの実行を5倍高速にするには、乗算の速度をどのくらい改善する必要あるか？

アムダールの法則（Amdahl's law）で有名である。

MIPS値とは何か？

MIPS　＝　実行命令数　／　（実行時間　X　１００００００）
1秒当たりの命令実行数を１００万単位で数えたもの
原始MIPS（native MIPS）とも言う

## クイズ

１）演習問題２．１から２．５

## 宿題１

１）演習問題２．１０から２．１２

２）演習問題２．１８から２．２０