Intel MKL一次可以生成多少个随机数?似乎超出了某些限制

How many random numbers can Intel MKL generate once? Some limit seems to be exceeded

本文关键字:随机数 多少 MKL 一次 Intel      更新时间:2023-10-16

下面的c++代码与Intel的Math Kernel Library (MKL)中的Vector Statistical Library (VSL)提供的示例几乎相同。然而,一旦变量'total'大于,比如说3*10^9,它将输出

MKL ERROR: Parameter 3 was incorrect on entry to vdRngUniform.

所以我猜这意味着"total"可能太大了。但手册中写着"SFMT19937方法的周期长度等于生成序列的2^19937-1",远远大于10^9。

我想知道上限到底是多少,例如,对于double(我在手册中找不到任何相关信息)。当然,任何能解决这个问题的方法都会受到赞赏。提前感谢!

......
MKL_LONG status;
VSLStreamStatePtr stream;
......
int main(){
vslNewStream(&stream, VSL_BRNG_SFMT19937, 777);
rnd_data = (double*)malloc(total * sizeof(double));
status = vdRngUniform(VSL_RNG_METHOD_UNIFORM_STD, stream, total, rnd_data, 0.0, 1.0);
vslDeleteStream(&stream);
......
}

查看https://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-D7AD317E-34EC-4789-8027-01D0E194FAC1.htm, vdRngUniformconst int具有表示2^31个非负值的能力(在大多数现代平台上)。3*10^9比这个大,所以你很可能传递了一些负值给函数(即有符号整数溢出)。