DAY 发表于 2018-11-7 14:03:24

[高性能并行计算-MPI]求解10000个数相加

本帖最后由 DAY 于 2018-11-7 14:07 编辑

原理讲解:
为了减少进程生成时间,我们想为每个处理器生成一个进程。我们有n个数相加,把这些数分配到pro个进程中。每个进程求解特定的数和,然后把每个进程数和再累加到0号进程中(0号进程是主进程)。例如n=20,p=6,进程0负责0,6,12,18。进程1负责1,7,13,19。进程2负责2,8,14。进程3负责3,9,15。进程4负责4,10,16。进程5负责5,11,17。

代码实现:
#include<mpi.h>

int main(int argc,char **argv){
      int global_solutions;//结果总汇
      int i;
      int id;//进程ID
      int pro;//进程数量
      int solution;//每个进程计算的数字和

      MPI_Init(&argc,&argv);//MPI起点
      MPI_Comm_rank(MPI_COMM_WORLD,&id);//得到进程id
      MPI_Comm_size(MPI_COMM_WORLD,&pro);//得到进程总数
      solution = 0;
      for(i = id ; i < 10000;i+=pro)
                solution += i;
      //把每个进程的和solution规约到0进程中
      MPI_Reduce(&solution,&global_solutions,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
      fflush(stdout);
      MPI_Finalize();//MPI结束
      if(id == 0)
                printf("global_solution is %d\n",global_solutions);

      return 0;


}


编译以及与运行:
【答案秒出】
页: [1]
查看完整版本: [高性能并行计算-MPI]求解10000个数相加