[Beowulf] fftw2, mpi, from 32 bit to 64 and fortran

Ricardo Reis rreis at aero.ist.utl.pt
Tue Aug 5 02:57:42 PDT 2008


On Mon, 4 Aug 2008, Mark Kosmowski wrote:

> So, why did the 32-bit test case work?  Shouldn't the same problem
> crash both systems if it is a code issue?

I asked the same question myself... The function interface is:

   call rfftwnd_f77_mpi(plan_c2r, &
        1, local_data, work, use_work, FFTW_NORMAL_ORDER)

where use_work is an integer, value 1 if you use the work temporary 
array, 0 otherwise. This was the variable I wasn't passing. 
FFTW_NORMAL_ORDER instructs fftw to return a proper ordering of the array 
and FFTW_TRANSPOSE_ORDER cuts some comm steps making it more efficient 
(and then you have to workout the array ordering yourself).

The wrapper function for this is (from rfftw_f77_mpi.c):

void F77_FUNC_(rfftwnd_f77_mpi,RFFTWND_F77_MPI)
(rfftwnd_mpi_plan *p, int *n_fields, fftw_real *local_data,
  fftw_real *work, int *use_work, int *ioutput_order)
{
      fftwnd_mpi_output_order output_order = *ioutput_order ?
           FFTW_TRANSPOSED_ORDER : FFTW_NORMAL_ORDER;

      rfftwnd_mpi(*p, *n_fields, local_data, *use_work ? work : NULL,
                 output_order);
}


and the code was blocking in the

      fftwnd_mpi_output_order output_order = *ioutput_order ?
           FFTW_TRANSPOSED_ORDER : FFTW_NORMAL_ORDER;

line. So it must be a pointer issue revealed by the 64 bit, no? When I 
wasn't doing it "properly" the value of *ioutput_order wasn't set.



  greets,

  Ricardo Reis

  'Non Serviam'

  PhD student @ Lasef
  Computational Fluid Dynamics, High Performance Computing, Turbulence
  http://www.lasef.ist.utl.pt

  &

  Cultural Instigator @ Rádio Zero
  http://www.radiozero.pt

  http://www.flickr.com/photos/rreis/


More information about the Beowulf mailing list