SimEng icon indicating copy to clipboard operation
SimEng copied to clipboard

Add simultaneous multhreading (SMT) support

Open hal-jones opened this issue 6 years ago • 1 comments

The pipeline stages should be updated to support SMT. This will require each instruction to store a hardware thread ID, which may be queried by pipeline stages to determine the appropriate set of resources to use.

To support SMT, some pipeline resources will require per-thread duplication, e.g.:

  • Program counter
  • Register allocation table Logic that revolves around the physical registers or program counter, such as flushing, will need to be updated to respect the thread ID.

For maximum flexibility, others resources should optionally support per-thread duplication, such as the branch prediction tables (BHT, BTB, etc.). Logic such as port allocation may also be updated to supply the thread ID, to enable POWER-style per-thread execution unit partitioning.

hal-jones avatar Apr 04 '19 13:04 hal-jones

The work for this has been completed in the smt branch, but has been put on hold due to the development of more complex exception handling and the new memory interface. As exceptions currently pause the entire core until handled, this would result in the undesirable halting of other threads. This system would likely need to be redesigned to pause only the exception-raising thread while allowing the others to continue.

hal-jones avatar Jul 04 '19 14:07 hal-jones