美文网首页
并行计算:圆周率计算

并行计算:圆周率计算

作者: W杂货铺W | 来源:发表于2019-04-12 02:14 被阅读0次

    数学

    \frac{\pi}{4} = \int_{0}^{1}\frac{1}{1+x^2}dx

    思想

    把0-1下面积分为n个小矩形,再每个处理器上处理一部分面积,最后加起来
    比较重要的是for (i = myid + 1; i <= n; i += numprocs)来分配每个处理器计算的矩形id,很巧妙

    代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <mpi.h>
    
    double f(double);
    
    double f(double a) {
        return 4.0 / (1.0 + a * a);
    }
    
    int main(int argc, char* argv[])
    {
        int n, myid, numproc, i;
        double PI25DT = 3.141592653589793238462643;
        double mypi, pi, h, sum, x;
        double startwtime = 0.0, endwtime;
    
        MPI_Init(&argc, &argv);
        MPI_Comm_size(MPI_COMM_WORLD, &numproc);
        MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    
        n = 100000000;
        
        startwtime = MPI_Wtime();
        h = 1.0 / double(n);
        sum = 0.0;
    
        for (i = myid + 1; i <= n; i += numproc) {
            x = h * (double(i) - 0.5);
            sum += f(x);
        }
        mypi = h * sum;
        MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
        if (myid == 0) {
            endwtime = MPI_Wtime();
            printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT));
            printf("wall clock time = %f\n", endwtime);
            fflush(stdout);
        }
    
        MPI_Finalize();
        return 0;
    }
    
    performance

    相关文章

      网友评论

          本文标题:并行计算:圆周率计算

          本文链接:https://www.haomeiwen.com/subject/vgnfwqtx.html