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: Evghenii Gaburov <e-gaburov AT northwestern.edu>
  • To: Akhil langer <akhilanger AT gmail.com>
  • Cc: "charm AT cs.uiuc.edu" <charm AT cs.uiuc.edu>
  • Subject: Re: [charm] Charm++ execution order question
  • Date: Sun, 25 Sep 2011 05:11:32 +0000
  • Accept-language: en-US
  • List-archive: <http://lists.cs.uiuc.edu/pipermail/charm>
  • List-id: CHARM parallel programming system <charm.cs.uiuc.edu>

> 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
>

--
Evghenii Gaburov,
e-gaburov AT northwestern.edu











Archive powered by MHonArc 2.6.16.

Top of Page