There's no real control over ordering... I believe init() is called on objects in the same order that they were constructed, but you don't have a lot of control over the construction order (short of the fact that if B is a parameter to A then B will be constructed first) and it's probably best not to rely on that anyway.
There are ways to fix this that we've discussed in the past, but we never implemented any of them. If there's a real need we could do that. However, there are a couple of other approaches that are simpler if they apply. Say for example that B's initialization needs some information from A: - Does B need A to be fully initialized, or does it just need to acquire some basic information? In the latter case, as long as A can do enough in its constructor to keep B::init() happy, then that will just work since B::init() won't be called until after all the objects have been created. I know Nate won't like this, and it is a bit fragile since some later person who adds more complex calls to A in B::init() might be surprised, but a more pragmatic programmer might be content with putting appropriate comments in A::A() and B::init() to head off that scenario. - Are there are just one or a few special cases of 1:1 dependencies? If so, I'd be tempted to defer B's initialization to a separate method, i.e., B::init() could be a no-op, then at the end of A::init() call B::postAInit() and of course at that point you know A::init() is done. If the dependencies are more general (e.g., there are a bunch of As that all have to be fully initialized before any of a bunch of Bs) then we can look at other solutions; if that's the case, please provide some more details on just what the constraints are. It's also possible that perhaps it's the partitioning of concepts into SimObjects that needs to be tweaked. For example, off the top of my head it's not clear why "topology" would be a SimObject, since SimObjects are generally fairly concrete things you could point to on a block diagram. Steve On Mon, Jul 13, 2009 at 3:21 PM, Somayeh Sardashti <soma...@cs.wisc.edu>wrote: > Hi, > > Does M5 keep any order when calling init() of different objects? > > In Ruby, because of dependencies among some objects (like topology and > network), the order of calling init() is important and handled in > constructor of System (the main module). > > How can I keep this kind of ordering in M5? > > Somayeh >
_______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev