cpu: o3: Merging haltContext with suspendContext
Review Request #2846 - Created May 26, 2015 and updated
| Information | |
|---|---|
| Alexandru Dutu | |
| gem5 | |
| default | |
| Reviewers | |
| Default | |
Changeset 10857:5dd0809b9662 --------------------------- cpu: o3: Merging haltContext with suspendContext This patch improves suspendContext by flushing the pipeline, which frees resources for other hardware threads. Secondly, it makes haltContext call suspendContext which is not freeing architectural registers mappings on halt. Something that haltContext previously did and was not realistic. For example, in SMT implementations the architectural registers for a particular hardware thread will always have mapped some physical registers and having one thread finish execution will never create more available physical registers for other hardware threads as there will be scheduled a different software thread to execute on that hardware thread anyway. As a consequence, this patch helps enabling SMT in x86 by not putting the physical registered mapped to the ZeroRegister on the freeList for a different thread to pick up when one of the threads has finished executing and called exit.
Quick regressions passed.
Ship It!
-
src/arch/x86/isa/microops/specop.isa (Diff revision 1) -
Can you please set flags consistently for this instruction? Either move this up into the X86MicroopBase constructor call, or move the setFlags bits (IsNonSpeculative, IsQuiesce) down into the body here to be consistent with this line of code? I don't see any other examples of flag setting in micro-op code, but x86 macro-op code seems to follow the latter convention.
-
src/cpu/o3/cpu.cc (Diff revision 1) -
Is there a reason not to include code to clear stalls within fetch.squash() and decode.squash()? The stalls[tid] arrays are only accessed within their respective pipe stages and set/reset based on signals from adjacent pipe stages. Exposing them publicly through the removeStall() functions seems like it breaks the existing pipe stage stall signalling abstraction.
-
src/cpu/o3/fetch_impl.hh (Diff revision 1) -
Removing this assertion seems to be a symptom of changing the abstraction for communicating stalls between pipe stages.
Change Summary:
Solved the first 2 issues Joel raised.
Description: |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Diff: |
Revision 2 (+25 -83) |
