Skip to main content

Evaluation of splittable pseudo-random generators*


Pseudo-random number generation is a fundamental problem in computer programming. In the case of sequential processing the problem is very well researched, but parallel processing raises new problems whereof far too little is currently understood. Splittable pseudo-random generators (S-PRNG) have been proposed to meet the challenges of parallelism. While applicable to any programming paradigm, they are designed to be particularly suitable for pure functional programming. In this paper, we review and evaluate known constructions of such generators, and we identify flaws in several large classes of generators, including Lehmer trees, the implementation in Haskell's standard library, leapfrog, and subsequencing (substreaming).

Hide All

The research was partially funded by Regionalt Forskingsfond Midt-Norge through the project Dynamic Resource Allocation with Maritime Application (DRAMA), grant no. ES504913.

Hide All
Brown, R. G. (2015 January) Dieharder: A Random Number Test Suite. Software. Available from
Burton, F. W. & Page, R. L. (1992) Distributed random number generation. J. Funct. Program. 2 (2), 203212.
Bye, R. T. & Schaathun, H. G. (2014) An improved receding horizon genetic algorithm for the tug fleet optimisation problem. In Proceedings of the 28th European Conference on Modelling and Simulation (ECMS 2014). ECMS European Council for Modelling and Simulation, pp. 682–690.
Carta, D. G. (1990) Two fast implementations of the minimal standard random number generator. Commun. ACM 33 (1), 8788.
Claessen, K. & Pałka, M. H. (2013a) Splittable pseudorandom number generators using cryptographic hashing. In Proceedings of the 2013 ACM SIGPLAN Symposium on Haskell. Haskell'13. New York, NY, USA: ACM, pp. 4758.
Claessen, K. & Pałka, M. H. (2013b) The tf-Random Package. Accessed 2015-01-15. Online at:
Cuccaro, S. A., Mascagni, M., & Pryor, D. V. (1995) Techniques for testing the quality of parallel pseudorandom number generators. In Proceedings of the 7th SIAM Conference on Parallel Processing for Scientific Computing, Bailey, D. H., Bjørstad, P. E., Gilbert, J. R., Mascagni, M., Schreiber, R. S., Simon, H. D., Torczon, V. J., & Watson, L.T. (eds), SIAM, pp. 279284.
De Matteis, A. & Pagnutti, S. (1990) Long-range correlations in linear and non-linear random number generators. Parallel Comput. 14 (2), 207210.
Eddy, W. F. (1990) Random number generators for parallel processors. J. Comput. Appl. Math., 31 (1), 6371.
Frederickson, P., Hiromoto, R., Jordan, T. L., Smith, B. & Warnock, T. (1984) Pseudo-random trees in Monte Carlo. Parallel Comput. 1 (2), 175180.
Hackage. (2011) The Random Package. Haskell Random Number Library. Documentation. Accessed 2015-01-16. Online at:
Halton, J. H. (1989) Pseudo-random trees: Multiple independent sequence generators for parallel and branching computations. J. Comput. Phys. 84 (1), 156.
Klamkin, M. S. & Newman, D. J. (1967) Extensions of the birthday surprise. J. Comb. Theory 3 (3), 279282.
Knuth, D. E. (1998) The Art of Computer Programming, vol. 2: Seminumerical Algorithms, 3rd ed., Addison-Wesley.
Koniges, A. E. & Leith, C. E. (1989) Parallel processing of random number generation for Monte Carlo turbulence simulation. J. Comput. Phys. 81 (1), 230235.
Krawczyk, H. (1992) How to predict congruential generators. J. Algorithms 13 (4), 527545.
L'Ecuyer, P. (1988) Efficient and portable combined random number generators. Commun. ACM 31 (6), 742749 and 774.
L'Ecuyer, P. (2012) Random number generation. In Handbook of Computational Statistics: Concepts and Methods, Gentle, J. E., Härdle, W. K. & Mori, Y. (eds), 2nd ed., Springer, pp. 3571.
L'Ecuyer, P. & Simard, R. (2007) TestU01: A C library for empirical testing of random number generators. ACM Trans. Math. Softw. 33 (4), Article no. 22.
L'Ecuyer, P., Simard, R., Chen, E. J. & Kelton, W. D. (2002) An objected-oriented random-number package with many long streams and substreams. Oper. Res. 50 (6), 10731075.
Leiserson, C. E., Schardl, T. B. & Sukha, J. (2012) Deterministic parallel random-number generation for dynamic-multithreading platforms. ACM SIGPLAN Not. 47 (8), 193204.
Marlow, S. (2013) Parallel and Concurrent Programming in Haskell. O'Reilly.
Marsaglia, G. (1968) Random numbers fall mainly in the planes. Proc.Natl. Acad. Sci. United States Am. 61 (1), 2528.
Mascagni, M. (1998) Parallel linear congruential generators with prime moduli. Parallel Comput. 24 (5–6), 923936.
Matsumoto, M. & Nishimura, T. (1998) Dynamic creation of pseudorandom number generators. In Monte Carlo and quasi-Monte Carlo Methods, 1998: Proceedings of a Conference Held at the Claremont Graduate University, June 22–26, Niederreiter, H. & Spanier, J. (eds), Claremont, CA, USA: Springer, pp. 5669.
Matsumoto, M., Wada, I., Kuramoto, A. & Ashihara, H. (2007) Common defects in initialization of pseudorandom number generators. ACM Trans. Model. Comput. Simul. 17 (4), Article no. 15.
Menezes, A. J., van Oorschot, P. C. & Vanstone, S. A. (1997) Handbook of Applied Cryptography. CRC Press.
O'Sullivan, B., Goerzen, J. & Stewart, D. (2008) Real World Haskell. O'Reilly.
Park, S. K. & Miller, K. W. (1988) Random number generators: Good ones are hard to find. Commun. ACM 31 (10), 11921201.
Percus, Ora E. & Kalos, M. H. (1989) Random number generators for MIMD parallel processors. J. Parallel Distrib. Comput. 6 (3), 477497.
Salmon, J. K., Moraes, M. A., Dror, R. O. & Shaw, D. E. (2011) Parallel random numbers: As easy as 1, 2, 3. In High performance computing, networking, storage and analysis (SC11), 2011 International conference for. ACM, pp. 1–12.
Schaathun, H. G. (2014) Parallell slump (Om å parallellisera genetiske algoritmar i Haskell) Norsk informatikkonferanse. Open access at: ISSN 1892-0721.
Steele, Guy L. Jr., Lea, D. & Flood, C. H. (2014) Fast splittable pseudorandom number generators. ACM SIGPLAN Not. 49 (10), 453472.
Warnock, T. T. (1983) Synchronization of random number generators. Congressus Numerantium 37, 135144.
Wu, P.-C. & Huang, K.-C. (2006) Parallel use of multiplicative congruential random number generators. Comput. Phys. Commun. 175 (1), 2529.
Recommend this journal

Email your librarian or administrator to recommend adding this journal to your organisation's collection.

Journal of Functional Programming
  • ISSN: 0956-7968
  • EISSN: 1469-7653
  • URL: /core/journals/journal-of-functional-programming
Please enter your name
Please enter a valid email address
Who would you like to send this to? *


Full text views

Total number of HTML views: 0
Total number of PDF views: 27 *
Loading metrics...

Abstract views

Total abstract views: 166 *
Loading metrics...

* Views captured on Cambridge Core between September 2016 - 18th March 2018. This data will be updated every 24 hours.