MIPS r3000-并行加载数据?

MIPS r3000-并行加载数据?,mips,Mips,给定一个需要8个周期才能从RAM检索数据的系统,如果执行以下操作: lw t1, 0(t2) #loading something to t1 from RAM add t4, t5 add t6, t4 add t1, t4 #using t1 for the first time since loading 在加载变量并调用第一个add(第2行)之后,代码执行会暂停吗?还是在我第一次使用t1(第4行)时暂停。您的CPU实现是否有影子寄存器和检查点,以允许在推测执行期间出现精确的

给定一个需要8个周期才能从RAM检索数据的系统,如果执行以下操作:

lw t1, 0(t2)   #loading something to t1 from RAM
add t4, t5
add t6, t4
add t1, t4     #using t1 for the first time since loading

在加载变量并调用第一个add(第2行)之后,代码执行会暂停吗?还是在我第一次使用t1(第4行)时暂停。您的CPU实现是否有影子寄存器和检查点,以允许在推测执行期间出现精确的异常?感谢您的输入。它实际上是ps1 CPU MIPS“R3000A”,我找不到任何相关信息,因此我假设它没有“影子寄存器”,我读了一些开发人员的访谈,他们说他们在加载未缓存的数据(不仅是延迟槽)时执行一些指令,但可能我误读了Thosell(sane)ISA需要精确的异常。如果您在未等待确认
lw
不会出现故障的情况下推测性地在
lw
之后执行指令,则可能无法恢复处理器出现故障时的状态。如果没有精确的异常,调试将变得非常具有挑战性,在多处理的上下文切换之后恢复上下文也是如此。现代的方法是使用额外的寄存器,保留所有在潜在故障指令后修改的寄存器的先前状态,直到确定故障不会发生。因此,它实际上可能不会暂停到第4行,但如果lw出现故障,那么您基本上会遇到大麻烦?您会遇到大麻烦,如果硬件没有将机器的状态恢复到故障指令应按顺序执行时的状态。如果您的CPU陈旧而简单,那么确保精确异常的最简单方法可能就是暂停管道。原则上,一旦确定负载不能出现故障(这意味着它只需等待快速路径中的TLB命中),硬件就可以再次开始执行,但它也必须能够处理异步异常(外部中断/定时器中断)。