OpenMP
위키백과, 우리 모두의 백과사전.
| 원저자 | OpenMP 아키텍처 리뷰 보드[1] |
|---|---|
| 개발자 | OpenMP 아키텍처 리뷰 보드[2] |
| 최근 버전 | 3.1[3] / 2011년 07월 09일 |
| 프로그래밍 언어 | 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]
주요 요소 [편집]
예제 프로그램 [편집]
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
주석 [편집]
- ↑ http://openmp.org/wp/about-openmp/ About the OpenMP ARB and OpenMP.org
- ↑ http://openmp.org/wp/about-openmp/ About the OpenMP ARB and OpenMP.org
- ↑ http://openmp.org/wp/2011/07/openmp-31-specification-released/ OpenMP 3.1 Specification Released
- ↑ http://openmp.org/wp/openmp-compilers/ OpenMP Compilers
- ↑ OpenMP 3.0 규격
같이 보기 [편집]
바깥 고리 [편집]
- (영어) OpenMP 공식 웹사이트
|
병렬 컴퓨팅 |
|
|---|---|
| 일반 | |
| 병렬화 수준 | |
| 스레드 | |
| 이론 | |
| 구성 요소 | |
| 조정 | |
| 프로그래밍 | |
| 하드웨어 | |
| API |
POSIX 스레드 · OpenMP · PVM · MPI · UPC · 인텔 스레딩 빌딩 블록 · Boost.Thread · 전역 배열 · Charm++ · Cilk · Co-array Fortran · OpenCL · CUDA
|
| 문제 |
처치 곤란 병렬 문제 · Grand Challenge · Software lockout · 확장성 · 경쟁 상태 · 교착 상태 · 라이브락 · 결정론적 알고리즘 · Parallel slowdown
|