Thanks a lot! I think both solution work but I am still wondering what's the best way to copy entire distributed array to a local array in terms of communication cost. Could you give me some advice?
Kirak On Fri, Dec 17, 2010 at 3:48 AM, Vijay Saraswat <vi...@saraswat.org> wrote: > To add to Josh's comments. If you have an object o at a place p, and you > need to go to a place q, and then come back and modify o (and not a copy > of o), you have to use a GlobalRef. (You can also use a PlaceLocalHandle.) > > Thus: > > val a = makeArray(); > val globalA = GlobalRef(a); > val home = here; > at (here.next()) { > val x = ... > at (home) { // go back to the original place > globalA()(0) = x; // assign x to a(0). > } > } > > > at(here.next()) > > at(here) > > { > > for(p in src_array) > > { > > src_array(p) = 10000; > > } > > > > } > > > > for(p in src_array) > > Console.OUT.println(src_array(p)); > > > > On 12/17/2010 1:14 AM, Josh Milthorpe wrote: > > Hi Kirak, > > > > I'm assuming that src_array was created at (here). > > > > In the first example, the src_array that is modified is actually a copy > > of a copy - it is copied to here.next() in the first line and then again > > (to the same place). Note that at(here) is _not_ a noop - it copies all > > variables in the closure environment! This is to make the behaviour of > > the at statement consistent regardless of the target place. > > > > The second example doesn't actually work for me, etiher (against SVN > > HEAD) - if I print the contents of src_array, they have not been > > updated. Again, the src_array that is updated is a copy, so the updates > > don't affect the original src_array. > > > > Have a look at the RemoteArray class and the Array.copy(...) and > > Array.asyncCopy(...) methods. These support a variety of patterns of > > local and remote updates - hopefully one of them matches your > requirement. > > > > Cheers, > > > > Josh > > > > On 17/12/10 16:16, Kirak Hong wrote: > >> Hi, > >> > >> I have another question regarding X10 array. I tried to modify a local > array > >> from remote place using following code. I noticed that there's some > >> computation running, but the content of array was never changed. > >> > >> at(here.next()) > >> at(here) > >> { > >> for(p in src_array) > >> { > >> src_array(p) = 10000; > >> } > >> > >> } > >> > >> for(p in src_array) > >> Console.OUT.println(src_array(p)); > >> > >> However, the following code seems to be working, although it is highly > >> inefficient. > >> > >> at(here.next()) > >> for(p in src_array) > >> { > >> var x : int = 0; > >> at(here) > >> { > >> x = 10000; > >> } > >> src_array(p) = x; > >> } > >> > >> I looked at the X10 programming manual and it says it will implicitly > copy > >> an object to another place if that object is used within 'at' clause. > >> However, I don't understand why above behavior happens. Can anybody tell > me > >> the reason? > >> > >> Thanks, > >> Kirak > > > > > ------------------------------------------------------------------------------ > Lotusphere 2011 > Register now for Lotusphere 2011 and learn how > to connect the dots, take your collaborative environment > to the next level, and enter the era of Social Business. > http://p.sf.net/sfu/lotusphere-d2d > _______________________________________________ > X10-users mailing list > X10-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/x10-users > -- Kirak Hong PhD Student, College of Computing Georgia Institute of Technology ------------------------------------------------------------------------------ Lotusphere 2011 Register now for Lotusphere 2011 and learn how to connect the dots, take your collaborative environment to the next level, and enter the era of Social Business. http://p.sf.net/sfu/lotusphere-d2d _______________________________________________ X10-users mailing list X10-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/x10-users