Contributing Authors: Benjamin Thomitzni
Code | |
---|---|
Meta | |
Documentation |
libqqc is a library for high performance evaluation of quantum chemistry methods through quadrature schemes.
Continious Integration and documentation deployment action workflows for github.
We provide H2O human-readable data which can be used for testing and a script to download larger test systems (H3COH, Anthracene, Porphyrin).
Provides the doxygen documentation which is automatically build and deploys through GitHub pages to !.
MPI and no-MPI example on how to setup and run calculation.
Please be aware: For Hybrid (MPI+OpenMP) usage follow the example given and
setup the correct MPI_Init_thread
call
Location of library header and body files.
Scripts used to run the library and process the data. Runs were done on BwForCluster JUSTUS 2.
Template files to speed up development.
Testing suit set-up per module for both OpenMP, MPI and MPI+OpenMP versions.
Packages needed
- for building
cmake, gcc
- for documentation
doxygen
- for MPI
mpich
- for Eigen
Eigen
Setup is handled by configure
script, see
./configure -h
for help. Current options:
gcc
: Default, Build with the GNU compilernoOpenMP
: Deactivate OpenMPwMPI
: compile with MPI wrappers to enable MPIwEigen
: compileEigen
library versions of calculations, needsEIGEN3_INCLUDE_DIR
set, e.g.
EIGEN3_INCLUDE_DIR=~/bin/eigen-3.4.0/Eigen/
wGPU
: enables GPU versions of calculations, NOT SUPPORTED YET
after configure
, change to build directory, and compile with make
cd build
make
make install
make install
installs library and exe into upper /lib
and /exe
folder.
You then can compile the host program, for example with /host_example/
gcc -fopenmp main.cpp ../lib/libqqc.a
or
mpic++ -fopenmp main_mpi.cpp ../lib/libqqc.a
The library has been tested with GNU gcc/g++ 10.1.0
To run a calculation you have to set up three distinct parts.
-
Loader_*
Loaders are method and host program specific and are used to setup the routins for the loading of the necessary data. MPI and no-MPI versions differ in these loading methods. -
Vault_*
Vaults are method specific and hold only the necessary data for the calculation. They are given theLoader_*
object through their constructor, from which they call the loading methods. Therefore the constructor is specific to theLoader_*
object. -
Do_*
These objects do the set-up for the calculation and then execute it. Results are printed into a output stream. They are given theVault_*
data holder object and acces the data through them.
See /host_example/main.cpp
for an example on how to call the library.
tba
finished ToDos
- add primitive libr. structure
- add doxygen
- add workflow to build and deploy doxygen doc to github pages
- add files to test cmake setup
- add cmake setup for library
- add cmake setup for test
- add templates for libqqc/ and tests/ files for correct structure/documentation
- add cmake structure for w/o Eigen, w/o OpenMP GPU offloading and w/o MPI variant compiling (g++/mpic++)
- add workflow for testing after commit
- add testing workflow for MPI, Eigen etc. variants
- add prelim. loader objects
- add timing object
- add grid object
- add vault object
- add real loader
- add data/h2o with bashscripts to download h3coh/, anthracene/, porphyrine/
- transfer MP2 variants to libqqc
- partitioning scheme for remaining elements in MPI
- remove unneded balast from qmp2 calc, loader, vault
- write printer
- write/rewrite test for printer, vault, loader, do_qmp2
- fit max item sharing (bytes?), _on_i ?
- fix max item in loader
- fix false sharing
- set MPI_init to MPI_init_thread with MPI_THREAD_FUNNELED and argcs
- add missing badges
- add input/output of host programm which was used to export to testdata
- recheck performance on Justus 2.0
- time resolved average cpu utilization on 4 nodes
- core scaling 1-960 for Hybrid for do_mp2 and coulomb trafo
- core scaling 1-960 for MPI only for do_mp2 and coulomb trafo
- update Readme with scalings and results from Justus 2.0
- write better maintainable variant code
- OpenMP GPU variant implementation
- rewrite send/recv into bcast
- MPI distri for qmp2 constructor scaling loops
- move to hdf5?
- redo interface Q-Chem
- interface python through pybind11
The Doxygen documentation uses the doxygen-awesome theme.
Badges by Shields.io.