I would definitely expect traffic in various in_ports to be dependent on protocol. After all, it is the protocol that shapes the traffic. I'm by no means a protocol expert -- I have learned to avoid anything in Ruby that is protocol-specific -- but there are a huge variety of behaviors that appear selectively based on protocol.
Regards, Dan
On Tue, Mar 9, 2010 at 10:05 AM, Muhammad Shoaib <shoaibbinalt@xxxxxxxx> wrote:
Thanks for the thoughts. I tried to go with MSI_MOSI_CMP instead of MOESI_CMP and this issue is not observed there i.e. there were messages coming from the network into L2 and were being serviced. I don't think changing the protocol should make this difference or can it !!!!
Shoaib
It seems reasonable to me that a cache could receive a request for a line not present. Thats just a 'miss'. I am not a protocol expert, so I cannot say under what conditions in this protocol you would receive a message for a non-present line.
It doesn't seem reasonable that the line would never be present, however. But, since your print_some() fires and your cal_Time() doesn't, I suggest you take along hard look at your cal_Time() function.
Regards, Dan
With the following setting, my "print_some()" gets executed for the "apache" workload...but still cal_Time() is not invoked
================================================== in_port(requestNetwork_in,
RequestMsg, GlobalRequestToL2Cache) { if
(requestNetwork_in.isReady()) {
peek(requestNetwork_in, RequestMsg)
{
print_some(); cal_Time(in_msg.Address); }} ================================================= So this employs that whenever a request (for updated copy or whatever) is forwarded to my current node, it comes out that the required address is not in the cache (is that right??). Since cal_Time() print stuff will only execute on a hit. But isn't there a contradiction ..requests are forwarded to my node because I have that cache line but they are not there!!!
Shoaib
This is my configuration file ....currently I am playing around with MOESI_CMP
======================================================
read-configuration /path/applu_warm-8p.check istc-disable dstc-disable cpu-switch-time 1 load-module ruby ruby0.setparam g_NUM_PROCESSORS 8 ruby0.setparam g_PROCS_PER_CHIP 8 ruby0.setparam L1_CACHE_ASSOC 2
ruby0.setparam L1_CACHE_NUM_SETS_BITS 9 ruby0.setparam L2_CACHE_ASSOC 16 ruby0.setparam L2_CACHE_NUM_SETS_BITS 13 ruby0.setparam_str g_NETWORK_TOPOLOGY FILE_SPECIFIED ruby0.setparam_str g_GARNET_NETWORK false
ruby0.init c 350000000 ruby0.dump-stats output_applu.txt exit =======================================================
I need more information about how you are running. What is your configuration? Protocol? Benchmark? Run length? etc.
Thanks for helping me out.
1) It is just a typo.
2) There is no "if" in the CacheMemory.h but the
function cal_Time itself calls print (do calculations) only when the
Tag is present
3) I have tried to print some stuff ...but still
nothing gets printed.
4) I am still trying to figure that out. That's why
I asked because I THINK (!!!) there should be some messages (Or I am wrong
)transactions across that path
Shoaib
Sent: Friday, March 05, 2010 7:37 AM
Subject: Re: [Gems-users] Issue with SLICC ...in
MOESI_CMP_L2-sim
Muhammad, You have a bit of a mystery here. Lets see if we
can't solve it. 1. Why is your function called cal_Time in its definition and
cal_act_Time when invoked? 2. Are your print statements guarded by any IF
statements? 3. Try printing something (anything) immediately before the call
site to cal_act_Time to verify control flow gets there. 4. How are you
testing? Is there any reason why GlobalRequestToL2Cache might never have any
messages? Regards, Dan
List,
I am
trying to count the number of access L2 cache has either from its private L1
or from other nodes. For this I have implemented a function "cal_Time" which
keeps track of the time between consecutive accesses to a cache line.
This function prints the time using "my_print" which is an external function
defined in
CacheMemory.h. ============================================= void
cal_Time(Address addr){ if
(L2cacheMemory.isTagPresent(addr)){
L2cacheMemory[addr].active_time_val:=
(L2cacheMemory[addr].f_time_val-L2cacheMemory[addr].i_time_val);
L2cacheMemory.my_print(addr,L2cacheMemory[addr].active_time_val); ============================================= The
problem is when i use this function in the following way it works (in my
understanding with this I am tracking all requests L2 faces from its own
private
L1!!!)
====================================================== in_port(L1requestNetwork_in,
RequestMsg, L1RequestToL2Cache) { if
(L1requestNetwork_in.isReady()) {
peek(L1requestNetwork_in, RequestMsg)
{
assert(in_msg.Destination.isElement(machineID));
cal_act_Time(in_msg.Address); ====================================================
But
with the following stuff, when i try to track the requests from other
processor nodes..nothing happens ..==> this function never gets executed
==>it never receives a request from other processors (Right??)??? But this
should not be the
case/....
======================================================== in_port(requestNetwork_in,
RequestMsg, GlobalRequestToL2Cache) { if
(requestNetwork_in.isReady()) {
peek(requestNetwork_in, RequestMsg)
{ cal_act_Time(in_msg.Address); ========================================================
Any
pointers/ suggestions...Am i doing something wrong here??
Shoaib
_______________________________________________ Gems-users
mailing list Gems-users@xxxxxxxxxxx <Gems-users@xxxxxxxxxxx> <Gems-users@xxxxxxxxxxx <Gems-users@xxxxxxxxxxx>>
_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx <Gems-users@xxxxxxxxxxx> <Gems-users@xxxxxxxxxxx <Gems-users@xxxxxxxxxxx>> --
_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
-- http://www.cs.wisc.edu/~gibson [esc]:wq!
|