gpt4 book ai didi

c - MPI_Gatherv 未正确收集数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:20 25 4
gpt4 key购买 nike

我正在尝试使用 MPI_Gatherv 收集不同大小的数组,但出于某种原因,它只收集了第一个处理器中的第一个对象。当我执行上述 for 循环时,我从 xPos 和 yPos 获得了正确的值,但是当我将数据收集到 xFinal 和 yFinal 数组并打印出这些值时,我只获得了第一个 x 和 y。所以基本上第一个对象的 (x,y) 为 (0,0) 而我有 10 个对象,当它应该引用的实际对象具有不同的 (x, y)

为了以防万一,counts[rank] 和 displs 肯定是对的,因为我之前用它们来 scatterv。

我是否错误地使用了 gatherrv?还是我打印不正确?

for ( a = 0; a < size; a++) {
if (rank == a) {
for ( i = 0 ; i < counts[rank]; i++) {
printf("from procs %d: %lE %lE\n", rank, xPos[i], yPos[i]);
}
}
}


MPI_Gatherv(&xPos, counts[rank], MPI_DOUBLE, &xFinal, counts, displs, MPI_DOUBLE,0, MPI_COMM_WORLD);
MPI_Gatherv(&yPos, counts[rank], MPI_DOUBLE, &yFinal, counts, displs, MPI_DOUBLE,0, MPI_COMM_WORLD);


MPI_Finalize();

FILE* f = fopen("universe.out", "wt");
for (i = 0; i < N; i++)
fprintf(f, "%lE %lE\n", xFinal[i], yFinal[i]);
fclose(f);

最佳答案

您似乎同时从所有行列写入文件。您应该将文件写入代码放在 if (rank == 0) { ... } 中,只让 rank 0 写入:

if (rank == 0)
{
FILE* f = fopen("universe.out", "wt");
for (i = 0; i < N; i++)
fprintf(f, "%lE %lE\n", xFinal[i], yFinal[i]);
fclose(f);
}

否则文件的内容可以是任何内容。

关于c - MPI_Gatherv 未正确收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740454/

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