Adaptive parallel multi-quadrature.

multiquad is a framework for computing high dimensional integrals (i.e, multi-quadrature) using parallelized algorithms for speed and adaptive refinement for guaranteed accuracy.

The adaptive refinement algorithms use a divide-and-conquer approach: the D-dimensional domain is partitioned into S^D many subregions, where S denotes the number of subdivisions per dimension. Multi-quadrature "kernels" compute the integral on each subregion along with error estimates. The subregions with the most significant errors are further refined and their integrals recomputed. As with standard adaptive algorithms, the stopping criterion is reached when the global error estimate drops below a certain threshold.

The multi-quadrature computations can be performed across all subregions simultaneously using a data-parallel computation model, since the input and output data for different subregions are independent. OpenCL is used for the implementation due to its wide availability.

Different adaptive algorithms are implemented using STL containers for efficiently sorting the subregions to determine which ones require further refinement.

In the initial release of the code base, all multi-quadrature rules are implemented as tensor products from 1-dimensional Gauss-Kronrod rules. In fact two suites of multi-quadrature kernels are provided: the OpenCL routines for parallel execution, and the prototype C routines for serial execution intended for testing and benchmarking purposes.

Organization of source tree

  1. Serial Codes.
    Multi-quadrature kernels implemented as C functions for both single and double precision computations. Adaptive refinement algorithms (using STL container classes) are implemented with SERIAL multi-quadrature for benchmarking.
  2. Parallel Codes.
    Adaptive refinement algorithms using STL container classes and parallel execution of the multi-quadrature routines across all subregions. Some tools and wrapper classes for the OpenCL API are also provided.
  3. OpenCL Kernels.
    OpenCL kernels for multi-quadrature routines and integrands.
  4. Tools directory.
    Computational routine for generating Gauss-Kronrod abscissae and weights of arbitrary order. This was used to generate values in the serial routines and the OpenCL kernels.

Sourceforge repository

 All Classes Functions Variables