马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
编译以及与运行:
【答案秒出】
|