Best answer
OpenMP 는 프로그래밍 플랫폼입니다. 동종 공유 메모리 시스템 (예 : 멀티 코어 프로세서)을 통해 코드를 병렬화 할 수 있습니다. 예를 들어, 코어가 서로 메모리를 공유하는 멀티 코어 프로세서를 통해 작업 집합 을 병렬화 할 수 있습니다. 이 메모리에는 캐시 메모리, RAM, 하드 디스크 메모리 등이 포함되며 통신이 쉽고 비교적 저렴합니다.
Open MPI (기반 on Message Passing Interface )도 프로그래밍 플랫폼이지만 대신 (비) 동종 분산 시스템 (예 : 슈퍼 컴퓨터). 예를 들어, 컴퓨터 네트워크 또는 동일한 네트워크를 통해 통신하는 노드를 통해 전체 프로그램 을 병렬화 할 수 있습니다. 이러한 노드는 기본적으로 컴퓨터이기 때문입니다. , 자체 메모리 레이아웃과 자체 코어 세트가 있습니다 (OpenMP 설명 참조). 공유 메모리 시스템과 비교할 때 노드 간의 통신은 어려울 수 있으며 일반적으로 비용이 많이 듭니다.
답변
OpenMP는 데이터 병렬 작업 (일반적으로 루프를 통해 병렬화 된 배열)을 표현하기위한 언어 확장입니다. MPI는 비공유 프로세스 간의 메시지 전달을위한 라이브러리입니다.
OpenMP는 상위 수준입니다. 추상화의 목적은 프로그램의 동시성과 데이터 흐름을 컴파일러에 노출하는 것입니다. 대조적으로 MPI 동시성은 암시 적이며 (모든 프로세스가 병렬 임) 메시지 는 계산의 데이터 흐름 구조를 설정합니다.
그렇지만 “OpenMP를 단지 공유 메모리에 관한 것으로 생각하는 것이 일반적입니다.”OpenMP 구현이 MPI를 사용하여 프로세스와 호스트에서 작동하는 것을 방해하는 것은 없습니다. 공유 메모리와 메시지 전달의 이중성 인 OTOH는 MPI 구현이 종종 동일한 노드의 순위에 대해 공유 메모리를 활용한다는 것을 의미합니다 …