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&&region==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

Reply via email to