Dear All,
Recently, whilst building the AMBER CVS tree using parallel make
-j{~16}, I've been noticing the build process dying somewhere in the
sander directory. This fail point not always the same. However I think
I've traced this down to make's preprocessing of the sander.LES's
target; since it is now running in parallel (and hence sometimes out of
sequence), it has the ability to overwrite some preprocessed files
needed by the sander target. This is an example of one such file:
sander:
cpp -traditional -P -xassembler-with-cpp -Dsecond=ambsecond remd.f >
_remd.f
gfortran -c -O3 -fno-second-underscore -ffree-form -o remd.o _remd.f
sander.LES:
cpp -traditional -P -xassembler-with-cpp -Dsecond=ambsecond -DLES
remd.f > _remd.f
gfortran -c -O3 -fno-second-underscore -ffree-form -o remd.LES.o _remd.f
Both will write to _remd.f and sander may end up with objects that are
designed for sander.LES.
One solution to this is to ensure that any source files preparsed with
-DLES needs to go to a differenly named _*.f file. I've modified the
makedepend script to do this:
[16:48][bunny:0.10][mjw:sander]$ cvs diff makedepend
Index: makedepend
===================================================================
RCS file: /home/amber_cvs/cvsroot/amber11/src/sander/makedepend,v
retrieving revision 10.0
diff -r10.0 makedepend
123c123
< printf "\t\$(FPP) -DLES $fileroot.f > _$fileroot.f\n";
---
> printf "\t\$(FPP) -DLES $fileroot.f > _$fileroot.LES.f\n";
125c125
< printf "\t\$(FC) -c \$(FOPTFLAGS) -o \$. _$fileroot.f\n\n";
---
> printf "\t\$(FC) -c \$(FOPTFLAGS) -o \$. _$fileroot.LES.f\n\n";
127c127
< printf "\t\$(FC) -c \$(FFLAGS) -o \$. _$fileroot.f\n\n";
---
> printf "\t\$(FC) -c \$(FFLAGS) -o \$. _$fileroot.LES.f\n\n";
What do you think of this approach? Will this break something that I may
have overlooked?
regards,
Mark
_______________________________________________
AMBER-Developers mailing list
AMBER-Developers.ambermd.org
http://lists.ambermd.org/mailman/listinfo/amber-developers
Received on Sun Jan 25 2009 - 01:15:10 PST