繁体   English   中英

MIPS代码循环时间

[英]MIPS Code Cycle Time

我需要确定下面的MIPS代码的循环数的任务。

我的主要问题是确定条件是否不满足,是否仍在执行if语句(因此增加了总循环数)

假设采用单周期实施方案,即每个指令需要一个时钟周期来执行。 1.在以下情况下,执行代码所需的周期数是多少? s == 0? b。 s == 1?

这是我自己想到的:

一种。 9个循环

b。 8个周期(它不执行if语句中包含的指令,并且不跳到endif语句-(转到函数)然后是最后一个endif。

这是MIPS的示例:

main: 

 # Evaluate the expression.

 # Put the final result in a0 to prepare for the syscall.

addi    $sp, $sp, -4    # Make space on stack.
sw  $ra, 0($sp) # Save return address.

li  $t0, 1      # Put 0 in a register 
li  $a1, 4      # Put 4 in a register 
li  $a2, 6      # Put 6 in a register 

if: bne   $t0, $zero, else    # (i == 0) ?

add $v0, $a1, $a2   # v0 = a1 + a2

j  endif

else:   jal func

endif:
add $a0, $v0, $zero

li  $v0, 1

所以我需要确定一个循环数。 s = 1,b。 s = 0假设每条指令将花费1个周期。

为此的C代码是

main()
{
int A; a=4; b=6; s=3;
int function(a,b);
if (s==0)
A = a+b;
else
A = function(a,b)
return;
}
# Function to multiply two numbers
function(z,y)
{
int TMP;
TMP = z × y;
ret

道歉的格式化。 我在这个论坛上的第一篇文章仍在解决。 任何帮助,不胜感激。

根据要估算时间(通过指令计数)还是确定实际执行时间,无论如何都必须对if指令进行计数。

在大多数现代CPU中,任何类型的跳转指令都包含一些惩罚,甚至(对于某些CPU)甚至执行条件转移也可能会受到惩罚!

惩罚来自高速缓存未命中流水线扰动和分支预测

由于我不明白该声明的含义,因此我不会进一步剖析代码路径。

TMP = z × y;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM