This is a typical X10 beginner mistake: you specify types that are too imprecise. You cannot index into an Array with a Point unless it can be statically proven that the rank of that Point is exactly equal to the rank of the Array's region.
The best rule of thumb is to let X10 infer the types for you. Barring that, you should look carefully at the methods you call to ensure that the rank is propagated correctly. Incidentally, to get efficient iteration, you'd want to propagate other pr0operties of the Array's region (e.g., the fact that it's rectangular). Another problem is that array elements have to be accessed in the place where they live (as specified by the distribution). This is not something that can be checked statically, but you will get a runtime exception if this rule is violated. So, you should rewrite your code as follows: public static def main(args:Rail[String]!){ val R = 1..4; // The inferred type here is Region(1){rect} val D = Dist.makeCyclic(R); // The inferred type here is Dist{region==R) val data_squares = Array.make[Int](D, ((i):Point(1)) => i*i); for (val p in D) { // The inferred type here is Point(1) Console.OUT.println( "Array index: " + p + " distributed place :" + D(p)); // this is the problem part, but this is how I understood arrays Console.OUT.println( "Array element: " + at (D(p)) data_squares(p)); // how can I access e.g. data_squares(3) and its value and place. // using 2.0 java back end on eclipse } } Vijay already covered most of these points, but one that I wanted to bring up is that, unless you know exactly what the type is, better let the type system infer the most precise type. In particular, if you'd left the type of D as just Dist, the iteration would have been woefully inefficient (which would have hurt your peformance for larger arrays). As Vijay said, we are working on relaxing that requirement. Igor Haris H <hha...@gmail.com> wrote on 03/28/2010 03:57:47 PM: > Hi guys, > can somebody clear this up for me please. > I can not get my head around this element manipulation in distributed arrays > in 2.0. > > Here is the overly simplified code but represents my problem, > so please tell me what am I doing wrong and what it should be. > > I am having trouble understanding accessing elements of the array and their > distributed location. > > Thank you. > > public static def main(args:Rail[String]!){ > > R: Region = 1..4; > D: Dist = Dist.makeCyclic(R); > > val data_squares = Array.make[Int](D, ((i):Point) => i*i); > > for (val p: Point in D) { > Console.OUT.println( "Array index: " + p + " distributed place :" + > D(p)); > > // this is the problem part, but this is how I understood arrays > > Console.OUT.println( "Array element: " + data_squares(p)); > > // how can I access e.g. data_squares(3) and its value and place. > // using 2.0 java back end on eclipse > } > } -- Igor Peshansky (note the spelling change!) IBM T.J. Watson Research Center X10: Parallel Productivity and Performance (http://x10-lang.org/) XJ: No More Pain for XML's Gain (http://www.research.ibm.com/xj/) "I hear and I forget. I see and I remember. I do and I understand" -- Confucius ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ X10-users mailing list X10-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/x10-users