除了之前提到的 #pragma omp parallel、#pragma omp single 和 #pragma omp task 之外,OpenMP 还有许多其他常用的指令。以下是一些常见的 OpenMP 指令以及它们对应的使用场景示例:
- 作用:用于并行化 for 循环。
- 示例:
#include <stdio.h> #include <omp.h> int main() { int i; #pragma omp parallel for for (i = 0; i < 10; i++) { printf("Thread %d is processing iteration %d\n", omp_get_thread_num(), i); } return 0; }
#pragma omp critical
#include <stdio.h> #include <omp.h> int main() { int shared_variable = 0; #pragma omp parallel num_threads(4) { int tid = omp_get_thread_num(); #pragma omp for for (int i = 0; i < 10; i++) { #pragma omp critical { shared_variable += 1; printf("Thread %d is updating the shared variable. Current value: %d\n", tid, shared_variable); } } } printf("Final value of the shared variable: %d\n", shared_variable); return 0; }#pragma omp barrier
- 作用:创建一个屏障,确保所有线程都等到达这个点后才能继续执行。
- 示例:
#pragma omp reduction
- 作用:用于执行归约操作(如求和、求积等)。
- 示例:
#include <stdio.h> #include <omp.h> int main() { int sum = 0; #pragma omp parallel for reduction(+:sum) for (int i = 0; i < 10; i++) { sum += i; } printf("Sum: %d\n", sum); return 0; }
No comments yet.