Hi Hui, Yes, a replicated variable can replicate any type:
// a replicated heterogeneous tuple var repTuple: [rcDomain] (int, real, complex); // the local complex component writeln(repTuple[1](3)); David On 8/8/17 11:38 AM, Hui Zhang wrote:
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 <[email protected] <mailto:[email protected]>> 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/standard/UtilReplicatedVar.html> http://chapel.cray.com/docs/latest/modules/dists/ReplicatedDist.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* <[email protected] <mailto:[email protected]>> Date: Tue, Aug 8, 2017 at 11:36 AM Subject: Re: [Chapel-developers] question about data distribution To: Tom MacDonald <[email protected] <mailto:[email protected]>> Cc: Brad Chamberlain <[email protected] <mailto:[email protected]>> 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 <[email protected] <mailto:[email protected]>> 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:[email protected] <mailto:[email protected]>] *Sent:* Monday, August 07, 2017 4:56 PM *To:* Brad Chamberlain <[email protected] <mailto:[email protected]>> *Cc:* Chapel Sourceforge Developers List <[email protected] <mailto:[email protected]>> *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 <[email protected] <mailto:[email protected]>> 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 <[email protected] <mailto:[email protected]>> 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 regardsHui Zhang--Best regards Hui Zhang-- Best regardsHui Zhang-- Best regardsHui 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 [email protected] <mailto:[email protected]> https://lists.sourceforge.net/lists/listinfo/chapel-developers <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 [email protected] <mailto:[email protected]> https://lists.sourceforge.net/lists/listinfo/chapel-developers <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 [email protected] https://lists.sourceforge.net/lists/listinfo/chapel-developers
