为什么按序流动只可能出现RAW即写后读相关?
1 补充知识
1.1 区分两种流动
- 按序流动:意为,若1指令比2指令先发出,则1指令取操作数在2取操作数之前,且1指令写回结果在2写回结果之前
- 非按序流动:意为,虽然1指令比2指令先发出,但2指令取操作数/写回结果 这两种操作 都可能 在1指令取操作数/写回结果 这两种操作之前
1.2 各种相关的含义
-
RAR读后读:无影响
(以下三种皆属于数据冲突,又称数据相关)
-
RAW写后读:means本应先1写后2读,但→先2读后1写,此时2读到错误的旧数据(简单理解为出现了错误的读后写)
-
WAR读后写:means本应先1读后2写,但→先2写后1读,此时1读到错误的新数据(简单理解为出现了错误的写后读)
-
WAW写后写:means本应先1写后2写,但→先2写再1写,此时只保留了1写的错误旧数据(简单理解为出现了错误的写后写)
2 疑问解答
2.1 非按序流动产生的RAW相关,WAR相关,WAW相关是怎样的?
- RAW相关:2指令的取数操作在1指令的写回操作前面进行
- WAR相关:2指令的写回操作在1指令的取数操作前面进行
- WAW相关:2指令的写回操作在1指令的写回操作前面进行
2.2 为什么按序流动只可能出现RAW即写后读相关?
- 讨论RAW相关:因为按序流动,只有2指令的取数操作可能在1指令的写回操作前面,进而可能出现错误的读后写(RAW相关)
- 讨论WAR相关:而2的写回不可能在1的取数前面,所以不会出现错误的写后读(WAR相关)
- 讨论WAW相关:2的写回不可能在1的写回前面,所以不会出现错误的写后写(WAW相关)