Model topology design #7
Replies: 4 comments
-
Re-thinking the topology extension, this might make more sense:
This would read:
I don't think the LSU should be a part of this at this time. |
Beta Was this translation helpful? Give feedback.
-
Step 1: Add a Dispatch tester that can handle dynamic execution topologies: PR #17 complete |
Beta Was this translation helpful? Give feedback.
-
How should the Dispatch unit interface with a Load Store Execute unit that can accept more than one Inst per cycle? Some possibilities:
|
Beta Was this translation helpful? Give feedback.
-
I like the third approach. This make the model very flexible, allowing multiple instructions to be dispatched to each type of For those unfamiliar with the Dispatch design, the After the proposed change (third approach), the Suggestion on implementation:
|
Beta Was this translation helpful? Give feedback.
-
The Olympia model started with a flat pipeline structure consisting of a single FPU, ALU, BR, and LSU. Dispatching to these units was handled in a large switch statement in Dispatch.cpp, but obviously this static implementation is not extensible.
Some Requirements
To enable a more dynamic approach to pipeline topologies, Dispatch must be changed to be agnostic to the topology and simply attempt to push as many instructions through as possible. Some rules:
A Simple Design
Using a Sparta extension,
Dispatch
will createDispatcher
s that will handle a givenTargetUnit
specified in an instruction via the architectural JSON ISA files that are supplied to Mavis.Dispatcher
A
Dispatcher
will be the conduit betweenDispatch
and the targetExecute
pipe for any given instruction. TheDispatcher
willExecute
pipeDispatch
, pushing back onDispatch
if it cannot take the given instructionDispatch
if it denied dispatching in the past and is now able to accept new instructionsExecute
An
Execute
unit will be extended to handle instructions fromDispatch
. Once issue #2 is complete, this class will handle ready vs non-ready instructions for execution. This class will pick the oldest, ready instruction from an internal sparse array (sparta::Array
) and mark itself "busy" (for now). In the future, pipeline can be added. When the instruction is finished (based on latency information in the Mavis JSON files), the instruction will be removed from the internal issue queue and a credit returned to dispatch's dispatcher.Execute
units will be created by anExecutionUnit
factory that will use the topology file to build the layout.YAML Topology Definition
First thoughts on a YAML file for this design:
Using this information,
Dispatch
can create 8Dispatcher
s. TheExecutionFactory
can create 4Execute
units to handle ALU instructions, 2 units for FPU, and 1 for BR. The LSU can be created in main simulation.After the simulation is created, the binding code can use this topology information to bind the
Dispatcher
s to theExecute
pipes.Beta Was this translation helpful? Give feedback.
All reactions