"A survey of parallel programming models and tools in the multi and many-core era."를 읽고

"A survey of parallel programming models and tools in the multi and many-core era."를 읽고

이 논문은 <<Diaz, Javier, Camelia Munoz-Caro, and Alfonso Nino. "A survey of parallel programming models and tools in the multi and many-core era." IEEE Transactions on parallel and distributed systems 23.8 (2012): 1369-1386.>>을 읽고 정리한 글 입니다. 이 논문은 병렬 처리에 방식에 대해서 가볍게 정리하기 좋은 논문입니다.

요약

고성능 컴퓨팅(HPC)는 연산 문제를 풀기 위하여 슈퍼컴퓨터 및 컴퓨터 클러스터를 사용하는 것을 말합니다. 최근에는 테라플롭스(FLOPS, FLoating point OPerations per Second) 이상의 규모를 HPC에 사용되는 컴퓨터를 구분하는 기준으로 사용됩니다. 다중 프로세서(하나의 시스템에 2개 이상의 프로세서를 장착) 및 멀티 코어(CPU 모듈에 여러개의 프로세서를 장착)는 병렬 처리를 지원하는 두 개의 광범위한 병렬 컴퓨터 입니다. 대칭형 다중 처리(Clustered Symmetric Multiprocessors, SMP)는 대규모 어플리케이션을 위한 가장 유익한 방법입니다. 병렬 처리의 주된 역할은 컴퓨터 응용 프로그램의 성능을 향상시키는 것입니다. 하이 엔드 시스템(High-end system)의 단일 프로세서 성능은 여러 개의 저비용 및 범용 마이크로 프로세서를 사용하는 시스템에서 병렬로 구현할 때 주목할 만한 이점을 누릴 수 있습니다.

대칭형 다중 처리(SMP, Clustered Symmetric Multiprocessors) 노드의 클러스터가 병렬 프로그래밍 패러다임을 지원하기 때문에 병렬 컴퓨터의 필요성이 높아졌다. MPI(Message Passing Interface)와 OpenMP(Open Multi-Processing)는 병렬 프로그래밍의 최근 기술입니다. 이 글에서는 멀티 프로세서 및 멀티 코어 시스템에서 사용 할 수 있는 병렬 프로그래밍의 패러다임에 대해 살펴 보았습니다.

1. Introduction

MPI가 분산 메모리(distributed memory) 개념을 제시하지만, OpenMP는 공유 메모리(shared memory) 시스템으로 연결됩니다. 병렬 환경에서 MPI, OpenMP 그리고 하이브리드(OpenMP + MPI)의 장점과 단점이 있습니다. 이 논문에선 OpenMP, MPI 및 하이브리드 프로그래밍 모델의 성능과 공유 및 분산 메모리 접근 방식뿐만 아니라 현재의 이기종 병렬 프로그래밍 모델을 분석하는 것을 목표로 합니다.

마이크로 프로세서 기반의 단일 처리 장치는 제한된 클록 주파수, 각 클럭주기 동안 수행되는 작업의 수와 함께 에너지 소비 및 발열 문제에 직면해 있습니다. 멀티 코어 아키텍처는 동일한 처리 장치에 대한 성능 및 에너지 효율성을 향상시킵니다[<<Sutter, Herb, and James Larus. "Software and the concurrency revolution." Queue 3.7 (2005): 54-62.>>].

최근 순차 프로그래밍(sequential programming)을 사용하는 단일 마이크로 프로세서에 하나 이상의 코어(2~10 개 정도)를 통합 하여 사용 할 수 있는 방식을 멀티 코어 접근 방식으로 분류했습니다. 또 하나는 병렬 프로그래밍에 기본적으로 사용되는 많은(가능한 많은) 수의 코어로 구축 된 많은 코어 접근 방식입니다.

분명히, 패러다임의 이러한 변화는 소프트웨어 개발 공동체에 커다란 영향을 미쳤을 것이다. 병렬 컴퓨팅은 많은 곳에서 사용되고 있습니다. 컴퓨터 산업은 병렬 프로그램을 최고 속도로 작동시키는 하드웨어를 받아들일 준비가 되어 있습니다[<<Sutter, Herb, and James Larus. "Software and the concurrency revolution." Queue 3.7 (2005): 54-62.>>]. 이것은 동시 작업의 고유한 복잡성, 이식 가능한 알고리즘의 부재, 표준화된 환경 및 소프트웨어 개발 툴킷[논문에 참고문헌이 없음]에 크게 기인 합니다. 순차 프로그래밍은 클록 주파수의 지연으로 인해 어려움에 직면해 있습니다.

여러 코어를 사용하는 동시성은 지연문제를 극복 할 수 있지만, 병렬 코어를 사용하는 멀티 코어 프로세서는 많지 않습니다. [<<Kasim, Henry, et al. "Survey on parallel programming model." IFIP International Conference on Network and Parallel Computing. Springer, Berlin, Heidelberg, 2008.>>]. 응용 프로그램 측면에서 확장성은 프로세서 수에 따라 자동으로 조정될 수 있습니다. 이와 관련하여 병렬 처리를 수행하는 두 가지 접근법 (1) 자동 병렬 처리 (2) 병렬 프로그래밍[<<B. Chapman, G. Jost, R. van der Pas, Using, OpenMP: Portable Shared Memory Parallel Programming. MIT Press, 2007.>>]이 있습니다.

  • 자동 병렬 처리, 명령 수준 병렬 처리 (ILP) 또는 병렬 컴파일러를 사용하면 순차 프로그램이 자동으로 병렬 처리됩니다. 수정하지 않은 실제 프로그램은 이러한 ILP 또는 병렬 컴파일러를 사용하여 다시 컴파일되므로 코드 자동 변환의 복잡성으로 인해 병렬 처리량이 매우 적다는 제한이 있습니다.

  • 병렬 프로그래밍 접근 방식, 전체 작업을 작은 작업으로 분할하여 병렬 처리를 활용하도록 응용 프로그램을 전환 한 후이 작업을 코어에 매핑합니다. 높은 병렬 처리 기능을 제공합니다.

    • Master/Worker - Master 프로세스는 Worker 프로세스 및 묶음을 설정합니다.
    • Loop Parallelism - 하나 이상의 루프가 서로 다른 반복을 동시에 실행합니다.
    • FORK/JOIN - 단일의 주 프로세스는 [<<OpenMP. “API Specification for Parallel Programming”,https://www.openmp.org/specifications/. Oct. 2011.>>] 동시에 실행되는 서로 다른 쓰레드를 사용하여 실행합니다.

병렬 시스템에는 두 가지 고전적인 범주가 있습니다. (1) 공유 메모리(Shared Memory) (2) 분산 메모리(Distributed Memory) [<<OpenMP. “API Specification for Parallel Programming”,https://www.openmp.org/specifications/. Oct. 2011.>>].

  • 공유 메모리 - 모든 프로세서가 단일 메모리 주소 공간을 사용합니다. 오늘날 멀티 코어 프로세서는 공유 메모리를 사용합니다.
  • 분산 메모리 - 프로세서에 메모리 블록이 있는 것이 분산 메모리 모델입니다. 이 모델은 네트워크 또는 컴퓨터 그리드에서 작동합니다.

하이브리드는 분산 메모리 시스템과 공유 할 수 있습니다. 기존의 병렬 프로그래밍에는 순수 공유 메모리 모델이 포함됩니다. 일반적으로 OpenMP API, 공유 메모리 아키텍처 또는 분산 메모리 시스템[<<Diaz, Javier, Camelia Munoz-Caro, and Alfonso Nino. "A survey of parallel programming models and tools in the multi and many-core era." IEEE Transactions on parallel and distributed systems 23.8 (2012): 1369-1386.>>]에서 MPI API[<<Kendre, Sandip V., and D. B. Kulkarni. "Optimized convex hull with mixed (MPI and OpenMP) programming on HPC." International Journal of Computer Applications 1.5 (2010): 80-84.>>]를 사용하는 순수 메시지 전달 모델을 사용합니다.

병렬 처리를 수행하는 기존의 접근법은 순수한 공유 메모리 모델을 포함한다. 보통 공유 메모리 아키텍처에서 OpenMP API를 사용합니다. 이 백서에서는 오늘날 사용되는 병렬 프로그래밍 모델을 분류하여 고성능 컴퓨팅 (HPC)의 병렬 프로그래밍 모델을 부활시킵니다.

2.1 병렬 프로그래밍 모델의 분류

병렬 처리를 수행하는 것은 하드웨어의 영역과 관련이 없으므로 오늘날 많은 프로세서가 병렬 처리를 달성 할 수 있습니다. 이는 통신 및 계산 모델에서 최대 효율 및 적절한 균형을 갖는 병렬 프로그램을 생성 할 수 있는 유연성을 제공합니다.

멀티 코어 시스템에서 일반적인 목적의 계산용 GPU는 이기종 병렬 프로그래밍(HPP) 모델을 만듭니다. 멀티 코어 아키텍처에 따라 다양한 병렬 프로그래밍 모델이 하이브리드 병렬 프로그래밍 모델이라고하는 하이브리드 모델로 이어집니다.

기존의 프로그래밍 방식에서는 분산 메모리를 위한 공유 메모리와 MPI를 위한 OpenMP , 즉 고전적 또는 순수 병렬 모델을 사용할 수 있습니다. 새로운 프로세서 아키텍처 멀티 코어 CPU 및 많은 코어 GPU를 사용하여 이기종 병렬 프로그래밍 모델을 제공하고 전역 메모리 공간을 사용하는 분산 환경에서 분할 된 글로벌 주소 공간(PGA) 모델을 사용할 수 있습니다. 따라서 사용 가능한 아키텍처는 GPU 모델을 사용하는 하이브리드 공유 메모리를 요구합니다.

3. Pure Parallel Programming Language Models

공유 또는 분산 메모리 접근법, 공유 메모리 OpenMP 및 분산 메모리를 사용하는 병렬 프로그래밍 모델의 분류 메시지 전달 모델 (Message Passing Model, MPI)은 메시지 전달 연산[<<Sottile, Matthew J., Timothy G. Mattson, and Craig E. Rasmussen. Introduction to concurrency in programming languages. Chapman and Hall/CRC, 2009.>>, <<Gropp, William D., et al. Using MPI: portable parallel programming with the message-passing interface. Vol. 1. MIT press, 1999.>>, <<Gropp, William, Rajeev Thakur, and Ewing Lusk. Using MPI-2: Advanced features of the message passing interface. MIT press, 1999.>>, <<Kumar, Vipin, et al. Introduction to parallel computing: design and analysis of algorithms. Vol. 400. Redwood City: Benjamin/Cummings, 1994.>>]의 작업을 위한 사양입니다.

3.1 공유 메모리 OpenMP

컴파일러 지시문, 라이브러리 루틴 및 환경 변수를 기반으로하여 공유 메모리 시스템에서 병렬 처리를 수행하는 데 사용되며 업계 표준 지시문이 일부 명령어와 함께 병렬로 실행되는 컴파일러를 안내합니다. 이 모델은 FORK/JOIN을 사용합니다.

특징

  • OpenMP는 공유 메모리 시스템에서만 실행됩니다.
  • 휴대용이 아닙니다.
  • 컴파일러가 코드를 병렬 처리하는데 도움이되는 사용자 지정문을 지원합니다.
  • 각 스레드는 동일한 전역 메모리를 봅니다.
  • 암시적 메시징.
  • 병렬 계산을 위해 FORK/JOIN 모델을 사용하십시오.

단점

  • OpenMP는 공유 메모리에서만 작동합니다.
  • 확장 성이 제한되어 속도가 많이 떨어집니다.
  • 스레드는 비 결정적 순서로 실행됩니다.
  • OpenMP는 명시적인 동기화가 필요합니다.

3.2 MPI

명시적 제어가 있는 분산 메모리 모델에서 MPI는 병렬 처리를 제공합니다. 모든 프로세스는 로컬 메모리와 함께 읽기 및 쓰기 작업과 관련됩니다. 적절한 서브 루틴 호출은 각 프로세스의 데이터를 로컬 메모리에서 복사하는 데 사용됩니다. MPI는 함수 및 프로 시저 세트로 정의됩니다.

특징

  • MPI는 분산 및 공유 메모리 모델에서 실행됩니다.
  • 휴대용.
  • 특히 거친 그레인 병렬 처리에 적합합니다.
  • 각 프로세스에는 자체 메모리가 있습니다.
  • 명시적 메시징.

단점

  • MPI 통신에서는 종종 큰 오버 헤드가 발생하며 최소화 해야 합니다.
  • 전역에서 작동하기 때문에 실행비용이 높습니다.
  • 코드를 대폭 변경해야하는 경우가 있습니다.
  • 직렬 및 병렬 코드 간의 전송이 어렵습니다.
  • MPI에서 동적로드 밸런싱은 종종 어렵습니다[<<Pacheco, Peter S. Parallel programming with MPI. Morgan Kaufmann, 1997.>>].

3.3 하이브리드 (OpenMP + MPI)

하이브리드 합리적인 모델은 MPI / OpenMP의 장점을 모두 가지고 있습니다. 작업 배치의 Explosate 분해로 간단하고 미세한 평행도를 달성합니다. MPI 및 OpenMP는 모두 업계 표준이므로 SMP 클러스터에서 이식성을 활용합니다.

특징

  • 현재 하드웨어 추세와 일치시킵니다.
  • MPI (coarse-grained) 및 Fine-grained (OpenMP)의 두 가지 수준의 병렬 처리를 지원합니다.
  • MPI (확장 성)의 한계는 OpenMP를 추가함으로써 극복됩니다.
  • 로드 밸런싱을 위해 OpenMP에서 동기화를 얻기 위해 다른 스레드를 할당하지 않습니다.

단점

  • 혼합 모드 구현으로 오버 헤드 프로그래밍.
  • 모든 병렬 프로그램에 대한 해결책은 아니지만 특정 알고리즘에 알 맞습니다.

4. 결론

이 설문 조사 작업은 현대 병렬 프로그래밍 모델을 기반으로합니다. 이 연구에서 사용 가능한 다중 코어 및 효율적인 병렬성을 갖춘 많은 핵심 모델이 컴퓨터 과학 교과 과정을 추동 할 수있는 영역을 제공한다는 것은 분명합니다.

이번 연구에서 MPI 즉 분산 메모리 모델은 MPI 라이브러리 표준을 사용하여 지난 10 년 동안 분산 메모리 병렬 프로그래밍 접근 방식이 까다로운 이유 중 하나입니다. 또한 OpenMP가 공유 메모리 모델을 사용하여 HPC에서 지속적으로 발전하고 있음을 관찰했습니다. 분산 메모리를위한 MPI와 공유 메모리를위한 OpenMP의 모든 다른 접근 방식 중에서 유용합니다.