J'essaie d'apprendre à utiliser OpenMP en parallélisant un code monte carlo qui calcule la valeur de PI avec un nombre donné d'itérations. La viande du code est la suivante:Utilisation d'OpenMP pour calculer la valeur de PI
int chunk = CHUNKSIZE;
count=0;
#pragma omp parallel shared(chunk,count) private(i)
{
#pragma omp for schedule(dynamic,chunk)
for (i=0; i<niter; i++) {
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
z = x*x+y*y;
if (z<=1) count++;
}
}
pi=(double)count/niter*4;
printf("# of trials= %d , estimate of pi is %g \n",niter,pi);
Bien que cela ne donne pas la valeur correcte pour pi donné 10.000 itérations. Si tout le matériel OpenMP est retiré, ça fonctionne très bien. Je dois mentionner que j'ai utilisé le code de monte carlo d'ici: http://www.dartmouth.edu/~rc/classes/soft_dev/C_simple_ex.html
Je l'utilise juste pour essayer OpenMP. Des idées pour lesquelles il converge vers 1.4ish? Est-ce que je ne peux pas incrémenter une variable avec plusieurs threads? Je suppose que le problème est avec la variable count
.
Merci!