Hi all,

I'm trying to reduce the latency of L1 misses - to do so, upon an L1 miss, 
instead of fetching from the L2, I would like to use a predictor to predict the 
value of the load and return this to the core (the details of the predictor are 
irrelevant). This way the processor is not stalled waiting for the block to be 
retrieved from the L2/memory. After every N misses to an address, in addition 
to generating a prediction, the L1 would also retrieve the data from the L2 and 
use this to train the predictor (the retrieved block would also be inserted 
into the L1). This is effectively an implementation of Load Value Approximation 
by San Miguel et al.

I'm using the Ruby cache system because I need access to Garnet. To implement 
this, I'm currently modifying the Ruby implementation of the L1 cache in 
gem5/src/mem/ruby/protocol/MESI_Two_Level-L1cache.sm.

However, despite my technique not having to do anything with cache coherence, 
I'm having to essentially modify the details of the MESI protocol to get my 
stuff to work. For example, say I decide to need to fetch data for training 
after predicting a load that is not currently in the L1. If the block is in the 
I state, I need to take the action of sending a request to the L2 to retrieve 
the data. However, if I'm in the I_S state, I don't need to send a request to 
the L2 since the data is already on its way. This is just one of many ways I 
need to modify the coherence protocol.

Is there an easier way to implement this without having to deal with all the 
intricacies and headaches of modifying/verifying coherence protocols? (I cannot 
switch to the classical cache system)

Thanks,
Farhad
_______________________________________________
gem5-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to