Code and other materials for the 2015 S2I2 Software Institute Summer School. See the LICENSE file for what you can do with this code.
Lecture slides and other notes from each of the four instructors can be found here:
- valeev: Prof. Edward Valeev's lectures on modern computing architectures and code opimitzation.
- crawdad: Prof. Daniel Crawford's lectures on numerical libraries (BLAS/LAPACK), interactive debugging, and code timing.
- rjh: Prof. Robert Harrison's lectures on MPI and thread-based code.
- deprince: Prof. Eugene DePrince's lectures on GPU programming and CUDA.
- axpy: measures performance of y[i] += a * x[i] vector operation
- gemm: measures performance of matrix multiplication
Simple examples of vectorizable algorithms.
hf.v1: an integrals-on-disk C++ version
- conversion of the original HF C program from TDC to C++, and minor cleanup
- skipped post-SCF parts to focus on parallel SCF in later versions
hf.v2: the integrals-on-disk C++ version using matrix package Eigen
- based on v1
- much shorter/cleaner, looks different because uses generalized Eigen solver directly, i.e. avoid messing with S^{-1/2}, etc.
- may need to update the Makefile to point to Eigen
- sprinkles of C++11 to save typing ... any recent C++ compiler will do
hf.v3: the integral-direct C++ version
- heavily-modified version of v2
- needs Eigen AND Libint 2.1.0 beta; make sure to update Makefile
- requires C++11
hf.v3.omp
- Parallelizes Fock builds using OpenMP.
- based on hf.v3 and thus has same requirements
hf.v3.omp2
- Parallelizes Fock builds using OpenMP, but limits to permutationally unique shells.
- based on hf.v3 and thus has same requirements
hf.v3.mpi
- Parallelizes Fock builds using MPI.
- based on hf.v3 and thus has same requirements
Three examples containing run-time bugs for demonstrating use of interactive debuggers.
- mm: Simple matrix multiplication code to demonstrate loop unrolling and DGEMM.
- eigenvalue: Simple eigenvalue solver to demonstrate use of DSYEV.
Basic examples of CUDA programming for NVidia GPUs.
A simple timer that can provide data on arbitrary code blocks. Demonstrated using a Hartree-Fock example.
A two-dimensional molecular dynamics code to demonstrate aspects of sequential and parallel algorithms, the latter using both MPI and OpenMP.
A Monte Carlo program for calculating six-dimensional Hylleraas-type integrals for the He atom. Examples include both sequential and parallel algorithms.