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

Reply via email to