Большое спасибо, вы помогли понять принцип MPI.

ервая мысль былаMPI_Scatter и распределение буфера отправки должно использоваться вif(proc_id == 0) пункт, потому что данные должны быть разбросаны только один раз, и каждому процессу требуется только часть данных в буфере отправки, однако это не сработало правильно.

Похоже, что распределение буфера отправки иMPI_Scatter должен выполняться всеми процессами, прежде чем приложение будет работать правильно.

Так что я бродить, какова философия существованияMPI_Scatter поскольку все процессы имеют доступ к буферу отправки.

Любая помощь будет благодарна.

Редактировать: Код, который я написал так:

if (proc_id == 0) {
    int * data = (int *)malloc(size*sizeof(int) * proc_size * recv_size);
    for (int i = 0; i < proc_size * recv_size; i++) data[i] = i;

    ierr = MPI_Scatter(&(data[0]), recv_size, MPI_INT, &recievedata, recv_size, MPI_INT, 0, MPI_COMM_WORLD);
}

Я подумал, что корневым процессам достаточно разбросать данные, что нужно другим процессам - просто получать данные. Итак, я положилMPI_Scatterвместе с определением и распределением буфера отправки, вif(proc_id == 0) заявление. Нет ошибки / предупреждения при компиляции / во время выполнения, но приемный буфер других процессов не получил соответствующую часть данных.

Ответы на вопрос(1)

Ваш ответ на вопрос