  We report on the design, implementation, optimization, and performance of the
CADISHI software package, which calculates histograms of pair-distances of
ensembles of particles on CPUs and GPUs. These histograms represent 2-point
spatial correlation functions and are routinely calculated from simulations of
soft and condensed matter, where they are referred to as radial distribution
functions, and in the analysis of the spatial distributions of galaxies and
galaxy clusters. Although conceptually simple, the calculation of radial
distribution functions via distance binning requires the evaluation of
$\mathcal{O}(N^2)$ particle-pair distances where $N$ is the number of particles
under consideration. CADISHI provides fast parallel implementations of the
distance histogram algorithm for the CPU and the GPU, written in templated C++
and CUDA. Orthorhombic and general triclinic periodic boxes are supported, in
addition to the non-periodic case. The CPU kernels feature cache-blocking,
vectorization and thread-parallelization to obtain high performance. The GPU
kernels are tuned to exploit the memory and processor features of current GPUs,
demonstrating histogramming rates of up to a factor 40 higher than on a
high-end multi-core CPU. To enable high-throughput analyses of molecular
dynamics trajectories, the compute kernels are driven by the Python-based
CADISHI engine. It implements a producer-consumer data processing pattern and
thereby enables the complete utilization of all the CPU and GPU resources
available on a specific computer, independent of special libraries such as MPI,
covering commodity systems up to high-end HPC nodes. Data input and output are
performed efficiently via HDF5. (...) The CADISHI software is freely available
under the MIT license.
