|
Try to add -DHAS_ZHEGVX to CPPFLAGS: the code
should run somewhat faster. It is included in recent Lapack distributions.
It should work for all machines, but the advantage is more evident
for parallel machines.
Since there is no standard compiler for Linux, different compilers
have different ideas about the right way to call external libraries.
As a consequence you may have a mismatch between what your compiler
thinks is the name of a library call, and how it is actually written
in the library. Use command nm to determine the name of
a library call, as in the following examples:
nm /usr/local/lib/libblas.a | grep T | grep -i daxpy
nm /usr/local/lib/liblapack.a | grep T | grep -i zhegv
nm /usr/local/lib/libfftw.a | grep T | grep -i fftw_f77
where the ''standard'' (so to speak) location and name of libraries
is assumed. Most precompiled libraries have lowercase names with
one or two underscores (_) appended. Knowing that
- the Absoft compiler is case-sensitive (like C and unlike other
Fortran compilers) and does not add an underscore to symbol names;
- both Portland compiler (pgi) and Intel compiler (ifc) are case
insensitive and add an underscore to symbol names;
you can select the appropriate precompilation options in make.sys.
The present default values will work for Blas/Atlas/Lapack with lowercase
names, one underscore added; for fftw with lowercase names, compiled
using the same fortran compiler.
Note for Absoft compiler: If your libraries contain uppercase
or mixed case names, you are out of luck. You must either recompile
your own libraries, or change the #define's in include/machine.h.
Note for Portland compiler: If you compile fftw from sources,
make sure that f77 executes pgf77 (by adding or
changing a link in /usr/bin/f77 for instance) or otherwise
the ''configure'' step will not recognize the presence of the Portland
compiler.
The I/O libraries used by the Intel compiler ifc are incompatible
with those called by most precompiled Blas/Lapack libraries: you
get error messages at linking stage. The problem does not exist
if one uses the Intel Mathematical Kernel Library (MKL) (for Pentium
3 and higher Intel CPUs only: add -DMKL to CPPFLAGS).
If you do not have or cannot use MKL, you should use Atlas optimized
Blas/Lapack libraries instead. To avoid the I/O incompatibility
problem, recompile everything from scratch or (better) replace the
Blas routine xerbla and Lapack routine dlamch
(the only two containing I/O calls) with recompiled objects:
ifc -c xerbla.f
ifc -O0 -c dlamch.f (DO NOT REMOVE -O0)
and replace them into the library using (for instance):
ar rv /usr/local/lib/libatlas.a xerbla.o dlamch.o.
If symbols LPUTP, LGETV, LSETV are undefined,
you need to load the ''benchlib'', if available on your system,
or to remove -DT3D_BENCHLIB from precompilation flags (make
clean, recompile), if not.
T3E machines may not have the fftw library installed. If you do
not manage to compile fftw from sources, remove -DFFTW
from precompilation flags (make clean, recompile). Routines
from standard t3e libraries (somewhat slower than those of fftw)
will be used instead.
TOP |