Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: fileteruso en 25 Noviembre 2020, 20:16 PM

Título: ¿Broadcast en MPI espera confirmación de recepción?
Publicado por: fileteruso en 25 Noviembre 2020, 20:16 PM
Buenas,

me ha surgido una dudilla haciendo un ejercicio básico de MPI, ¿al hacer un broadcast se espera confirmación de recepción por parte del resto procesos?


#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]){
int numtasks, taskid, len, buffer, root, count;
char hostname[MPI_MAX_PROCESSOR_NAME];

MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&taskid);
MPI_Get_processor_name(hostname, &len);

printf ("Task %d on %s starting...\n", taskid, hostname);
root = 0;
count = taskid;
if (taskid == root)
buffer = 23;
printf("Root: Number of MPI tasks is: %d\n", numtasks);

MPI_Bcast(&buffer, count, MPI_INT, root, MPI_COMM_WORLD);

printf("Buffer is %d from task %d\n", buffer, taskid);

MPI_Finalize();

}


La duda me ha surgido porque hay un error en él, que es que el tamaño de lo que se envía es igual al identificador del proceso que lo está ejecutando, y este error produce un interbloqueo. No entiendo por qué pasa esto. El broadcast como tal solo lo va a ejecutar el proceso maestro, así que para el código de arriba el count sería como un 0, lo que estaría mal. La cosa es que si meto un 0 a mano funciona y no entiendo por qué.

MPI_Bcast(&buffer, 0, MPI_INT, root, MPI_COMM_WORLD);


Solo es en el caso de que count sea taskid, que como repito al ejecutar el maestro sería 0, cuando no funciona.

La única conclusión posible a la que he llegado es que el broadcast espera confirmación de recepción del envío por parte del resto de procesos y al no llegar a recibirlo se produce el interbloqueo, pero no lo sé.

¡Un saludito y gracias!