Hi,

It was a problem of Java codegen that caused name clash between your
SumReducer with Reducible.SumReducer.
I fixed it in r25712 (trunk) and r25713 (2.3.1.2 branch).
As Yuki suggested, you can rename SumReducer or just use
Reducible.SumReducer as workaround.

Thanks for reporting the problem.
-- Mikio


2013/7/2 Yuki Makino <mak...@jp.ibm.com>

> Hi,
>
> It seems that something happens in the compiler, and it is caused
> by a collision between your SumReducer and x10.lang.Reducible.SumReducer
> [T].
>
> The following is reduced code to reproduce the symptom:
> public class A {
> def m() {
>         val a = finish(SumReducer()) {
>                 offer 1.0;
>         };
> }
> static struct SumReducer implements Reducible[Double] {
>         public def zero() = 0.0;
>         public operator this(a:Double, b:Double) = (a + b);
> }
> }
>
> As a workaround, please try utilizing x10.lang.Reducible.SumReducer[T] (or
> renaming your struct) as the following:
> public class A {
>
> def m() {
>         val a = finish(Reducible.SumReducer[Double]()) {
>                 offer 1.0;
>         };
> }
>
> //static struct SumReducer implements Reducible[Double] {
> //      public def zero() = 0.0;
> //      public operator this(a:Double, b:Double) = (a + b);
> //}
> }
>
> Regards,
> Yuki MAKINO
>
>
>
> From:   Konstantina Panagiotopoulou <kwno...@hotmail.com>
> To:     Mailing list for users of the X10 programming language
>             <x10-users@lists.sourceforge.net>
> Date:   2013/07/01 20:47
> Subject:        Re: [X10-users] Performance tuning for the N Body problem
>
>
>
> So this is the code...I have ommitted some parts to make it more clear...
>
> the error I get is the following
>
> x10c: ----------
>      1. ERROR in /home/kwnouli/Desktop/x10/uniComm.java (at line 421)
>       SumReducer $_obj = new SumReducer((java.lang.System[]) null);
>       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>      The constructor Reducible.SumReducer(System[]) is undefined
>      ----------
>      2. ERROR in /home/kwnouli/Desktop/x10/uniComm.java (at line 423)
>       return $_deserialize_body($_obj, $deserializer);
>       ^^^^^^^^^^^^^^^^^^
>      The method $_deserialize_body(uniComm.SumReducer, X10JavaDeserializer)
> in the type uniComm.SumReducer is not applicable for the arguments
> (Reducible.SumReducer, X10JavaDeserializer)
>      ----------
>      2 problems (2 errors)
> x10c: Non-zero return code: 255
> 2 errors.
>
>
> And I cannot understand why it tries to deserialize the body object since I
> only need the e: Double value...
>
> Am I missing something?
> Thanks again Josh
>
> Regards,
> Konstantina
>
>
>
> 2013/7/1 Konstantina Panagiotopoulou <kwno...@hotmail.com>
>   Hey Josh,
>
>   I used the code you provided above.
>
>
>   public def Advance(dt:double) {
>   val directEnergy = finish(SumReducer()) {
>
>
>                   finish ateach(pl in bodies) {
>
>   var e:Double = 0.0;
>
>
>                   val myBodies : Rail[Body] =bodies(pl);
>                       val toSent = new Rail[Body](myBodies.size as Int,
>   (i:Int)=>new Body(myBodies(i).mass,myBodies(i).posx, myBodies(i).posy,
>   myBodies(i).posz, myBodies(i).velx, myBodies(i).vely, myBodies(i).velz));
>                     val nextPlace = here.next();
>                       if (nextPlace != here) {
>                         @Uncounted at(nextPlace) async {
>                           atomic {
>                                  otherBodies(nextPlace.id)(pl) = toSent;
>                               }
>                           }
>                       }
>                     for (i in 0..(myBodies.size-1)) {
>     val bodyI = myBodies(i);
>
>   e+= 0.5 * bodyI.mass * (bodyI.velx*bodyI.velx + bodyI.vely*bodyI.vely +
>   bodyI.velz*bodyI.velz);
>                         for (j in 0..(i-1)) {
>
>          val bodyJ = myBodies(j);
>
>   //code to update my bodies' velocity ...
>   val dx: double = bodyI.posx - bodyJ.posx;
>   val dy: double = bodyI.posy - bodyJ.posy;
>   val dz: double = bodyI.posz - bodyJ.posz;
>                               var d2: double  = dx*dx + dy*dy + dz*dz;
>   e-= (bodyI.mass*bodyJ.mass) / Math.sqrt(d2);
>   }
>   }
>   offer e;
>   }
>
>   var target : Place = nextPlace.next();
>                       var source : Place = here.prev();
>                       while (source != here) {
>                           if (target != here) {
>                               // send myBodies (toSent) to the next target
>   place
>                               val targetPlace = target;
>                               @Uncounted at(targetPlace) async {
>                                   atomic {
>                                       otherBodies(targetPlace.id)(pl) =
>   toSent;
>                                   }
>                               }
>                           }
>
>   when(otherBodies(here.id)(source.id) != null);
>   //all interactions with otherBodies at other place
>   val other = otherBodies(here.id)(source.id);
>   for (j in 0..(other.size-1)) {
>
>   val bodyJ= other(j);
>
>   for (i in 0..(myBodies.size-1)) {
>
>   val bodyI = myBodies(i);
>   e+= 0.5 * bodyI.mass * (bodyI.velx*bodyI.velx + bodyI.vely*bodyI.vely +
>   bodyI.velz*bodyI.velz);
>
>   val dx: double = bodyI.posx - bodyJ.posx;
>   val dy: double = bodyI.posy - bodyJ.posx;
>   val dz: double = bodyI.posz - bodyJ.posx;
>
>   var d2: double  = dx*dx + dy*dy + dz*dz;
>   //computation to update my bodies' velocity
>   e-= (bodyI.mass*bodyJ.mass) / Math.sqrt(d2);
>
>   }
>   offer e;
>   }
>   target = target.next();
>   source = source.prev();
>   }
>   }
>   };
>   return  directEnergy;
>      }
>
>
>
>   static struct SumReducer implements Reducible[Double] {
>           public def zero() = 0.0;
>           public operator this(a:Double, b:Double) = (a + b);
>       }
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>   2013/7/1 Josh Milthorpe <josh.miltho...@anu.edu.au>
>    Hi Konstantina,
>
>    a more general version of collecting finish / offers is proposed, called
>    'accumulator variables', but this is not yet fully implemented.
>    Collecting finish should work fine in X10 2.3.
>
>    The Reducible interface is in x10.lang.  It includes a generic
>    SumReducer struct type that you could use instead of the Double-specific
>    one I posted.
>
>    Can you post the code that is causing the error, along with the compile
>    error that you receive?
>
>
>    Cheers,
>
>    Josh
>    ------------------------------------------
>    Josh Milthorpe
>
>    Postdoctoral Fellow, Research School of Computer Science
>    Australian National University, Building 108
>    Canberra, ACT 0200
>    Australia
>    Phone:  + 61 (0)2 61254478
>    Mobile: + 61 (0)407 940743
>    E-mail: josh.miltho...@anu.edu.au
>    Web:    http://cs.anu.edu.au/~Josh.Milthorpe/
>    On 29/06/13 01:31, Konstantina Panagiotopoulou wrote:
>          Hello again,
>
>          I tried to restructure my code according to the example..
>          The problem is that I get errors with the SumReducer struct  (the
>          errors point to the java generated code, and can't really make
>          sense)
>          I checked the specification for v2.3. and found this:
>
>          offers. The offers concept was experimental in 2.1, but was
>          determined inadequate. It has not been removed from the compiler
>          yet, but it will be soon. In
>          the meantime, traces of it are still visible in the grammar. They
>          should not be
>          used and can safely be ignored
>
>          Also I cannot track the Reducible interface in the API.
>
>          Is there any other more explicit way to reduce values from
>          different places?
>
>          Thanks again,
>          Konstantina
>
>
>          2013/6/27 Konstantina Panagiotopoulou <kwno...@hotmail.com>
>            Hello again,
>
>            I tried to restructure my code according to the example..
>            The problem is that I get errors with the SumReducer struct
>            (the errors point to the java generated code, and can't really
>            make sense)
>            I checked the specification for v2.3. and found this:
>
>            offers. The offers concept was experimental in 2.1, but was
>            determined inadequate. It has not been removed from the compiler
>            yet, but it will be soon. In
>            the meantime, traces of it are still visible in the grammar.
>            They should not be
>            used and can safely be ignored
>
>            Also I cannot track the Reducible interface in the API.
>
>            Is there any other more explicit way to reduce values from
>            different places?
>
>            Thanks again,
>            Konstantina
>
>
>            2013/6/22 Vijay Saraswat <vi...@saraswat.org>
>             On 6/21/13 9:21 PM, Konstantina Panagiotopoulou wrote:
>               Thanks a lot for the useful feedback.
>               Although, I did not expect I would need such low level
>               tuning. Looks a lot like MPI.
>
>             X10 is a procedural programming language for distributed
>             programming where the notions of concurrency and distribution
>             are made explicit.
>
>             It is closer to MPI than, say, a more limited, declarative
>             language with implicit concurrency, in which the compiler
>             determines run-time concurrency and distribution (e.g. ZPL).
>
>             We are very interested in such (declarative) languages as well,
>             and building them on top of X10, in the long term.
>
>
>
>
>
>
>  
> ------------------------------------------------------------------------------
>
>          This SF.net email is sponsored by Windows:
>
>          Build for Windows Store.
>
>          http://p.sf.net/sfu/windows-dev2dev
>
>
>          _______________________________________________
>          X10-users mailing list
>          X10-users@lists.sourceforge.net
>          https://lists.sourceforge.net/lists/listinfo/x10-users
>
>
>
>
>  
> ------------------------------------------------------------------------------
>
>    This SF.net email is sponsored by Windows:
>
>    Build for Windows Store.
>
>    http://p.sf.net/sfu/windows-dev2dev
>    _______________________________________________
>    X10-users mailing list
>    X10-users@lists.sourceforge.net
>    https://lists.sourceforge.net/lists/listinfo/x10-users
>
>
>
> ------------------------------------------------------------------------------
>
> This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> X10-users mailing list
> X10-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/x10-users
>
>
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> X10-users mailing list
> X10-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/x10-users
>
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users

Reply via email to