Mejor respuesta
OpenMP es una plataforma de programación que permite paralelizar código sobre un sistema de memoria compartida homogéneo (por ejemplo, un procesador de múltiples núcleos). Por ejemplo, uno podría paralelizar un conjunto de operaciones sobre un procesador de múltiples núcleos donde los núcleos comparten memoria entre sí. Esta memoria incluye memoria caché, RAM, memoria de disco duro, etc., y la comunicación es fácil y relativamente barata.
Open MPI (basado en Message Passing Interface ) también es una plataforma de programación, pero en su lugar proporciona la capacidad de paralelizar el código sobre un sistema distribuido (por ejemplo, una supercomputadora). Por ejemplo, es posible paralelizar un programa completo a través de una red de computadoras, o nodos, que se comunican a través de la misma red. Dado que estos nodos son esencialmente computadoras , tienen su propio diseño de memoria y su propio conjunto de núcleos (consulte la descripción de OpenMP). La comunicación entre nodos, en comparación con los sistemas de memoria compartida, puede ser difícil y suele ser costosa.
Respuesta
OpenMP es una extensión de lenguaje para expresar operaciones paralelas de datos (comúnmente matrices paralelas en bucles). MPI es una biblioteca para el paso de mensajes entre procesos de nada compartido.
OpenMP es un nivel superior de abstracción, ya que su propósito es exponer la concurrencia y el flujo de datos del programa al compilador. Por el contrario, la concurrencia MPI es implícita (todos los procesos son paralelos), y los mensajes establecen la estructura del flujo de datos del cálculo.
Aunque «Es común pensar que OpenMP es solo una memoria compartida, no hay nada que impida que una implementación de OpenMP use MPI para operar entre procesos y hosts. OTOH, la dualidad de la memoria compartida y el paso de mensajes significa que las implementaciones de MPI a menudo aprovechan la memoria compartida para rangos en el mismo nodo …