除了之前提到的 #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;
      }
      
  1. #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;
      }
      
  2. #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;
        }