コンピューターの性能評価式の導出

大学のコンピュータアーキテクチャの授業でモヤモヤが残ったのでまとめてみました。
コンピューターの性能評価では、

$${CPU時間 = 実行命令数 × \frac{CPI}{クロック周波数 }}$$

という式がよく登場します。

使い方は教科書に沢山載っているので、今回は背景を踏まえた式の導出をしたいと思います。


性能評価の方法は様々?!

実は、コンピュータの性能評価の方法は様々あるそうです。

例えば、アプリケーションプログラムに対する評価、ベンチマーク評価(SPEC,Dhrystone,Whetstone,Livermore loop)、MIPSなどなど。

とはいえ、「結局は早ければ良いので、応答時間を基準にすればいいのでは」と思ってしまいます。

しかし残念ながら、単純に応答時間に注目すれば良いというわけではなく、例えば企業で使うメインフレームサーバなどはタイムシェアリング方式であり、応答時間が短さが性能には直結しません(残念…)。

※タイムシェアリング方式…複数人がアクセスして、みんなでリソースを共有する方式のこと

これは、プログラムが入出力待ちなどでCPUを100%使用できるとは限らないからです。

つまり、応答時間はCPUなどのリソースを独占していることが前提で、みんなでシェアしている時は話が違うということです。

したがって、タイムシェアリング方式の場合に重要となってくる指標は、

  • スループット … 一定時間内に処理されるタスクの数

  • バンド幅 … インターネットで情報を送る早さ

などになります。

性能定義

とはいえ、今回はPCをメインで話したいので、応答時間に焦点を当ててみます(結局そうなるんかい…)。

応答時間は、作業開始から終了するまでの時間ですが、これはディスクアクセスメモリアクセス、入出力、OSのオーバーヘッドなど様々な要素が絡んでしまい、PCの性能の話とは少しずれてしまいます。

したがって、今回はCPU時間(プロセッサが処理にに費やした時間)に絞ることにします。

と、ここでさらにCPU時間ユーザーCPU時間システムCPU時間分かれていて、

  • ユーザーCPU時間 … 単純にCPUが使っている時間

  • システムCPU時間 … プログラムの代わりにOSカーネルがタスクを遂行した時間(ex:プロンプトにLinuxコマンドを打つときのあれ)。

となります。

ただ、システムCPU時間まで考慮してしまうと、二つの区別は難しいそうで、理由としてはOSの動作を個々のプログラムのためのものと割り振るのは難しく、またOSによって性能差があるからだそうです。

よって、以下ではユーザーCPU時間のみを考えます。

ここまでの、性能の定義(絞り込み)を図1にまとめてみました。

CPU性能

いよいよ本題に入って定式化していきます。

まず、処理時間が短いと性能が良いので次式が成り立ちます。


$${ CPU性能 = \frac{1}{ユーザーCPU時間} -①}$$



ここで、CPUはクロックで動くのでクロック数を引き合いに出すことが多いです。

ハードウェア内で事象はクロックに合わせてタイミングを決めるので、妥当と言えば妥当ですね。

クロックの時間間隔はクロックサイクル時間あるいはクロック周波数で表します。

従って、

$${ ユーザーCPU時間 = クロックサイクル数 × クロック周波数-②}$$

となります。
ちなみに、クロック数はプログラムの内容に依存します。なので
「クロックサイクル数」->「そのプログラムに必要なクロックサイクル数」
という表現が適切です。

この式は命令数について触れられていませんが、実際にはコンパイラは実行すべき命令を生成し、コンピューターは命令実行を通してプログラムを動かす。

よって、実行時間は命令数に依存するはずなので


$${クロックサイクル数 = プログラムの実行命令数 × CPI-③}$$


となります。

※CPI(Clocks Per Instruction)とは、1命令に必要な平均クロック数です。

命令の種類(加算命令、乗算命令、ジャンプ命令etc)によって必要なクロック数が異なるので平均をとります。

同じ命令セットアーキテクチャであれば当然命令数は同じなので、実行方式の異なるコンピュータを比較する際CPIは一つの手がかりになります。

以上、①、②、③をまとめると


$${CPU時間 = 実行命令数 × \frac{CPI}{クロック周波数 }}$$


となります。

ということで、教科書で見るようなお馴染みの式が導出されました。

参考

[1]「メインフレーム」と「サーバ」の違い|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 (i-3-i.info)
[2]ユーザーCPU時間とシステムCPU時間って何がちがう?(プログラムが独り占めするひととき) | ただ屋ぁのブログ (tadtadya.com)
[3]パターソン&ヘネシー, "コンピュータの構成と設計(上)", 第四版, 日経BP社
[4]学校の授業


以上。


この記事が気に入ったらサポートをしてみませんか?