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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta