Replies: 1 comment 4 replies
-
I agree with your limitations, and I also strongly agree that this interface can be improved! Here are my thoughts... An explicit non-goal: Enabling the cross product of [all protocols] x [all networks] x [all topologies] to work together. Instead, I want to see cache hierarchies which are a tight coupling of specific instances of a protocol, a network, and a topology. I definitely like the idea of nodes. I think it's really hard to figure out a way to do this that is generalizable to any protocols/topology. I think that to implement the idea of nodes, but I'm struggling to see how it will work without being part of a specific specialized cache hierarchy. I would love to see a proof-of-concept based on the ideas here. If there's a way to make nodes both expressive enough and easy enough to use, it could be a great way forward. |
Beta Was this translation helpful? Give feedback.
-
Originally by Gabriel Busnot on Jira (https://gem5.atlassian.net/browse/GEM5-1333)
I would like to start a discussion about the architecture of the stdlib regarding ruby components (Does such discussion already exist BTW?). I think the current approach lacks some abstractions and makes more complex systems difficult to implement.
Ruby components
I would list the following components as the parts of a ruby system:
In addition to these concrete entities, I would add the notion of node which is a tightly coupled set of controllers, usually connected with a crossbar. A node can typically be a cluster of 1 or more CPUs with their local caches and a single port to the main transport network.
The current architecture of the stdlib (talking about the ruby part only) is unable to mix these abstractions in a satisfying way (to me 😄).
Current architecture and limitations
Currently, the stdlib architecture relies the following abstractions:
AbstractCacheHierarchy
The
AbstractCacheHierarchy
instantiates all the controllers, the network, passes the former to the later and is done with it. The network implements the topology defined by theconnectControllers
method.I identify the two following main limitations:
Proposed architecture
I suggest organizing the ruby stdlib in a way similar to what the CHI protocol did in CHI-config.py with some extra refinements. It is a very rough outline that would need to be translated into some proper interfaces.
Separating back the topology from the network
The topology would be defined as an algorithm describing which nodes/routers to connect with each other.
The network is a top level class providing at least these services:
As a result, the topology would work on a collection of nodes and build the network using the network class interface that would include, but not limited to:
Wrapping controllers in nodes
Nodes would provide the controller-side services required by the topology algorithms and the Network to operate:
Remarks and suggestions are very welcome!
Beta Was this translation helpful? Give feedback.
All reactions