鱼C论坛

 找回密码
 立即注册
查看: 1595|回复: 0

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

[复制链接]
发表于 2018-11-7 14:03:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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。

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

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

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

  20.         return 0;


  21. }
复制代码


编译以及与运行:
答案秒出
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-12 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表