Thank you MIkio, but still there is a problem.
I renamed it, and it compiles but only with : finish(mySumReducer())

(the Reducible.mySumReducer() gives the following error:

x10:95: No valid method call found for call in given type.
      Call: mySumReducer()
      Type: x10.lang.Reducible
.x10:95: The reducer must be of type Reducible[T], for some type T.
      Reducer: x10.lang.Reducible.mySumReducer()
      Reducer type: <unknown>
.x10:263: Cannot find enclosing collecting finish for offer statement.
      Offer: offer energyThisPlace;
3 errors.
)

Now, the one that compiles gives a runtime exception:

java.lang.ClassCastException:
x10.lang.FinishState.CollectingFinish[x10.lang.Double]
at x10.rtt.Types.cast(Types.java:802)
at x10.lang.Runtime.makeOffer__0x10$lang$Runtime$$T(Runtime.java:3681)
at uniComm$$Closure$7.$apply(uniComm.java:2718)
at x10.lang.Activity.run(Activity.java:726)
at x10.lang.Runtime$Worker.loop$O(Runtime.java:1460)
at x10.lang.Runtime$Worker.$apply(Runtime.java:1407)
at x10.core.Thread$2.run(Thread.java:62)
java.lang.ClassCastException:
x10.lang.FinishState.CollectingFinish[x10.lang.Double]
at x10.rtt.Types.cast(Types.java:802)
at x10.lang.Runtime.makeOffer__0x10$lang$Runtime$$T(Runtime.java:3681)
at uniComm$$Closure$7.$apply(uniComm.java:2718)
at x10.lang.Activity.run(Activity.java:726)
at x10.lang.Runtime$Worker.loop$O(Runtime.java:1460)
at x10.lang.Runtime$Worker.$apply(Runtime.java:1407)
at x10.lang.Runtime$Pool.$apply(Runtime.java:1835)
at x10.lang.Runtime.start(Runtime.java:2265)
at x10.runtime.impl.java.Runtime.$apply(Runtime.java:159)
at x10.core.Thread$2.run(Thread.java:60)

Although, I can see that it calculates the energyThisPlace.

The code is still:

public def Advance(dt:double) {




2013/7/2 Mikio Takeuchi <mikio.takeu...@gmail.com>

> Hi Konstantina,
>
> Because the reason of this problem is name clash, a simple solution is to
> rename your SumReducer to some other name such as MySumReducer.
> I confirmed it works.
> Sorry for inconvenience.
>
> -- Mikio
>
>
> 2013/7/2 Konstantina Panagiotopoulou <kwno...@hotmail.com>
>
>> Hello,
>>
>> I tried the workaround you suggested. Again, I 'm getting the same
>> error... :(
>>
>> x10c: ----------
>>      1. ERROR in /u1/msc/kp167/Desktop/x10/uniComm.java (at line 435)
>>       SumReducer $_obj = new SumReducer((java.lang.System[]) null);
>>       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>      The constructor Reducible.SumReducer(System[]) is undefined
>>      ----------
>>      2. ERROR in /u1/msc/kp167/Desktop/x10/uniComm.java (at line 437)
>>       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.
>>
>> Regards,
>> Konstantina
>>
>>
>> 2013/7/2 Mikio Takeuchi <mikio.takeu...@gmail.com>
>>
>>> 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
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> 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