Hi Hui,

You can use the 'ReplicatedDist' distribution to get a copy per locale. There is a module 'UtilReplicatedVar' to simplify its use.


http://chapel.cray.com/docs/latest/modules/standard/UtilReplicatedVar.html
http://chapel.cray.com/docs/latest/modules/dists/ReplicatedDist.html

use UtilReplicatedVar;

var regularInt = 42;

// rcDomain is declared in UtilReplicatedVar. It maps one value to each locale
var repVar: [rcDomain] int;

// assign 42 to the replicated var on all locales
rcReplicate(repVar, regularInt);

// access the local copy of the replicated var
// the first form must use 1 as the index
repVar[1] = 0;
writeln(rcLocal(repVar));

// access a remote copy
rcRemote(repVar, remoteLocale);

David


On 8/8/17 10:36 AM, Hui Zhang wrote:

---------- Forwarded message ----------
From: *Hui Zhang* <wayne.huizh...@gmail.com <mailto:wayne.huizh...@gmail.com>>
Date: Tue, Aug 8, 2017 at 11:36 AM
Subject: Re: [Chapel-developers] question about data distribution
To: Tom MacDonald <tmacdon...@cray.com <mailto:tmacdon...@cray.com>>
Cc: Brad Chamberlain <br...@cray.com <mailto:br...@cray.com>>


Hello,

I'm wondering that is there an easy way to make a copy of a global variable on each locale so that later each locale will directly access its local copy instead of accessing the original variable stored in locale0 ?

thanks

On Mon, Aug 7, 2017 at 6:19 PM, Tom MacDonald <tmacdon...@cray.com <mailto:tmacdon...@cray.com>> wrote:

We have all made this kind of mistake Hui. No need to feel bad. Happy to hear you discovered the problem.

    Tom MacDOnald

    *From:*Hui Zhang [mailto:wayne.huizh...@gmail.com
    <mailto:wayne.huizh...@gmail.com>]
    *Sent:* Monday, August 07, 2017 4:56 PM
    *To:* Brad Chamberlain <br...@cray.com <mailto:br...@cray.com>>
    *Cc:* Chapel Sourceforge Developers List
    <chapel-developers@lists.sourceforge.net
    <mailto:chapel-developers@lists.sourceforge.net>>
    *Subject:* Re: [Chapel-developers] question about data distribution

    Sorry, I made a very basic mistake that made me feel so dumm:I
    mixed up the name of distributed and non-distributed domains that
    I used, which caused all the confusion and proved that
    easily-distinguishable naming is such an important thing, again. :P

    Thanks Brad, everything works as it should be.

    On Mon, Aug 7, 2017 at 4:01 PM, Brad Chamberlain <br...@cray.com
    <mailto:br...@cray.com>> wrote:


        This looks like a bug to me, though maybe someone else will
        remember something that I've forgotten (as I mentioned in my
        previous message, 'local' clauses are a little surprising
        sometimes -- you may have seen that we're actually hoping to
        retire them from the language to focus on more data-centric
        approaches).

        In either case, I think this is worth opening a GitHub issue for.

        -Brad





        On Mon, 7 Aug 2017, Hui Zhang wrote:

            update:

            After playing for a little bit, I'm more confused now:
            if I have a distributed domain D, and array B declared on
            D, the following
            code 1 will work and 2 will fail in runtime with an error
            "cannot access
            remote data in local block", why is that?
            1. work
            forall b in B {
               local {
                    b = here.locale.id <http://here.locale.id>;
               }
            }

            2. fail
            forall d in D {
                local {
                     B[d] = here.locale.id <http://here.locale.id>;
                }
            }



            On Mon, Aug 7, 2017 at 1:06 PM, Hui Zhang
            <wayne.huizh...@gmail.com
            <mailto:wayne.huizh...@gmail.com>> wrote:

                Hello,

                I have a question about the data distribution in
                Chapel, for example we
                have:

                const D = {1..8} dmapped Block({1..8});
                var B: [D] real;
                forall d in D {
                   var A : 8*real;
                   foo(A, B[d]);
                }

                So in multilocale, even though the domain D is
                distributed,​ the variable
                A declared in each iteration is still allocated on
                node0 right? which means
                we can not add "local" clause around the loop body
                since foo needs to
                access A from other nodes which requires
                communication, like:
                local {
                    var A: 8*real;
                    foo(A, B[d]);
                }  ​

                or

                var A: 8*real;
                local {
                     foo(A, B[d]);
                }


                Further, is it true that the only ways to put data on
                nodes other than 0
                are:
                1. use explict "on" clause, everything inside it will
                be allocated on the
                specific locale
                2. use distributed domain: piece of the data will be
                allocated on each
                locale.
                ?

                Thanks
                --
                Best regards


                Hui Zhang




-- Best regards


            Hui Zhang




--
    Best regards


    Hui Zhang




--
Best regards


Hui Zhang



--
Best regards


Hui Zhang


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot


_______________________________________________
Chapel-developers mailing list
Chapel-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/chapel-developers

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Chapel-developers mailing list
Chapel-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/chapel-developers

Reply via email to