병렬 컴퓨팅의 관점에서 MPI와 OpenMP의 차이점은 무엇입니까?
OpenMP와 MPI는 병렬 프로그래밍의 두 가지 방법입니다.
OpenMP: 스레드 수준(병렬 세분성) 암시적(데이터 할당 방법); 확장성.
MPI: 프로세스 수준, 우수한 확장성. OpenMP는 공유 스토리지를 사용합니다. 즉, SMP 및 DSM 시스템에만 적합하고 클러스터에는 적합하지 않습니다. MPI는 다양한 기계에 적합하지만 프로그래밍 모델은 복잡합니다.
애플리케이션 문제를 분석하고 세분화해야 하며 문제를 분산 프로세스 모음에 매핑해야 합니다. 큰 통신 지연과 부하 불균형이라는 두 가지 주요 문제를 해결해야 합니다.
확장된 토론:
OpenMP와 MPI를 이해하려면 먼저 운영 체제 지식과 시스템 프로그래밍 기초가 있어야 한다고 생각합니다. OpenMP는 실제로 단일 프로세스와 멀티스레딩에 해당합니다. 동시 프로그래밍 모델은 단일 스레드 프로그램을 for 루프(pthread_create와 동일)를 기반으로 여러 스레드로 분할할 수 있습니다.
동일한 프로세스에 있는 여러 스레드의 경우 자신의 스택 메모리만 점유하고 힙 메모리를 공유하기 때문에 데이터 교환이 매우 쉽고 공유 변수를 통해 직접 교환할 수 있으며 프로그래밍 모델이 매우 쉽습니다. 간단하고 사용하기 쉬우며 운영 체제의 경우 스레드의 컨텍스트 전환 비용이 프로세스보다 훨씬 낮습니다.
그러나 스레드는 프로세스와 독립적으로 존재할 수 없고 프로세스가 여러 시스템에 존재할 수 없기 때문에 OpenMP는 여러 CPU 코어가 있는 단일 컴퓨터에만 적합합니다. 게다가 멀티 스레드 프로그래밍에는 중요한 부분이 있는데, 경쟁 조건 문제를 해결하려면 스스로 이를 잠가야 합니다. 그렇지 않으면 쉽게 예측할 수 없는 결과를 초래할 수 있습니다.
MPI는 다중 프로세스 동시 프로그래밍 모델로, 직접 분기를 호출하는 것과 동일합니다. 각 프로세스의 메모리 주소 공간은 독립적이며 서로 거의 아무것도 공유하지 않으며 서로의 데이터만 공유할 수 있습니다. 프로세스 간 통신(IPC)을 통해 교환되므로 프로그래밍이 훨씬 더 어렵습니다.
MPI는 매우 중요한 이점을 가지고 있습니다. 즉, 분산 시스템의 경우 프로세스는 분산 시스템의 각 컴퓨터 간에 전송될 수 있으므로 여러 컴퓨터가 있는 배포의 경우 기존 시스템의 경우 동시성이 훨씬 더 좋습니다. OpenMP보다