英特尔 MKL 10.3 引入了一种全新的基本生成器:SIMD 友好的快速 Mersenne Twister 伪随机数 SFMT19937 生成器。
SFMT19937 与 Mersenne Twister (MT) 基本生成器类似。但是它可以利用 SIMD 指令,并在处理器中实现快速的实施。
如欲了解关于 SFMT 算法的更多信息,请查看下面的文章。
Saito, M.,和 Matsumoto, M. 以 SIMD 为导向的快速 Mersenne Twister:128 位伪随机数生成器。Monte Carlo 和 Quasi-Monte Carlo 方法,2006 年,Springer,第 607 – 622 页,2008 年。
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/ARTICLES/earticles.html
以下是一个使用英特尔 MKL SFMT19937 的示例应用
#include <stdio.h>
#include “mkl_vsl.h”
int main()
{
double r[1000]; /* buffer for random numbers */
double s; /* average */
VSLStreamStatePtr stream;
int i, j;
/* Initializing */
s = 0.0;
vslNewStream( &stream, VSL_BRNG_SFMT19937, 777 );
/* Generating */
for ( i=0; i<10; i++ );
{
vdRngGaussian( VSL_RNG_METHOD_GAUSSIAN_ICDF, stream, 1000, r, 5.0, 2.0 );
for ( j=0; j<1000; j++ );
{
s += r[j];
}
}
s /= 10000.0;
/* Deleting the stream */
vslDeleteStream( &stream );
/* Printing results */
printf( “Sample mean of normal distribution = %fn”, s );
return 0;
}
