  Single-Instruction, Multiple-Data (SIMD) random number generators (RNGs) take
advantage of vector units to offer significant performance gain over
non-vectorized libraries, but they often rely on batch production of deviates
from distributions with fixed parameters. In many statistical applications such
as Gibbs sampling, parameters of sampled distributions change from one
iteration to the next, requiring that random deviates be generated
one-at-a-time. This situation can render vectorized RNGs inefficient, and even
inferior to their scalar counterparts. The C++ class BatchRNG uses buffers of
base distributions such uniform, Gaussian and exponential to take advantage of
vector units while allowing for sequences of deviates to be generated with
varying parameters. These small buffers are consumed and replenished as needed
during a program execution. Performance tests using Intel Vector Statistical
Library (VSL) on various probability distributions illustrates the
effectiveness of the proposed batching strategy.
