C++中使用OpenMP并行计算圆周率

源代码:

#include <iostream>
#include <omp.h>

static constexpr long MAX_N = 1000000000;

double calc_pi(const long N);

int main()
{
    std::cout.precision(20);
    std::cout << calc_pi(MAX_N) << '\n';
    return 0;
}

double calc_pi(const long N)
{
    const double N1 = 1.0 / N;
    double res = 0.0;

#pragma omp parallel reduction(+ : res)
    {
        double tmp = 0.0;
#pragma omp for
        for (long i = 0; i < N; i++)
        {
            const double x = (i + 0.5) * N1;
            tmp += 4.0 / (x * x + 1);
        }
        res += tmp;
    }
    return res / N;
}

编译命令:
g++ main.cpp -o main -fopenmp -O3
原创文章 42 获赞 22 访问量 3018

猜你喜欢

转载自blog.csdn.net/weixin_44327262/article/details/105740885