Re: [Gems-users] Protocol with Directory Cache (again)


Date: Fri, 23 Feb 2007 11:14:39 -0600 (CST)
From: Mike Marty <mikem@xxxxxxxxxxx>
Subject: Re: [Gems-users] Protocol with Directory Cache (again)
i added an action and did this in every relevent transition

> Mike,
>
> Where do you update the tags of dirCache? Bascially I want to add a couple
> lines after doTransition() in the C codes. My question is how should I write
> in the .sm file? I tried to add them at the end of inport, then realized it
> won't work. Do I need to make a new action, add this into every transition?
>
> thanks
> Liqun
>
> On 2/20/07, Mike Marty <mikem@xxxxxxxxxxx> wrote:
> >
> > for the ones that matter, yes.
> >
> > --Mike
> >
> >
> > > Mike,
> > >
> > > thanks, I will do in this way. Just make sure I need to add this if..
> > else
> > > in every action, right?
> > >
> > > Legion
> > >
> > > On 2/20/07, Mike Marty <mikem@xxxxxxxxxxx> wrote:
> > > >
> > > > I've added a directory cache to one of my own protocols.  I added no
> > > > states.  Here is an example action.  Notice all it does is check to
> > see if
> > > > dirCache contains the tag.  If so, it uses DIRECTORY_CACHE_LATENCY
> > instead
> > > > of DIRECTORY_LATENCY
> > > >
> > > >
> > > >   action(f_forwardRequest, "f", desc="Forward request to owner") {
> > > >     peek(requestQueue_in, RequestMsg) {
> > > >       if (dirCache.isTagPresent(address) == false) {
> > > >         enqueue(forwardNetwork_out, RequestMsg,
> > > > latency="DIRECTORY_LATENCY") {
> > > >           out_msg.Address := address;
> > > >           out_msg.Type := in_msg.Type;
> > > >           out_msg.Requestor := in_msg.Requestor;
> > > >
> > out_msg.Destination.addNetDest(directory[in_msg.Address].Owner);
> > > >           out_msg.AckCount := directory[address].Sharers.count();
> > > >           if
> > > >
> > > >
> > (directory[address].Sharers.isElement(map_L1CacheMachId_to_PrivateL2Cache(in_msg.Requestor)))
> > > > {
> > > >             out_msg.AckCount := out_msg.AckCount - 1;
> > > >           }
> > > >           APPEND_TRANSITION_COMMENT(in_msg.Requestor);
> > > >           APPEND_TRANSITION_COMMENT(" ");
> > > >           APPEND_TRANSITION_COMMENT(directory[in_msg.Address].Owner);
> > > >           out_msg.MessageSize := MessageSizeType:Forwarded_Control;
> > > >         }
> > > >       } else {
> > > >         enqueue(forwardNetwork_out, RequestMsg,
> > > > latency="DIRECTORY_CACHE_LATENCY") {
> > > >           out_msg.Address := address;
> > > >           out_msg.Type := in_msg.Type;
> > > >           out_msg.Requestor := in_msg.Requestor;
> > > >
> > out_msg.Destination.addNetDest(directory[in_msg.Address].Owner);
> > > >           out_msg.AckCount := directory[address].Sharers.count();
> > > >           if
> > > >
> > > >
> > (directory[address].Sharers.isElement(map_L1CacheMachId_to_PrivateL2Cache(in_msg.Requestor)))
> > > > {
> > > >             out_msg.AckCount := out_msg.AckCount - 1;
> > > >           }
> > > >           APPEND_TRANSITION_COMMENT(in_msg.Requestor);
> > > >           APPEND_TRANSITION_COMMENT(" ");
> > > >           APPEND_TRANSITION_COMMENT(directory[in_msg.Address].Owner);
> > > >           out_msg.MessageSize := MessageSizeType:Forwarded_Control;
> > > >         }
> > > >       }
> > > >     }
> > > >   }
> > > >
> > > >
> > > >
> > > > > Hi,
> > > > >
> > > > > I finally make the RAC work, at least the tester and splash2 didn't
> > > > compain.
> > > > > thanks for the helps.
> > > > > Now I plan to add a directory cache. I do find one thread on this
> > topic
> > > > in
> > > > > the archive, and Mike recommended:
> > > > > "You can change the getState() function in the Directory controller
> > to
> > > > return
> > > > > a different state if the directory entry
> > > > > is cached. Actions triggered by events to these cached states will
> > use a
> > > > > lower latency".
> > > > >
> > > > > However, I have concerns to the above solution. First, we need to
> > > > duplicate
> > > > > all Actions/Transitions and make changes
> > > > > everywhere. Second, maintaining a seperate set of states for
> > directory
> > > > cache
> > > > > is quite nontrivial, may even raise problems
> > > > > at directory cache replacement. Therefore, I prefer to make changes
> > in a
> > > > > centralized place.
> > > > >
> > > > > Here are my random thoughts. In getState, if we make directory cache
> > hit
> > > > as
> > > > > the base case, and add some
> > > > > latency (directory latency - directory cache hit latency) at misses,
> > > > this
> > > > > should be a close approximation. However, since
> > > > > getState is not an event, I don't find a easy way to recycle (retry
> > > > after xx
> > > > > cycles) it.  As a result,  I am thinking of adding
> > > > > latency when poping the message from in-port. Basically, we add a
> > new
> > > > > function in MessageBuffer class say
> > > > > cust-recycle(num_cycles). When peeking in-ports, we first check the
> > > > > directory cache. If tag matches, we pop the messages
> > > > > as usual, else, we cust-recycle this message for (directory latency
> > -
> > > > > directory caches hit latency) cycles. Will this work?
> > > > >
> > > > > you guys are much more experienced on gems, any feedback/advice is
> > much
> > > > > appreciated.
> > > > >
> > > > > thanks
> > > > > Legion
> > > > >
> > > > _______________________________________________
> > > > 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.
> > > >
> > > >
> > >
> > _______________________________________________
> > 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.
> >
> >
>
[← Prev in Thread] Current Thread [Next in Thread→]