gpt4 book ai didi

c - MPI 上的并行数组加法

转载 作者:行者123 更新时间:2023-11-30 16:33:56 24 4
gpt4 key购买 nike

MPI_Init(&argc, &argv);


int size,rank,i,*a,*b,*c,N;
double t1,t2;
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
srand(time(NULL));



if(rank==0)
{
printf("Input an integer for arrays size\n");
scanf("%d",&N);
a = (int*) malloc((N)* sizeof(int));
b = (int*) malloc((N) * sizeof(int));
c = (int*) malloc((N)* sizeof(int));
for(i=0;i<N;i++)
{
a[i]=rand()%100+1;
b[i]=rand()%100+1;
c[i]=0;


printf("c[%d]= %d , a[i]= %d , b[i] = %d \n",i, c[i],a[i],b[i]);

}
}
t1=MPI_Wtime();


MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD);

MPI_Bcast(&a,N,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&b,N,MPI_INT,0,MPI_COMM_WORLD);
MPI_Bcast(&c,N,MPI_INT,0,MPI_COMM_WORLD);

printf("\n\n\n\n");


for(i=rank;i<N;i+=size)
{
printf("entered rank %d \n",rank);
c[i]=a[i]+b[i];
printf("c[%d]= %d , a[i]= %d , b[i] = %d \n",i, c[i],a[i],b[i]);
}


t2=MPI_Wtime();




if(rank==0)
printf("time elapsed %.8f \n" ,t2-t1);



MPI_Finalize();

}

我想用 MPI 库编写一个并行程序。当我只用一个核心运行这段代码时没有问题。但除了核心之外,我还遇到了一个运行时错误,如下所示。等级 0 运行得很好。其他等级不起作用。

最佳答案

您需要对all 上的所有数组abc 进行malloc() 排名(例如,MPI_Bcast() 不会在非根排名上为您执行此操作)。

从性能和内存占用的角度来看,您更愿意使用 MPI_Scatterv() 数组,以便可以对操作进行矢量化,而无需跨步访问。

关于c - MPI 上的并行数组加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49492700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com