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?
Código
#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); root = 0; count = taskid; if (taskid == root) buffer = 23; MPI_Bcast(&buffer, count, MPI_INT, root, MPI_COMM_WORLD); 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é.
Código:
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!