Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

From: Dries Kimpe (Dries.Kimpe_at_[hidden])
Date: 2006-05-06 10:36:38


Dries Kimpe wrote:
>
> <quote>
> The problem is that the OpenMPI group takes ROMIO as-is from an older release. Then they pass
> MPI_COMBINER_SUBARRAY as-is to ROMIO, which in that release it does not understand. Then ROMIO blows up.
> </quote>
>
> I'll try recompiling Open MPI with a newer version of ROMIO.
>

Found the problem;
mca/io/romio/romio/adio/common/flatten.c contains conditional code for
MPI implementations not supporting COMBINER_SUBARRAY, COMBINER_DARRAY
and COMBINER_DUP.

OpenMPI supports these, but fails to #define the necessary symbols:

MPIIMPL_HAVE_MPI_COMBINER_DARRAY
MPIIMPL_HAVE_MPI_COMBINER_SUBARRAY
MPIIMPL_HAVE_MPI_COMBINER_DUP

Because of this, ROMIO excludes support for these datatype constructors.

Solution:
remove the #ifdef/#endif in flatten.c or #define the correct symbols.

I verified that this solves the problem. (pnetcdf tests work now).

Atteched patch removes the conditional code.

  Greetings,
  Dries

Index: flatten.c
===================================================================
--- flatten.c (revision 9836)
+++ flatten.c (working copy)
@@ -116,7 +116,6 @@
     MPI_Type_get_contents(datatype, nints, nadds, ntypes, ints, adds, types);
 
     switch (combiner) {
-#ifdef MPIIMPL_HAVE_MPI_COMBINER_DUP
     case MPI_COMBINER_DUP:
         MPI_Type_get_envelope(types[0], &old_nints, &old_nadds,
                               &old_ntypes, &old_combiner);
@@ -124,8 +123,6 @@
         if ((old_combiner != MPI_COMBINER_NAMED) && (!old_is_contig))
             ADIOI_Flatten(types[0], flat, st_offset, curr_index);
         break;
-#endif
-#ifdef MPIIMPL_HAVE_MPI_COMBINER_SUBARRAY
     case MPI_COMBINER_SUBARRAY:
         {
             int dims = ints[0];
@@ -142,8 +139,6 @@
             MPI_Type_free(&stype);
         }
         break;
-#endif
-#ifdef MPIIMPL_HAVE_MPI_COMBINER_DARRAY
     case MPI_COMBINER_DARRAY:
         {
             int dims = ints[2];
@@ -163,7 +158,6 @@
             MPI_Type_free(&dtype);
         }
         break;
-#endif
     case MPI_COMBINER_CONTIGUOUS:
         top_count = ints[0];
         MPI_Type_get_envelope(types[0], &old_nints, &old_nadds,
@@ -523,7 +517,6 @@
     MPI_Type_get_contents(datatype, nints, nadds, ntypes, ints, adds, types);
 
     switch (combiner) {
-#ifdef MPIIMPL_HAVE_MPI_COMBINER_DUP
     case MPI_COMBINER_DUP:
         MPI_Type_get_envelope(types[0], &old_nints, &old_nadds,
                               &old_ntypes, &old_combiner);
@@ -535,8 +528,6 @@
                 (*curr_index)++;
         }
         break;
-#endif
-#ifdef MPIIMPL_HAVE_MPI_COMBINER_SUBARRAY
     case MPI_COMBINER_SUBARRAY:
         {
             int dims = ints[0];
@@ -557,8 +548,6 @@
 
         }
         break;
-#endif
-#ifdef MPIIMPL_HAVE_MPI_COMBINER_DARRAY
     case MPI_COMBINER_DARRAY:
         {
             int dims = ints[2];
@@ -581,7 +570,6 @@
             MPI_Type_free(&dtype);
         }
         break;
-#endif
     case MPI_COMBINER_CONTIGUOUS:
         top_count = ints[0];
         MPI_Type_get_envelope(types[0], &old_nints, &old_nadds,