数据相关:WAW,RAR,WAR,RAW


数据相关:指在流水线中执行的几条指令中,一条指令依赖于前面指令的执行结果。

  • WAW: Write-After-Write(写后再写) ordering for requests to the same address. 假设指令Write1是在指令Write0后面执行的指令,WAW表示指令Write0将数据写入寄存器后,指令Write1才能将数据写入这个寄存器。如果指令Write1在指令Write0之前写该寄存器,将使得该寄存器的值不是最新值。
  • RAR: Read-After-Read(读后再读) ordering for requests to the same address. 假设指令Read1是在指令Read0后面执行的指令,RAR表示指令Read0读出数据后,指令Read1才能从这个寄存器读取数据。如果指令Read1在指令Read0之前读该寄存器,将使得读到的寄存器值不是最新值。
  • WAR: Write-After-Read(先读后写) ordering for requests to the same address. 假设指令Write是在指令Read后面执行的指令,WAR表示指令Read读出数据后,指令Write才能写这个寄存器。如果指令Write在指令Read读出数据前就写该寄存器,将使得指令Read读出的数据不正确。
  • RAW: Read-After-Write(先写后读) ordering for requests to the same address. 假设指令Read是在指令Write后面执行的指令,RAW表示指令Write将数据写入寄存器后,指令Read才能从这个寄存器读取数据。如果指令Read在指令Write写入寄存器前尝试读出该寄存器的内容,将得到不正确的数据。

 WAW,WAR,RAW很好理解。关于RAR:如果两条Read0/Read1指令之间没有相同地址的Write指令,那么Read0和Read1读出的数据是一样的,不存在数据相关;如果两条Read0/Read1指令之间有相同地址的Write指令,那么相当于对同一个地址执行Read0 -> Write -> Read1操作,这是WAR和RAW的组合,由于CPU是想读Read1指令的数据,因此Read0和Write的数据相关可以不考虑,只需要考虑Write和Read1的数据相关即可。所以RAR本质上是RAW。

如何解决数据相关的问题呢?

TBD...


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM