[OMPI devel] 1.5rc5 has been posted

2010-08-17 Thread Jeff Squyres
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/




[OMPI devel] Fixes to OpenMPI-1.4.2 for PGI compilers

2010-08-17 Thread Larry Baker
I patched OpenMPI 1.4.2 to fix some problems/warnings when using the  
PGI compilers.


• openmpi-1.4.2/configure has the libtool patch to correctly parse PGI  
compiler versions 1 through 5, but the libtool.m4 files do not.  I  
don't know if they are actually used -- I looked for this error before  
I tried compiling.  The fixes to the libtool.m4 files are:


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

• Inline assembly of the atomic operators is explicitly disabled for  
PGI C in openmpi-1.4.2/configure, but not for PGI C++.  I applied the  
same fix in openmpi-1.4.2/configure for PGI C++.
• openmpi-1.4.2/configure tests whether the C and C++ compilers accept  
#pragma ident.  However, PGI C does not perform macro substitution in  
#pragma ident, which OpenMPI relies on.  The fix is to use a more  
complete test of the #pragma ident feature in openmpi-1.4.2/ 
configure.  The fixes to openmpi-1.4.2/configure are:


# Disable inline assembly for PGI C++, as is done for PGI C (34579), and
# Fix PGI C compiler warning (10393, 26106): Pragma ignored – string
# expected after #pragma ident
mv openmpi-1.4.2/configure{,.original}
sed -e '34579{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 '34702{x;s/^.*$/fi/;G;}' \
-e '10393{s/#pragma ident/#define IDENT/;p;
  s/^.*$/#pragma ident \$IDENT/;}' \
-e '26106{s/#pragma ident/#define IDENT/;p;
  s/^.*$/#pragma ident \$IDENT/;}' \
openmpi-1.4.2/configure.original \
>openmpi-1.4.2/configure
chmod +x openmpi-1.4.2/configure

• PGI C issues spurious warnings when an array name is used as the  
first operand in a conditional expression.  This occurs in the  
definition of the LT_STRLEN() macro in openmpi-1.4.2/opal/libltdl/ 
ltdl.h: #define LT_STRLEN(s) (((s) && (s)[0]) ? strlen (s) : 0).  Even  
though I think the PGI compiler is complaining too much, I also find  
C's use of 0 to mean zero, false, and nil poor programming practice.   
I changed the guard expression in the definition of LT_STRLEN to  
simply (s!=NULL), which also eliminated the short-circuit test (s) 
[0].  The extra test is not required for strlen() to succeed, and only  
makes sense if zero-length strings are a common occurrence worth hand- 
optimizing.  The fix to openmpi-1.4.2/opal/libltdl/ltdl.h is:


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

• PGI C issues spurious warnings when 0 is one of the operands in a  
conditional expression of pointer type.  Even though I think the PGI  
compiler is again complaining too much, I replaced such occurrences of  
0 with NULL, which is my preferred programming practice.  The fixes to  
the hooks.c and malloc.c files in openmpi-1.4.2/opal/mca/memory/ 
ptmalloc2 are:


# Fix PGI compiler warning: Pointer value created from a nonlong  
integral type

mv openmpi-1.4.2/opal/mca/memory/ptmalloc2/hooks.c{,.original}
sed -e '434s/: 0;/: NULL;/' \
-e '449s/: 0;/: NULL;/' \
openmpi-1.4.2/opal/mca/memory/ptmalloc2/hooks.c.original \
>openmpi-1.4.2/opal/mca/memory/ptmalloc2/hooks.c
mv openmpi-1.4.2/opal/mca/memory/ptmalloc2/malloc.c{,.original}
sed -e '3446s/: 0,/: NULL,/' \
-e '3664s/: 0,/: NULL,/' \
-e '3789s/: 0,/: NULL,/' \
openmpi-1.4.2/opal/mca/memory/ptmalloc2/malloc.c.original \
>openmpi-1.4.2/opal/mca/memory/ptmalloc2/malloc.c

• The only remaining complaint I get now from the PGI C compiler is  
for orte_base_log() in openmpi-1.4.2/orte/mca/notifier/base/ 
notifier_base_open.c:


static void orte_base_log(int priority, const char *msg, ...)
{
   /* just do nothing - it is here just so
* someone calling it won't segv
*/
}

PGI C issues the following warning:

PGC-W-0155-No va_start() seen  (base/notifier_base_open.c: 85)

This is completely legal C, as far as I can tell from my copy of the  
1990 ISO C standard.  I didn't bother to fix this; I sent a bug report  
to PGI.


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