멀티 스레드의 목적이 뭘까?
병렬 처리 프로그래밍인데 실제로 병렬 처리 프로그래밍이 어떻게 일어나는지 제대로 모르는 것 같아서 공부해 보았음
반면, 하둡 클러스터에 사용되는 맵리듀스는 빅데이터 처리에 적합하게 설계된 모델로써, 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++을 이용하여 작성됩니다.