> On Sept. 17, 2015, 5:32 p.m., Brad Beckmann wrote:
> > The description of this patch scares me.  Is your plan to allocate the data 
> > block seperately from the cache entry data structures?  Why don't we move 
> > all the creation of the cache entires and data blocks to the generated 
> > code?  We could have SLICC generate the implementation of 
> > CacheMemory::init() and avoid having to dynamically create cache entries 
> > and data blocks every time the sm files "allocate" a cache entry.  Instead 
> > CacheMemory::allocate could simply reset the values of the entry.  I 
> > suspect all those extra allocations costing us performance.
> > 
> > By the way, you said "This is because cache entries are allocated in SLICC 
> > code and SLICC does not allow defining constructors that can take input 
> > arguments".  Doesn't SLICC support "constructor_hacks"?

> The description of this patch scares me.  Is your plan to allocate the data 
> block seperately from the cache entry data structures?  

I asking for allocating data blocks the first time they are assigned some data. 
 The problem here is lack of constructors in SLICC.

> Why don't > we move all the creation of the cache entires and data blocks to 
> the generated code?  We could have SLICC generate the 
> implementation of
> CacheMemory::init() and avoid having to dynamically create cache entries and 
> data blocks every time the sm files "allocate" a cache entry.  
> Instead CacheMemory::allocate could simply reset the values of the entry.  I 
> suspect all those extra allocations costing us performance.

I would rather prefer going the other way round which is move everything to 
plain C++.

> By the way, you said "This is because cache entries are allocated in SLICC 
> code and SLICC does not allow defining constructors that can take > input 
> arguments".  Doesn't SLICC support "constructor_hacks"?

There is a "constructor" construct, but that can only be used to provide 
arguments when an object is being constructed.
So I can write: TBETable table, constructor="num_entries";  This will convert 
to table = new TBETable(num_entries);

But I cannot use this construct to make SLICC output a constructor of my 
choice. So if I declare a type:
structure TBEEntry
{
     int id;
     DataBlock d;
     Time t;
}

As per my understanding, SLICC cannot output a constructor that calls 
user-chosen constructors on the data members.
SLICC just assumes that each data member has a constructor that does not take 
any arguments.


- Nilay


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


On Sept. 17, 2015, 1:18 a.m., Nilay Vaish wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://reviews.gem5.org/r/3119/
> -----------------------------------------------------------
> 
> (Updated Sept. 17, 2015, 1:18 a.m.)
> 
> 
> Review request for Default.
> 
> 
> Repository: gem5
> 
> 
> Description
> -------
> 
> Changeset 11122:1a3619d669d1
> ---------------------------
> ruby: copy data to TBE only when required
> This patch changes protocols so that data is copied to a TBE only when
> required.  This is required since a later patch drops static variable for 
> block
> size in RubySystem class.  That variable was used for allocating data buffer 
> in
> the constructor for the DataBlock class.  But now that would not happen.
> Instead a constructor with size argument will be added.  Even with that
> constructor, it is not possible to allocate data block to a cache entry at its
> construction time.   This is because cache entries are allocated in SLICC code
> and SLICC does not allow defining constructors that can take input arguments.
> So we cannot supply data block size to the constructor for the Cache Entry.
> So, from now on we copy data from cache block to TBE only when we know for 
> sure
> that the cache block has a data block.
> 
> 
> Diffs
> -----
> 
>   src/mem/protocol/MESI_Three_Level-L0cache.sm 5a2e1b1b5c43 
>   src/mem/protocol/MESI_Three_Level-L1cache.sm 5a2e1b1b5c43 
>   src/mem/protocol/MESI_Two_Level-L1cache.sm 5a2e1b1b5c43 
>   src/mem/protocol/MESI_Two_Level-L2cache.sm 5a2e1b1b5c43 
>   src/mem/protocol/MOESI_CMP_directory-L1cache.sm 5a2e1b1b5c43 
>   src/mem/protocol/MOESI_hammer-cache.sm 5a2e1b1b5c43 
> 
> Diff: http://reviews.gem5.org/r/3119/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Nilay Vaish
> 
>

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

Reply via email to