AMBER Archive (2007)

Subject: AMBER: workaround for ibm xlf90 powerpc FORTRAN compiler: -q64 and -O3 yield Run.dhfr.min failure

From: Chris Moth (chris.moth_at_vanderbilt.edu)
Date: Thu Feb 01 2007 - 12:33:33 CST


I'm writing not to ask for help or to request a bugfix - but to leave a
record of a workaround for a failure of the Run.dhfr.min serial sander
test on
our JS20 IBM PowerPC cluster architecture and the IBM XLF90 Fortran
compiler (flags -O3 -qstrict -q64) for Linux (bug is in both versions
9.1 and 10.1)

Without the workaround, the failure appears as a large, positive, EEL
energy value in the Run.dhfr.min test, starting with step 2.

I hope that these notes might save someone else some time if they
encounter similar problems. And, if anyone at Scripps would like me to
do further detailed debugging, I'd be happy to work with them off-line.

The workaround is to simply compile $AMBERHOME/src/sander/runmin.f with
optimizations turned off. Though not elegant, a brute force approach is
to hand-edit $AMBERHOME/src/sander/depend so that the FOPTFLAG variable
for runmin.o is replaced with an explicit list of flags that turn off
optimization. i.e. "-O0" in place of "-O3 -qstrict" and all other
FOPTFLAGS unchanged.

-----------------------------------------------------
More information/details for those of you interested:
-----------------------------------------------------

Excerpted from config.h, our Fortran compiler options are:

#------------------------------------------------------------------------------
# Fortran preprocessing and compiler.
# FPPFLAGS holds the main Fortran options, such as whether MPI is used.
#------------------------------------------------------------------------------
FPPFLAGS= -P -traditional-cpp -DCLINK_PLAIN -DXLF90 $(AMBERBUILDFLAGS)
-DF90_TIMER
FPP= cpp $(FPPFLAGS)
FC= xlf90
FFLAGS= -qfixed -c $(LOCALFLAGS) $(AMBERBUILDFLAGS) -q64
FOPTFLAGS= -qfixed -O3 -qstrict -q64 -qmaxmem=-1 -qarch=auto -qtune=auto
-c $(LOCALFLAGS) $(AMBERBUILDFLAGS)
FREEFORMAT_FLAG= -qfree=f90 -q64

The first few lines of mdout.dhfr.min.dif after ./Run.dhfr.min fails
show clear miscaluclation.

Note that step 1 has reasonable EEL and is not a problem. But, then EEL
goes very positive in step 2 and subsequently.

$ head -18 mdout.dhfr.min.dif
83c83
< 2 -7.1873E+4 1.7336E+1 1.0535E+2 C 1855

---
 >       2       9.1283E+5     8.1856E+1     1.8334E+2     O       13223
85c85
<  VDWAALS =     8106.9482  EEL     =   -89882.6659  HBOND      =        0.
---
 >  VDWAALS =     8106.9482  EEL     =   894818.7954  HBOND      
=        0.  <<< OUCH BAD EEL in step 2
88,91c88,91
<       3      -7.1885E+4     1.7318E+1     1.0448E+2     C        1855
<  BOND    =      443.9987  ANGLE   =     1271.5621  DIHED      =      
967.6424
<  VDWAALS =     8104.0210  EEL     =   -89883.8930  HBOND      =        
0.  <<< GOOD/EXPECTED RESULT
<  1-4 VDW =      545.7307  1-4 EEL =     6666.3248  RESTRAINT  =        0.
---
 >       3       9.1284E+5     8.1855E+1     1.8333E+2     O       13223
 >  BOND    =      447.9747  ANGLE   =     1274.3896  DIHED      =      
968.0028
 >  VDWAALS =     8106.9279  EEL     =   894831.2130  HBOND      
=        0.  <<< OUCH BAD EEL
 >  1-4 VDW =      545.8298  1-4 EEL =     6666.3730  RESTRAINT  =        0.

More about our setup ----------------------

A Summary of our architecture is here:

http://www.accre.vanderbilt.edu/mission/researcher_text/pubstext.php

To be compatible with libraries on our system, libraries that are not under our control, we must compile sander (at least the mpi version) with the -q64 flag.

( Compiling all modules with -O0 or -q32 eliminated the xlf90 problem in serial sander. )

Using the newest 10.1 compiler had no impact. -q64 with -O3/-qstrict continued to fail. So, we don't think there is a "compiler patch" yet to fix this.

Using a binary search approach - we quickly homed in on runmin.f as the "problem" and, with optimization turned off for this one module, all appears well.

It would be nice to report this to IBM in a short sample program... But without assistance, I don't think I can produce that very quickly.

I am not a FORTRAN guru - but I am very experienced in C/C++ and gdb debugging. If anyone would like to coach me through a little debugging under xlf90, I'd be happy to try to home in on exactly what lines of code are so distasteful to xlf90 for ppc/-q64.

Chris

----------------------------------------------------------------------- The AMBER Mail Reflector To post, send mail to amber_at_scripps.edu To unsubscribe, send "unsubscribe amber" to majordomo_at_scripps.edu