John A. Stratton
The Two-Point Angular Correlation Function (TPACF) is a measure of the distribution of massive bodies in space. The information of interest is a histogram of angular distances between all pairs of observed objects in space, as well as the relative value of that histogram distribution compared to the distribution of observed points correlated with a random set of points and the distribution of a random set correlated with itself. For robustness, one observed set is typically correlated with many random sets, each also correlated with itself.
To reduce the number of kernels launched, a generic kernel body is written that will correlate any two sets of data with a single thread block. The thread block performs tiling by iterating over both sets by tiles, one set cached into private registers and one cached into shared memory. Given two tiles, each thread computes the distance between its privately cached point with each point cached in shared memory. Contributions to the small histogram are highly contentious, so privatization is used to replicate the histogram, reducing contention. Multiple histogram copies per thread block are kept in shared memory, with threads hashed to histograms in a way minimizing contention. A reduction on the distributed histograms is the final step of the implementation.
101.tpacf's input consists of a set of files which store pairs of real numbers representing the angular coordinates of an observed body in space. One files stores true observations, whereas others store randomly generated points to be used as the basis for the analysis.
101.tpacf outputs the histogram bin counts of the angular distances for each kind of comparison: data-data, data-random, and random-random. Histograms entries are interleaved, so the first three entries represent the first histogram bin for each of the three histograms, and so on.
The output file 101.tpact.out contains detailed timing information about the run. It also shows which device was selected along with what devices where available to OpenCL.
C++ and OpenCL
Last updated: $Date: 2012-03-01 12:38:15 -0500 (Thu, 01 Mar 2012) $