システムアーキテクト 2017年 午前2 問18
問題文
表のCPIと構成比率で、3種類の演算命令が合計1,000,000命令実行されるプログラムを、クロック周波数が1GHzのプロセッサで実行するのに必要な時間は何ミリ秒か。

選択肢
ア:0.4
イ:2.8(正解)
ウ:4
エ:28
🔒 解説は解答すると表示されます
平均CPIによる実行時間算出【午前2解説】
正解の理由
各命令のCPIに構成比率を掛けて合計すると平均CPIが求まります。その平均CPIに命令総数を掛けて総サイクル数を求め、クロック周波数で割れば実行時間が出ます。今回の計算では平均CPIが になり、1,000,000命令で必要な時間は となるため、選択肢のうち イ(2.8)が正しいです。
解法ステップ
- 各命令の構成比率を小数に直す:20% → , 60% → 。
- 平均CPIを求める:
- 総サイクル数を求める:
- クロック周波数1GHz()で時間に換算:
選択肢別の誤答解説
- ア: 0.4
- 典型的な誤りは「平均CPIを誤って小数点以下で計算した」か、命令数や周波数の桁を誤って扱い のような誤操作をした場合です。今回の正しい平均CPIは であり、0.4は意味を成しません。
- イ: 2.8
- 平均CPI計算と単位変換(秒→ミリ秒)を正しく行った結果です。最終の時間は 2.8 ms になります。
- ウ: 4
- おそらく各CPIの単純平均 や別の誤った加重計算、あるいは命令数や周波数の桁を誤って扱い、位取りを間違えた結果として生じます。今回のデータでは単純平均は意味がなく、構成比で重み付けする必要があります。
- エ: 28
- 単位変換ミス(ms と s の混同)や、クロック周波数を と誤認して計算した場合に起こりやすい桁落ちです。正しくは 2.8 ms であり、28 は10倍の誤りです。
よくある誤解
- 構成比率(%)をそのまま足す:パーセンテージは小数(0.20 など)に直してから掛け算する必要があります。20+20+60=100 は確認用であり、そのまま計算には使えません。
- 単純平均と加重平均の混同:命令の割合が異なると単純平均ではなく加重平均(構成比で重み付け)を使います。
- 周波数の単位変換ミス:GHz → Hz、秒 → ミリ秒の変換を忘れると10^3や10^9の桁落ちが発生します。
補足コラム
CPI(Cycles Per Instruction)は命令1件あたりの平均クロック数を表します。平均CPIはプロセッサ性能評価で重要な指標で、命令ミックス(構成比)によって変わります。実行時間は以下の三要素で表せます:
命令数とクロック周波数が固定なら、平均CPIを下げる(パイプライン改善や命令最適化)ことで実行時間が短くなります。
簡単な計算例(Python):
instr = 1_000_000
cpi = [3, 5, 2]
ratio = [0.20, 0.20, 0.60]
avg_cpi = sum(ci * r for ci, r in zip(cpi, ratio))
cycles = instr * avg_cpi
time_ms = cycles / 1e9 * 1e3 # 1 GHz -> seconds, *1e3 -> ms
print(avg_cpi, cycles, time_ms) # 2.8 2800000 2.8
FAQ
Q. なぜ構成比は小数に直すのですか?
A. パーセンテージは比率です。計算では割合として扱うため、100で割って小数にします(20% → 0.20)。
A. パーセンテージは比率です。計算では割合として扱うため、100で割って小数にします(20% → 0.20)。
Q. CPIとIPCの違いは?
A. CPIは1命令あたりのクロック数、IPC(Instructions Per Cycle)は1クロックあたりの命令数で、逆数的な関係にあります(理想的には IPC = 1 / CPI だが、命令長や並列実行などで直接逆数にならない場合もあります)。
A. CPIは1命令あたりのクロック数、IPC(Instructions Per Cycle)は1クロックあたりの命令数で、逆数的な関係にあります(理想的には IPC = 1 / CPI だが、命令長や並列実行などで直接逆数にならない場合もあります)。
Q. クロック周波数が変わったらどう影響しますか?
A. 周波数が高くなると実行時間は短くなります(時間はサイクル数を周波数で割った値)。例えば2GHzなら時間は今回の半分になります。
A. 周波数が高くなると実行時間は短くなります(時間はサイクル数を周波数で割った値)。例えば2GHzなら時間は今回の半分になります。
関連キーワード: CPI、平均CPI、命令実行時間、クロック周波数、ミリ秒変換

\ せっかくなら /
システムアーキテクトを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

