Hi Wim,
I am working with 4x4 NUCA cache based architecture and am trying to achieve the following. The data/instructions associated to a particular core/application should be stored in the home NUCA slice rather than be scattered around in other slices (each core runs a single application only). I was trying to achieve the same effect through the following line in AddressHomeLookup::getHome() as follows:
SInt32 module_num = (address >> m_ahl_param) % num_cores;
This modification makes all the requests go to only one cache_ctlr, which is that of the first NUCA slice.
What I observed that the right operand of the % determines the number of LLC-controllers or NUCA slices to use, and plays no role in segregating the data for the different applications.
Therefore, we need to first make sure that data to slice mapping granularity must be that of a page [1]. The way to achieve that is by setting some immediate address bits after the m_ahl_param bits to the same value for all the data corresponding to a particular core/app, and then doing the % with the core_id to map it to its home slice.
However, a better way of getting around the problem is to set the required bits immediately after the m_ahl_param to represent the home-core of the address. The information can then be extracted in the same function as above and we can get the required mapping in a cleaner way than the earlier. This also would require modification to the address.
I want to first confirm if my understanding is correct.
If yes, then where and how can I set the required bits in the address?
Thanks
Zilmarij Iqbal