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]> 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 <[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 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-developers