1. General questions
|
- 1.1. What is the minimum
requirement for autoconf/automake?
- 1.2. What is the
configuration file included by
-DHAVE_CONFIG_H?
- 1.3. What is
src/OhmmsApp/AppConfig.h for?
- 1.4. Why can't I just do
configure like many other packages? Why do I
need to specify c++compiler?
- 1.5. I'd like to use
intel c and fortran compilers but it looks
like gcc and g77 are selected.
|
| 1.1. |
What is the minimum requirement for
autoconf/automake?
|
|
Autoconf macros for MPI, blas and lapack
require autoconf 2.50 or higher. Unfortunately,
portable tools are not 100% portable. On
cygwin, if you have both stable and develop
versions of autoconf, the configuration will
fail. An easy way to fix the problem (not the
best probably) is to uninstall autoconf-stable
(2.13.x). Check out cygwin site.
|
| 1.2. |
What is the configuration file included by
-DHAVE_CONFIG_H?
|
|
When configuration is successful,, a file
src/ohmms-config.h is
created in the build directory.
|
| 1.3. |
What is src/OhmmsApp/AppConfig.h
for?
|
|
Many features of ohmms applications are not
available by default. On the other hand, you
may not like to use the default features. This
configuration file is created to enable/disable
the application-level features that are
compiled for an executable. If you want to
build your executable only with EAM potential,
disable everything else. The default features
are determined by the developers, because they
have to or like to use them. Note that the
content of Makefile depends on the
configuration option and src/OhmmsApp/AppConfig.h
|
| 1.4. |
Why can't I just do configure like many other
packages? Why do I need to specify
c++compiler?
|
|
It is mostly to tune compiler flags and to
allow users to choose different compilers for
different applications. Although gcc will work
on any unix platform, the developers find that
vendor-provided compilers tend to perform
better,especially when the performance of the
applications is limited by the implementations
of blas/lapack and the optimization
capabilities of c/f77 compilers. For instance
on typical linux machines, compiling with gcc
is recommended for classical simulations (pure
c++ codes), while compiling with intel
compilers is recommended for quantum
simulations.
|
| 1.5. |
I'd like to use intel c and fortran
compilers but it looks like gcc and g77 are
selected.
|
|
configure script tries to guess a proper set
of compilers based on CXX given by option
--with-cxx=CXX However, it is a good idea to
set the compiler flags for c CC=c-compiler and
f77 F77=f77-compiler to make sure that the
intended compilers are used. Mixing compilers
on linux, g++ and intel c/f77 compilers,can
improve the performance but may require
changing Makefile that is generated
automatically.
|
2. Configuration options
|
- 2.1. The code does not
seem to run fast enough withgcc. What can be
done, if any?
- 2.2. How can I turn on
MPI capability?
- 2.3. How can I turn on
OpenMP capability?
- 2.4. How to use
sprng random-number generator?
- 2.5. How to use
HDF5 library?
- 2.6. I followed
the instruction for sprng and HDF5 but I'm
getting compiler errors with "missing
library". How to fix it?
|
| 2.1. |
The code does not seem to run fast enough
withgcc. What can be done, if any?
|
|
First step is to add--enable-optimize or change
CXXFLAGS="flags".
Especially with gcc 3.2 and higher, the
performance will be greatly improved. Indeed,
for the production runs, always use --enable-optimize[=yes].
Occasionally, the compiler flags JK uses can
add too much stress to the compilers (have seen
compilation taking a very long time on linux).
You can always go into src/Makefile and tone
down the options a bit.
|
| 2.2. |
How can I turn on MPI capability?
|
|
You have to have --enable-mpi . In addition, you
need to set few options or environment
variables. If your system supports mpi
compilers, which are typically shell scripts,
e.g., mpiCC for mpich
and mpCC for AIX, set
MPICXX=mpiCC|mpCC to
the compiler. E.g.,configure --with-cxx=icc --enable-mpi
MPICXX=mpiCC MPICC=mpicc will try to
configure with intel compilers and default
MPICH library. If your system has mpi header
files and libraries in the standard places,
probably you do not need to do anything.
However, if the files cannot be found in your
paths, you need to provide the paths
explicitly. Note that enabling MPI does not
mean you are using data-distributed mpi unless
your scripts have specific instructions.
![[Warning]](../graphics/warning.gif) |
Warning |
|
Since autoconf uses c compiler to
check mpi libraries, both MPICC and
MPICXX have to be set either as
environment variables or as options for
the configure.
|
|
| 2.3. |
How can I turn on OpenMP capability?
|
|
In order to enable OpenMP, add--enable-openmp. After checking
the compilers and their options, the script
will decide if the OpenMP parallelization can
be enabled. Currently, the authors have tested
OpenMP on SGI Origin,IA64 running linux with
intel compilers, IBM P4 with AIX compilers, DEC
Cluster with DEC compilers. No platform- or
compiler-dependent flags need to be provided
for the systems mentioned above during
configuration. However, you may need to use
thread-safe c++ compiler, such as CXX=xlC_r. Consult HPC sites for
further information.
![[Warning]](../graphics/warning.gif) |
Warning |
|
Not many compilers support OpenMP
constructs for C++codes. ohmms does not
just use loop parallelizations with
openmp pragma. The implementation is
more like mpi using OpenMP constructs.
By taking advantage of strict scope
resolutions of C++,one can eliminate
private(variables) entirely and do many
things clean and efficiently.
|
|
| 2.4. |
How to use sprng random-number
generator?
|
|
Use --with-sprng=DIR.
The script assumes that DIR/include/sprng.h and
DIR/lib/libsprng.a are available, instead of
using AC_CHECK_LIB or AC_CHECK_HEADER. The
option is required in order to set
HAVE_LIBSPRNG macro in src/ohmms-config.h
correctly.
|
| 2.5. |
How to use HDF5 library?
|
|
Use --with-hdf5=DIR.
The script assumes that DIR/include/hdf5.h and
DIR/lib/libhdf5.a are available, instead of
using AC_CHECK_LIB or AC_CHECK_HEADER. The
option is required in order to set HAVE_LIBHDF5
macro in src/ohmms-config.h correctly.
|
| 2.6. |
I followed the instruction for sprng and
HDF5 but I'm getting compiler errors with
"missing library". How to fix it?
|
|
For --with-pkg=DIR,
choose DIR so that DIR/include is added to
CPPFLAGS, CXXFLAGS and CFLAGS. Then, use LIBS
to link all the libraries you need to use. For
instance, one can pass
LIBS="-L/usr/local/hdf5-1.4.2p1/lib -lhdf5
-lpthread -lssl -lcrypto -lz" to configure to
link HDF5 library at OSC IA64 cluster.
Alternatively, --with-pkg-libs="-L/usr/local/hdf5-1.4.2p1/lib
-lhdf5 -lpthread -lssl -lcrypto -lz" will
work. Check out the environment variables set
by module and softenv on HPC platforms to link
correct libraries.
|
3. OS-specific questions on
configuration
|
- 3.1. configure
--with-cxx=gcc on Mac OS X (darwin) dies with
an error message
- 3.2. How to use
module/softenv at NSF and DOE HPC
centers?
|
| 3.1. |
configure --with-cxx=gcc on Mac OS X
(darwin) dies with an error message
unknown configure:
error: linking to Fortran libraries from C
fails
|
|
Overwrite FLIBS and LDFLAGS with configure.
For instance,add to the configuration
options,--enable-shared
--enable-dl --disable-static FLIBS=-lg2c
LDFLAGS=-L/sw/lib. This assumes that the
base libraries are installed by fink.
|
| 3.2. |
How to use module/softenv at NSF and DOE HPC
centers?
|
|
First, check out the exellent documentations
provided by the centers. Everything is clearly
explained. Typically, after loading a module,
e.g., module load hdf5
on OSC IA64 cluster, typing env | grep -i hdf5 will list the
relevant environment variables as
HDF5_LIBS="-L/usr/local/hdf5-1.4.2p1/lib -lhdf5 -lpthread -lssl -lcrypto -lz -lm"
HDF5_INCLUDE=-I/usr/local/hdf5-1.4.2p1/include
HDF5_HOME=/usr/local/hdf5-1.4.2p1
Since -lpthread or
-lm is normally added
by C compiler checks, using --with-hdf5=/usr/local/hdf5-1.4.2p1
LIBS="-lssl -lcrypto -lz" will work
correctly. Important: in order to use the
package compiled with mpi (OpenMP), your
application has to be configured with
mpi-capable (OpenMP) compilers and options.
Check if the compiler mode is 32 or 64.
|