OpenMP

Ahn9807 (토론 | 기여)님의 2023년 2월 13일 (월) 02:12 판 (새 문서: 분류: 스레드/프로세스 분류: 시스템 최적화 분류: 오픈소스 프로젝트 분류: 동시성 프로그래밍 == 개요 == OpenMP(Open Multi-Processing)는 공유 메모리 다중 처리 프로그래밍 API로, C, C++, 포트란 언어와, 유닉스 및 마이크로소프트 윈도우 플랫폼을 비롯한 여러 플랫폼을 지원한다. 병렬 프로그래밍의 하이브리드 모델로 작성된 응용 프로그램은...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


개요

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;
 }