平成16年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−7
あるパイプライン化されたCPUは、通常の命令は1クロックで実行可能で
あるが、メモリからデータを読み込む際に1クロック、分岐命令を実行する
際に1クロックストールする。このCPUが下に示すプログラムの一部を実行した
場合の平均命令実行クロック数を計算し、最も近い値を次の中から選べ。

    ・・・
   LDI R1, #10
   LDI R2, #100
   LDI R3, #0
Loop LD R4, (R2)
   ADD R3, R3, R4
   ADDI R2,R2,#4
   SUBI R1,R1,#1
   BNEZ R1,Loop
END:

各命令の意味は以下の通りである。
LDI Rx、#Y : レジスタ Rx に値 Y を格納する。
LD Rx,(Ry) : Ry の内容が示す番地のデータをメモリから読み出し、
     Rx に格納する。
ADD Rx,Ry,Rz : Ry+Rz を Rx に格納する。
ADDI Rx,Ry,#Z : Ry+Z を Rx に格納する。
SUBI Rx,Ry,#Z : Ry-Z を Rx に格納する。
BNEZ Rx,label: Rx が0でなければ label に分岐する。

@ 1.22  A 1.28  B 1.32  C 1.38  D 1.41




【正解】 C

メモリからデータを読み込む命令は2クロックで
LD のみ。
分岐命令も2ブロックで
BNEZ のみ。
他の命令は1クロックである。


(R1, R2, R3, R4, R5) の値は以下のように変化する。
なお、100番地以上の番地にはすべて1が入っていると仮定する。

LDI R1, #10   ・・・(
10, 0, 0, 0, 0)
LDI R2, #100  ・・・(10,
100, 0, 0, 0)
LDI R3, #0   ・・・(10,
100, 0, 0, 0)
→ここまでで3クロック

LD R4, (R2)     ・・・(10,
100, 0, 1, 0)
ADD R3, R3, R4 ・・・(10,
100, 1, 1, 0)
ADDI R2,R2,#4  ・・・(10,
104, 1, 1, 0)
SUBI R1,R1,#1   ・・・(
9, 104, 1, 1, 0)
BNEZ R1,Loop
→このブロックで7クロック

LD R4, (R2)     ・・・(9, 104, 1,
1, 0)
ADD R3, R3, R4 ・・・(9, 104,
2, 1, 0)
ADDI R2,R2,#4  ・・・(9,
108, 2, 1, 0)
SUBI R1,R1,#1   ・・・(
8, 108, 2, 100, 0)
BNEZ R1,Loop
→このブロックも7クロック

LD R4, (R2)    ・・・(8, 108, 2, 1, 0)
ADD R3, R3, R4 ・・・(8, 108,
3, 1, 0)
ADDI R2,R2,#4  ・・・(8,
112, 3, 1, 0)
SUBI R1,R1,#1   ・・・(
7, 112, 3, 1, 0)
BNEZ R1,Loop
→このブロックも7クロック

    ・・・

LD R4, (R2)   ・・・(1, 136, 9,
1, 0)
ADD R3, R3, R4 ・・・(1, 136,
10, 1, 0)
ADDI R2,R2,#4  ・・・(1,
140, 10, 1, 0)
SUBI R1,R1,#1   ・・・(
0, 140, 10, 1, 0)
BNEZ R1,Loop
→このブロックも7クロック

従って、実行完了まで
3クロック+7クロック×10回 = 73クロック。

全部で53命令であるから、
73÷53 = 1.3773 ≒
1.38


EXCELのマクロのご相談なら ファーストマクロ 



W−6 目次 W−8
ファーストマクロ TOPページ