I managed to compile OpenMPI 1.5rc5 on Linux x86_64 using the PGI 10.3 compilers. All validation tests passed. I have attached the procedure I followed and the patches I applied to 1.5rc5. I did not spend the time to find out how to fix configure to include -pthread in the LIBS Makefile variable definition; I made a brute-force change to all the Makefiles after configure ran. (FYI: make recreates all the Makefiles -- I don't know why that is.) Also, my patch to otfprofile will require fixes to configure/libtool to determine the proper selection of the -mp option for pre-10.x PGI compilers.

Larry Baker
US Geological Survey
650-329-5608
ba...@usgs.gov


Development environment:

[baker@hydra ~]$ cat /etc/redhat-release
CentOS release 4.5 (Final)

[baker@hydra ~]$ uname -a
Linux hydra.wr.usgs.gov 2.6.9-55.0.2.ELsmp #1 SMP Tue Jun 26 14:14:47 EDT 2007 x86_64 x86_64 x86_64 GNU/Linux

[baker@hydra ~]$ rpm -q -a | grep gcc
gcc-3.4.6-8
gcc4-4.1.1-53.EL4
compat-libgcc-296-2.96-132.7.2
libgcc-3.4.6-8
globus_scheduler_event_generator_sge_gcc64_rtl-1.1-0
gcc-c++-3.4.6-8
libgcc-3.4.6-8
globus_scheduler_event_generator_sge_gcc64_dev-1.1-0
gcc-g77-3.4.6-8
gcc4-gfortran-4.1.1-53.EL4

Login as root, then type:

[root@hydra ~]# cd /usr/local/src
[root@hydra src]# sh make-openmpi-1.5rc5-pgi.sh

make-openmpi-1.5rc5-pgi.sh:

# Patch OpenMPI 1.5rc5
cd /usr/local/src
tar -xjf openmpi-1.5rc5.tar.bz2
source patch-openmpi-1.5rc5.sh

# Configure OpenMPI 1.5rc5 for PGI 10.3 compilers
cd openmpi-1.5rc5
export PGI_DIR=/opt/pgi/linux86-64/10.3
export PATH=$PGI_DIR/bin:$PATH
./configure >configure.log 2>&1 \
   --prefix=$PGI_DIR/openmpi --with-sge \
   --with-wrapper-cflags="-DNO_PGI_OFFSET" \
   --with-wrapper-cxxflags="-DNO_PGI_OFFSET" \
   CC="pgcc -m64" \
   CFLAGS="-g -O3 -tp amd64 -DNO_PGI_OFFSET" \
   CXX="pgcpp -m64" \
   CXXFLAGS="-g -O3 -tp amd64 -DNO_PGI_OFFSET" \
   FC="pgf90 -m64" \
   FCFLAGS="-g -O3 -tp amd64" \
   F77="pgf90 -m64" \
   FFLAGS="-g -O3 -tp amd64"

# Would like to do Makefile fixups here, but make recreates them

# Do the make until the link fails
make >make_part1.log 2>&1

# Apply Makefile fixups to add -lpthread to the LIBS variable
find . -name Makefile -exec cp {} {}.original ';' \
-exec sh -c "sed -e '/^LIBS = -lnsl -lutil$/s/$/ - lpthread/' {}.original >{}" ';'

# Finish the make
make >make_part2.log 2>&1

# Validate the library
make check >check.log 2>&1


patch-openmpi-1.5rc5.sh:

# Fixes to correctly identify PGI compiler versions 1 through 5
mv openmpi-1.5rc5/config/libtool.m4{,.original}
sed -e '5899s/\[\[1-5\]\]\*/\[\[1-5\]\].\*/g' \
    openmpi-1.5rc5/config/libtool.m4.original \
    >openmpi-1.5rc5/config/libtool.m4
mv openmpi-1.5rc5/opal/libltdl/m4/libtool.m4{,.original}
sed -e '5899s/\[\[1-5\]\]\*/\[\[1-5\]\].\*/g' \
    openmpi-1.5rc5/opal/libltdl/m4/libtool.m4.original \
    >openmpi-1.5rc5/opal/libltdl/m4/libtool.m4

# Disable inline assembly for PGI C++, as is done for PGI C (26246), and
# Fix PGI C compiler warning (11146, 19215): Pragma ignored - string
# expected after #pragma ident
mv openmpi-1.5rc5/configure{,.original}
sed -e '26246{x;s/^.*$/ if test "$ompi_cv_cxx_compiler_vendor" = "portland group" ; then/;p; s/^.*$/ # PGI seems to have some issues with our inline assembly./;p;
                s/^.*$/        # Disable for now./;p;
                s/^.*$/        asm_result="no (Portland Group)"/;p;
                s/^.*$/    else/;G;}' \
    -e '26369{x;s/^.*$/    fi/;G;}' \
    -e '11146{s/#pragma ident/#define IDENT/;p;
              s/^.*$/#pragma ident \$IDENT/;}' \
    -e '19215{s/#pragma ident/#define IDENT/;p;
              s/^.*$/#pragma ident \$IDENT/;}' \
    openmpi-1.5rc5/configure.original \
    >openmpi-1.5rc5/configure
chmod +x openmpi-1.5rc5/configure

# Fix PGI compiler warning: Array name used in logical expression
mv openmpi-1.5rc5/opal/libltdl/ltdl.h{,.original}
sed -e '44s/((s) && (s)\[0\])/(s!=NULL)/' \
    openmpi-1.5rc5/opal/libltdl/ltdl.h.original \
    >openmpi-1.5rc5/opal/libltdl/ltdl.h

# Fix PGI compiler warning: Redefinition of symbol assert (364-370) and # Pointer value created from a nonlong integral type (444, 459, 3446, 3664, 3789)
mv openmpi-1.5rc5/opal/mca/memory/ptmalloc2/hooks.c{,.original}
sed -e '444s/: 0;/: NULL;/' \
    -e '459s/: 0;/: NULL;/' \
    openmpi-1.5rc5/opal/mca/memory/ptmalloc2/hooks.c.original \
    >openmpi-1.5rc5/opal/mca/memory/ptmalloc2/hooks.c
mv openmpi-1.5rc5/opal/mca/memory/ptmalloc2/malloc.c{,.original}
sed -e '364,369d' \
    -e '370{s/^.*$/#if MALLOC_DEBUG \&\& defined( NDEBUG )/;p;
s/^.*$/#error -DMALLOC_DEBUG is inconsistent with - DNDEBUG/;p;
            s/^.*$/#endif/;p;
            s/^.*$//;p;
            s/^.*$/#include <assert.h>/;}' \
    -e '3446s/: 0,/: NULL,/' \
    -e '3664s/: 0,/: NULL,/' \
    -e '3789s/: 0,/: NULL,/' \
    openmpi-1.5rc5/opal/mca/memory/ptmalloc2/malloc.c.original \
    >openmpi-1.5rc5/opal/mca/memory/ptmalloc2/malloc.c

# Fix PGI compiler error: expected an identifier caused by misplaced #define that causes # syntax error later in <omp.h> (Note: -mp should be configured by configure/libtool) mv openmpi-1.5rc5/ompi/contrib/vt/vt/extlib/otf/tools/otfprofile/ otfprofile.cpp{,.original}
sed -e '16,17d' \
    -e '19,22d' \
    -e '26,28d' \
openmpi-1.5rc5/ompi/contrib/vt/vt/extlib/otf/tools/otfprofile/ otfprofile.cpp.original \ >openmpi-1.5rc5/ompi/contrib/vt/vt/extlib/otf/tools/otfprofile/ otfprofile.cpp


On Aug 17, 2010, at 2:18 PM, Jeff Squyres wrote:

We still have one known possible regression:

    https://svn.open-mpi.org/trac/ompi/ticket/2530

But we posted rc5 anyway (there's a bunch of stuff that has been pending for a while that is now in). Please test!

    http://www.open-mpi.org/software/ompi/v1.5/

--
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel

Attachment: make-openmpi-1.5rc5-pgi.sh
Description: Binary data

Attachment: patch-openmpi-1.5rc5.sh
Description: Binary data

Reply via email to