Hi Lisa,

Thanks for your reply. Yes, this cache function should be called every CPU
tick. What it does is very simple: just collect some cache information (e.g.
how many blocks in Modified state, etc.) in current cycle, and at the end of
simulation this accumulated counter will be divided by numCycles to get an
average number. I would like to implement it in every cache object,
including both private and shared ones.

Actually I was able to figure out a way to possibly get to the cache object
in CPU. E.g. in cpu.cc, in order to access L1 instruction cache, we can use:
getPort("icache_port",0)->getPeer()->myCache()->someCacheFunc()
However, the problem with the above line is that getPeer() only returns
Port*, while myCache is a function of CpuSidePort which is defined in Class
Cache (in mem/cache/cache.hh). How can I cast Port* to its subclass
CpuSidePort*, especially when the subclass is defined in a template class
(i.e. Cache)?

Or perhaps what I am trying to hack here is completely wrong/infeasible?

Lide


On Wed, Jul 14, 2010 at 12:11 PM, Lisa Hsu <[email protected]> wrote:

> Hi Lide,
>
> There isn't a direct way to access the caches from the CPU right now...this
> is a design decision to keep M5 modular - all the CPU knows is what is
> attached to its ports, that way you can have completely arbitrary
> hierarchies and topologies without any dependencies in the CPU code as to
> what the hierarchy looks like.
>
> You'd have to hack something in...but it would definitely be a hack.  If
> you had a few more specifics about what you were trying to do, I or someone
> could provide slightly more suggestions.  Like, do you want this to happen
> for every cache in the hierarchy or just a specific level?  Are the caches
> you want this to happen to shared?  If so, would you want this function to
> get called N times per cycles for N cpu tick calls, or just once across all
> the CPUs?
>
> Lisa
>
> On Wed, Jul 14, 2010 at 8:36 AM, Lide Duan <[email protected]> wrote:
>
>> Hi,
>>
>> Probably this is a silly question: how can I access the instantiated cache
>> objects in the cpu object? I understand that the CPU sends requests to I/D
>> cache ports which further connect to the caches. But what I am trying to do
>> is to call a cache object function directly in the CPU, is it possible? More
>> specifically, I need to collect some cache statistics every cycle, so I
>> implemented a function (in Cache class) to do it, and need to call this
>> function in CPU tick(). Then I came up with the problem that I couldn't
>> access the cache objects in cpu. I found that the cache object is created in
>> BUILD_CACHE in mem/cache/builder.cc, but where does it go after that?
>>
>> Anybody has some idea about this? Thank you very much!
>>
>> Lide
>>
>> _______________________________________________
>> m5-users mailing list
>> [email protected]
>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>>
>
>
> _______________________________________________
> m5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to