Skip to Content.
Sympa Menu

charm - Re: [charm] Charm++ execution order question

charm AT lists.cs.illinois.edu

Subject: Charm++ parallel programming system

List archive

Re: [charm] Charm++ execution order question


Chronological Thread 
  • From: Akhil langer <akhilanger AT gmail.com>
  • To: Evghenii Gaburov <e-gaburov AT northwestern.edu>
  • Cc: "charm AT cs.uiuc.edu" <charm AT cs.uiuc.edu>
  • Subject: Re: [charm] Charm++ execution order question
  • Date: Sun, 25 Sep 2011 09:45:12 -0500
  • List-archive: <http://lists.cs.uiuc.edu/pipermail/charm>
  • List-id: CHARM parallel programming system <charm.cs.uiuc.edu>

Lets say a total of 100 messages are sent by Chare A and Chare B to Chare C. Consider a given instant at which out of these 100 messages about 10 messages have arrived at the node having chare C. These messages could be any 10 out of those 100 sent messages (e.g. msg 1, msg 5, msg 10 from Chare A and msg 2, msg5, msg3, etc. from Chare B). As you can see that messages received by Chare C need not be in any order.

Now the Run time system has to pick from these 10 messages 1-by-1 and execute the corresponding entry method on Chare C. This order of message processing can be prioritized by assigning priority to the messages at the sender side. The priority scheme can be FIFO, LIFO or any other custom priority queue. This prioritization has been explained in Section 3.5

Does that clarify the difference?

--Akhil

On Sun, Sep 25, 2011 at 12:11 AM, Evghenii Gaburov <e-gaburov AT northwestern.edu> wrote:
> After the message arrives at a PE, delivery to the user program can be ordered using one of the priority schemes. Please note the difference between http://charm.cs.illinois.edu/manuals/html/charm++/3_5.html
> and
> http://charm.cs.illinois.edu/manuals/html/charm++/3_8.html#SECTION00038300000000000000 (Messages are not guaranteed to be delivered in order).
From documentation it is not clear how can I set priority for contribute.

How can I set priority of contribute(do_work_complete), such that it will be called *after* all recv have been processed?
I suppose the priority is set for CkCallback, but I cannot find how to do this.

Do you perhaps know how to do this?

This type of communication is an important part of my applications, and I cannot yet
wrap my head around on how to deal with this in Charm++.

Thanks!

Cheers,
 Evghenii

>
>
> In your program, can the contribute call be moved to the remote chares recv method instead??
>
>
> On Sat, Sep 24, 2011 at 8:59 PM, Evghenii Gaburov <e-gaburov AT northwestern.edu> wrote:
> Hi All,
>
> I have some misunderstanding upon the order in which the messages arrive. I read, that messages by default obey FIFO order
>
> So, does the following code
>
> "
> void myClass::do_work()
> {
>  /* do some work first */
>  for (int i = 0; i < nsend; i++)
>   myClass[remoteIndex[i]].recv(results[i]);                       /* send data to remote chares */
>  contribute(0, 0, CkReduction::concat, CkCallback(do_work_complete(), thisProxy));   /* barrier */
> }
>
> void myClass::recv(myResults remote_result) {  store_remote_result; }
> void myClass::do_work_complete()            { process arrived remote_results; }
> "
>
> guarantees that myClass::recv(..) methods will be executed first (because they were called first),
> and only afterwards a reduction part will call myClass::do_work_complete() (because it is called second).
> This order is required to make sure that when do_work_complete is only invoked when *all* remote data has arrived.
>
> Thanks!
>
> Cheers,
>  Evghenii
> --
> Evghenii Gaburov, e-gaburov AT northwestern.edu
>
>
>
>
>
>
>
> _______________________________________________
> charm mailing list
> charm AT cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/charm
>

--




Archive powered by MHonArc 2.6.16.

Top of Page