What is it?

RandomIterator is a small header-only library providing iterators pointing to streams of pseudorandom numbers. The library operates using lazy-evaluation and is intented for usage on multi-thread calculations.

RandomIterator deploys state-of-the-art counter-based pseudorandom numbers generators from Random123: library and a pair of native generators based Squares: algorithm, together with TBB: iterators, exposing a concise, lightweght and thread-safe API capable of handling up to \(2^{32}\) streams of pseudorandom numbers, with lenght of \(2^{64}\).

Main features

  • Five primary generators: Philox, ARS and Threefry from Random123 and Squares3 and Squares4, which are natively implemented.

  • Completely thread-safe.

  • Compatibility with all C++ distributions defined in the standard library.

  • For each seed, the random_iterator::Stream<Distribution, Engine> manages up to \(2^{32}\) streams, with length \({2}^{64}\).

  • When instantiated to produce 64bit output, like double, each stream can provide up to 128EB of data.

Installation and requirements

RandomIterator iterator is a header-only library with no dependences.

The Latest Version

Code of RandomIterator is maintened at KIT Gitlab repository

https://gitlab.ikp.kit.edu/AAAlvesJr/random_iterator

Documentation

Licensing

RandomIterator is released under the GNU General Public License version 3. Please, see the file called LICENSE.

Contacting the developers

Here’s what you should do if you need help or would like to contribute:

  • If you found a bug or what to ask any question, use GitLab issues.

  • If you have an idea, suggestion or whatever, use GitHub issues.

  • If you want to contribute, submit a pull request.

Acknowledgement

The authors acknowledge support by the High Performance and Cloud Computing Group at the Zentrum für Datenverarbeitung of the University of Tübingen, the state of Baden- Württemberg through bwHPC and the German Research Foundation (DFG) through grant no. INST 37/935-1 FUGG.