FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

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

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

2つの異なるプロセッサP1,P2を考えよ。これらには5つの命令の分類があり,それらのCPIを次の表で示す.

Clock rate CPI Class A CPI Class B CPI Class C CPI Class D CPI Class E
a. P1 1.0GHz 1 2 3 4 3
P2 1.5GHz 2 2 2 4 4
b. P1 1.0GHz 1 1 2 3 2
P2 1.5GHz 1 2 3 4 3

1.5.1 最高性能をどのような命令列でも実行可能な速度と定義する.P1とP2の1秒あたりの最高性能はどのくらいか?
なんだか問題の意味がわからないけど,CPIがもっとも大きいのは,

  • a. P1 : 4
  • a. P2 : 4
  • b. P1 : 3
  • b. P2 : 4

なので,それぞれ1秒間に実行可能な命令数は,クロック周波数で割り算を行い,

  • a. P1 : \frac{1.0\text{[GHz]}}{4} = 250MIPS
  • a. P2 : \frac{1.5\text{[GHz]}}{4} = 375MIPS
  • b. P1 : \frac{1.0\text{[GHz]}}{3} = 333MIPS
  • b. P2 : \frac{1.5\text{[GHz]}}{4} = 375MIPS

となる.

1.4.2 クラスAを除き,すべてのクラスの実行される命令数が同一,そしてクラスAのみがその2倍の命令数実行されるとすると,どのプロセッサが最も性能がよいか?

実行される命令の割合は次の通り:

  • Class A : \frac{1}{3}
  • Class B : \frac{1}{6}
  • Class C : \frac{1}{6}
  • Class D : \frac{1}{6}
  • Class E : \frac{1}{6}

この状況で,平均CPIを計算する.

  • a. P1 : 1\times\frac{1}{3} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 4\times\frac{1}{6} + 3\times\frac{1}{6} = 2.33
  • a. P2 : 2\times\frac{1}{3} + 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{1}{3} + 1\times\frac{1}{6} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 2\times\frac{1}{6} = 1.67
  • b. P2 : 1\times\frac{1}{3} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 4\times\frac{1}{6} + 3\times\frac{1}{6} = 2.33

1秒間に実行できる命令数を計算すると,

  • a. P1 : \frac{1.0\text{[GHz]}}{\frac{7}{3}} = 428.6\text{[MIPS]}
  • a. P2 : \frac{1.5\text{[GHz]}}{\frac{8}{3}} = 562.5\text{[MIPS]}
  • b. P1 : \frac{1.0\text{[GHz]}}{\frac{5}{3}} = 600.0\text{[MIPS]}
  • b. P2 : \frac{1.5\text{[GHz]}}{\frac{7}{3}} = 642.9\text{[MIPS]}

よって,b.P2が最も性能が良い.


1.4.3 クラスEを除き,すべてのクラスの実行される命令数が同一,そしてクラスEのみがその2倍の命令数実行されるとすると,どのプロセッサが最も性能がよいか?

実行される命令の割合は次の通り:

  • Class A : \frac{1}{6}
  • Class B : \frac{1}{6}
  • Class C : \frac{1}{6}
  • Class D : \frac{1}{6}
  • Class E : \frac{1}{3}

この状況で,平均CPIを計算する.

  • a. P1 : 1\times\frac{1}{6} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 4\times\frac{1}{6} + 3\times\frac{1}{3} = 2.66
  • a. P2 : 2\times\frac{1}{6} + 2\times\frac{1}{6} + 2\times\frac{1}{6} + 4\times\frac{1}{6} + 4\times\frac{1}{3} = 3.00
  • b. P1 : 1\times\frac{1}{6} + 1\times\frac{1}{6} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 2\times\frac{1}{3} = 1.83
  • b. P2 : 1\times\frac{1}{6} + 2\times\frac{1}{6} + 3\times\frac{1}{6} + 4\times\frac{1}{6} + 3\times\frac{1}{3} = 2.66

1秒間に実行できる命令数を計算すると,

  • a. P1 : \frac{1.0\text{[GHz]}}{\frac{8}{3}} = 375.0\text{[MIPS]}
  • a. P2 : \frac{1.5\text{[GHz]}}{3          } = 500.0\text{[MIPS]}
  • b. P1 : \frac{1.0\text{[GHz]}}{\frac{11}{6}} = 545.5\text{[MIPS]}
  • b. P2 : \frac{1.5\text{[GHz]}}{\frac{8}{3}} = 562.5\text{[MIPS]}

よって,b.P2が最も性能が良い.

次の表は異なるプログラムの命令タイプごとの命令数である.

#Instructions
Compute Load Store Branch Total
a. Program 1 1000 400 100 50 1550
b. Program 2 1500 300 100 100 1750

1.5.4 算術演算は1サイクル,ロードとストアは10サイクル,分岐は3サイクル必要だと仮定する.3GHzのプロセッサでの実行時間を求めよ.a
まず,必要なクロックサイクルを求める.

  • a. 1000\times 1 + (400+100)\times 10 + 50\times 3 = 6150
  • b. 1500\times 1 + (300+100)\times 10 + 100\times 3 = 5800

よって,3GHzで実行したとすると,

  • a. \frac{6150}{3\text{GHz}} = 2.05[\mu s]
  • b. \frac{5800}{3\text{GHz}} = 1.93[\mu s]

1.5.5 算術演算は1サイクル,ロードとストアは2サイクル,分岐は3サイクル必要だと仮定する.3GHzのプロセッサでの実行時間を求めよ.
まず,必要なクロックサイクルを求める.

  • a. 1000\times 1 + (400+100)\times 2 + 50\times 3 = 2150
  • b. 1500\times 1 + (300+100)\times 2 + 100\times 3 = 2600

よって,3GHzで実行したとすると,

  • a. \frac{2150}{3\text{GHz}} = 715[ns]
  • b. \frac{2600}{3\text{GHz}} = 866[ns]

1.5.6 算術演算は1サイクル,ロードとストアは2サイクル,分岐は3サイクル必要だと仮定する.算術演算の命令数が半分に減ると,どの程度高速化されるか.
まず,必要なクロックサイクルを求める.

  • a. 500\times 1 + (400+100)\times 2 + 50\times 3 = 1650
  • b. 750\times 1 + (300+100)\times 2 + 100\times 3 = 1850

速度向上率は命令数だけで換算できるので,それぞれのプログラムについてどの程度命令数が減ったかを計算すると,

  • a. \frac{1650}{2150}=0.767
  • b. \frac{1850}{2600}=0.712

ちなみに,ロード,ストアのクロックサイクルを10→2に減らしたときは\frac{1}{3}くらいに減ったので,やはり頻繁につかわれる命令を高速化するというのは重要ですね.