Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
For the latest information on Intel’s response to the Log4j/Log4Shell vulnerability, please see Intel-SA-00646

Sobol initialization question


In the documentation provided in this web page :

it is stated that unless one declares in params[2] that they want to overwrite the first dimension (or 0th for c/c++ programmers), they need

s-1 primitive polynomials and s-1 directional vecvtors.

"The number of polynomials (and the number of rows in the table) depends on the initialization mode for the first dimension. In the default initialization mode (see [Brat88] for details) it is enough to pass into the library dimen -1 primitive polynomials (correspondingly, the number of rows in the table of initial direction numbers also equals dimen -1). To override default initialization for the first dimension, set VSL_QRNG_OVERRIDE_1ST_DIM_INIT indicator in params[2]:"

However, in the example provided in the folder vslc of the recent release of mkl 11, inthe file %mklroot%\\examples\vslc\source\soboluserdirnums.c

one notices that although no indication is provided in params[2] for overriding the 1st dimension, dimension ( instead of dimension-1) rows of direction vectors are passed in .

Which one of the two is the correct one ? Apparently the first (c-0th) row is all 1's , which is the default for the direction vectors if not overwritten - please correct me if I am wrong.

In the event someone wanted to overwrite the first dimension what would be the  polynomial (c-0th) that they should input in params? 1 ?

Thank you very much in advance,


0 Kudos
3 Replies


Some comments from function experts:
Expected behavior of the Sobol initialization is described in the documentation, and the example mentioned below follows this description.
Overriding 1st dimension is possible when user provides initial direction numbers and/or polynomials VSL_USER_INIT_DIRECTION_NUMBERS | VSL_USER_PRIMITIVE_POLYMS.
The library initializes direction numbers for 1st dim with ones, if 1st dimension is not overridden; and computes direction numbers for 1st dim from user-provided initial direction number/polynomials, otherwise. Sizes of arrays which contain initial parameters are set accordingly, dim or dim-1

If the users calculates table of direction numbers on their side, they can provides them by specifying VSL_USER_DIRECTION_NUMBERS mode.  Overriding 1st dimension is not applicable in this case, thus, size of the table is dim x 32





Hi Chao Y,

Thank you for the response - for some reason I just saw it now although had been checking ..

There is still something unclear though:

when you write:

"Overriding 1st dimension is not applicable in this case, thus, size of the table is dim x 32"

seems contradictory to me. Do you mean to say thatnotoverriding the first dimension is not an option ? O/wise how can I provide with a table of dimx32?

Thank you again,



Hi Chao Y,

Apologies, I was misunderstanding something constantly. The idea is that when one uses (not initial) direction numbers, the polynomials degrees etc are ,of course, useless .

Thank you for your help,


ps: and I a understand now your writting to mean that this option is not there and I should provide with the first dimension direction number.