OpenMP란 무엇인가?
OpenMP는 C, C++, 포트란(FORTRAN)으로 작성된 프로그램을 위한 컴파일러 지시문(compiler directive) 집합이자 API로, 공유 메모리(shared-memory) 환경에서의 병렬 프로그래밍을 지원합니다.
OpenMP는 동시에 실행될 수 있는 코드 블록을 '병렬 영역(parallel region)'으로 정의합니다. 애플리케이션 개발자는 코드 내 병렬 영역에 컴파일러 지시문을 삽입하고, 이 지시문은 OpenMP 런타임 라이브러리에 해당 영역을 병렬로 실행하도록 지시합니다.
다음 C 언어 예제는 printf() 문을 포함한 병렬 영역 위에 컴파일러 지시문이 삽입된 모습을 보여줍니다.
#include <omp.h>
#include <stdio.h>
int main(int argc, char *argv[]){
/* 순차적 코드 */
#pragma omp parallel{
printf("I am a parallel region.");
}
/* 순차적 코드 */
return 0;
}
OpenMP가 다음 지시문을 만나면,
#pragma omp parallel
스레드 생성 방식
시스템의 처리 코어(processing core) 수만큼 스레드를 자동으로 생성합니다. 즉, 듀얼 코어 시스템에서는 두 개의 스레드가, 쿼드 코어 시스템에서는 네 개의 스레드가 생성되는 방식입니다. 이후 모든 스레드가 병렬 영역을 동시에 실행하며, 각 스레드는 병렬 영역을 빠져나오면 종료됩니다.
이 외에도 OpenMP는 루프(loop) 병렬화를 포함하여 코드 영역을 병렬로 실행하기 위한 다양한 추가 지시문을 제공합니다.
병렬화 수준의 유연성
병렬화 지시문을 제공하는 것 외에도, OpenMP는 개발자가 여러 단계의 병렬화 수준 중에서 선택할 수 있도록 지원합니다. 예를 들어, 스레드 수를 직접 수동으로 설정할 수 있습니다. 또한 데이터가 여러 스레드 간에 공유(shared)되는지, 아니면 특정 스레드 전용(private)인지 명확하게 지정할 수 있습니다.
OpenMP는 리눅스(Linux), 윈도우(Windows), 맥 OS X(Mac OS X) 시스템을 위한 다양한 오픈소스 및 상용 컴파일러에서 사용할 수 있습니다.