【お題】引っかけ問題(締め切り10月27日(日)23時)

現在、大学院でコンピューターアーキテクチャーのクラスを取っています。中間試験で下記のような問題が出ました。

「コンピューターCは100MHZで動作します。各クラスのClock cycles Per Instruction(CPI)は次のようになります。

Instruction Class i CPIi
Integer ALU 1
Branch 2
Load/Store 3
Floating-Point Operation 4

プログラムPは次のようなループをコンピューターCで起動されます。

Loop: L.D F0,0(R1) <- Load/Store
ADD.D F0,F0,F0 <- Integer ALU
S.D F0,0(R1) <- Load/Store
DSUBI R1,R1,#8 <- Floating-Point Operation
BNEZ R1,Loop <- Branch

レジスタR1の初期値は2000です。

質問1)プログラム全体のTotal Execution Time(TET)を計算しなさい。

そして回答が実はあるのですが、

プログラム全体のClock cycles Per Instruction(CPI)
= Total Sum of (Instruction比x各CPIi)
= (1/5)x1 + (1/5)x2 + (2/5)x3 + (1/5)x4 = 2.6

Total Execution Time = (InstructionCount) x CPI / Clock Rate
= 250x5x2.6/100x10^6 = 32.5us

ここでInstructionCountが何故250x5と計算されるのかわかりません。

面倒な質問ですが、よろしくお願いします。

A 回答 (2件)

No.1です。



アセンブリー(アセンブラー)言語は、大げさに言うと
世の中に何千種類も有りますので
理解の限度を超えます。

ただ見た感じだけですが、
DSUBI R1,R1,#8 <- Floating-Point Operationは
R1=R1-8に見えてしまいます。
でもこれがフローティングというのが納得いきません。クロック数も少ないですし
せいぜい倍長演算かという気もします。
DSUB1のDもDOUBLEのDのような。

いずれにしても言語仕様と照らし合わせて理解を深めてください。
    • good
    • 0
この回答へのお礼

ymmasayanさま

お返事ありがとうございます。

>でもこれがフローティングというのが納得いきません。

大変申し訳ございません。私の記述ミスでした。
正確には

ADD.D F0,F0,F0 <- Floating-Point Operation
DSUBI R1,R1,#8 <- Integer ALU

が正しいです。失礼しました。
親切な説明をしていただいて、本当にありがとうございました。また何かありましたら、ご指導のほどよろしくお願いいたします。

お礼日時:2006/03/25 01:34

2000から8づつ引いて250回まわるのかな。



それにしてもわざわざ命令比を求める必要も無いですね。
教育の一環といわれればそれまでですが。
    • good
    • 0
この回答へのお礼

ymmasayanさま、
早速のお返事ありがとうございます。

アセンブリに詳しくないのですが、
DSUBI R1,R1,#8
とは
R1=R1-8
ということなんでしょうか?
それがゼロになった時点でLoopが終了する、という理解でよろしいでしょうか?

なんだか頼りになる救世主が現れたようで、本当に嬉しいです。ありがとうございます。

お礼日時:2006/03/25 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報