[英]Is there a way to do MPI_Gatherv without knowing the size of each array in each process?
我正在尝试为 int 数组执行 MPI_Gatherv 而不知道每个进程中每个数组的大小。 有没有办法做到这一点?
这是我的代码片段。
#include "mpi.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int *local_arr;
int *arr;
int local_n;
int n;
if (rank == 0) {
// do gatherv without knowing the element sizes and displacements
} else {
// fill array with random size
srand(rank);
local_n = (rand()%10)+1;
local_arr = new int[local_n];
for (int i = 0; i < local_n; i++) {
local_arr[i] = i;
}
// do gatherv without knowing the element sizes and displacements
}
}
你真的不能那样做。 displacements
和element_sizes
参数的存在表明了这一点。 如果确实无法知道(无法在根处计算)根将接收到的计数,您将需要从每个节点执行单个int
的MPI_Gather
并将其用作MPI_Gatherv
displacements
。
当您调用Gatherv
,您必须事先知道大小和位移,因为您只需要在目标等级上分配足够的空间。
这就是为什么你会经常看到一个Gather
调用来获得每个等级的大小,然后是一个减少以获得位移,然后是Gatherv
调用。 如果在不同等级上有几个固定大小的后者,则将在预处理步骤中调用Gather
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.