FPGA開発日記

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

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

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

同じ命令セットアーキテクチャで異なる実装について答えよ。
命令にはA,B,C,Dの4つのクラスがあり、それぞれCPIは次のとおりである。

Clock rate CPI Class A CPI Class B CPI Class C CPI Class D
P1 1.5GHz 1 2 3 4
P1 2 GHz 2 2 2 2

1.4.1 10^6個の命令をclass A:10%、Class B:20%、Class C:50%、Class D:20%とする。どちらの実装が速いか?

これ命令数を指定しなくても平均CPIでわかる気がする。

  • P1 : 1\times 0.1 + 2\times 0.2 + 3\times 0.5 \ 4\times 0.2 = 2.8
  • P2 : 2\times 0.1 + 2\times 0.2 + 2\times 0.5 \ 2\times 0.2 = 2.0

よって、1秒間に実行される命令は、

  • P1 : \frac{1.5\times 10^9}{2.8} = 536\times 10^6
  • P2 : \frac{2.0\times 10^9}{2.0} = 1000\times 10^6

よって、P2のほうが2倍くらい速いことになる。

1.4.2 平均CPIはいくらか?

  • P1 : 1\times 0.1 + 2\times 0.2 + 3\times 0.5 \ 4\times 0.2 = 2.8
  • P2 : 2\times 0.1 + 2\times 0.2 + 2\times 0.5 \ 2\times 0.2 = 2.0

1.4.3 双方の必要なクロックサイクルを求めよ。
1.4.2より、CPIがわかっているので、

  • P1 : 2.8\times 10^6
  • P2 : 2.0\times 10^6

となる。そのまんますぎるか。

プログラム中の命令の個数を次の表に示す。

Arith Store Load Branch Total
500 50 100 50 700

1.4.4 Arith命令が1サイクル、LoadとStoreが5サイクル、Branchが2サイクル必要な場合、2GHzのプロセッサで実行したときに必要な実行時間を求めよ。
それぞれの命令の種類について、必要なクロックサイクルを求める。
500\times 1 + 50\times 5 + 100\times 5 + 50\times 2 = 500 + 250 + 500 + 100 = 1350
よって、逆算すると、
\frac{1350}{2GHz} = 6.75\times 10^{-7} = 675[ns]

1.4.5 プログラムのCPIを求めよ。
単純にそうクロック数を命令数で割って、
\frac{1350}{700} = 1.928

1.4.6 Load命令の数が半分に減ったすると、速度とCPIはどのようになるか?
それぞれの命令の種類について、必要なクロックサイクルを求める。
500\times 1 + 50\times 5 + 50\times 5 + 50\times 2 = 500 + 250 + 250 + 100 = 1100
よって、逆算すると、
\frac{1100}{2GHz} = 5.5\times 10^{-7} = 550[ns]

そして、CPIは、
\frac{1100}{650} = 1.69

このように、Load命令の数が減るとCPIが減る。これはLoad命令のCPIが平均CPIよりも大きいためであり、このような必要クロック数が大きな命令を削減することがプログラム開発の重要な課題となる。