это краткий обзор MPI_Scatterv()
int MPI_Scatterv(const void *sendbuf, const int *sendcounts, const int *displs,
MPI_Datatype sendtype, void *recvbuf, int recvcount,
MPI_Datatype recvtype,
int root, MPI_Comm comm)
Я не могу понять, как это работает. ЕСЛИ MPI_Scatterv()
отправляет элементы разных размеров, которые хранятся в *sendcounts
тогда почему recvcount
фиксированное целое число, а не массив размеров куска, а?
а также, поскольку это фиксированное целое число, каким должно быть значение. должно ли оно быть равным максимальному значению sendcount
массив? Например, если у меня есть
int sendcount[4] = {1,5,10,8};
должен recvcount
быть равным 10?
sendcounts
укажите фактические размеры чанка для отправки. recvcount
определяет размер локального приемного буфера, например, recvcount=sendcounts[rank]
,
В деталях это немного сложнее: размер буфера приема должен быть как минимум достаточно большим, чтобы хранить порцию для данного ранга. Если задействованы различные типы, также имеют значение экстенты типа.
Других решений пока нет …