Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/alejandrogallo/atrip

High Performance library for the CCSD(T) algorithm in quantum chemistry
https://github.com/alejandrogallo/atrip

asynchronous-programming coupled-cluster cuda literate-programming mpi quantum-chemistry

Last synced: 2 months ago
JSON representation

High Performance library for the CCSD(T) algorithm in quantum chemistry

Awesome Lists containing this project

README

        

#+title: ATRIP: An MPI-asynchronous implementation of CCSD(T)
#+PROPERTY: header-args+ :noweb yes :comments noweb :mkdirp t

#+begin_export rst
.. toctree::
:maxdepth: 2

atrip
#+end_export

* About this document

You can find this project written as a literate program

- [[https://alejandrogallo.github.io/atrip/atrip.html][Literate program]]

or if you prefer reading the source code with Doxygen there is also a built
of doxygen available:

- [[https://alejandrogallo.github.io/atrip/doxygen/html/index.html][Doxygen]]

* How to cite

If you need to cite this algorithm
before the proper paper is released please contact me.

In the mean time the code has been used in
[[https://aip.scitation.org/doi/10.1063/5.0074936][this publication]] and can therefore been cited.

* Building

Atrip uses autotools to build the system.
Autotools works by first creating a =configure= script from
a =configure.ac= file.

Atrip should be built out of source, this means that
you have to create a build directory other that the root
directory, for instance in the =build/tutorial= directory

#+begin_src sh :exports code
mkdir -p build/tutorial/
cd build/tutorial
#+end_src

First you have to build the =configure= script by doing

#+begin_src sh :dir build/tutorial :exports code :results raw drawer
../../bootstrap.sh
#+end_src

#+RESULTS:
:results:

Creating configure script

Now you can build by doing

mkdir build
cd build
../configure
make extern
make all

:end:

And then you can see the =configure= options
#+begin_src sh :dir build/tutorial :results raw drawer :eval no
../../configure --help
#+end_src

** Benches

The script =tools/configure-benches.sh= can be used to create
a couple of configurations for benches:

#+begin_src sh :exports results :results verbatim org :results verbatim drawer replace output
awk '/begin +doc/,/end +doc/ { print $NL }' tools/configure-benches.sh |
grep -v -e "begin \+doc" -e "end \+doc" |
sed "s/^# //; s/^# *$//; /^$/d"
#+end_src

#+RESULTS:
:results:
- default ::
This configuration uses a CPU code with dgemm
and without computing slices.
- only-dgemm ::
This only runs the computation part that involves dgemms.
- cuda-only-dgemm ::
This is the naive CUDA implementation compiling only the dgemm parts
of the compute.
- cuda-slices-on-gpu-only-dgemm ::
This configuration tests that slices reside completely on the gpu
and it should use a CUDA aware MPI implementation.
It also only uses the routines that involve dgemm.
:end:

In order to generate the benches just create a suitable directory for it

#+begin_src sh :eval no
mkdir -p build/benches
cd buid/benches
../../tools/configure-benches.sh CXX=g++ ...
#+end_src

and you will get a Makefile together with several project folders.
You can either configure all projects with =make all= or
then go in each folder.

Notice that you can give a path for ctf for all of them by doing
#+begin_src sh :eval no
../../tools/configure-benches.sh --with-ctf=/absolute/path/to/ctf
#+end_src

* Running benches

** Main benchmark

The main benchmark gets built in =bench/atrip= and is used to run an
atrip run with random tensors.

A common run of this script will be the following

#+begin_src sh
bench/atrip \
--no 100 \
--nv 1000 \
--mod 1 \
--% 0 \
--dist group \
--nocheckpoint \
--max-iterations 1000
#+end_src