みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

至急お願いしたい事があります

初めての質問、失礼致します。
私は理工学部に通う大学生なのですが、もうすぐ期末試験を迎えようとしています。
そこで先輩方から以下の過去テスト問題を頂いたのですが、テストは返却されていないため、回答もございません。
同じ授業の期末をまもなく迎えようとしているため、なんとかこの問題をテスト勉強に活かしたいと考えています。
そこでお願いなのですが、どなたかこの問題を解いて頂ける方を探しています。
勿論、解ける範囲で結構ですし、解答の正否にも拘りません。
明日の夕方からテストなので、明日の午前までに解いて頂ければ助かります。
都合の良いお願いに加えて誠に差し出がましく申し訳ないのですが、何卒よろしくお願い致します。


プロセッサ性能
(1)現在使用しているプロセッサAlpha に対してその対象とする分野のベンチマークを実行して調べ
たところ,シフト命令の次に加算命令が来る頻度が非常に多く,全命令の20%に達することが分か
った.そこで,シフトと加算を一緒に行う命令を追加したプロセッサBeta を開発した.しかし,
Beta はCPI こそ変わらなかったが,Alpha ほどクロックを高速にできず,fAlpha / fBeta = 1.1 という関
係になった.Alpha とBeta はどちらがどれだけ高速か.
(2)君がコンピュータH-0 を用いて処理している負荷は3 種あって,浮動小数点演算の比率は下の
表のようになっている.

負荷              W1  W2  W3
浮動小数点の比率      1%  25%  60%

(a) H-0 は浮動小数点演算が遅いので,それを2 倍高速化したH-1 を開発した.それぞれの負荷にお
ける速度向上比を求めよ.
(b) よく調べてみると,H-1 の浮動小数点演算以外の命令は5%遅くなっていることが分かった.こ
の場合でも,H-0 の代わりにH-1 を使用することで処理を高速化できるか.それぞれの負荷につ
いて調べよ.
(c) [extra credit] もし,浮動小数点演算がH-0 に対して2k 倍高速であるが他の命令は5k(%)遅くなる
コンピュータH-k (k = 1,2,3,…)が開発できるとすると,負荷W2 の処理が最も高速化されるのはど
のコンピュータか.


【3】
演算方式
(1)32 ビットの整数の乗算について以下の問に答えよ.

(a) ハードウェアによる,加算,シフト,判定等の基本操作にそれぞれh 時間かかるとすると,ス
ライド5-29 の構成で乗算器を作成した場合,乗算にどれだけの時間がかかるか.但し,レジスタ
のセット等初期設定は考えなくてよい.

(b) MIPS のソフトウェアによる乗算(スライド5-33)を高速化するために,新しい命令を追加して
ループ内の命令数を減らしたい.どのような命令を追加すれば良いか.クロックを遅くしないた
めに新命令は他の命令と同程度の手間で実行できなければならない.

(c) スライド5-29 の構成では1 個の加算器を繰り返し使用しているが,最初の2 個の部分積を第1
の加算器で加算し,その和と第3 の部分積を第2 の加算器で加算し,その和を次の部分積と加算
するというようにすれば,1クロックで全部分積を加算して積を求めることができる.1 回の加
算時間をa とするとき,この構成の乗算の時間を求めよ.

(d) (c)の方法は工夫すれば,乗算時間を短くすることができる.その構成を提案し,(c)の方法に比
べてどれだけ高速化されるか計算せよ.
(e) (d)において,最初に基数4 のBooth recoding を適用してから乗算を行った場合の乗算時間を求め
よ.

(2)次の数を小さい順位並べよ.理由を明記すること.なお,float はIEEE 表現とする.
A. 0xF0000000 (float)
B. 0xF0000000 (int)
C. 0xF0000000 (符号+絶対値表現int)
D. 0xFFFFFFFF (int)
E. 0xFFFFFFFF (1の補数表現int)
F. 0xF1000000 (float)
G. 0x70000000 (float)
H. 0x7FFFFFFF (int)
I. 0x80000010 (float)

(3)IEEE754 標準浮動小数点数に関して以下の問に答えよ.

(a) 2 個のfloat 数をMIPS のslt 命令で比較する場合,正しい結果が得られないことがあるか.
あればどういう場合か説明せよ.但し,どちらの数も±0 やNAN ではないものとする.

(b) 次の2 個の数のfloat 表現を16 進数で示し,次にその積のfloat 表現を求めよ.なお,ま
るめはIEEE default を用いよ.
A = 1 + 2-23
B = 1 + 2-22

(c) 2 個のfloat 数,A, B を加算したところ,和はA に等しかった.これから,B = 0 と結論で
きるか.Yes ならその理由を述べ,No ならどういう場合にこうなるかを説明せよ.

(d) ある正のfloat 数A の次に大きいfloat 数をB,その次に大きい数をC,更にその次の数
をD とする.それぞれの数の指数部を調べたところ,C,D の指数部はA,B の指数部より1 大
きかった.このとき,B-A,C-B,D-C の値を比較せよ.

[1]
MIPS

(1)下に示すのは,無符号整数内の1のビットの個数を再帰的に数える関数である.この関数をMIPS
の機械命令(マニュアルで青色になっている命令)によるアセンブリコードに変換せよ.レジスタ
は使用規約に従って利用すること.また,コードの動作が分かるように明確なコメントをつけよ
int bitCount(unsigned x) {
int bit;
if (x == 0)
return 0;
bit = x & 0x1;
return bit + bitCount(x >> 1);
}

(2)下の左側に示すMIPSのコードは,右側にその基本構造を示したCの関数をコンパイルした結果で
ある.これについて後の問に答えよ.但し,内部でコールしている関数mallocはC言語のmalloc
関数を実装したもので,指定バイト数の領域を確保してその先頭ポインタを返す.

foo:     addiu   $sp,$sp,-12
       sw    $a0,0($sp)   # src    ____ foo(____ src, _____ size){
       sw    $a1,4($sp)   # size
       sw    $ra,0($sp)
       move  $a0,$a1
       addiu  $a0,$a0, 1
       jal    malloc     # v0:dst    for(_____; _______; _____)
       move  $t0,$v0    # cur
       lw    $t1,0($sp)
       lw    $t2,4($sp)
       addu   $t2,$t2,$t1  # end  }
loop:     beq   $t2,$t1,end
       lbu    $t4,0($t1)
       ori    $t4,$t4,0x20
       sb    $t4,0($t0)
       addiu  $t0,$t0,1
       addiu  $t1,$t1,1
        j    loop
end:      sb    $zero,0($t1)
        lw    $ra,8($sp)
       addiu   $sp,$sp,12
        jr     $ra

(a) このMIPSのコードに対応するCのコードを示せ.変数名はコメントに指定したものを使用せよ.

(b) srcが指す領域にchar文字の配列(文字ストリング)が格納されているとすると,この関数の
名称として適当なものを提案せよ.即ち,コーラーから見てこの関数が行うことが分かるよう
な名前を示せ.

(c) この関数がprintfのような頻繁に使用される関数内からコールされるとすると,問題が生じる.
それを指摘せよ.

(d) 今,最後から4行目の命令(sb $zero, 0($t1))を忘れたとする.この場合,
char *str = “computer science”;
printf(“%s”, foo(str, 8));
のようにコールするときに発生する可能性がある現象を全てあげよ.

投稿日時 - 2011-07-26 17:43:11

QNo.6901036

すぐに回答ほしいです

質問者が選んだベストアンサー

(1)
問題文を,全命令数の10%に当たるシフト命令の直後に10%の加算命令が来る,と解釈すると,Alpla→Betaでは10%の命令が削減できることになる。
Alpha:Betaにおいて,命令総数の比は1:0.9であり,クロック周波数の比は1.1:1。
よって,命令総数/(クロック/秒),すなわち命令総数を実行した際の単位クロック当たりの秒数の比は,
Alpla/Beta = (1/1.1)/(0.9/1) = (10/11)/(9/10) = 100/99 ≒ 約1.01
となって,Alphaに比べてBetaの方が約1.01倍高速といえる。

(2)
(a)
W1…0.99+(0.01×1/2)=0.995なので,1/0.995 ≒ 約1.005倍
W2…0.75+(0.25×1/2)=0.875なので,1/0.875 ≒ 約1.143倍
W3…0.4+(0.6×1/2)=0.7なので,1/0.7 ≒ 約1.429倍

(b)
W1…(0.99×1.05)+(0.01×1/2)=1.0445
W2…(0.75×1.05)+(0.25×1/2)=0.9125
W3…(0.4×1.05)+(0.6×1/2)=0.72
よって,W1は高速化されず,W2とW3は高速化される。

投稿日時 - 2011-07-26 23:30:10

お礼

お早い回答ありがとうございます!!
大変助かりました^^

投稿日時 - 2011-07-27 12:25:00

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

(2)
IEEE754 標準浮動小数点数については,
下記ja.wikipediaの「1.3.2 32ビット単精度」を参照。
http://ja.wikipedia.org/wiki/IEEE_754

F. 0xF1000000 (float)…符号=負,指数部=11100010=2の99乗
A. 0xF0000000 (float)…符号=負,指数部=11100000=2の97乗
C. 0xF0000000 (符号+絶対値表現int)…-(2の30乗 + 2の29乗 + 2の28乗)
B. 0xF0000000 (int)…-(2の28乗)
I. 0x80000010 (float)…符号=負,指数部=2の0乗,仮数部=(1.0000000 00000000 00010000)
D. 0xFFFFFFFF (int)…-1
E. 0xFFFFFFFF (1の補数表現int)…0
H. 0x7FFFFFFF (int)…intの最大値。(2の31乗)-1
G. 0x70000000 (float)…符号=正,指数部=11100000=2の97乗

投稿日時 - 2011-07-26 23:49:30

あなたにオススメの質問