OpenMP

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
OpenMP
원저자 OpenMP 아키텍처 리뷰 보드[1]
개발자 OpenMP 아키텍처 리뷰 보드[2]
최근 버전 4.0[3] / 2013년 07월 23일, 375일 경과
프로그래밍 언어 C, C++, 포트란
운영 체제 크로스 플랫폼
플랫폼 크로스 플랫폼
종류 API
라이선스 다양함[4]
웹사이트 openmp.org

OpenMP(Open Multi-Processing, 오픈MP)는 공유 메모리 다중 처리 프로그래밍 API로, C, C++, 포트란 언어와, 유닉스마이크로소프트 윈도 플랫폼을 비롯한 여러 플랫폼을 지원한다.

병렬 프로그래밍의 하이브리드 모델로 작성된 응용 프로그램은 OpenMP와 메시지 전달 인터페이스 (MPI)를 둘 다 사용하거나, 더 투명성 있는 방식으로 비공유 메모리 시스템을 위한 OpenMP 확장을 사용하여 컴퓨터 클러스터 상에서 구동할 수 있다.

역사[편집]

OpenMP 아키텍처 리뷰 보드(ARB)는 최초의 API 규격인 포트란 1.0용 OpenMP를 1997년 10월에 출판하였다. 나중에 C/C++ 표준을 공개하였는데, 2000년에 포트란 버전으로 2.0이 나온 다음 2002년에 C/C++ 규격으로 2.0 버전이 출시되었다. 버전 2.5부터는 C/C++/포트란 규격이 통합되어 2005년에 공개되었다.

버전 3.0은 2008년 5월에 출시되었으며 현재 API 규격 가운데 최신이다.[5]

주요 요소[편집]

OpenMP의 구조.

예제 프로그램[편집]

Hello World[편집]

C[편집]

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

C++[편집]

#include <omp.h>
#include <iostream>
#include <sstream>
int main (int argc, char *argv[]) {
 int th_id, nthreads;
#pragma omp parallel private(th_id)
 {
  th_id = omp_get_thread_num();
  std::ostringstream ss;
  ss << "Hello World : 스레드 " << th_id << std::endl;
  std::cout << ss.str();
#pragma omp barrier
#pragma omp master
  {
   nthreads = omp_get_num_threads();
   std::cout << "모두 " << nthreads << "개의 스레드가 있습니다" << std::endl;
  }
 }
 return 0;
}

포트란 77[편집]

      PROGRAM HELLO
      INTEGER ID, NTHRDS
      INTEGER OMP_GET_THREAD_NUM, OMP_GET_NUM_THREADS
C$OMP PARALLEL PRIVATE(ID)
      ID = OMP_GET_THREAD_NUM()
      PRINT *, 'HELLO WORLD : 스레드', ID
C$OMP BARRIER
      IF ( ID .EQ. 0 ) THEN
        NTHRDS = OMP_GET_NUM_THREADS()
        PRINT *, '모두', NTHRDS, '개의 스레드가 있습니다'
      END IF
C$OMP END PARALLEL
      END

자유형 포트란 90[편집]

 program hello90
 use omp_lib
 integer:: id, nthreads
   !$omp parallel private(id)
   id = omp_get_thread_num()
   write (*,*) 'Hello World : 스레드', id
   !$omp barrier
   if ( id == 0 ) then
     nthreads = omp_get_num_threads()
     write (*,*) '모두', nthreads, '개의 스레드가 있습니다'
   end if
   !$omp end parallel
 end program

같이 보기[편집]

주석[편집]

  1. http://openmp.org/wp/about-openmp/ About the OpenMP ARB and OpenMP.org
  2. http://openmp.org/wp/about-openmp/ About the OpenMP ARB and OpenMP.org
  3. http://openmp.org/wp/2011/07/openmp-31-specification-released/ OpenMP 3.1 Specification Released
  4. http://openmp.org/wp/openmp-compilers/ OpenMP Compilers
  5. OpenMP 3.0 규격

바깥 고리[편집]