屮睨 2018-11-06 11:39 采纳率: 0%
浏览 810
已结题

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

我的意图是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条回答 默认 最新

  • devmiao 2018-11-06 13:24
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?