gpt4 book ai didi

c - OpenMP 并行化 Pi 程序

转载 作者:行者123 更新时间:2023-11-30 19:52:36 24 4
gpt4 key购买 nike

我一直在尝试使用 OpenMP 并行化以下代码,但没有成功。我在互联网上搜索了几个例子,但在多次执行程序后,没有一个给出相同的答案。

#include <stdio.h>
#include <omp.h>
#define NUM_THREADS 2

long num_steps = 100000;
double step = 1.0/100000.0;

int main() {
int i;
double x, pi, sum = 0.0;
for(i = 0; i < num_steps; ++i) {
x = (i-0.5)*step;
sum += 4.0/(1.0+x*x);
}
pi = step*sum;
printf("PI value = %f\n", pi);

}

这是我迄今为止的解决方案:

int main (int argc, char **argv){

//Variables
int i=0, aux=0;
double step = 1.0/100000.0;
double x=0.0,
pi=0.0,
sum = 0.0;

#pragma omp parallel shared(sum,i) private(x)
{
x = 0.0;
sum = 0.0;

#pragma omp for
for (i=0; i<num_steps; ++i) {
x = (i-0.5)*step;

#pragma omp critical
sum += 4.0/(1.0+x*x);

}
}

/* All threads join master thread and terminate */
pi= step*sum;
printf("PI value = %f\n", pi);
}

最佳答案

请考虑对您的循环使用 OpenMP 官方网站中提到的相同指令:loop parallelism ,我不得不更改您代码中的许多行,希望这将成为您进一步熟悉 OpenMP 和 C 语言循环并行性的起点。

#include <stdio.h>
#include <omp.h>
#define NUM_STEPS 10000000

int main (int argc, char **argv){

//Variables
long int i, num_steps = NUM_STEPS;
double x, step, sum, pi;
sum = 0.0;
step = 1.0 / (double) num_steps;
#pragma omp parallel private(i,x)
{
#pragma omp for reduction(+:sum)
for (i=0; i<num_steps; ++i) {
x = (i+0.5)*steps;
sum += 4.0/(1.0+x*x);

}
}

/* All threads join master thread and terminate */
pi= steps*sum;
printf("PI value = %.24f\n", pi);

关于c - OpenMP 并行化 Pi 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com