Exemplo simples do uso dos geradores de números aleatórios da biblioteca MKL,
exemplo.c
#include <stdio.h>
/////////////////////////////// MKL GSL Mersenne Twister
#include <mkl_vsl.h>
#define BRNG VSL_BRNG_MT19937
#define METHOD 0
////////////////////////////////
main ()
{
int N = 4, sqrtN = 2 , i , j;
int seed;
seed = 345;
float ranfloat[sqrtN]; //cada entrada corresponde a um numero aleatorio
VSLStreamStatePtr stream;
vslNewStream (&stream, BRNG, seed); //semeando o gerador
for (i = 0; i < sqrtN; i++)
{
vsRngUniform (METHOD, stream, sqrtN, ranfloat, 0.0, 1.0); //carregando sqrtN numeros
for (j = 0; j < sqrtN; j++)
{
printf ("%f\n", ranfloat[sqrtN]);
}
}
return (0);
}
Para compilar basta linkar as bibliotecas adequadas:
ia32, icc exemplo.c -lmkl_intel -lmkl_sequential -lmkl_core -o exemplo.bin
intel64, icc exemplo.c -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -o exemplo.bin
Pontos importante:
os números são obtidos em stream, a idéia é carrega um vetor a cada chamada da função vsRngUniform, no exemplo carregamos sqrtN números entre 0 e 1 (float) distribuídos uniformente. O desempenho é melhor para sqrtN > 1000.
Outras funções:
vdRngUniform - double
viRngUniform - int
Outros geradores, funções e mais detalhes podem ser obtidos na documentação da biblioteca
Vector Statistical Library VSL