OpenMP 以編譯器指令實現共享記憶體多線程並行,支援 C/C++/Fortran。本文彙整核心指令語法、API 函數與 GCC 編譯實例。

#include
#pragma omp parallel for
#pragma omp for reduction(+: var)
#pragma omp critical { ... }
#pragma omp parallel for private(x,y)
#pragma omp parallel for schedule(static|dynamic|guided, k)
#pragma omp parallel sections { #pragma omp section ... }
#pragma omp parallel { #pragma omp master/single { ... } }
#pragma omp barrier / nowait
#pragma omp parallel for firstprivate(var) / lastprivate(var)
omp_get_num_threads() // 獲取當前線程數
omp_set_num_threads(n) // 設定線程數
omp_get_thread_num() // 獲取當前線程 ID
omp_get_num_procs() // 獲取可用核心數
// omp.c
#include
int main() {
int rank, size;
#pragma omp parallel num_threads(3) private(rank)
{
rank = omp_get_thread_num();
size = omp_get_num_threads();
printf("using %d of %d now.\n", rank, size);
}
return 0;
}
// 編譯
gcc -fopenmp -o omp omp.c
// 運行
./omp
Ubuntu 無需額外包含 omp.h,僅需編譯加 -fopenmp 即可啟用 OpenMP 支援。