MPI—统计完数的个数

来源:互联网 发布:跳舞毯哪款最好 知乎 编辑:程序博客网 时间:2024/05/29 14:15

MPI求完数个数

// MPI1.cpp : 定义控制台应用程序的入口点。//MPI求完数个数#include "stdafx.h"#include "mpi.h"#include <stdio.h>#include <math.h>int isPerfect(int n)  {      int lyy_sum=0;      for(int i = 1; i <=n/2; i++)         if(n%i == 0)               lyy_sum+= i;//统计所有真因子的和。      if(lyy_sum == n)           return 1;//如果与原值相等,则该数为完数。      return 0;//不是完数。  }  void main(int argc, char * argv[]){int n=0,myid,numprocs,i,pi,sum,mypi;double startwtime,endwtime;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myid);if(myid==0){printf("输入一个数字:");fflush(stdout);scanf_s("%d",&n);startwtime=MPI_Wtime();}MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);   //将n值广播出去sum=0;for(i=myid+1;i<=n;i+=numprocs)sum+=isPerfect(i);mypi=sum;  MPI_Reduce(&mypi,&pi,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);  //规约if(myid==0)      {printf("结果=%d\n",pi);endwtime=MPI_Wtime();printf("并行时间=%f\n",endwtime-startwtime);}//串行程序sum=0;double startwtime2=MPI_Wtime();if(myid==0){for(i=1;i<=n;i++)sum+=isPerfect(i);double endwtime2=MPI_Wtime();printf("结果=%d\n",sum);printf("串行时间=%f\n",endwtime2-startwtime2);}MPI_Finalize();}

小数据运行结果:

大数据运行结果:

实验加速比:


加速比计算:8.074396/4.040743=1.998



0 0