如何解决使用MPI_Scatter分散阵列
我正在编写一个有4个过程的代码。进程0读取64个数字(从number.txt)。然后它将这个数组分散到所有进程。为此,我声明了一个数组“ arr [64]”,该数组对于所有进程都是通用的。每个进程必须打印16个元素(Process0:0-16,Process1:16-32,Process2:32-48,Process3:48-64),并计算其范围的部分和。这就是为什么我有:for(i =(rank 16); i 16)+16); i ++)。 我无法打印正确的值。目前,只有进程0-1打印正确的值并计算正确的部分和。进程2和3正在打印垃圾值,因此计算垃圾的部分和。我该如何解决?
int main(int argc,char** argv){
int size,rank,i,j,count=0,final_val;
int sum=0;
int total[4]={0,0};
int arr[64];
int num[64];
//int *buff=NULL;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if(rank==0)
{
//Read File:
FILE *fp;
fp = fopen("number.txt","r");
if(fp == NULL)
{
perror("Error opening file");
return(-1);
}
while (!feof (fp))
{
fscanf (fp,"%d",&i);
num[count]=i;
count+=1;
}
fclose (fp);
//buff = num;
}
MPI_Scatter(num,64,MPI_INT,arr,MPI_COMM_WORLD);
for(i=(rank*16);i<((rank*16)+16);i++)
{
printf("%d\n",arr[i]);
sum+=arr[i];
}
printf("sum_%d: %d\n",sum);
MPI_Finalize();
return 0;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。