Большое спасибо, вы помогли понять принцип 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)
заявление. Нет ошибки / предупреждения при компиляции / во время выполнения, но приемный буфер других процессов не получил соответствующую часть данных.