#include "mpi.h"
#include <stdio.h>
#include <math.h>
#include<time.h>
#define MAX_NUMBER 100000000
bool isHuiWenNumber(long long num)
{
long long sum=0,temp=num;
//将整数num逆转
while(num)
{
sum=sum*10+num%10;
num/=10;
}
if(temp==sum)
return 1;
else
return 0;
}
void main(int argc, char * argv[])
{
int myid,numprocs,namelen;
double mypi;
int num=0,pi;
char processor_name[MPI_MAX_PROCESSOR_NAME];
clock_t starttime,endtime;
MPI_Init(&argc,&argv);//mpi的初始化
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);//获得进程数
MPI_Comm_rank(MPI_COMM_WORLD,&myid);//获得进程号
MPI_Get_processor_name(processor_name,&namelen);//获得处理器名称
fprintf(stderr,"Process %d on %s\n",myid,processor_name);
starttime=clock();
for(long i=myid;i<=MAX_NUMBER;i+=numprocs){
if(isHuiWenNumber(i))
{
num++;
}
}
MPI_Reduce(&num,&pi,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);//num为待处理的数据,sum为接受处理完的数据,1为执行次数
//MPI_INT为数据类型,MPI_SUM为运算方式,0为root进程的recvbuf,MPI_COMM_WORLD表示一组可以互相发送消息的进程集合
if(myid==0) //
{
printf("parallel num=%d\n",pi);
endtime=clock();
double time = (double)(endtime-starttime);
printf("parallel time=%f\n",time);
}
MPI_Finalize();
}