首页 > 解决方案 > 如何使线程按顺序运行?(OpenMP)

问题描述

已经了解并行编程的工作原理,但是有没有办法可以打印线程的顺序?

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

int main(int argc, char* argv[])
{
    #pragma omp parallel 
    {
        printf("Hello World... from thread = %d\n",
            omp_get_thread_num());
    }

}

我的输出:


Hello World... from thread = 2
Hello World... from thread = 3
Hello World... from thread = 0
Hello World... from thread = 1

目标输出:


Hello World... from thread = 0
Hello World... from thread = 1
Hello World... from thread = 2
Hello World... from thread = 3

标签: clinuxopenmp

解决方案


正如评论中所建议的,您可以使用ordered关键字按顺序获取输出。在实践中,您希望进行大量独立计算,然后仅按顺序打印(或复制或其他)结果。

不是这方面的专家,但这是我的做法(适用于 gcc 和 msvc):

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

int blah(int argc, char* argv[]) {
    // this may or may not be necessary..
    omp_set_num_threads(omp_get_max_threads());

    int i;
#pragma omp parallel
#pragma omp for ordered schedule(static, 1)
    for(i = 0; i < omp_get_num_threads(); i++)
    {
        // This is where the heavy computations go
#pragma omp ordered
        {
            // synchronized and in order; keep this short
            printf("Hello World... from thread = %d\n", omp_get_thread_num());
        }
    }

    return 0;
}

不明白为什么你的问题被否决了。按顺序排列结果是一个有效的用例恕我直言。


推荐阅读