Hi,

I believe what you are trying to achieve is what is commonly called a 
"functional access". Though, I am not exactly sure about what is your intent 
when you say that you want to "bypass caches in order to maintain coherence" as 
it sounds contradictory to me.

If you chose to mix regular and cache-bypassing accesses to the same memory 
location without extra care, you will likely violate coherence and eventually 
face inconsistent data. The "extra care" usually consists in explicitly 
flushing caches to update main memory before bypassing the caches with 
subsequent accesses.

If you only want to maintain coherence, then you have to perform "direct memory 
accesses" using the functional access of the regular gem5 ports. This will 
result in an instantaneous access to the data you are looking for, wherever the 
most up-to-date version of the data is, while updating the caches state to 
maintain coherence.

Finally, if you really want to access main memory content and you really know 
what it can imply in terms of coherence violation, then you could directly 
connect your initiator to memory using an extra request port on the initiator 
side that you directly connect to the memory response port through a small XBar 
like the IOXBar. You will also have to bind to the XBar the port that was 
previously connected to the memory response port and the XBar output to memory. 
Don't forget to update the IOXBar default parameters to null latencies and the 
width to greater than cacheline size (likely 512 bits) in order not to 
introduce extra delays (it will still incur and extra clock cycle of delay, 
which is unlikely to cause any issue).

Best,
Gabriel
_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to