[논문 리뷰] OMP2MPI: Automatic MPI code generation from OpenMP programs
OMP2MPI는 OpenMP 프로그램을 자동으로 MPI 코드로 변환하는 소스 투 소스 컴파일러로, 공유 메모리 노드 수준을 초월해 분산 메모리 HPC 클러스터에서 실행할 수 있도록 한다. 이는 OpenMP 병렬 루프를 MPI 통신을 사용하는 마스터/워커 패턴으로 변환함으로써 이를 달성하며, 정확하고 확장 가능한 코드를 생성하여 64코어 환경에서 원래 OpenMP 및 순차 버전을 초월하는 20배 이상의 스피드업을 기록한다.
In this paper, we present OMP2MPI a tool that generates automatically MPI source code from OpenMP. With this transformation the original program can be adapted to be able to exploit a larger number of processors by surpassing the limits of the node level on large HPC clusters. The transformation can also be useful to adapt the source code to execute in distributed memory many-cores with message passing support. In addition, the resulting MPI code can be used as an starting point that still can be further optimized by software engineers. The transformation process is focused on detecting OpenMP parallel loops and distributing them in a master/worker pattern. A set of micro-benchmarks have been used to verify the correctness of the the transformation and to measure the resulting performance. Surprisingly not only the automatically generated code is correct by construction, but also it often performs faster even when executed with MPI.
연구 동기 및 목표
- 공유 메모리 노드 수준을 초월해 OpenMP 프로그램이 확장 가능하도록 자동으로 이식 가능한 MPI 코드를 생성함으로써 목표를 달성한다.
- 대규모 HPC 클러스터 및 분산 메모리 다수코어 시스템에서 실용적이고 정확한 변환을 제공함으로써 OpenMP에서 MPI로의 변환을 목표로 한다.
- 가독성과 전문가의 튜닝이 가능하도록 유지되는 가독성 있는 코드를 제공함으로써 MPI 최적화의 성능 경쟁력 있는 기반을 마련한다.
- 소프트웨어 기반 분산 공유 메모리 런타임의 한계를 극복하기 위해 명시적인 MPI 통신 패턴을 노출한다.
제안 방법
- 도구는 C/C++ OpenMP 소스 코드를 파싱하고 추상 구문 트리(_AST_)를 생성하기 위해 Mercurium 컴파일러 프레임워크를 사용한다.
- OpenMP 병렬 루프를 식별하고 정적 분석을 통해 공유, 개인, 감소 변수를 탐지하며, 감소 문구에 대한 특수 처리도 포함한다.
- 각 OpenMP 병렬 영역을 MPI_Send와 MPI_Recv를 사용한 워크로드 분배 및 결과 수집을 위한 마스터/워커 패턴으로 변환한다.
- 정적 및 동적 워크로드 분배 전략을 모두 지원하며, 로드 불균형이 감지될 경우 동적 분배를 사용한다.
- 데이터 분배를 위해 배열 전체를 필요할 경우에만 전송하며, 특히 마지막 워커가 쓰기 작업을 수행할 때에만 해당한다.
- 최종화 단계에서는 비병렬 코드를 마스터에 할당하고 MPI_Finalize를 삽입하여 적절한 정리 보장을 한다.
실험 결과
연구 질문
- RQ1소스 투 소스 컴파일러가 OpenMP 병렬 루프를 분산 메모리 환경에서 실행 가능한 동등한 MPI 코드로 자동으로 정확하게 변환할 수 있는가?
- RQ2자동으로 생성된 MPI 코드가 공유 메모리 시스템에서 원래 OpenMP 버전과 비교해 성능을 유지하거나 향상시키는가?
- RQ3생성된 MPI 코드가 클러스터 환경에서 대규모 코어 수에 걸쳐 효과적으로 확장 가능한가?
- RQ464코어 환경에서 생성된 코드의 성능이 순차 및 원래 OpenMP 실행 구현과 비교해 어떻게 되는가?
- RQ5가독성과 구조가 유지됨을 감안할 때, 전문가가 생성된 코드를 얼마나 더 최적화할 수 있는가?
주요 결과
- OMP2MPI 도구는 공유 메모리 시스템을 초월해 분산 메모리 시스템, 대규모 HPC 클러스터 및 실험용 다수코어 플랫폼에서 이식 가능한 정확한 실행 가능한 MPI 코드로 OpenMP 프로그램을 성공적으로 변환한다.
- 생성된 MPI 코드는 원래 OpenMP 버전보다 더 뛰어난 확장성을 보이며, 순차 기준 64코어에서 20배 이상의 스피드업을 기록한다.
- 평균적으로 생성된 MPI 코드는 원래 OpenMP 버전을 능가하며, 일부 경우에서 MPI가 공유 메모리 시스템에서도 OpenMP보다 더 효율적일 수 있음을 보여준다.
- 변환은 의미 손실 없이 구성에 따라 정확하며, 감소 문구의 적절한 초기화 및 누적 처리를 포함한 주요 OpenMP 기능을 모두 지원한다.
- 정적 및 동적 워크로드 분배를 모두 지원하며, 동적 분배 전략은 비균형 또는 불규칙한 계산에서 로드 밸런싱을 향상시킨다.
- 결과로 생성된 코드는 가독성이 뛰어나 후속 수동 최적화에 적합하여 성능 튜닝의 실용적인 기반으로 활용 가능하다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.