II - TỰ LUẬN
II.1. Chuyển đoạn mã lệnh C sau này mã lệnh MIPS Với các giá trị chứa trong các thanh ghi tương
ứng là: biến i ($s2), m ($s0), n ($s1), total ($s5), địa chỉ nền/cơ sở (base address) của mảng A ($s3),
địa chỉ nền/cơ sở (base address) của mảng B ($s4). [1.5 điểm]
Chỉ là đáp án gợi ý (các đáp án tương tự đều được tính điểm
C code:
MIPS code
int total = 0, i = 0;
addi $s5, $0, 0
// total = 0
while (i < m – n)
addi $s2, $0, 0
// i = 0
{
sub $t0, $s0, $s1 // $t0 = m – n
if (i <= n)
(0.25)
Loop:
total += A[i];
slt $t1, $s2, $t0
else
beq $t1, $0, Endloop //Loop condition (0.25)
total += B[i];
i++;
slt $t1 , $s1, $s2
}
bne $t1, $0, Else //If condition
(0.25)
A[0] = total;
sll $t1, $s2, 2
//If body
add $t1, $s3, $t1
lw $t1, 0($t1)
add $s5, $s5, $t1
(0.25)
j Endif
Else:
//Else body
sll $t1, $s2, 2
add $t1, $s4, $t1
lw $t1, 0($t1)
add $s5, $s5, $t1
(0.25)
Endif:
addi $s2, $s2, 1
j Loop
Endloop:
sw $s5, 0($s3)
(0.25)
II.2. Dùng chương trình benchmark P để so sánh hiệu suất của hai máy tính A và B có cùng kiến trúc
tập lệnh (Giả định compiler trên 2 máy thông dịch chương trình P với số lệnh như nhau). Thời gian
thực thi chương trình P trên máy B nhanh hơn máy A hai lần. Cho biết số chu kỳ trung bình trên lệnh
(CPI) của máy A và B lần lượt là 2 và 3. Tần số xung clock của máy nào lớn hơn? và lớn hơn bao
nhiêu lần? [1.5 điểm]
Solution
CPUA, CPUB: thời gian thực thi trên máy A và trên máy B
fA
CPI A * I
CPU A
fB
CPI B * I
CPU B
f A CPI A * I CPU B
*
fB
CPU A CPI B * I
CPI A 2
CPI B 3
CPU A 2CPU B
fA 1
fB 3 f A
fB 3
Time A = số chu kỳA/fA = CPIA* I
---HẾT---