Conceptual

Parallel Pseudo-Random Number Generation on GPUs for Monte Carlo Simulation

Monte Carlo simulation on a GPU requires each of thousands of concurrently executing threads to draw from its own uncorrelated random stream, which turns pseudo-random number generation from a purely statistical problem into a parallel-resources one. State size, not statistical quality, decides which generator families are viable: generators whose state fits in registers (multiplicative-congruential, XORShift, combined multiple-recursive) sustain billions of numbers per second on a GPU, while large-state or high-luxury generators (the Mersenne Twister's 624-word state, RANLUX at high luxury levels) either spill state to off-chip memory or spend most of their cycles discarding numbers. Independent per-thread streams are obtained by seeding each thread differently or by skipping ahead inside one long period, and those per-thread subsequences must still pass the same empirical batteries (DIEHARD, Crush) that validate the serial originals. The result is an explicit quality-versus-throughput trade curve that the simulation author selects a point on, rather than a single best generator.