mpi - introduccion - openmp para que sirve
¿Cuáles son las diferencias entre MPI y OpenMP? (2)
Me gustaría saber (en pocas palabras) cuáles son las principales diferencias entre OpenMP y MPI.
MPI es sinónimo de interfaz de paso de mensajes. Es un conjunto de declaraciones de API en el paso de mensajes (como enviar, recibir, difundir, etc.), y qué comportamiento se debe esperar de las implementaciones.
La idea de "pasar el mensaje" es bastante abstracta. Podría significar pasar mensajes entre procesos locales o procesos distribuidos a través de hosts en red, etc. Las implementaciones modernas intentan ser muy versátiles y abstraen los múltiples mecanismos subyacentes (acceso a memoria compartida, IO de red, etc.).
OpenMP es una API que se trata de facilitar (probablemente) la escritura de programas de multiprocesamiento de memoria compartida. No hay noción de pasar mensajes. En cambio, con un conjunto de funciones estándar y directivas de compilación, escribe programas que ejecutan subprocesos locales en paralelo y controla el comportamiento de esos subprocesos (a qué recursos deben tener acceso, cómo se sincronizan, etc.). OpenMP requiere el soporte del compilador, por lo que también puede verlo como una extensión de los idiomas admitidos.
Y no es raro que una aplicación pueda usar tanto MPI como OpenMP.
OpenMP es una forma de programar en dispositivos de memoria compartida. Esto significa que el paralelismo ocurre donde cada hilo paralelo tiene acceso a todos sus datos.
Puede pensarlo como: el paralelismo puede ocurrir durante la ejecución de un bucle específico for
dividir el bucle entre los diferentes hilos.
MPI es una forma de programar en dispositivos de memoria distribuida. Esto significa que el paralelismo ocurre donde cada proceso paralelo está trabajando en su propio espacio de memoria en forma aislada de los demás.
Puede pensarlo como: cada parte del código que ha escrito se ejecuta de forma independiente en cada proceso. El paralelismo se produce porque le dice a cada proceso exactamente en qué parte del problema global deberían trabajar, basándose completamente en su ID de proceso.
La forma en que escribes un programa OpenMP y MPI, por supuesto, también es muy diferente.