StudyCS.log

ただの日記

コンピュータの性能評価(MIPS , CPI)の計算練習

f:id:HoriK:20200928214823j:plain

計算練習しよう


 概要

 コンピュータやプログラムの性能評価指標、具体的にはMIPSやCPI、プログラムの改善度の基本的な計算例題とその解き方を示す。問題は基本情報技術者とか応用情報技術者試験のものをそのまま引っ張ってきたり、改題したりしている。(IPA曰く、出典を示せば許諾は取らなくていいらしい)

 評価基準を正しく使って計算することが今回の目的なので、解法・解説がややくどい感じになっている点ご留意いただきたい。

動機

 以前「プロセッサの評価方法まとめ」という記事を書いたのだが、肝心の計算演習をおざなりにしていた感があったので、ここで簡単な計算練習をしておこうと思った。

 

 内容

例題1

 以下の表のとおり、コンピュータAとコンピュータBの2台のコンピュータがある。それぞれのMIPS値を計算し、計算したMIPS値によって性能を比較せよ。なお、2台のコンピュータにおいては命令セットが同一のものであることが保証される。(応用情報技術者試験平成24年春期午前問12を改題)

  クロックサイクル周期 CPI
コンピュータA 1ナノ秒 4.0
コンピュータB 4ナノ秒 0.5

解答・解説

 プログラムの実行時間をS , クロック周波数を f , 実行命令数を n , クロックサイクル時間を T とすると、

 {S = \dfrac{n \times CPI}{f}} = {n \times \ CPI \times T}\cdots ①

 {MIPS = \dfrac{n}{S \times 10^6}} \cdots②

と表される。

①を変形して、

 \dfrac{S}{n} = {CPI \times T}

 \dfrac{n}{S} = \dfrac{1}{CPI \times T}

これを②に代入する

 \therefore MIPS = \dfrac{1}{CPI \times T \times 10^6}

コンピュータAにおいて  CPI = 4,0  ,  T = {1.0 \times 10^{-9}}であるので、MIPS値は

 \dfrac{1}{4.0 \times 1.0 \times 10^{-9} \times 10^6}

 \dfrac{1}{4.0 \times 10^{-3}}

  = 0.25 \times 10^{3}

 = 250MIPS

 コンピュータBにおいて CPI = 0.5  ,   T = {4.0 \times 10^{-9}}であるので、MIPS値は

 \dfrac{1}{0.5 \times 4.0 \times 10^{-9} \times 10^6}

 = \dfrac{1}{2.0 \times 10^{-3}}

 = 0.5 \times 10^3

 = 500MIPS

よってこのプログラムの実行において、コンピュータBはコンピュータAの2倍の処理性能を持つといえる。

 

例題2

 クロック周波数が1GHzのCPUがある。このCPUの命令種別が、表に示す二つから成っているとき、処理能力は約何MIPSか。(基本情報技術者試験平成20年春期午前問19)

命令種別 実行時間(クロック) 出現頻度(%)
命令1 10 60
命令2 5 40

解答・解説

    この計算をするために、まず、CPIを求める。

 CPIは命令の実行に必要なクロック数の平均値で、プログラムによって異なる。プログラムに  n 種類の命令が使われており、i 種類目の実行クロック数を CPI_i , そしてその i 種類目の命令が出現する回数を  C_iとするとCPIは一般的に次のように与えられる。

 CPI = \dfrac{\displaystyle\sum_{i=1}^{n}({CPI_i} \times {C_i})}{実行命令数}

  しかし、本問のようにすでに出現頻度が与えられている場合(ここでは i 種類目の出現頻度をP_i%としよう)、

 CPI = \displaystyle\sum_{i=1}^{n}({CPI_i} \times {P_i})

で計算できる。

 以上を利用して、CPIを計算する。

 CPI = 10 \times 0.6 + 5 \times 0.4

= 8.0

 

 ここで例題1の要領で、MIPSの式

MIPS = \dfrac{n}{S \times 10^6}

 にプログラム実行時間Sの計算式

S = \dfrac{n \times CPI}{f}

 を代入する。すると、

MIPS = \dfrac{n}{\dfrac{n \times CPI}{f} \times 10^6}

 = \dfrac{1}{\dfrac{CPI}{f} \times 10^6}

 ここで、クロック周波数 f =1GHz  , CPI = 8.0 を代入する。結果として、

 \dfrac{1}{\dfrac{8.0}{1.0 \times 10^9} \times 10^6}

 = \dfrac{1}{8.0 \times 10^{-3}}

 = 0.125 \times 10^3

 =125MIPS

 とMIPS値が求まる。

 

例題3  

 あるコンピュータを並列化によって高速化することに成功した。改善前のあるプログラムにおける実行時間は100秒であった。そのうち90%は改善の影響を受けたが、10%は影響を受けなかった。改善の影響を受ける部分に関しては9倍の高速化が実現された。全体の改善度はいくらか。(IT Text コンピュータアーキテクチャ演習問題1-5を改題)

解答・解説

 コンピュータの性能改善に関してはアムダールの法則を用いる。並列化による改善度はプログラムの実行時間の比で表すことができる。高速化の影響を受ける前のプログラムの実行時間を T_1 , 高速化の影響を受けた後のプログラムの実行時間を T_2 とすると、改善度 K

 K = \dfrac{T_1}{T_2}

とあらわされる。

ここで高速化の影響を受けた後の実行時間 {T_2}に着目したい。

アムダールの法則の主張は並列化によるプログラムの速度向上は、逐次処理部分(つまり並列化できない部分)には及ばず、改善可能な部分に制限があるということである。

この主張に従って、 {T_2}を改善可能な部分と改善不可能な部分に分ける。

改善可能なプログラムの割合を a% , また、改善可能な部分に関しての改善度を b倍 とすると、

 {T_2} = \dfrac{{T_1} \times {a}}{b} + ({T_1} - {T_1} \times a)

とあらわされるので、全体の改善度の式は

 K = \dfrac{T_1}{\dfrac{{T_1} \times {a}}{b} + ({T_1} - {T_1} \times a)}

となる。問題文より {T_1} = 100 ,  a = 0.9 ,   b = 9であるので、全体の改善度は

 K = \dfrac{100}{\dfrac{100 \times 0.9}{9} + ({100- 100 \times 0.9})} = 5

となる。

 

まとめ

  CPIを用いたプログラム実行時間の表現、MIPSの定義など、その指標が何を示しているのかを理解しながら計算を進めることが重要だろう。

参考文献

「小柳 滋、内田啓一郎『IT Text コンピュータアーキテクチャ改訂2版』情報処理学会 2019年」 第1章