Instruction Retired 退役指令

​ 最近在研究DiFuzzRTL,其发现了Rocket Chip中出现的一个问题Instruction retired count not increased when ebreak其中出现了Instruction retired这个名词不是很明白,搜集了一些资料记录一下这个名词的含义,并且解释一下这个错误出现的具体原因。为了面向更多人本文将解释的更加通俗一些。

现代处理器的一个重要特征就是预测执行(Speculative execution),用维基百科上的例子解释一下。

假设某程序的结构如下:

  • 从网络上下载一个数据A,耗时30秒。
  • 如果下载A成功,则直接给出A的答案。
  • 如果下载A失败,则计算30秒的算数B,并给出这个答案。

如果没有推测执行功能,那么当A下载后发现失败,那么就要再花30秒做算术B,总共耗时1分钟。但是,由于下载过程中CPU是空转,CPU可以认识到反正闲着也是闲着,不如在下载A的同时将B算出。这样如果将来需要到B,就节省了30秒的时间。就算不需要,丢弃B即可,仅增加些许功耗之外,也没有什么坏处。

​ 这就导致了一个显而易见的结果,即CPU执行的指令数需要远多于程序流需要的指令数(因为CPU自行执行了很多可能被抛弃的指令),而被程序流确实所需要的指令就被“退役”了。所以说退役指令就是指被程序流真正需要的指令。

了解了Instruction retired的概念,为了理解Rocket Chip中的错误我们还需要知道ebreak指令的作用,

Instruction Retired 退役指令

http://example.com/2023/04/06/2023-04-06-2146/

Author

HanyJie

Posted on

2023-04-06

Updated on

2023-04-17

Licensed under

Comments