英特尔MKL可以产生多少随机数?似乎超出了一些限制

时间:2014-07-05 02:08:32

标签: c++ random intel-mkl

以下c ++代码与英特尔数学核心库(MKL)中的矢量统计库(VSL)提供的示例几乎相同。但是,一旦变量'总计'比例大于3 * 10 ^ 9,它会输出

  

MKL错误:输入vdRngUniform时参数3不正确。

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

我想知道上限是多少,例如双倍(我无法在手册中找到任何相关信息)。当然,任何克服这个问题的方法都将受到赞赏。提前谢谢!

......
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);
......
}

1 个答案:

答案 0 :(得分:2)

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