大神们帮帮我吧,小白求助MPI问题,一用MPI_Scatterv,就报错。 5C

我的意图是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();
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问