我正在尝试使用 OpenMP 测试 Pi 计算问题。我有这个代码:
#pragma omp parallel private(i, x, y, myid) shared(n) reduction(+:numIn) num_threads(NUM_THREADS)
{
printf("Thread ID is: %d\n", omp_get_thread_num());
myid = omp_get_thread_num();
printf("Thread myid is: %d\n", myid);
for(i = myid*(n/NUM_THREADS); i < (myid+1)*(n/NUM_THREADS); i++) {
//for(i = 0; i < n; i++) {
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
if (x*x + y*y <= 1) numIn++;
}
printf("Thread ID is: %d\n", omp_get_thread_num());
}
return 4. * numIn / n;
}
当我编译gcc -fopenmp pi.c -o hello_pi
并运行它时time ./hello_pi
,n = 1000000000
我得到
真正的 8m51.595s
用户 4m14.004s
系统 60m59.533s
当我用一个线程运行它时,我得到
实际0m20.943s
用户 0m20.881s
系统 0m0.000s
我错过了什么吗?8个线程应该更快。我有 8 核 CPU。