小编Suz*_*nka的帖子

OpenMP 有序子句

OpenMP 中的ordered 子句应该如何正确使用?有这个测试代码来检查循环是否会通过增加 n 的值来执行,但情况并非总是如此。

我是否误解了有序子句的定义?

有序结构指定循环区域中的结构化块,该块将按循环迭代的顺序执行。这对有序区域内的代码进行排序和排序,同时允许区域外的代码并行运行。

    #include <stdio.h>
    #include <stdlib.h>
    #include <omp.h>

    int main(){

        int n;
    omp_set_num_threads(4);
    #pragma omp parallel
        {
    #pragma omp for ordered
            for (n=0;n<10;n++)
                printf("n = %d\n",n);
        }
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

编译时

   gcc -Wall -Wextra -fopenmp test_par.c
Run Code Online (Sandbox Code Playgroud)

输出是

    ./a.out 
    n = 0 
    n = 1 
    n = 2 
    n = 9 
    n = 3 
    n = 4 
    n = 5 
    n = 6 
    n = 7 
    n = 8 
Run Code Online (Sandbox Code Playgroud)

c parallel-processing loops for-loop openmp

6
推荐指数
1
解决办法
2944
查看次数

标签 统计

c ×1

for-loop ×1

loops ×1

openmp ×1

parallel-processing ×1