Skip to content

How to build and run miniQMC

Ye Luo edited this page Jun 6, 2018 · 8 revisions

Prerequisites

  • CMake 3.6 and above.
  • C++ compiler with C++11 support. MPI wrapper is optional.
  • BLAS/LAPACK, numerical library, use platform-optimized libraries.

Build miniQMC

cd build
cmake -DCMAKE_CXX_COMPILER=mpicxx ..
make -j 8

CMake provides a number of optional variables that can be set to control the build and configure steps. When passed to CMake, these variables will take precident over the enviornmental and default variables. To set them add -D FLAG=VALUE to the configure line between the cmake command and the path to the source directory.

  • General build options
CMAKE_CXX_COMPILER  Set the C++ compiler
CMAKE_BUILD_TYPE    A variable which controls the type of build (defaults to Release).
                    Possible values are:
                    None (Do not set debug/optmize flags, use CMAKE_C_FLAGS or CMAKE_CXX_FLAGS)
                    Debug (create a debug build)
                    Release (create a release/optimized build)
                    RelWithDebInfo (create a release/optimized build with debug info)
                    MinSizeRel (create an executable optimized for size)
CMAKE_CXX_FLAGS     Set the C++ flags.  Note: to prevent default debug/release flags
                    from being used, set the CMAKE_BUILD_TYPE=None
                    Also supported: CMAKE_CXX_FLAGS_DEBUG, CMAKE_CXX_FLAGS_RELEASE,
                                    CMAKE_CXX_FLAGS_RELWITHDEBINFO

For the moment, XL is identified as Clang by CMake, adding -DCMAKE_CXX_COMPILER_ID='XL' to cmake works around the issue.

  • Key QMC build options
QMC_MPI             Build with MPI (1:yes, default 0:no))
QMC_COMPLEX         Build the complex (general twist/k-point) version (1:yes, default 0:no)
QMC_MIXED_PRECISION Build the mixed precision (mixing double/float) version (1:yes, default 0:no). 
                    Use float and double for base and full precision.

Check builds

Executables are created in ./bin folder. There are a few of them

check_determinant    # checks the determinant part of the wavefunction
check_wfc            # checks Jastrow components of the wave function
check_spo            # checks single particle orbitals including 3D-cubic splines.
miniqmc              # runs a fake DMC and report the time spent in each component.

It is recommended to run all the check_XXX routines. They report either "All checking pass!" or a failure message indicating where the failure is.

Run executables

All the executables can run without any arguments and input files, namely default setting. If more controls is needed, query by -h option to print out available options.

miniQMC is designed to exercise the simulation of any problem size. This is realized by tiling the reference 32 atom cell NiO via -g option accessible on every executable.

-g argument number of atoms number of electrons
"1 1 1" 32 384
"2 1 1" 64 768
"2 2 1" 128 1536
"2 2 2" 256 3072
"4 2 2" 512 6144
"4 4 2" 1024 12288

Benchmark

This is an example how miniqmc reports. The default setting is a fake DMC run mimicing the NiO 32 atom cell simulation.

================================== 
Stack timer profile
Timer                           Inclusive_time  Exclusive_time  Calls   Time_per_call
Total                              1.6640     0.0131              1       1.663990021
  Diffusion                        1.0446     0.0158            100       0.010445936
    Current Gradient               0.0054     0.0036          38400       0.000000140
      Jastrow                      0.0017     0.0017          38400       0.000000045
    Distance Tables                0.3296     0.3296          95899       0.000003437
    New Gradient                   0.6151     0.0069          38395       0.000016021
      Jastrow                      0.0973     0.0973          38395       0.000002534
      Single-Particle Orbitals     0.5110     0.5110          38395       0.000013308
    Update                         0.0785     0.0785          18999       0.000004133
    Wavefuntion GL                 0.0002     0.0002            100       0.000002389
  Pseudopotential                  0.6063     0.0098            100       0.006063325
    Distance Tables                0.2907     0.2907          74484       0.000003902
    Value                          0.3059     0.0116          74484       0.000004107
      Jastrow                      0.1221     0.1221          74484       0.000001640
      Single-Particle Orbitals     0.1722     0.1722          74484       0.000002312