> On June 22, 2015, 5:06 p.m., Brad Beckmann wrote:
> > src/mem/ruby/network/MessageBuffer.py, line 39
> > <http://reviews.gem5.org/r/2845/diff/4/?file=46645#file46645line39>
> >
> >     Why is a default recycle latency not set?  
> >     
> >     Why is this "Parent.recycle_latency"?  Does both swtiches and 
> > controllers define a recycle latency?  It doesn't appear so with this 
> > patch.  I'm a bit confused how this actually works.  I do not believe 
> > switches will ever use recycles, so it doesn't make much sense to define 
> > this default in the switch parent.  Also many protocols avoid using 
> > recycles.  Those protocols should not need to specify a recycle latency 
> > either.
> 
> Joel Hestness wrote:
>     Here again, I just copied the convention that was used when these were in 
> SLICC. Specifically, AbstractControllers require a recycle_latency to be 
> defined, and it was used to set their MessageBuffer recycle_latency (you can 
> see this in the SLICC code I removed in this patch). MessageBuffers in the 
> network never set a default (was probably a bad idea).
>     
>     Here are the options for setting recycle_latency:
>      1) Define a default of the parent's recycle_latency parameter
>      2) Define a default of 0
>     
>     If we go with (2), there wouldn't be a way to set a single 
> recycle_latency for all of a controller's MessageBuffers. We'd need to 
> explicitly set them all when non-zero. This sounds like it would result in 
> tons of latent bugs.
>     
>     I think (1) is best: For MessageBuffers within controllers, 
> recycle_latency will at least be set with the controller parent's value, and 
> the user can explictly override this value by setting any particular buffer's 
> recycle_latency in the config files. Network MessageBuffers should explicitly 
> set recycle_latency to indicate that there is no latency.
>     
>     A possibility to address your desire would be to add, in SimpleNetwork 
> and SimpleRouter, a recycle_latency parameter that defaults to 0. That way, 
> the MessageBuffers would inherit these values and could still be overridden 
> by a user. Would that be agreeable?
> 
> Brad Beckmann wrote:
>     It sounds like we agree that recycling and setting a network recycle 
> latency does not make much sense for network MessageBuffers.  Since the 
> network never sets a default recycle_latency, I'm still confused how the 
> current code even works.  It seems like the SimpleNetwork and SimpleRouter 
> must set a recycle_latency parameter that defaults to 0.
>     
>     Recycle latency is really a controller feature.  I wonder if the best way 
> to resolve this confusion is to remove the MessageBuffer recycle latency 
> parameter and just have the controllers pass their recycle latency to the 
> recycle() function.

>>Since the network never sets a default recycle_latency, I'm still confused 
>>how the current code even works.  It seems like the SimpleNetwork and 
>>SimpleRouter must set a recycle_latency parameter that defaults to 0.

This patch explicitly specifies recycle_latency=0 for all network/switch 
MessageBuffers during their instantiation (this is precisely what you took 
issue with in your other review...). Neither SimpleNetwork or SimpleRouter have 
a recycle_latency parameter.

>>Recycle latency is really a controller feature.  I wonder if the best way to 
>>resolve this confusion is to remove the MessageBuffer recycle latency 
>>parameter and just have the controllers pass their recycle latency to the 
>>recycle() function.

Maybe so, but this is outside the scope of this patch, which just aims to 
promote MessageBuffers to SimObjects. The MessageBuffer's recycle_latency 
variable is the same as it was previously, and this patch improves its setting 
by explicitly setting the value to 0 for network buffers (which was not 
happening previously). If we want to remove this variable from MessageBuffer, I 
think it should be done in a separate patch.


- Joel


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://reviews.gem5.org/r/2845/#review6548
-----------------------------------------------------------


On June 20, 2015, 4:14 p.m., Joel Hestness wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.gem5.org/r/2845/
> -----------------------------------------------------------
> 
> (Updated June 20, 2015, 4:14 p.m.)
> 
> 
> Review request for Default.
> 
> 
> Repository: gem5
> 
> 
> Description
> -------
> 
> Changeset 10859:d0dddb8fc9de
> ---------------------------
> ruby: Expose MessageBuffers as SimObjects
> 
> Expose MessageBuffers from SLICC controllers as SimObjects that can be
> manipulated in Python. This patch has numerous benefits:
> 1) First and foremost, it exposes MessageBuffers as SimObjects that can be
> manipulated in Python code. This allows parameters to be set and checked in
> Python code to avoid obfuscating parameters within protocol files. Further, 
> now
> as SimObjects, MessageBuffer parameters are printed to config output files as 
> a
> way to track parameters across simulations (e.g. buffer sizes)
> 
> 2) Cleans up special-case code for responseFromMemory buffers, and aligns 
> their
> instantiation and use with mandatoryQueue buffers. These two special buffers
> are the only MessageBuffers that are exposed to components outside of SLICC
> controllers, and they're both slave ends of these buffers. They should be
> exposed outside of SLICC in the same way, and this patch does it.
> 
> 3) Distinguishes buffer-specific parameters from buffer-to-network parameters.
> Specifically, buffer size, randomization, ordering, recycle latency, and ports
> are all specific to a MessageBuffer, while the virtual network ID and type are
> intrinsics of how the buffer is connected to network ports. The former are
> specified in the Python object, while the latter are specified in the
> controller *.sm files. Unlike buffer-specific parameters, which may need to
> change depending on the simulated system structure, buffer-to-network
> parameters can be specified statically for most or all different simulated
> systems.
> 
> 
> Diffs
> -----
> 
>   configs/ruby/Ruby.py d02b45a554b5 
>   src/mem/protocol/RubySlicc_Defines.sm d02b45a554b5 
>   src/mem/ruby/SConscript d02b45a554b5 
>   src/mem/ruby/network/MessageBuffer.hh d02b45a554b5 
>   src/mem/ruby/network/MessageBuffer.cc d02b45a554b5 
>   src/mem/ruby/network/MessageBuffer.py PRE-CREATION 
>   src/mem/ruby/network/SConscript d02b45a554b5 
>   src/mem/ruby/network/simple/SimpleNetwork.hh d02b45a554b5 
>   src/mem/ruby/network/simple/SimpleNetwork.cc d02b45a554b5 
>   src/mem/ruby/network/simple/SimpleNetwork.py d02b45a554b5 
>   src/mem/ruby/network/simple/Switch.hh d02b45a554b5 
>   src/mem/ruby/network/simple/Switch.cc d02b45a554b5 
>   src/mem/ruby/slicc_interface/AbstractController.hh d02b45a554b5 
>   src/mem/ruby/slicc_interface/AbstractController.cc d02b45a554b5 
>   src/mem/slicc/ast/ObjDeclAST.py d02b45a554b5 
>   src/mem/slicc/symbols/StateMachine.py d02b45a554b5 
>   src/python/swig/pyobject.cc d02b45a554b5 
> 
> Diff: http://reviews.gem5.org/r/2845/diff/
> 
> 
> Testing
> -------
> 
> Regression tests with all Ruby protocols. Protocol file changes are in
> separate patch (http://reviews.gem5.org/r/2844/) to keep this one slim.
> 
> 
> Thanks,
> 
> Joel Hestness
> 
>

_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to