Is it possible to initialize sobol sequence generator with user supplied direction numbers? It seems that the code for generating these numbers could be separated from initialization. Also, it would be nice to be able to use parallel streams by "scrambling" as in Hong & Hinkernell and others.


8 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Thank you for the questions.
We are trying to determine the best way to address your requests
on Sobol initialization with user-supplied direction numbers
as well as on scrambling issue.
Thank you also for the reference to H.S. Horn and F.J.Hickernell paper.
Feel free to contact us if you have any specific suggestions,
e.g.relating todirection number initialization interface.
We also appreciate a forum discussion on this topic.


Thank you for your response.
Thesobol codefloating around uses the following data for initializing the routine:
POLY(ndim), VINIT(ndim,ndeg)
These two could be passed to the routine.
There may be better optiones.

Hello again,

We had a look at possibility to incorporate scrambling technique in VSL QRNGs.
There are 2 functions intended for QRNGs initialization:
vslNewStream( &stream, VSL_BRNG_SOBOL, ndims );
nparams = 1;
params[0] = ndims;
vslNewStreamEx( &stream, VSL_BRNG_SOBOL, nparams, params );

To switch scrambling on/off as well as to specify scrambling parameters
we might provide the following extension for vslNewStreamEx:
params[0] = ndims;
params[1] = scrambling_type;
params[2] = brng_index_for_scrambling;
params[3] = seed[1];
params[4] = seed[2];

params[nparams-1] = seed[nparams-3];
vslNewStreamEx( &stream, VSL_BRNG_SOBOL, nparams, params );
ndims dimension;
scrambling_type scrambling method;
brng_index_for_scrambling index of VSL BRNG to be used for scrambling randomization;
seed1, seed2, - initial values to be passed for brng_index_for_scrambling basic generator initialization.

To give flexibility for users the only mandatory parameter would be ndims.
Say, if user doesnt specify seed(s) then default seed would be used.
If user doesnt specify brng_index_for_scrambling and seed(s)
then default BRNG would be used (e.g. MCG31m1).
If scrambling_type is not specified then scrambling is not applied during initialization.
In our view that would be quite flexible solution.
This would be applicable for both Sobol and Niederreiter QRNGs
(as well as for others for which scrambling is applicable).

Is this what you need for parallelization?
Do you have preferences for particular scrambling method?

There might be various ways to implement scrambling.
Some of them are described in H.S. Horn and F.J. Hickernell paper.

Regarding to passing direction numbers explicitly
we have some concerns how to implement some universal mechanism
that is applicable to both Sobol and Niederreiter.
From a library design point of view we try to provide functionality
as general as possible. It seems to be nontrivial to provide flexible,
universal and elegant solution for all QRNGs.
Anyway, can you give us some justification why it is so important for users
to apply their own direction numbers for particular QRNG?
In other words, why existing direction numbers are not applicable/not sufficient?
Is this of wide use or this is needed rather occasionally?
Answering these questions will greatly help us to make right decision
whether to proceed with such a feature implementation or not.

Sergey, Andrey

Dear Andrey,

thanks for your detailed response.
For randomized HD-QMC where nDim> 40,
user supplied direction numbers with suitable scrambling
can overcome current MKL maxDIM for the sobol generator.

As you indicate, scrambling will also permit
independent streams of QRNs, suitable for
parallel QMC. Several papers in MC2QMC2004
discuss efficient methods of generating scrambled QRNs.
These may be more suitable than the H&H method.

We understand now that passing user-supplied direction numbers into the library is even more important for you than "scrambling" option in VSL. Is this right? If so, we will draw attention to the most convenient ways to get user's direction numbers.

At the moment Sobol QRNG implemented in the VSL works with dimensions
not higher than 40. As you mentioned you would need higher dimensions.
Likely this would require some QRNG redesign on our side.So better understanding what practical limits for dimensions that users need will greatly help us to make right design decisions.

By the way, what about option if we provide "scrambling" + extend
Sobol's maximum dimension to the highest that might be used in practice?


Dear Andrey,

Scrambling is perhaps as important ashighermaxDIM. Your suggested solution (fixedMaxDim + scrambling) is very reasonable, although users from different application domain will differ on the desired value of maxDIM.


Thank you for productive discussion of the topic.
We have taken into account your request, and will try to determine when and to what extent the issue can be addressed.

If you have any other questions, please, feel free to contact us.


Leave a Comment

Please sign in to add a comment. Not a member? Join today