Melhor resposta
OpenMP é uma plataforma de programação que permite paralelizar o código em um sistema de memória compartilhada homogêneo (por exemplo, um processador multi-core). Por exemplo, pode-se paralelizar um conjunto de operações em um processador multi-core em que os núcleos compartilham memória entre si. Esta memória inclui memória cache, RAM, memória de disco rígido, etc., e a comunicação é fácil e relativamente barata.
Open MPI (baseado na Message Passing Interface ) também é uma plataforma de programação, mas em vez disso oferece a capacidade de paralelizar o código em uma sistema distribuído (por exemplo, um supercomputador). Por exemplo, é possível paralelizar um programa inteiro em uma rede de computadores, ou nós, que se comunicam na mesma rede. Como esses nós são essencialmente computadores , eles têm seu próprio layout de memória e seu próprio conjunto de núcleos (consulte a descrição do OpenMP). A comunicação entre os nós, quando comparada aos sistemas de memória compartilhada, pode ser difícil e geralmente cara.
Resposta
OpenMP é uma extensão de linguagem para expressar operações paralelas de dados (comumente arrays paralelizados em loops). MPI é uma biblioteca para passagem de mensagens entre processos sem compartilhamento.
OpenMP é um nível superior de abstração, já que seu propósito é expor a concorrência e o fluxo de dados do programa para o compilador. Em contraste, a simultaneidade MPI é implícita (todos os processos são paralelos) e as mensagens estabelecem a estrutura de fluxo de dados da computação.
Embora É comum pensar no OpenMP como sendo apenas sobre memória compartilhada, não há nada que impeça uma implementação do OpenMP de usar MPI para operar em processos e hosts. OTOH, a dualidade de memória compartilhada e passagem de mensagem significa que as implementações MPI muitas vezes tiram vantagem da memória compartilhada para classificações no mesmo nó …