FPGA開発日記

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

コンピュータの構成と設計第4版 Exercise 1.10

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

次の表はプロセッサの数ごとに命令タイプの実行数を示している.これを元に問題に答えよ.

Processors # Instructions per processor CPI
Arithmetic Load/Store Branch Arithmetic Load Branch
a. 1 2560 1280 256 1 4 2
2 1280 640 128 1 4 2
4 640 320 64 1 4 2
8 320 160 32 1 4 2
Processors # Instructions per processor CPI
Arithmetic Load/Store Branch Arithmetic Load Branch
b. 1 2560 1280 256 1 4 2
2 1350 800 128 1 6 2
4 800 600 64 1 9 2
8 600 500 32 1 13 2

1.10.1 各プロセッサごとに必要なクロックサイクル数を求めよ.

  • a.1 2560\times 1 + 1280\times 4 + 256\times 2 = 8192
  • a.2 1280\times 1 +  640\times 4 + 128\times 2 = 4096
  • a.3  640\times 1 +  320\times 4 +  64\times 2 = 2048
  • a.4  320\times 1 +  160\times 4 +  32\times 2 = 1024
  • b.1 2560\times 1 + 1280\times 4 + 256\times 2 = 8192
  • b.2 1350\times 1 +  800\times 4 + 128\times 2 = 4806
  • b.3  800\times 1 +  600\times 4 +  64\times 2 = 3328
  • b.4  600\times 1 +  500\times 4 +  32\times 2 = 2664

当然ながら,プロセッサ数が増えても処理する命令数が落ちないので,b.のほうはa.に比べてあまり性能が上がらない.

1.10.2 2GHzで動作しているとして,各プロセッサの実行時間を求めよ.
必要クロックサイクルが分かっているので,後は簡単.

  • a.1 \frac{8192}{2\text{GHz}} = 4.096\mu s
  • a.2 \frac{4096}{2\text{GHz}} = 2.048\mu s
  • a.3 \frac{2048}{2\text{GHz}} = 1.024\mu s
  • a.4 \frac{1024}{2\text{GHz}} = 512ns
  • b.1 \frac{8192}{2\text{GHz}} = 4.096\mu s
  • b.2 \frac{4806}{2\text{GHz}} = 2.403\mu s
  • b.3 \frac{3328}{2\text{GHz}} = 1.664\mu s
  • b.4 \frac{2664}{2\text{GHz}} = 1.332\mu s

1.10.3 算術演算命令の数が2倍に増えた場合,各プログラムの実行時間はいくつになるか.
まずはクロックサイクル数を算出.

  • a.1 5120\times 1 + 1280\times 4 + 256\times 2 = 10752
  • a.2 2560\times 1 +  640\times 4 + 128\times 2 = 5376
  • a.3 1280\times 1 +  320\times 4 +  64\times 2 = 2688
  • a.4  640\times 1 +  160\times 4 +  32\times 2 = 1344
  • b.1 5120\times 1 + 1280\times 4 + 256\times 2 = 10752
  • b.2 2700\times 1 +  800\times 4 + 128\times 2 = 6156
  • b.3 1600\times 1 +  600\times 4 +  64\times 2 = 4128
  • b.4 1200\times 1 +  500\times 4 +  32\times 2 = 3264

これを元に実行時間を計算すると,

  • a.1 \frac{10752}{2\text{GHz}} = 5.376\mu s
  • a.2 \frac{5376}{2\text{GHz}} = 2.688\mu s
  • a.3 \frac{2688}{2\text{GHz}} = 1.344\mu s
  • a.4 \frac{1344}{2\text{GHz}} = 672ns
  • b.1 \frac{10752}{2\text{GHz}} = 5.376\mu s
  • b.2 \frac{6156}{2\text{GHz}} = 3.078\mu s
  • b.3 \frac{4128}{2\text{GHz}} = 2.064\mu s
  • b.4 \frac{3264}{2\text{GHz}} = 1.632\mu s

次の表はプロセッサの数ごとに平均CPIとコアごとの命令数を示している.

Core per processor Instructions per core Average CPI
a. 1 1.00E+10 1.2
2 5.00E+09 1.3
4 2.50E+09 1.5
8 1.25E+09 1.8
Core per processor Instructions per core Average CPI
b. 1 1.00E+10 1.2
2 5.00E+09 1.2
4 2.50E+09 1.2
8 1.25E+09 1.2


1.10.4 クロック周波数を3GHzとしたときの,各プロセッサの実行時間を求めよ.

  • a.1 \frac{1.00E+10\times 1.2}{3GHz} = 4[s]
  • a.2 \frac{5.00E+09\times 1.3}{3GHz} = 2.17[s]
  • a.4 \frac{2.50E+09\times 1.5}{3GHz} = 1.25[s]
  • a.8 \frac{1.25E+09\times 1.8}{3GHz} = 0.75[s]
  • b.1 \frac{1.00E+10\times 1.2}{3GHz} = 4.0[s]
  • b.2 \frac{5.00E+09\times 1.2}{3GHz} = 2.0[s]
  • b.4 \frac{2.50E+09\times 1.2}{3GHz} = 1.0[s]
  • b.8 \frac{1.25E+09\times 1.2}{3GHz} = 0.5[s]

1.10.5 消費電力を次の式で定義するものとする.
\text{Power} = \frac{5.0\text{mA}}{\text{MHz}}\text{Voltage}^2
電圧は次の式で与えられる.
\text{Voltage} = \frac{1}{5}\text{Frequency} + 0.4
周波数が5GHzとすると,電圧は1.4Vである.3GHzで動作している時の各コアの消費電力をもとめよ.また,500MHzで動作している時に,プロセッサの数を変えたときの消費電力を求めよ.

3GHzで動作している時に,電圧は\frac{1}{5}\times 3 + 0.4 = 1.0Vなので,消費電力は\frac{5mA}{30}\times {1.0}^2 = 167\text{\mu W}となる.

500MHzで動作している時は,電圧は\frac{1}{5}\times 0.5 + 0.4 = 0.5Vなので,消費電力は\frac{5mA}{5}\times {0.5}^2 = 250\text{\mu W}となる.さらに,コア数に比例して増加するので,

  • 1 : 250uW
  • 2 : 500uW
  • 4 : 1mW
  • 8 : 2mW

となる.

1.10.6 各コア数ごとにエネルギーを求めよ.各コアは3GHzと500MHzで動作するものとする.