Preguntas sobre el ejecutante MPI_Scatter y su asignación de búfer de envío
Mi primer pensamiento fueMPI_Scatter
y la asignación del búfer de envío debe usarse enif(proc_id == 0)
, porque los datos deben dispersarse solo una vez y cada proceso solo necesita una parte de los datos en el búfer de envío, sin embargo, no funcionó correctamente.
arece que la asignación de búfer de envío yMPI_Scatter
debe ser ejecutado por todos los procesos antes de que la aplicación funcione correctamente.
Así que deambulo, ¿cuál es la filosofía para la existencia deMPI_Scatter
ya que todos los procesos tienen acceso al búfer de envío.
Cualquier ayuda será agradecida.
Editar Código que escribí así: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);
}
Pensé, eso es suficiente para que los procesos raíz dispersen datos, lo que los otros procesos deben hacer es solo recibir datos. Entonces puseMPI_Scatter
, junto con la definición y asignación del búfer de envío, en elif(proc_id == 0)
declaración. Sin error / advertencia de compilación / tiempo de ejecución, pero el búfer de recepción de otros procesos no recibió su parte correspondiente de datos.