병렬 프로그래밍 모델

Parallel programming model

컴퓨팅에서 병렬 프로그래밍 모델은 병렬 컴퓨터 아키텍처추상화이며, 이를 통해 알고리즘과 그 구성을 프로그램에서 표현하는 것이 편리합니다.프로그래밍 모델의 가치는 그 범용성, 즉 다양한 아키텍처에 대해 다양한 문제를 얼마나 잘 표현할 수 있는지, 그리고 성능, 즉 컴파일된 프로그램을 얼마나 효율적으로 [1]실행할 수 있는지에 따라 판단할 수 있습니다.병렬 프로그래밍 모델의 구현은 순차적 언어, 기존 언어의 확장 또는 완전히 새로운 언어로 호출되는 라이브러리의 형태를 취할 수 있습니다.

특정 프로그래밍 모델에 대한 합의는 모델을 지원하면서 서로 다른 병렬 컴퓨터를 구축함으로써 소프트웨어의 이식성을 촉진하기 때문에 중요합니다.이러한 의미에서 프로그래밍 모델은 하드웨어와 소프트웨어 [2]간의 브리징이라고 불립니다.

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

병렬 프로그래밍 모델의 분류는 크게 프로세스 상호작용과 문제 [3][4][5]분해의 두 영역으로 나눌 수 있습니다.

프로세스 상호 작용

프로세스 상호작용은 병렬 프로세스가 서로 통신할 수 있는 메커니즘과 관련이 있습니다.가장 일반적인 형태의 상호작용은 공유 메모리와 메시지 전달이지만 상호작용은 암묵적일 수도 있습니다(프로그래머에게는 보이지 않습니다).

공유 메모리

공유 메모리는 프로세스 간에 데이터를 효율적으로 전달하는 방법입니다.공유 메모리 모델에서는 병렬 프로세스가 글로벌주소 공간을 공유하여 비동기적으로 읽고 씁니다.비동기 동시접속은 레이스 상태를 초래할 수 있으며 잠금, 세마포, 모니터 등의 메커니즘을 사용하여 이를 방지할 수 있습니다.기존의 멀티코어 프로세서는 공유 메모리를 직접 지원하며, Cilk, OpenMP, 스레딩 빌딩 블록 등 많은 병렬 프로그래밍 언어 및 라이브러리가 이를 이용하도록 설계되어 있습니다.

메시지 전달

메시지 전달 모델에서 병렬 프로세스는 서로 메시지를 전달함으로써 데이터를 교환합니다.이러한 통신에는, 수신자가 준비되기 전에 메시지를 송신할 수 있는 비동기 통신이나, 수신자가 준비가 되어 있을 필요가 있는 동기 통신을 사용할 수 있습니다.메시지 전달의 CSP(Communicating sequential processes) 공식화는 프로세스를 연결하기 위해 동기식 통신 채널을 사용하여 Occam, Limbo Go와 같은 중요한 언어로 이어졌습니다.반면 Actor 모델은 비동기 메시지 전달을 사용하며 D, Scala 및 SASA와 같은 언어 설계에 사용되어 왔습니다.

분할된 글로벌 주소 공간

Partitioned Global Address Space(PGAS) 모델은 공유 메모리와 메시지 전달 사이의 중간 접지를 제공합니다.PGAS는 논리적으로 분할된 글로벌 메모리주소 공간 추상화를 제공합니다.여기서는 각 프로세스에 대해 일부가 로컬입니다.병렬 프로세스는 공유 메모리 모델을 연상시키는 방식으로 글로벌 주소 공간에서 비동기적으로 작업(예: 읽기 및 쓰기)을 수행함으로써 통신합니다.그러나 글로벌 주소 공간을 의미론적으로 특정 프로세스에 대한 친화력을 가진 부분으로 분할함으로써 프로그래머가 참조의 인접성을 이용하여 분산 메모리 병렬 컴퓨터에서 효율적인 구현을 가능하게 합니다.PGAS는 Fortran 2008, Chapel, UPC++SHMEM과 같은 많은 병렬 프로그래밍 언어와 라이브러리에 의해 제공됩니다.

암묵적 상호작용

암묵적 모델에서는 프로세스 상호작용은 프로그래머에게 보이지 않으며 대신 컴파일러 및/또는 런타임은 이를 수행한다.암묵적 병렬의 두 가지 예는 높은 수준의 연산에서의 동시성이 규정되는 도메인 고유의 언어부작용의 부재가 비의존적 함수를 [6]병렬로 실행할 수 있도록 하기 때문에 기능적 프로그래밍 언어이다.그러나 이러한 병렬화는 관리가[7] 어려우며 Concurrent Haskell이나 Concurrent ML과 같은 기능적 언어는 병렬화를 명시적으로 올바르게 관리하기 위한 기능을 제공합니다.

문제 분해

병렬 프로그램은 동시에 실행되는 프로세스로 구성된다.문제 분해는 구성 프로세스가 [8][9]공식화되는 방식과 관련이 있습니다.

태스크 병렬 처리

태스크 병렬 모델은 프로세스 또는 실행 스레드에 초점을 맞춥니다.이러한 과정은 종종 행동적으로 구별되기 때문에 의사소통의 필요성이 강조됩니다.태스크 병렬화는 메시지 전달 통신을 표현하는 자연스러운 방법입니다.Flynn의 분류법에서 태스크 병렬화는 일반적으로 MIMD/MPMD 또는 MISD로 분류됩니다.

data 병렬화

데이터 병렬 모델은 데이터 세트(일반적으로 정기적으로 구성된 어레이)에 대한 작업을 수행하는 데 중점을 둡니다.작업 집합은 이 데이터에 대해 작동하지만 분리된 파티션에서 독립적으로 작동합니다.Flynn 분류법에서 데이터 병렬화는 일반적으로 MIMD/SPMD 또는 SIMD로 분류됩니다.

암묵적 병렬화

암묵적 프로세스 상호작용과 마찬가지로, 병렬의 암묵적 모델은 컴파일러, 런타임 또는 하드웨어가 책임을 지기 때문에 프로그래머에게 아무것도 드러내지 않는다.예를 들어 컴파일러에서 자동 병렬화는 시퀀셜 코드를 병렬 코드로 변환하는 과정이며, 컴퓨터 아키텍처에서 슈퍼스칼라 실행은 명령 수준의 병렬 처리를 수행하기 위해 이용되는 메커니즘입니다.

용어.

병렬 프로그래밍 모델은 계산 모델과 밀접하게 관련되어 있습니다.병렬 계산 모델은 계산 프로세스의 비용을 분석하기 위해 사용되는 추상화이지만 하드웨어 및/또는 소프트웨어에서 효율적으로 구현될 수 있다는 점에서 반드시 실용적일 필요는 없다.이와는 대조적으로 프로그래밍 모델은 하드웨어 [10]및 소프트웨어 구현에 대한 실질적인 고려사항을 구체적으로 암시합니다.

병렬 프로그래밍 언어는 프로그래밍 모델의 하나 또는 조합을 기반으로 할 수 있습니다.예를 들어 고성능 Fortran은 공유 메모리 상호 작용 및 데이터 병렬 문제 분해를 기반으로 하며 Go는 공유 메모리 및 메시지 전달 상호 작용을 위한 메커니즘을 제공합니다.

병렬 프로그래밍 모델 예제

이름. 상호작용의 종류 분해의 종류 구현 예시
배우 모델 비동기 메시지 전달 작업 D, Erlang, Scala, SASA
벌크 동기 병렬 공유 메모리 작업 Apache Giraph, Apache Hama, BSPlib
순차 프로세스 전달 동기 메시지 전달 작업 Ada, Occam, VerilogCSP, Go
회선 메시지 전달 작업 Verilog, VHDL
데이터 흐름 메시지 전달 작업 Lustre, TensorFlow, Apache Flink
기능하다 메시지 전달 작업 동시 Haskell, 동시 ML
LogP 머신 동기 메시지 전달 지정되지 않음 없음.
병렬 랜덤 액세스 머신 공유 메모리 데이터. Cilk, CUDA, OpenMP, 스레드 빌딩 블록, XMTC
SPMD PGAS 분할된 글로벌 주소 공간 데이터. Fortran 2008, Unified Parallel C, UPC++, SHMEM
글로벌 뷰 태스크 병렬 처리 분할된 글로벌 주소 공간 작업 채플, X10

「 」를 참조해 주세요.

레퍼런스

  1. ^ Skillicorn, David B., "실용 병렬 계산을 위한 모델", 국제 병렬 프로그래밍 저널, 20.2 133–1991, https://www.ida.liu.se/~httpske55/https/httpsurvey.pdf.
  2. ^ Leslie G. Valiant, "병렬 계산을 위한 브리징 모델", ACM의 통신, 제33권, 제8호, 1990년 8월, 103-111페이지.
  3. ^ John E. Savage, 계산 모델:컴퓨팅의 힘 탐구, 2008, 제7장 (병렬계산), http://cs.brown.edu/ ~jes/book/Archived 2016-11-05
  4. ^ Ian Foster, 병렬 프로그램 설계 및 구축, 1995, 섹션 1.3, "병렬 프로그래밍 모델", http://www.mcs.anl.gov/~itf/dbpp/text/node9.199
  5. ^ Blaise Barney, 병렬 컴퓨팅 소개, "모델", 2015, Lawrence Livermore National Laboratory, https://computing.llnl.gov/tutorials/parallel_comp/ #모델
  6. ^ 해먼드, 케빈병렬 기능 프로그래밍:소개.병렬 기호 계산에 관한 국제 심포지엄, 페이지 46. 1994.
  7. ^ 맥버니, D.L., M.로난 슬립"ZAPP 아키텍처에 대한 트랜스푸터 기반 실험." PARLE 병렬 아키텍처 및 언어 유럽.스프링거 베를린 하이델베르크, 1987년
  8. ^ Ian Foster, 병렬 프로그램 설계 및 구축, 1995년, 섹션 2.2, "파티셔닝", http://www.mcs.anl.gov/~itf/dbpp/text/node16.124
  9. ^ Blaise Barney, 병렬 컴퓨팅 소개, "파티셔닝", 2015, Lawrence Livermore National Laboratory, https://computing.llnl.gov/tutorials/parallel_comp/ #Design Partitioning
  10. ^ Skillicorn, David B. 및 Dominoico Talia, 병렬 계산을 위한 모델과 언어, ACM Computing Surveies, 30.2 123–1998, https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf

추가 정보

  • Blaise Barney, Introduction to Parallel Computing, Lawrence Livermore National Laboratory
  • Murray I. Cole., Algorithmic Skeletons: Structured Management of Parallel Computation (PDF), University of Glasgow
  • J. Darlinton; M. Ghanem; H. W. To (1993), "Structured Parallel Programming", In Programming Models for Massively Parallel Computers. IEEE Computer Society Press: 160–169, doi:10.1109/PMMP.1993.315543, ISBN 0-8186-4900-3, S2CID 15265646
  • Ian Foster, Designing and Building Parallel Programs, Argonne National Laboratory