鱼C论坛

 找回密码
 立即注册
查看: 1318|回复: 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。

代码实现:
#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;


}

编译以及与运行:
答案秒出
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 18:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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