MPI并行编程计算π值及PSRS排序

什么是MPI

MPI(Message Passing Interface)是目前最重要的一个基于消息传递的并行编程工具,它具有移植性好、功能强大、效率高等许多优点,而且有多种不同的免费、高效、实用的实现版本,几乎所有的并行计算机厂商都提供对它的支持,成为了事实上的并行编程标准。

MPI是一个库,而不是一门语言,因此对MPI的使用必须和特定的语言结合起来进行。MPI不是一个独立的自包含系统,而是建立在本地并行程序设计环境之上,其进程管理和I/O均由本地并行程序设计环境提供。例如,MPI可以建立在IBM SP2的POE/MPL之上,也可以建立在Intel Paragon的OSF/NX。除了这些商业版本的MPI实现,还有一些免费版的MPI实现,主要有MPICH,LAM和CHIMP。

Linux下MPI环境的搭建

在Linux环境下搭建MPI环境:
sudo apt-get install mpich
编写C语言或C++代码时,在头文件中包含include "mpi.h" 便可以在代码中使用mpi的并行语句了。
C语言编译mpi程序:mpicc example.c -o example
C++编译mpi程序:mpic++ example.c -o example
运行mpi程序:mpiexec -n 4 ./example (4为指定运行的进程数)

利用MPI计算π值

根据积分法易得,求π值的串行代码如下:

    int n = 100, x,sum;
    int h = 1.0/n;
    for(int i=1; i<=n; i++)
    {
        x= (i - 0.5)/n;
        sun += 4.0/(1+x*x);
    }
    pi = sum*h;
    printf("pi = %d\n",pi);

不难改成mpi并行代码:

//*计算π的C语言 MPI编程代码段*// 

#include "mpi.h"
#include <stdio.h>
#include <math.h>

double f(double);
double f(double a)
{
    return (4.0/(1.0 + a*a));
} 

int main(int argc, char *argv[])
{
    int done = 0, n, myid, numprocs, i;
    double PI25DT = 3.141592653589793238462643;
    double mypi, pi, h, sum, x;
    double startwtime = 0.0, endwtime;
    int namelen;
    char processor_name[MPI_MAX_PROCESSOR_NAME];

    MPI_Init(&argc, &argv);  //mpi的初始化
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);  //获取线程数
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);  //获取线程id值
    MPI_Get_processor_name(processor_name, &namelen);  //获取处理器名称

    fprintf(stderr, "Process %d on %s\n", myid, processor_name);

    n = 0;
    while(!done)
    {
        if(myid == 0)
        {
    /*      printf("Enter the number of intervals: (0 quits)");
            scanf("%d",&n); */
            if(n == 0)
                n = 100;
            else
                n = 0;
            startwtime = MPI_Wtime();
        }
        MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);  //进行广播传送消息
        if(n == 0)
            done = 1;
        else
        {
            h = 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值