OpenMPI, как выполнить MPI_Allreduce относительно длинного массива - PullRequest
0 голосов
/ 31 марта 2020

Я хочу использовать MPI_Allreduce для очень длинного массива в качестве следующей демонстрации.

long long n = 1 << 10;
double* array = new double[n];
memset(array, 1234.5678, n * sizeof(double));
MPI_Allreduce(MPI_IN_PLACE, array, n, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);

Однако я проверил официальную документацию и подробности об API следующим образом. Мы видим, что мы можем использовать только целое число, чтобы указать общее количество элементов в буфере отправки. Что если я хочу выполнить этот API на очень длинном массиве? Нужно ли разбивать мой массив на множество мелких частей, а затем выполнять эту коллективную операцию?

int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count,
                  MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
...