zoukankan      html  css  js  c++  java
  • 用MPI进行分布式内存编程(1)

    《并行程序设计导论》第三章部分程序

    程序3.1运行实例

    #include<stdio.h>
    #include<string.h>
    #include<mpi.h>
    
    const int MAX_STRING=100;
    
    int main()
    {
        char greet[MAX_STRING];
        int comm_sz; //进程数
        int my_rank; //进程号
        
        MPI_Init(NULL,NULL); //初始化
        MPI_Comm_size(MPI_COMM_WORLD,&comm_sz); //返回进程数 
        MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); //返回进程号
        
        if(my_rank!=0)
        {
            sprintf(greet,"Greeting from process %d of %d",my_rank,comm_sz);
            MPI_Send(greet,strlen(greet)+1,MPI_CHAR,0,0,MPI_COMM_WORLD); //通信,发送
        }
        else
        {
            printf("Greeting from process %d of %d",my_rank,comm_sz);
            int q;
            for( q=1;q<comm_sz;q++)
            {
                MPI_Recv(greet,MAX_STRING,MPI_CHAR,q,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE);//通信,接收
                printf("%s
    ",greet);
            }
        }
        MPI_Finalize(); //告知系统MPI已使用完毕
        return 0;
        
        
    }

    在天河平台运行结果

     自己虚拟机运行结果

    3.2运行实例

    #include<stdio.h>
    #include<string.h>
    #include<mpi.h>
    
    double f(double x)
    {
        return x*x+x*x*x+5;
    }
    double Trap(double left_endpt,double right_endpt,int trap_count,double base_len)
    {
        
        
        double estimate,x;
        int i;
        estimate=(f(left_endpt)+f(right_endpt))/2.0; //梯形面积
        for(i =1;i<=trap_count-1;++i)
        {
            x=left_endpt+i*base_len;
            estimate+=f(x);
        }
        estimate=estimate*base_len;
        return estimate;
    }
    
    int main()
    {
        int my_rank,comm_sz,n=1024,local_n;
        double a=0.0,b=3.0,h,local_a,local_b;
        double local_int,total_int;
        int source;
        
        MPI_Init(NULL,NULL); //初始化
        MPI_Comm_size(MPI_COMM_WORLD,&comm_sz); //返回进程数
        MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); //返回进程号
        
        h=(b-a)/n;
        local_n=n/comm_sz;
        
        local_a=a+my_rank*local_n*h;
        local_b=local_a+local_n*h;
        local_int=Trap(local_a,local_b,local_n,h);
        
        if(my_rank!=0)
        {
            MPI_Send(&local_int,1,MPI_DOUBLE,0,0,MPI_COMM_WORLD);
        }
        else
        {
            total_int=local_int;
            for(source=1;source<comm_sz;source++)
            {
                MPI_Recv(&local_int,1,MPI_DOUBLE,source,0,MPI_COMM_WORLD,MPI_STATUS_IGNORE); //接受其他节点信息
                total_int+=local_int;
            }
        }
        
        if(my_rank==0)
        {
            printf("With n=%d trapezoids,our estimated
    ",n);
            printf("of the intergral from %f to %f=%.15e
    ",a,b,total_int);
        }
        
        MPI_Finalize();
        return 0;
        
        
        
        
        
        
        
        
    }

    天河运行结果

  • 相关阅读:
    HTML
    JavaScript事件对象
    JavaScript 事件入门
    如何向github上传文件
    crystal
    BUUCTF[强网杯 2019]随便注wp
    BUUCTF[CISCN2019 华东南赛区]Web4 wp
    BUUCTF[NPUCTF2020]ezinclude wp
    Windows下Ant的环境配置
    Java解惑(1)——表达式之谜
  • 原文地址:https://www.cnblogs.com/caishunzhe/p/12935439.html
Copyright © 2011-2022 走看看