Giới thiệu
OpenMP (Open Multi-Processing) là bộ chỉ thị trình biên dịch và API cho C/C++/Fortran, hỗ trợ lập trình song song trên môi trường bộ nhớ chung (shared-memory).
Cơ chế hoạt động
- Nhà phát triển chèn chỉ thị
#pragma omp parallel vào vùng code có thể chạy song song - Thư viện runtime OpenMP tạo nhóm luồng (team of threads) và thực thi vùng đó song song
- Số luồng mặc định = số lõi CPU (có thể đặt thủ công)
- Hỗ trợ: song song hóa vòng lặp, đồng bộ, dữ liệu shared/private, reduction
Ví dụ cơ bản
#include <omp.h>
#include <stdio.h>
int main() {
/* Code tuần tự */
#pragma omp parallel
{
printf("I am a parallel region.\n");
}
/* Code tuần tự */
return 0;
}
Kết quả (ví dụ 4 lõi)
I am a parallel region. I am a parallel region. I am a parallel region. I am a parallel region.
Các chỉ thị phổ biến
| Chỉ thị | Mô tả |
|---|---|
| #pragma omp parallel | Tạo vùng song song |
| #pragma omp for | Song song hóa vòng lặp |
| #pragma omp critical | Vùng critical section |
| #pragma omp atomic | Thao tác nguyên tử |
| #pragma omp barrier | Rào cản đồng bộ |
| #pragma omp single | Chỉ 1 luồng thực thi |
Hỗ trợ trình biên dịch
- GCC:
-fopenmp - Clang:
-fopenmp - MSVC:
/openmp - Intel ICC:
-qopenmp
Hệ điều hành: Linux, Windows, macOS.