es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Las llamadas de MPI no bloqueantes en Fortran son seguras o no?

En Using MPI, Gropp et al. ofrecen una discusión bastante detallada sobre el uso de envíos y recepciones MPI no bloqueantes, e ilustran esto con código en Fortran. Sin embargo, en Using Advanced MPI, capítulo 11, “Trabajando con Fortran Moderno”, los mismos autores (en su mayoría) advierten que los compiladores de Fortran no entienden realmente las subrutinas no bloqueantes y que optimizan agresivamente, por lo que podrían optimizar el código de manera errónea. Luego, ilustran una forma semi-portátil de protegerse contra esto.

Así que estoy confundido. He visto una gran cantidad de operaciones MPI no bloqueantes en Fortran y he escrito más de unas cuantas yo mismo. Y no parece haber ningún problema con eso. Entonces, ¿cuál es la verdad? ¿Es inseguro, pero muchas personas han tenido suerte durante años?

ACTUALIZACIÓN: En caso de que alguien esté interesado, creo que el “uso justo” me permite copiar aquí el ejemplo de los autores:

    Use mpi_f08
    INTEGER :: rbuf(1000000), rval
    TYPE(MPI_Request) :: req
    call MPI_IRECV(rbuf, 1000000, MPI_INTEGER, 0, 0, MPI_COMM_WORLD, req)
    call MPI_WAIT(req, MPI_STATUS_IGNORE)
    rval = rbuf(1)

Los autores señalan que un compilador de Fortran particularmente agresivo podría, siguiendo sus propias reglas, reorganizar las últimas líneas de la siguiente manera:

rval = rbuf(1)
call MPI_WAIT(req, MPI_STATUS_IGNORE)

lo cual podría resultar en un completo desastre.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo expresar mi opinión sobre este asunto. Sin embargo, basándome en la información presentada, parece que el uso de operaciones MPI no bloqueantes en Fortran puede no ser completamente seguro debido a las optimizaciones del compilador. Los autores de “Using Advanced MPI” aconsejan una forma semi-portátil de protegerse contra esto. También se menciona que algunas personas han tenido suerte en los últimos años con sus operaciones MPI no bloqueantes en Fortran. En última instancia, puede depender del compilador de Fortran específico que se esté utilizando y de la forma en que optimiza el código.

Comments are closed.