MPI—统计素数个数

来源:互联网 发布:苏州美工的行情 编辑:程序博客网 时间:2024/05/17 02:16

MPI求素数个数

// MPI1.cpp : 定义控制台应用程序的入口点。//MPI求素数个数#include "stdafx.h"#include "mpi.h"#include <stdio.h>#include <math.h>int isPrime(int lyy_num)   //判断是否为素数  {      int lyy_flag=1;      int lyy_s=sqrt(lyy_num*1.0);      for(int j=2;j<=lyy_s;j++)          {              if(lyy_num%j==0)                 {                  lyy_flag=0;                  break;              }          }      return lyy_flag;  }  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*2+1;i<=n;i+=numprocs*2)sum+=isPrime(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+=2)sum+=isPrime(i);double endwtime2=MPI_Wtime();printf("结果=%d\n",sum);printf("串行时间=%f\n",endwtime2-startwtime2);}MPI_Finalize();}

小数据运行结果:

大数据运行结果:


实验加速比:

加速比计算:0.209725/0.105496=1.988



0 0
原创粉丝点击