英特尔 MKL 中全新的快速基本随机数生成器



英特尔 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;
}





Per informazioni più dettagliate sulle ottimizzazioni basate su compilatore, vedere il nostro Avviso sull'ottimizzazione.