| <colcolor=#fff> | |
| <colbgcolor=#00737d> 관리 | OpenMP ARB |
| 최초 공개 | 1997년 10월 (Fortran), 1998년 10월 (C/C++) |
| 최신 버전 | 6.0 (2024년 11월) |
| 지원 언어 | C, C++, Fortran |
| 플랫폼 | Windows, Linux, macOS 등 |
| 링크 | |
1. 개요
OpenMP는 공유 메모리 환경에서의 병렬 프로그래밍을 위한 API 표준이다. 컴파일러 지시어(directive), 라이브러리 함수, 환경 변수로 구성되며, C, C++, Fortran을 지원한다.기존 순차 코드에 omp 지시어를 삽입하는 것만으로 병렬화가 가능하여, 멀티스레드 프로그래밍의 진입 장벽을 크게 낮춘 것으로 평가받는다.
2. 특징
3. 역사
1990년대 중반, 각 하드웨어 제조사들이 자체적인 병렬화 문법을 사용하면서 코드의 이식성이 심각한 문제로 대두되었다. 이를 해결하기 위해 인텔, AMD, IBM, HP, Sun Microsystems 등 주요 하드웨어·소프트웨어 업체들이 모여 OpenMP Architecture Review Board(ARB)를 결성했다.1997년 10월 Fortran용 1.0 표준이 최초로 발표되었고, 이듬해인 1998년 10월에 C/C++용 1.0 표준이 발표되었다.
4. 컴파일러 지원
OpenMP는 일반 라이브러리만으로 구현되는 기능이 아니라 컴파일러 지원이 필요하다. 컴파일러가 OpenMP 지시어를 해석해 병렬 실행 코드를 생성하고, 실행 시에는 각 컴파일러가 제공하는 OpenMP 런타임 라이브러리가 스레드 관리와 스케줄링을 담당한다.대부분의 C/C++ 컴파일러에서는 별도 옵션을 주어 OpenMP를 활성화한다. GCC와 Clang 계열에서는 주로
-fopenmp, MSVC에서는 /openmp, NVIDIA HPC SDK에서는 -mp 또는 GPU offload용 -mp=gpu 같은 옵션을 사용한다.| 컴파일러 | 활성화 옵션 | 비고 |
| GCC | -fopenmp | libgomp 런타임 사용. |
| LLVM/Clang | -fopenmp | libomp 런타임 사용. |
| Intel oneAPI DPC++/C++ Compiler | -qopenmp 등 | |
| MSVC | /openmp | |
| NVIDIA HPC SDK | -mp, -mp=gpu |