ROB&dispatch stage

  • ROB会跟踪所有pipeline中的指令的状态;
  • 一旦ROB中,header指的entry complete了,则该指令可以commit,其architectural state属于visible了;
  • 如果header instruction 发生了异常,pipleine需要flush, 在该exception instruction后,architectural state不能再改变;
  • ROB将PC重定向(redirect)到对应的exception handler;

这里讲了一个ROB的实现层面的问题,为了方便超标量的dispatch和commit, ROB实现的时候,是按照W组的buffer来做的,如图所示,其中W为dispatch和commit的宽度;

  • 对于dispatch, w条指令被写入到了ROB的同一行,每条指令写到该行的不同bank;
  • 这样对于dispatch过来的所有指令,在内存上,都是连续的,这样方便用一个PC,就可以索引出所有的instruction;
  • 每条instruction在一组中的位置,则通过pc的低位来索引;
  • 虽然这样在遇到branch code的时候会引起bubble, 但是从成本的角度,开销更少;

ROB entry中的一些bit的说明:

  • PC: ROB必须知道每一条指令的PC, 因为在如下的场景下,需要使用PC值:
    • 如果指令发生异常,则exception pc(epc)需要知道;
    • branch/jump指令,需要根据他们的pc来计算出target PC;
    • Jump-register instructions需要知道其本身的PC和下一条指令的PC, 来确定front-end是否正确预测了JR target;
  • 这个PC值的存储,非常占用空间,因此,对于branch/jump instruction, 只需要在BRU单元的register-read阶段去读取PC即可,而不需要一路传递下去;

The Commit Stage

  • 只有当一条store指令被commit了,它才能被写入memory;
  • 在超标量处理器中,LSU记录了有多少条store已经被标记成了commit;
  • LSU紧接着会将这些commited的store, 尽快的写入memory;

Exceptions and Flushes 

  •  当commit head的指令发生了异常时,需要进行异常处理,此时需要flush pipeline, ROB需要清空;
  • RAT需要回退到一个真实的,稳定的状态(backup RAT);
  • 然后跳到对应的PC上;
    • 如果是architectural exception, 则excepting instruction's PC将会送到CSR;
    • 如果是micro-architectual exception(load/store ordering misspeculation), failling的instruction会重新fetch和execution;

可能的异常的类型:

  •  LSU page fault;
  • BRU misaliagned fetch;
  • decode stage,  all other exceptions and interrupts can be handled before the instruction is dispatched to the ROB
  • 注意在LSU中的memory ordering speculation errors也被认为是exception, 会进行retry;
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
useDispatch是react-redux库中的一个Hook,用于在函数组件中获取dispatch函数。它可以用来触发action并将其发送到Redux store中。通过useDispatch,我们可以在组件中使用dispatch函数来更新状态或执行其他操作。在使用react-redux时,我们可以通过以下方式来使用useDispatch: ```javascript import { useDispatch } from 'react-redux'; const MyComponent = () => { const dispatch = useDispatch(); const handleClick = () => { dispatch({ type: 'INCREMENT' }); }; return ( <button onClick={handleClick}>Increment</button> ); }; ``` 在上面的例子中,我们使用useDispatch来获取dispatch函数,并在按钮的点击事件中使用dispatch来触发一个名为'INCREMENT'的action。这样就可以通过dispatch函数来更新Redux store中的状态了。 #### 引用[.reference_title] - *1* *2* [深刻理解useSelector,useDispatch以及useReducer](https://blog.csdn.net/qq_43372697/article/details/126968428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [如何使用useDispatch useSelector对我们react中的代码进行简化。](https://blog.csdn.net/m0_70718568/article/details/127571026)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值