用c ++中的openmp生成随机变量

时间:2017-01-15 15:33:28

标签: algorithm openmp

如何使用我的线性同余生成器并行生成(是否有效?可能?)随机变量:

double* uniform(long N)
{
long i,j;
long a=16807;
long long m=(((long long)1)<<31)-1;
long I[N];
double *U;

#pragma omp parallel for  firstprivate(i)
for (j = 0; j < N;j++)
{
    if (i==0)
    {
        int y= omp_get_thread_num(); // undefined ref error here
        I[y];
        i++;
    }
    else
    {
        I[j] = (a*I[j-1])%m;
    }

}

#pragma omp parallel for
for (i=0; i<N; i++)
    U[i] = (double)I[i]/(m+1.0);

return U;
}

我的目标是生成2个变量以在另一个函数中使用它们(box-muller方法):

double* gauss(long int N)
{
    double *X, *Y, *U;
    X = generator(N/2);
    Y = generator(N/2);
    #pragma omp parallel for
    for (i=0;i<N/2;i++)
    {
        U[2*i]=sqrt(-2 * log(X[i]))*sin(Y[i]*2*3.14);
        U[2*i+1]=sqrt(-2 * log(X[i]))*cos(Y[i]*2*3.14);
    }
    return U;
}

如何在生成具有统一函数的统一变量时,如何知道如何获得不同的种子?

0 个答案:

没有答案