// we.cpp : 定义控制台应用程序的入口点。
//
实验程序
#include "stdafx.h"
#include"mpi.h"
int _tmain(int argc, _TCHAR* argv[])
{
int rank,size;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
printf("helleo from process%dof%d\n",rank,size);
MPI_Finalize();
return 0;
}
完数
// yu.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
void main()
{
long long s=10000000;
long num,i;
for(num=6;num<=s;num++)
{
omp_set_num_threads(2);
sum=1;
#pragma omp parallel{
for(i=2;i<=num/2;i++) //很多资料都用i<num来作判断条件,不过当num/2<i<num,很明显不存在num%i==0,故完全不需去计算。
if(num%i==0) sum+=i;
if(sum==num)
{
printf("%d its factors are 1",num);
for(i=2;i<=num/2;i++)
if(num%i==0) printf(",%d",i);
printf("\n");
}
}
}
}
MPi求和
// we.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"mpi.h"
#include<stdio.h>
#include<math.h>
double f(double a){return (4.0/(1.0+a*a));}
void main(int argc, char * argv[])
{
int done=0,n,myid,numprocs,i;
double mypi,pi,sum;
double startwtime,endwtime;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stderr,"process%don%s\n",myid,processor_name);
fflush(stderr);
n=0;
while(!done){
if(myid==0)
{
printf("输入一个数字不超过:(0退出)");fflush(stdout);
scanf_s("%d",&n);
startwtime=MPI_Wtime();
}
MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);
if(n==0)done=1;
else{sum=0.0;
for(i=myid+1;i<=n;i+=numprocs){
sum+=i;
}
mypi=sum;
MPI_Reduce(&mypi,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
if(myid==0)
{
printf("结果%.16f\n",pi);
endwtime=MPI_Wtime();
printf("时间=%f\n",endwtime-startwtime);
}
}
}
MPI_Finalize();
}