危害(组装)
Hazards (assembly)
我已获得此代码,我需要识别 RAW、WAR 和 WAW 危害。
1. MOV R3, R7
2. LD R8, (R3)
3. ADD R3, R3, 4
4. LOAD R9, (R3)
5. BNE R8, R9, L3
我认为第 1 和 2、1 和 3 以及 4 和 5 行之间存在 RAW 危险。我无法发现任何其他危险,但我相信还有更多。谁能帮我解释一下?
大部分问题都是在并发执行的时候考虑的,为了提高性能指令没有按顺序执行。如果 BNE
修改了 R8 的内容(在 ARM 中它只是用标签修改 PC 或用寄存器覆盖它而不修改它)那么我可以找到的危害在哪里:
1 & 2:RAW(你有这个)
3 & 4: RAW(假设它是字节可寻址的,并且 R3 确实具有您之前指令中想要的地址)
4 & 5: RAW(你有这个)
1 & 3:RAW,WAW(你得到了这个,但是当你写入 R3 并在 3 中读取它的值时,WAW 也可能发生。)
2 & 5: WAW (如果BNE
修改了R8
那么2和5会导致和WAW)
2 & 3:WAR(如果 3 先行,则 2 的值会错误)
我已获得此代码,我需要识别 RAW、WAR 和 WAW 危害。
1. MOV R3, R7
2. LD R8, (R3)
3. ADD R3, R3, 4
4. LOAD R9, (R3)
5. BNE R8, R9, L3
我认为第 1 和 2、1 和 3 以及 4 和 5 行之间存在 RAW 危险。我无法发现任何其他危险,但我相信还有更多。谁能帮我解释一下?
大部分问题都是在并发执行的时候考虑的,为了提高性能指令没有按顺序执行。如果 BNE
修改了 R8 的内容(在 ARM 中它只是用标签修改 PC 或用寄存器覆盖它而不修改它)那么我可以找到的危害在哪里:
1 & 2:RAW(你有这个)
3 & 4: RAW(假设它是字节可寻址的,并且 R3 确实具有您之前指令中想要的地址)
4 & 5: RAW(你有这个)
1 & 3:RAW,WAW(你得到了这个,但是当你写入 R3 并在 3 中读取它的值时,WAW 也可能发生。)
2 & 5: WAW (如果BNE
修改了R8
那么2和5会导致和WAW)
2 & 3:WAR(如果 3 先行,则 2 的值会错误)