FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

コンピュータの構成と設計4版:Exercise 1.6

/* 以下の回答は,個人的に解いたものであって,正解である保証はありません.解答の正しさについてはまったく保証しませんし,まったく責任を負いません */

compiler A Compiler B
#Instructions Execution time #Instructions Execution time
a. 1.00E+09 1s 1.20E+09 1.4s
b. 1.00E+09 0.8s 1.20E+09 0.7s

1.6.1 プロセッサのクロックサイクルを1nsとしたときに,各プログラムの平均CPIを求めよ.

1秒あたりの命令数に換算し,周波数で割る.

  • a. Compiler A : \frac{1.00E+09}{1.0\text{s}} \times 1\text{[ns]} = 1.0
  • a. Compiler B : \frac{1.20E+09}{1.4\text{s}} \times 1\text{[ns]} = 0.87
  • b. Compiler A : \frac{1.00E+09}{0.8\text{s}} \times 1\text{[ns]} = 1.25
  • b. Compiler B : \frac{1.20E+09}{0.7\text{s}} \times 1\text{[ns]} = 1.71

1.6.2 平均CPIは上記のものとし,異なるプロセッサで実行した.もしも実行時間が各プログラムで同一の場合,コンパイラAのコードのクロックはコンパイラBのコードのクロックよりもどの程度高速であるか?

もともと,表に与えられるようなExecution timeであったのが,同一の実行時間になるのであるから,

  • a. \frac{1.4}{1} = 1.4
  • b. \frac{0.7}{0.8} = 0.875

よって,プログラムによってどちらのプロセッサが高速になるかが変わってくる.

1.6.3 600M命令でCPIを1.1で実行するコンパイラを開発した.コンパイラAとコンパイラBのものと比べて,どの程度速くなるか?

600M命令でCPI=1.1,クロック周期が1nsだとすると,実行時間は,
600M\times 1.1\times 1[\text{ns}] = 0.66[\text{s}]

いや,確かに高速ですけど,比較対象がよくわからん...

P1のプロセッサは4GHz,P2のプロセッサは6GHzのとき,平均CPIを次に示す.

Class CPI on P1 CPI on P2
a. A 1 2
B 2 2
C 3 2
D 4 4
E 5 4
Class CPI on P1 CPI on P2
b. A 1 2
B 1 2
C 1 2
D 4 4
E 5 4

1.6.4 最高性能をコンピュータがどのような命令でも発揮できる最高速度と仮定すると,P1とP2の最高性能は1秒あたりいくらか?

各プロセッサのクロック周波数と,CPIがわかれば,1秒間に実行可能な命令数が決定する.

  • a.P1では,CPIが最も大きいのはEの5,a.P2では,CPIが最も大きのはD,Eの4,
  • b.P1では,CPIが最も大きいのはEの5,a.P2では,CPIが最も大きのはD,Eの4であるから,
  • a.P1 \frac{4[\text{GHz}]}{5} = 800E+06
  • a.P2 \frac{6[\text{GHz}]}{4} = 1.5E+09
  • b.P1 \frac{4[\text{GHz}]}{5} = 800E+06
  • b.P2 \frac{6[\text{GHz}]}{4} = 1.5E+09

1.6.5 クラスAを除いてすべてのクラスの出現確率が同一,クラスAのみその2倍とすると,P2はP1よりどれくらい速いか?
平均CPIを算出する.

  • a.P1 1\times \frac{2}{6} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 4\times\frac{1}{6} + 5\times\frac{1}{6} = 2.67
  • a.P2 2\times \frac{2}{6} + 2\times\frac{1}{6} + 2\times\frac{1}{6} + 4\times\frac{1}{6} + 4\times\frac{1}{6} = 2.67
  • b.P1 1\times \frac{2}{6} + 1\times\frac{1}{6} + 1\times\frac{1}{6} + 4\times\frac{1}{6} + 5\times\frac{1}{6} = 2.16
  • b.P2 2\times \frac{2}{6} + 2\times\frac{1}{6} + 2\times\frac{1}{6} + 4\times\frac{1}{6} + 4\times\frac{1}{6} = 2.67

CPIに関してはこのような感じだが,クロック周波数を換算し,1秒あたりに実行可能な命令数を計算すると,

  • a.P1 \frac{4\text{[GHz]}}{2.67} = 1.50E+09
  • a.P2 \frac{6\text{[GHz]}}{2.67} = 2.25E+09
  • b.P1 \frac{4\text{[GHz]}}{2.16} = 1.85E+09
  • b.P2 \frac{6\text{[GHz]}}{2.67} = 2.25E+09

よって,プログラムaに関しては1.5倍,プログラムbに関しては1.2倍程度速い.

1.6.6 同一の性能にするためには,P2のクロック周波数をP2に比べてどれくらいにすればよいか?
単純に,1.6.5で出した数字でP2のクロック周波数を割る.

  • a. \frac{6\text{[GHz]}}{1.5} = 4\text{[GHz]}
  • b. \frac{6\text{[GHz]}}{1.2} = 3.28\text{[GHz]}