Jim LaGrone <jlagr...@cs.uh.edu> wrote on 08/31/2009 05:10:30 PM:

> On 31 Aug 2009, at 11:10 AM, Igor Peshansky wrote:
> 
> >> tmp_fs_real and tmp_fs_image are Rails[Double].
> >>
> >>   val real = tmp_fs_real;
> >>   val image = tmp_fs_image;
> >>
> >>   val Mc_tmp = Mc;  //just made this change
> >>   val N_tmp = N;     // and this one
> >>   regionS = [0..N_tmp-1, 0..Mc_tmp-1];
> >>   distS = Dist.makeBlock(regionS,0);
> >>   S = Array.make[Complex](distS,
> >>       (val (i,j):Point) => new Complex ( real(i*Mc_tmp+j), image
> >> (i*Mc_tmp+j) ) );
> >
> > Ah.  I kept thinking of real() and image() as functions, but they
> > are, in fact, Rails...  That would explain it: Rails are objects,
> > and thus live in the place they were created.  So, accessing them
> > from another place will give you a BadPlaceException.
> >
> > One possible solution is to make them ValRails (if the algorithm
> > allows this).  Another is to send the relevant bits using ValRails
> > into other Rails that live in the appropriate places.
> 
> 
> Here's what I have:
> 
> The values of tmp_fs_real and tmp_fs_image are read from a file. I 
> then need to pair up each tmp_fs_real(n) with tmp_fs_image(n) for S(n).
> 
>       try{
>           inputStream = new FileReader( new File(file_path) );
> 
>           tmp_fs_real  = Rail.makeVal[Double](Mc*N, (i:int) => 0.0);
>           tmp_fs_imag  = Rail.makeVal[Double](Mc*N, (i:int) => 0.0);
>           for (i = 0; i < Mc*N; i++){
>              tmp_fs_real(i) = inputStream.read( LSB.DOUBLE );
>           }
>           for (i = 0; i < Mc*N; i++){
>              tmp_fs_imag(i) = inputStream.read( LSB.DOUBLE );
>           }
>           inputStream.close();
> 
>           val real = tmp_fs_real;
>           val imag = tmp_fs_imag;
>        /*simulated SAR signal array*/
> 
>        val Mc_tmp = Mc;
>        val N_tmp = N;
>        regionS = [0..N_tmp-1, 0..Mc_tmp-1];
>        distS = Dist.makeBlock(regionS,0);
> 
>        S = Array.make[Complex](distS,
>           (val (i,j):Point) => new Complex ( real(i*Mc_tmp+j), imag 
> (i*Mc_tmp+j) ) );
> 
> I will eventually use FFT on S, which is where the work is, so I 
> assume S should be distributed for the work. The API for Rail makes it 
> look like makeVal() returns a ValRail. The above code still throws the 
> BPException.

Rail.makeVal() does indeed return a ValRail, but you did not show the
type of tmp_fs_real.  If you declared it to have the type Rail, then
X10 will coerce the ValRail from the call to Rail.makeVal() into a
Rail (by creating a new Rail and copying the values).  So you are
really accessing a Rail in your loop.

Note that if you did declare it as a ValRail, you would not have been
able to execute this line:

>              tmp_fs_real(i) = inputStream.read( LSB.DOUBLE );

because setting elements is not supported by a ValRail.

What you could do is this:

>           val real = tmp_fs_real as ValRail[Double];
>           val imag = tmp_fs_imag as ValRail[Double];

or

>           val real : ValRail[Double] = tmp_fs_real;
>           val imag : ValRail[Double] = tmp_fs_imag;

The above will convert the Rails to ValRails, and thus make them
available in all places.

Note that you could also do the following:

>           val inputStream = new FileReader( new File(file_path) );
>           val real = Rail.makeVal[Double](Mc*N, (i:int) => 
inputStream.read( LSB.DOUBLE ));
>           val imag  = Rail.makeVal[Double](Mc*N, (i:int) => 
inputStream.read( LSB.DOUBLE ));
>           inputStream.close();

(i.e., use the initializer again).

Note, however, that you'll be sending both ValRails to all places.
Since you only use a part of the data in each place, you could
capture only the relevant data in each place, by computing the
range of indexes used in each place.  To do that, though, you
would have to forgo the convenient initializer syntax.

Hope this helps.
        Igor
-- 
Igor Peshansky  (note the spelling change!)
IBM T.J. Watson Research Center
XJ: No More Pain for XML's Gain (http://www.research.ibm.com/xj/)
X10: Parallel Productivity and Performance (http://x10.sf.net/)


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users

Reply via email to