2011-01-26 15 views
5

Estoy escribiendo un programa para verificar la ruta más corta usando la biblioteca MPI. Hay dos escenarios:
O encontré una mejor ruta, en caso de que la primera ranura del búfer indicará resultBuff[0] = 1 y tendré que pasar el resto del contenido del búfer para obtener la mejor ruta.
El otro caso es resultBuff[0] = 0, y no voy a esperar ningún valor en las otras celdas del buffer.MPI_Recv: Recibo un tamaño diferente al enviado

¿Es posible para mí utilizar por separado MPI_Isend llamadas:

En caso he encontrado un mejor camino y almacenados en resultBuff[1] a resultBuff[10]:

MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

En caso de no encontrar un mejor camino :

MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

Y en ambos casos usaré

MPI_Recv((void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status); 

para recibir el resultado.

¿Funcionará?
Si lo hace, ¿ahorraría los costos de comunicación si no enviara una mejor ruta?

Nota: resultBuff es de tamaño 11.

Respuesta

1

Sí, puedes hacer esto. Desde el estándar MPI y man pages para MPI_Recv, "el argumento de recuento indica la longitud máxima de un mensaje; el número real se puede determinar con MPI_Get_count" al que llama utilizando el objeto status que obtuvo de MPI_Recv().

En cuanto a los costos de comunicación de ahorro, probablemente no lo hará, tales mensajes cortos están dominados por la latencia de enviar el mensaje en lugar del ancho de banda.

0

No es necesario enviar un mensaje a decir "no he encontrado nada": el carecen de un mensaje puede transmitir esa información igual de bien. El (los) receptor (es) pueden llamar periódicamente al MPI_Test, y examinar el objeto de estado para ver si se recibió o no un mensaje nuevo.

+1

Eso no responde a la pregunta, simplemente lo soluciona. – Nayish

+1

Aún necesito saber cuándo ha finalizado el cálculo de la ruta. Necesito enviar un mensaje que diga "He terminado", solo entonces sabré si encontró una mejor ruta o no. – hizki

Cuestiones relacionadas