¿Qué debo hacer para recibir cuando el número de mensajes enviados es desconocido en MPI?

Estoy progtwigndo en MPI. Quiero enviar algo a otro procesador y recibirlo allí, pero no sé cuántos mensajes enviaré. De hecho, la cantidad de mensajes que se envían al otro procesador depende del archivo que estoy leyendo durante el progtwig, por lo que no sé cuántos recibos debo escribir en el otro lado. ¿Qué método y qué función debo usar?

Aún puede usar envíos y recepciones, pero también agregaría un nuevo tipo de mensaje que indica al proceso de recepción que no habrá nuevos mensajes. Generalmente esto se maneja enviando con una etiqueta diferente. Entonces tu progtwig luciría algo así:

if (sender) { while (data_to_send == true) { MPI_Send(data, size, datatype, receiving_rank, 0, MPI_COMM_WORLD); } for (i = 0; i < size; i++) { MPI_Send(NULL, 0, MPI_INT, i, 1, MPI_COMM_WORLD); } } else { while (1) { MPI_Recv(data, size, datatype, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); if (status.MPI_TAG == 1) break; /* Do processing */ } } 

Hay una mejor manera de hacerlo si tiene colectivos sin locking (desde MPI-3). Antes de comenzar a recibir datos, publica una barrera de no locking. Entonces empiezas a publicar recibos no bloqueantes. En lugar de esperar solo en las recepciones, se usa un waitany en ambas solicitudes y cuando se termina la barrera, se sabe que aquí no habrá más datos. En el lado del remitente, solo sigues enviando datos hasta que no haya más, luego haces una barrera de no locking para terminar las cosas.