gpt4 book ai didi

c - MIPS 代码周期时间

转载 作者:行者123 更新时间:2023-11-30 17:17:35 25 4
gpt4 key购买 nike

我需要帮助来完成确定下面 MIPS 代码的周期数的任务。

我的主要问题是确定是否不满足条件,if 语句是否仍然执行(从而增加总周期数)

假设单周期实现方案,即每条指令需要一个时钟周期执行。1. 执行该代码需要多少周期A。 s==0?b. s==1?

这是我自己想出的:

a. 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

所以我需要确定循环数,如果 a. 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)即使采用条件分支!

处罚来自cache misses , pipeline扰动,以及branch prediction .

由于我不明白这个语句的含义,因此我不会进一步剖析代码路径。

TMP = z × y;

关于c - MIPS 代码周期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29395278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com