RNGSSELIB: Program library for random number generation. More generators, parallel streams of random numbers and Fortran compatibility
In this update, we present the new version of the random number generator (RNG) library RNGSSELIB, which, in particular, contains fast SSE realizations of a number of modern and most reliable generators . The new features are: (i) Fortran compatibility and examples of using the library in Fortran; (ii) new modern and reliable generators; (iii) the abilities to jump ahead inside a RNG sequence and to initialize up to 1019 independent random number streams with block splitting method.Summary of revisions: We added Fortran compatibility and examples of using the library in Fortran for each of the generators. New modern and reliable generators GM29, GM55.4, GQ58.1, GQ58.3, and GQ58.4, which were introduced in  were added to the library. The ability to jump ahead inside a RNG sequence and to initialize independent random number streams with block splitting method are added for each of the RNGs. Restrictions: For SSE realizations of the generators, the Intel or AMD CPU supporting SSE2 command set is required. In order to use the SSE realization for the lfsr113 generator, the CPU must support the SSE4.1 command set. Additional comments: The function call interface has been slightly modified compared to the previous version in order to support Fortran compatibility. For each of the generators, RNGSSELIB supports the following functions, where rng should be replaced by the particular name of the RNG: void rng_skipahead_(rng_state* state, unsigned long long offset); void rng_init_(rng_state* state); void rng_init_sequence_(rng_state* state,unsigned long long SequenceNumber); unsigned int rng_generate_(rng_state* state); float rng_generate_uniform_float_(rng_state* state); unsigned int rng_sse_generate_(rng_sse_state* state); void rng_get_sse_state_(rng_state* state,rng_sse_state* sse_state); void rng_print_state_(rng_state* state); void rng_print_sse_state_(rng_sse_state* state); There are a few peculiarities for some of the RNGs. For example, the function void mt19937_skipahead_(mt19937_state* state, unsigned long long a, unsigned b); skips ahead N=aṡ2b numbers, where N<2512, and the function void gm55_skipahead_(gm55_state* state, unsigned long long offset64, unsigned long long offset0); skips ahead N=264ṡ offset64+offset0 numbers. The detailed function call interface can be found in the header files of the include directory. The examples of using the library can be found in the examples directory.