개요
OpenMP(Open Multi-Processing)는 공유 메모리 다중 처리 프로그래밍 API로, C, C++, 포트란 언어와, 유닉스 및 마이크로소프트 윈도우 플랫폼을 비롯한 여러 플랫폼을 지원한다.
병렬 프로그래밍의 하이브리드 모델로 작성된 응용 프로그램은 OpenMP와 메시지 전달 인터페이스 (MPI)를 둘 다 사용하거나, 더 투명성 있는 방식으로 비공유 메모리 시스템을 위한 OpenMP 확장을 사용하여 컴퓨터 클러스터 상에서 구동할 수 있다.
사용법
OpenMP는 #progma 키워드를 이용하여 병렬화를 하게 된다. #progma는 컴파일러에게 특정한 지시 사항을 전달하는 것인데, #progma를 통해서 loop를 병렬적으로 처리하게 된다. 또한 Section을 통해서 소스 코드를 병렬화 시킬 수도 있다.
Loop 병렬화
#progma omp parallel for
for (i=1; i < n; i++)
/* i is private by default */
/* Compiler notice that this can be parallel */
Do Something
Section 병렬화
예시
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]) {
int th_id, nthreads;
#pragma omp parallel private(th_id)
{
th_id = omp_get_thread_num();
printf("Hello World : 스레드 %d\n", th_id);
#pragma omp barrier
if ( th_id == 0 ) {
nthreads = omp_get_num_threads();
printf("모두 %d 개의 스레드가 있습니다\n",nthreads);
}
}
return EXIT_SUCCESS;
}