Thank you David, that's exactly what I need! One question: the type of
repVar can be anything right? what if I need a tuple? how can I access the
local copy?



On Tue, Aug 8, 2017 at 12:16 PM, David Iten <di...@cray.com> wrote:

> 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>
> Date: Tue, Aug 8, 2017 at 11:36 AM
> Subject: Re: [Chapel-developers] question about data distribution
> To: Tom MacDonald <tmacdon...@cray.com>
> Cc: Brad Chamberlain <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> 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]
>> *Sent:* Monday, August 07, 2017 4:56 PM
>> *To:* Brad Chamberlain <br...@cray.com>
>> *Cc:* Chapel Sourceforge Developers List <chapel-developers@lists.sourc
>> eforge.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> 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;
>>    }
>> }
>>
>> 2. fail
>> forall d in D {
>>     local {
>>          B[d] = here.locale.id;
>>     }
>> }
>>
>>
>>
>> On Mon, Aug 7, 2017 at 1:06 PM, Hui Zhang <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 
> listChapel-developers@lists.sourceforge.nethttps://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
>
>


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

Reply via email to