How to Compile exciting

0. Download exciting


1. Requirements


2. Optional requirements

  • Optimized multithreaded Blas Lapack (GOTOBlas )
  • MPI libraries and runtime (OpenMPI )

3. Compile

After downloading and unpacking the source, change into the root directory of the distribution and type

make

If you do it the first time it will start a program to create a configuration for the compiler. The script will allow you to select a platform that matches yours. Furthermore, it will ask whether you have MPI and multithreaded numerical libraries on your system. If you know what MPI library you have installed and how it works you can say yes to MPI. If you have multithreaded BLAS/LAPACK like esslsmp from IBM, or Intel's multi threaded MKL, you can say yes to SMP.

The script creates the build/make.inc file which you may have to edit if it doesn't work. If the included make.inc files do not work check out make.inc marked if there is something more appropriate. And if you managed to install exciting on a new platform please post the make.inc file in the forum.

After everything is configured the build system creates binaries for the serial (excitingser), the MPI (excitingmpi), and the SMP (excitingsmp) run, and the hybrid SMP+MPI case (excitingmpismp). They can be found in the bin directory. Additionally, the species and spacegroup tools are compiled and copied to bin as well.


4. Optimize

For any production system it is important to use optimized numerical libraries. exciting depends heavily on LAPACK/BLAS. The corresponding configurations are done in the exciting/build/make.inc file. The relevant constants are LIB_LPK and SMP_LIBS. These must be set to the necessary options for the linker to link tho the system LAPACK/BLAS libraries. SMP_LIBS is needed when multithreaded libraries are available and excitingsmb should be build.

Example
LIB_LPK  = -lmkl_lapack95_lp64 -lmkl_blas95_lp64\
           -lmkl_intel_lp64 -lmkl_intel_thread\
           -lmkl_lapack -lmkl_core -liomp5 -lpthread -lm
SMP_LIBS = -mkl=parallel   $(LIB_ARP) $(LIB_LPK) $(LIB_FFT) $(LIB_BZINT)

5. GotoBLAS

A performant and easy to use LAPACK/BLAS implementation is GotoBLAS. It is easy to compile and easy to link. It has very good multithreaded performance, especially when used with the arpack solver.

Get the library from http://www.tacc.utexas.edu/tacc-projects/gotoblas2 and compile like recommended in the accompaning documentation. You may want to specify the compilers you are going to use to compile exciting

make BINARY=64 CC=icc FC=ifort

In order to link it

LIB_LPK    = -L/Path/To/GotoBLAS2 -lgoto2 -lpthread 
LIB_LPKSMP = -L/Path/To/GotoBLAS2 -lgoto2 -lpthread

GotoBLAS contains LAPACK interfaces as well, and it is multi-threaded. The number of threads is controlled by the usual environment variables.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License