[mpich-discuss] Cannot build mpich2-1.0.8p1 (nemesis) with PGI 8.0-4 on Linux x86_64

Darius Buntinas buntinas at mcs.anl.gov
Wed Apr 1 12:30:38 CDT 2009


I stand corrected.  I didn't check the man pages, I just assumed it
followed the gnu style.  We've gotten the CXX=cpp type of bug reports,
which are subtle till you get burned a couple of times.  Then you start
looking for them.  Sorry about the confusion.

-d

On 04/01/2009 12:14 PM, Gus Correa wrote:
> Hi Darius, list
> 
> Thank you for spotting this out.
> However to the extent that I can tell, PGI pgcpp and pgCC are
> C++ compilers on Linux (and hopefully do the same thing).
> I may be wrong, though, and I would appreciate if somebody
> could clarify this.
> 
> It's been a while since somebody here compiled and ran a C++ parallel
> program here, hence the correctness of the resulting
> mpiCC from MPICH builds hasn't been checked lately.
> I also don't know to what extent the C++ compiler would somehow
> interfere with building the MPICH2 F90 bindings, but it may.
> 
> I was confused about the PGI C++ compiler name before (and now).
> First I thought that the naming convention would follow the Gnu style,
> i.e., (pg)cpp for the pre-processor, and whatever else for the compiler.
> However, at some point I convinced myself that on Linux pgcpp and pgCC
> are both the PGI C++ compiler.
> They are different executables, though, not a soft link to each other.
> Both executables are the same size:
> 
> -r-xr-xr-x 1 909 1004 173192 Feb 11 13:21 pgcpp
> -r-xr-xr-x 1 909 1004 173192 Feb 11 13:21 pgCC
> 
> The PGI documentation is not any helpful in this regard.
> For instance, the PGI User's Guide
> says pgcpp is the C++ compiler for Windows,
> and pgCC the C++ compiler for Linux.
> The PGI preprocessor seems to be invoked using pgcpp -E or pgCC -E,
> pgcc -E, pgf90 -E etc.
> I couldn't find a specific PGI executable for preprocessing.
> 
> On the other hand,
> the man pages (on Linux) tell you that both pgcpp and pgCC
> are the C++ compiler.
> See:
> 
> [man pgcpp]
> 
> pgcpp(1) pgcpp(1)
> 
> NAME
>        pgcpp - The Portland Group Inc. C++ compiler
> 
> SYNOPSIS
>        pgcpp [ -flag ]...  sourcefile...
> 
> DESCRIPTION
>        pgcpp  is  the interface to the Portland Group Inc. (PGI) C++
> compiler for AMD64 and IA32/EM64T processors.  pgcpp invokes the C++
> compiler, assembler, and
>        linker with options derived from its command line arguments.
> 
> ...
> 
> ******
> 
> [man pgCC]
> 
> pgCC(1) pgCC(1)
> 
> NAME
>        pgCC - The Portland Group Inc. C++ compiler
> 
> SYNOPSIS
>        pgCC [ -flag ]...  sourcefile...
> 
> DESCRIPTION
>        pgCC is the interface to the Portland Group Inc. (PGI) C++
> compiler for
>        AMD64 and IA32/EM64T processors.  pgCC invokes the C++ compiler,
> assem-
>        bler,  and linker with options derived from its command line
> arguments.
> 
> ...
> 
> *****
> 
> Since I compiled MPICH2 and OpenMPI and other libraries (e.g. NetCDF),
> building their C++ bindings, and using pgcpp, and there was never
> any issue (until now), I thought pgcpp=pgCC in Linux.
> 
> ***
> 
> A direct compilation test using pgcpp and pgCC also suggests this:
> 
> [gus at monk test_c++]$ cat hello_world.cc
> #include <iostream.h>
> int main()
> {
>     cout << "Hello, world!\n";
>     return(0);
> }
> 
> [gus at monk test_c++]$ pgcpp hello_world.cc
> [gus at monk test_c++]$ ./a.out
> Hello, world!
> [gus at monk test_c++]$ rm -f a.out
> [gus at monk test_c++]$ pgCC hello_world.cc
> [gus at monk test_c++]$ ./a.out
> Hello, world!
> 
> ***
> 
> In addition, the PGI license file lists pgcpp, not pgCC.
> At some point in the past this prevented us to use pgCC.
> I switched from pgCC to pgcpp on my configuration scripts
> at that point, and never revisited the issue again.
> However, this license picky behavior may have been
> superseded now.
> 
> In any case, since somehow the two (pgcpp and pgCC)
> may be different, and behave differently
> (although both seem to be C++ compiler interfaces),
> I will try pgCC instead, and report to you what happens.
> 
> Thank you,
> 
> Gus Correa
> ---------------------------------------------------------------------
> Gustavo Correa
> Lamont-Doherty Earth Observatory - Columbia University
> Palisades, NY, 10964-8000 - USA
> ---------------------------------------------------------------------
> 
> Darius Buntinas wrote:
>> Gus,
>>
>> I just wanted to point out that you have "export CXX=pgcpp" in your
>> configure script.  This should be "export CXX=pgCC", pgcpp is the c
>> pre-preprocessor, pcCC is the c++ compiler.  (IMHO, cpp is an
>> unfortunate name for the pre-processor.)
>>
>> I'm not sure how related this is to what you're seeing.
>>
>> -d
>>
>> On 03/30/2009 06:12 PM, Gus Correa wrote:
>>> Dear MPICH experts
>>>
>>> I tried to build the latest mpich2-1.0.8p1,
>>> with the nemesis communication device,
>>> using the PGI 8.0-4 compilers (pgcc, pgcpp, and pgf90)
>>> on a Linux x86_64 computer, but it failed.
>>>
>>> The error message, which happens during the make phase, is:
>>>
>>> make[7]: Entering directory
>>> `/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/mpid/ch3/channels/nemesis/nemesis/src'
>>>
>>>
>>> pgcc -DHAVE_CONFIG_H -I.
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/channels/nemesis/nemesis/src
>>>
>>> -I. -I../include
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/ch3/channels/nemesis/nemesis/include
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/include
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/include
>>> -DNDEBUG -O2 -DUSE_PROCESS_LOCKS
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/mpid/ch3/include
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/include
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/mpid/common/datatype
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/common/datatype
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/mpid/common/locks
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/common/locks
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/mpid/ch3/channels/nemesis/include
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/channels/nemesis/include
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/build_pgi-8.0-4/src/mpid/common/locks
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/common/locks
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/channels/nemesis/nemesis/include
>>>
>>> -I/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/channels/nemesis/nemesis/utils/monitor
>>>
>>> -c
>>> /home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/channels/nemesis/nemesis/src/mpid_nem_alloc.c
>>>
>>>
>>> PGC-F-0249-#error --  No swap function defined for this architecture
>>> (/home/swinst/mpich2/1.0.8p1/mpich2-1.0.8p1/src/mpid/ch3/channels/nemesis/nemesis/include/mpid_nem_atomics.h:
>>>
>>> 31)
>>> PGC/x86-64 Linux 8.0-4: compilation aborted
>>>
>>> **
>>>
>>> Apparently all three pre-processor macros
>>> HAVE_GCC_AND_PENTIUM_ASM,
>>> HAVE_GCC_AND_X86_64_ASM, and
>>> HAVE_GCC_AND_IA64_ASM
>>> on the mpid_nem_atomics.h file are not defined.
>>> Since I am working on an x86_64 Linux computer with gcc,
>>> I thought configure would somehow define HAVE_GCC_AND_X86_64_ASM.
>>> Or not?
>>>
>>> **
>>>
>>> More information about the computer, which is the
>>> head of a cluster with similar compute nodes:
>>>
>>> 1. AMD Opteron Shanghai (dual socket, quad core)
>>> 2. Linux kernel 2.6.18-92.1.22.el5 #1 SMP (CentOS 5.2)
>>> 3. PGI 8.0.4
>>> 4. Gnu/GCC 4.1.2
>>>
>>> **
>>>
>>> My configure script:
>>>
>>> #! /bin/sh
>>> export MYINSTALLDIR=/some/directory/
>>> export CC=pgcc
>>> export CXX=pgcpp
>>> export F77=pgf90
>>> export F90=${F77}
>>> # Note: Optimization flags for AMD Opteron "Shanghai"
>>> export MPICH2LIB_CFLAGS='-tp shanghai-64 -fast -Mfprelaxed -static'
>>> export MPICH2LIB_CXXFLAGS=${MPICH2LIB_CFLAGS}
>>> export MPICH2LIB_FFLAGS=${MPICH2LIB_CFLAGS}
>>> export MPICH2LIB_F90FLAGS=${MPICH2LIB_CFLAGS}
>>> ####################################################
>>> ../configure \
>>> --prefix=${MYINSTALLDIR} \
>>> --with-device=ch3:nemesis \
>>> --enable-fast \
>>> 2>&1 | tee configure_${build_id}.log
>>>
>>> **
>>>
>>> BTW, I built mpich2-1.0.8p1 with nemesis on the same computer
>>> using Gnu compilers (gcc, g++, gfortran),
>>> and also using Intel compilers (icc, icpc, ifort).
>>> However, we also need the PGI build of MPICH2.
>>>
>>> I appreciate any help.
>>>
>>> Gus Correa
>>> ---------------------------------------------------------------------
>>> Gustavo Correa
>>> Lamont-Doherty Earth Observatory - Columbia University
>>> Palisades, NY, 10964-8000 - USA
>>> ---------------------------------------------------------------------
> 


More information about the mpich-discuss mailing list