MPIIIIIII

#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();	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章