On entry: contains information on the selected base generator and its current state.
On exit: contains updated information on the state of the generator.
3: – NagError *Input/Output
The NAG error argument (see Section 7 in the Introduction to the NAG Library CL Interface).
6Error Indicators and Warnings
Dynamic memory allocation failed.
See Section 3.1.2 in the Introduction to the NAG Library CL Interface for further information.
On entry, the base generator is Mersenne Twister, but the state vector defined on initialization is not large enough to perform a skip ahead. See the initialization function g05kfcorg05kgc.
On entry, argument had an illegal value.
On entry, .
On entry, cannot use skip-ahead with the base generator defined by state.
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 7.5 in the Introduction to the NAG Library CL Interface for further information.
On entry, state vector has been corrupted or not initialized.
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library CL Interface for further information.
8Parallelism and Performance
Background information to multithreading can be found in the Multithreading documentation.
g05kjc is not threaded in any implementation.
Calling g05kjc and then generating a series of uniform values using g05sac is more efficient than, but equivalent to, calling g05sac and discarding the first values. This may not be the case for distributions other than the uniform, as some distributional generators require more than one uniform variate to generate a single draw from the required distribution.
To skip ahead places you can either
(a)call g05kjc once with , or
(b)call g05kjc times with , using the state vector output by the previous call as input to the next call
both approaches would result in the same sequence of values. When working in a multithreaded environment, where you want to generate (at most) values on each of threads, this would translate into either
(a)spawning the threads and calling g05kjc once on each thread with , where is a thread ID, taking a value between and , or
(b)calling g05kjc on a single thread with , spawning the threads and then calling g05kjc a further times on each of the thread.
Due to the way skip ahead is implemented for the Mersenne Twister, approach (a) will tend to be more efficient if more than 30 threads are being used (i.e., ), otherwise approach (b) should probably be used. For all other base generators, approach (a) should be used. See the G05 Chapter Introduction for more details.
This example initializes a base generator using g05kfc and then uses g05kjc to advance the sequence 50 places before generating five variates from a uniform distribution using g05sac.