병렬 처리 프로그래밍, 공유메모리와 메시징

dropKick·2020년 7월 30일
0

병렬 처리 프로그래밍

멀티 스레드의 목적이 뭘까?
병렬 처리 프로그래밍인데 실제로 병렬 처리 프로그래밍이 어떻게 일어나는지 제대로 모르는 것 같아서 공부해 보았음

공유 메모리

  • 공유 메모리 병렬프로그래밍 모델은 SMP나 CMP 등의 공유 메모리 시스템 구조에 적합한 방식으로써 다수의 코어(멀티코어인 경우)의 협력을 통해 병렬화를 수행하는 모델
  • 흔히 말하는 멀티스레드 병렬 프로그래밍이 이 방식에 속한다
    여러 개의 스레드를 생성한 후 다수의 코어로 분배하여 병렬처리를 수행하는데 스레드 생성 및 처리를 위해 일반적으로 유닉스 내 posix계열은 pthread를 사용한다
    물론 윈도우도 지원한다
  • 하지만 pthread는 스레드 생성을 지원하는 API이기 때문에 생성부터 관리, 동기화 등 모두 제어해주어야 한다
  • 따라서 pthread를 이용하여 별도의 스레드를 생성하기보다 OpenMP같은 병렬 프로그래밍 API를 이용하여 병렬 프로그래밍을 한다고 한다

메시징

  • 공유 메모리 구조가 아닌 각 메모리 블럭이 분리되어 있는 경우에는 각 프로세스나 스레드 간 통신이 필요하다
  • 사실 프로세스 말고 스레드도 각 스레드 레지스터는 분리되어 있어 컨텍스트 스위칭에 의한 메시지 전달이 이루어진다
  • MPI (Message Passing Interface)는 분산 메모리 시스템 구조에 사용되는 병렬 프로그래밍 모델이다.
    노드 간에 서로 네트워크를 통해 메시지를 주고받는 형태로 정보를 공유하기 대문에 네트워크 상의 통신 속도가 성능의 매우 중요한 요소로 작용하며, 고속의 연산처리를 필요로 하는 슈퍼컴퓨터에 많이 사용됩니다

반면, 하둡 클러스터에 사용되는 맵리듀스는 빅데이터 처리에 적합하게 설계된 모델로써, HDFS라는 분산 파일 시스템을 사용하여 대규모의 데이터를 저장하고 이를 처리하는 메커니즘을 가지고 있습니다. 또한 특정 노드에 장애가 발생되더라도 다른 노드를 통하여 중단 없이 작업을 진행할 수 있는 특징을 가지고 있습니다.

가속기

지금까지 살펴본 모델은 모두 범용 CPU를 활용한 병렬 프로그래밍 모델입니다. 하지만 범용 CPU가 아닌 특정 연산에 특화된 가속기를 활용하여 병렬화하는 모델을 가속기 병렬 프로그래밍 모델이라고 합니다. 지난 3편에서도 소개 드렸다시피, 이러한 가속기를 활용한 연산처리 방식을 이기종 컴퓨팅이라고 하며, 단순하고 반복적인 수치계산에 최적화된 CPU, DSP, GPU등을 활용하는 프로그래밍 모델이라고 볼 수 있습니다. 가속기 프로그래밍 모델은 수치계산에 최적화되어 있으므로 데이터 병렬화에 주로 사용됩니다.

현재 병렬컴퓨팅 시장에서 가장 각광받고 있는 것이 바로 GPU를 활용한 GPGPU 기술인데, GPGPU를 지원하기 위한 다양한 프레임워크들이 시장에 나와있는 상태입니다. NVIDA에서 만든 CUDA가 가장 대표적이며, CUDA를 추상화해서 손쉽게 프로그래밍 할 수 있는 OpenACC라는 것도 있습니다.

반면, OpenGL로 유명한 크로노스 그룹에서는 OpenCL(Open Computing Language)이라는 병렬 프로그래밍 프레임워크를 만들어 내놓았습니다. OpenCL은 GPU뿐 아니라 CPU, DSP, Cell 등 다양한 이기종 컴퓨팅 환경에서 사용할 수 있도록 표준화된 환경을 제공하고 있습니다.

참고 꼭 보기

OpneCL은 크게 OpenCL 컴파일러와 OpenCL 런타임 라이브러리로 구성되어 있습니다. 연산용 프로세서(가속기)에서 동작하는 프로그램은 OpenCL C언어로 작성하며, 이를 컴파일하여 바이너리 코드로 변환하는 도구가 바로 OpenCL 컴파일러입니다. 또한 CPU에서는 연산 프로세서용 프로그램을 실행하거나 관리하기 위한 제어용 프로그램도 개발해야 하는데, 이는 OpenCL 런타임 라이브러리를 통해 C나 C++을 이용하여 작성됩니다.

0개의 댓글