Christoph Pospiech <christoph.pospi...@de.ibm.com> wrote on 06/10/2010 04:14:14 AM:
> On Monday 07 June 2010, Igor Peshansky wrote: > > So, since reduce() expects a function with type (T,T)=>T, your closure > > must have the type > > "(Array[Double](1),Array[Double](1))=>Array[Double](1)". > > Maybe that will placate the typechecker. > > Igor > > > > Heureka ! The following closure compiles. > > > v = v_dst.reduce( > (x:Array[Double]{rank==1}, > y:Array[Double]{rank==1}) > =>ArrayD_add(x as Array[Double]{rail}, > y as Array[Double]{rail&®ion==x.region}) > as Array[Double]{rank==1}, > v); > > But running this code, I am getting the error message below. Presumably my > type casts are too bold. I am currently simplifying the code (which also > should simplify the above closure). Nevertheless, is this supposed to work ? > Should I file a bug for this ? Well, before you spend all that effort to reduce the size of the code, I would suggest running the current code under gdb, setting a breakpoint in matmul__closure__15::apply, and stepping through the code to see if you are indeed getting the right checks. One possibility I can think of is that the regions of the two arrays are equal, but not the same object (==), but there may be other reasons why the casts fail. Igor > <stderr rank="0">Uncaught exception at place 0: > x10.lang.MultipleExceptions</stderr> > <stderr rank="0">x10.lang.ClassCastException: x10.array.Array[x10.lang.Double] > {self.region==x.region, x.region.rank==1, x.region.rect==true, > x.region.zeroBased==true}</stderr> > <stderr rank="0"> at x10::lang::Throwable::fillInStackTrace()</stderr> > <stderr rank="0"> at > x10aux::throwException(x10aux::ref<x10::lang::Throwable>)</stderr> > <stderr rank="0"> at > matmul__closure__15::apply(x10aux::ref<x10::array::Array<double> >, > x10aux::ref<x10::array::Array<double> >)</stderr> > <stderr rank="0"> at > x10_array_DistArray__closure__15<x10aux::ref<x10::array::Array<double> > > >::apply()</stderr> > <stderr rank="0"> at > x10_lang_Runtime__closure__11<x10aux::ref<x10::array::Array<double> > > >::apply()</stderr> > <stderr rank="0"> at x10::lang::Activity::run()</stderr> > <stderr rank="0"> at x10_lang_Runtime__Worker__closure__0::apply()</stderr> > <stderr rank="0"> at x10::lang::Runtime::runAtLocal(int, > x10aux::ref<x10::lang::VoidFun_0_0>)</stderr> > <stderr rank="0"> at > x10::lang::Runtime__Worker::loop(x10aux::ref<x10::lang::Runtime__Latch>, > bool)</stderr> > <stderr rank="0"> at > x10::lang::Runtime__Worker::join(x10aux::ref<x10::lang:: > Runtime__Latch>)</stderr> > <stderr rank="0"> at x10aux::ref<x10::array::Array<double> > > x10::lang::Runtime::evalAt<x10aux::ref<x10::array::Array<double> > > >(x10::lang::Place, > x10aux::ref<x10::lang::Fun_0_0<x10aux::ref<x10::array::Array<double> > > > >)</stderr> > <stderr rank="0"> at > x10_array_DistArray__closure__14<x10aux::ref<x10::array::Array<double> > > >::apply()</stderr> > <stderr rank="0"> at x10::lang::Activity::run()</stderr> > <stderr rank="0"> at x10_lang_Runtime__Worker__closure__0::apply()</stderr> > <stderr rank="0"> at x10::lang::Runtime::runAtLocal(int, > x10aux::ref<x10::lang::VoidFun_0_0>)</stderr> > <stderr rank="0"> at > x10::lang::Runtime__Worker::loop(x10aux::ref<x10::lang::Runtime__Latch>, > bool)</stderr> > <stderr rank="0"> at x10::lang::Runtime__Worker::apply()</stderr> > <stderr rank="0"> at x10_lang_Runtime__Pool__closure__0::apply()</stderr> > <stderr rank="0"> at x10::lang::Thread::thread_start_routine(void*)</stderr> > <stderr rank="0"> at GC_inner_start_routine</stderr> > <stderr rank="0"> at GC_call_with_stack_base</stderr> > <stderr rank="0"> at GC_start_routine</stderr> > <stderr rank="0"> at /lib/tls/i686/cmov/libpthread.so.0 [0xbc980e]</stderr> > <stderr rank="0"> at clone</stderr> > <stderr rank="0">x10.lang.ClassCastException (home==1): > x10.array.Array[x10.lang.Double]{self.region==x.region, x.region.rank==1, > x.region.rect==true, x.region.zeroBased==true}</stderr> > <stderr rank="0"> at x10::lang::Throwable::fillInStackTrace()</stderr> > <stderr rank="0"> at > x10aux::throwException(x10aux::ref<x10::lang::Throwable>)</stderr> > <stderr rank="0"> at > matmul__closure__15::apply(x10aux::ref<x10::array::Array<double> >, > x10aux::ref<x10::array::Array<double> >)</stderr> > <stderr rank="0"> at > x10_array_DistArray__closure__15<x10aux::ref<x10::array::Array<double> > > >::apply()</stderr> > <stderr rank="0"> at > x10_lang_Runtime__closure__11<x10aux::ref<x10::array::Array<double> > > >::apply()</stderr> > <stderr rank="0"> at x10::lang::Activity::run()</stderr> > <stderr rank="0"> at x10_lang_Runtime__Worker__closure__0::apply()</stderr> > <stderr rank="0"> at x10::lang::Runtime::runAtLocal(int, > x10aux::ref<x10::lang::VoidFun_0_0>)</stderr> > <stderr rank="0"> at > x10::lang::Runtime__Worker::loop(x10aux::ref<x10::lang::Runtime__Latch>, > bool)</stderr> > <stderr rank="0"> at x10::lang::Runtime__Worker::apply()</stderr> > <stderr rank="0"> at x10_lang_Runtime__Pool__closure__0::apply()</stderr> > <stderr rank="0"> at x10::lang::Thread::thread_start_routine(void*)</stderr> > <stderr rank="0"> at GC_inner_start_routine</stderr> > <stderr rank="0"> at GC_call_with_stack_base</stderr> > <stderr rank="0"> at GC_start_routine</stderr> > <stderr rank="0"> at /lib/tls/i686/cmov/libpthread.so.0 [0xf9a80e]</stderr> > <stderr rank="0"> at clone</stderr> -- 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 ------------------------------------------------------------------------------ ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo _______________________________________________ X10-users mailing list X10-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/x10-users