Hello,
I am working on gem5's O3 model and encountered these two flags:
IsNonSpeculative and IsSerializeBefore.
From what I understand from the code, "IsNonSpeculative" instructions do
not execute until the commit head reaches that instruction.
"IsSerializeBefore" stalls the instruction in the rename stage until the
ROB is empty. Both behaviors seem to imply that the marked instruction
does not execute until all preceding instructions have finished
committing.
Additionally, the rename stage does not seem to handle instructions with
both "IsSerializeBefore" and "IsSerializeAfter" set and only when either
of them is set. As a result, most serializing instructions have both
"IsNonSpeculative" and "IsSerializeAfter" flags set.
My questions are:
- What's the difference between "IsNonSpeculative" and
"IsSerializeBefore"? Aren't they interchangeable in most scenarios?
- Why doesn't gem5 support handling both "IsSerializeBefore" and
"IsSerializeAfter" for an instruction?
Thanks!
Best,
Leonard
Hello,
I am working on gem5's O3 model and encountered these two flags:
IsNonSpeculative and IsSerializeBefore.
From what I understand from the code, "IsNonSpeculative" instructions do
not execute until the commit head reaches that instruction.
"IsSerializeBefore" stalls the instruction in the rename stage until the
ROB is empty. Both behaviors seem to imply that the marked instruction
does not execute until all preceding instructions have finished
committing.
Additionally, the rename stage does not seem to handle instructions with
both "IsSerializeBefore" and "IsSerializeAfter" set and only when either
of them is set. As a result, most serializing instructions have both
"IsNonSpeculative" and "IsSerializeAfter" flags set.
My questions are:
1. What's the difference between "IsNonSpeculative" and
"IsSerializeBefore"? Aren't they interchangeable in most scenarios?
2. Why doesn't gem5 support handling both "IsSerializeBefore" and
"IsSerializeAfter" for an instruction?
Thanks!
Best,
Leonard