我的意图是1加到100,c数组保存每个进程收到的数,d数组是 保存偏移量。
代码:
#include
#include
int main(void){
int c[200];
int i;
int n;
int d[200];
int x[100];
int x1[200];
int z[200];
int z1[200];
int size;
int rank;
int t;
int sum=0;
MPI_Init(NULL,NULL);//MPI_COMM_WORLD;
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
//建立数组存放给进程处理数据的个数
n=100;
if(rank==0){
for(i=0;i<100;i++)
x[i]=i+1;
}
for(i=0;i<size;i++){
c[i]=n/size;
t=n%size;
}
for(i=0;i<t;i++){
c[i]=c[i]+1;
}
//建立数组存放进程处理数据的偏移量
d[0]=0;
for(i=0;i<=rank;i++)
{
if(i!=0)
d[i]=c[i-1]+d[i-1];
}
printf("%d \n",rank);
printf("%d \n",c[rank]);
printf("%d \n",d[rank]);
printf("********************************** \n");
printf("x[2]是 %d \n",x[2]);
//零进程获取数据
//进行数据分发
MPI_Scatterv(x,c,d,MPI_INT,x1,c[rank],MPI_INT,0,MPI_COMM_WORLD);
/* for(i=0;i<c[rank];i++){
z1[rank]=z1[rank]+x1[i];
}
printf("%d \n",rank);
for(i=0;i<c[rank];i++)
printf("%d \n",x1[i]);
printf("%d \n",c[rank]);
printf("********************************** \n");
//数据处理
/* MPI_Gatherv(z1,c[rank],MPI_INT,z,c,d,MPI_INT,0,MPI_COMM_WORLD);
if(rank==0){
for(i=0;i<size;i++){
sum=sum+z[i];
}
printf("%d",sum);
}
*/ //汇总结果
MPI_Finalize();
}