openMP分配循环迭代

时间:2017-10-09 13:26:59

标签: c++ openmp

我是openMP的新手。我正在尝试看看事情是如何运作的。我想平均分配循环迭代,以便我的输出为0 1 2 3 4 5 6 7 8 9 10.不是11 22 33或1 3 2 1 3 2 4 5等我也是尝试减少,但我认为这不是这种情况的正确方法。

#pragma omp parallel private(nt, id) num_threads(2)
    {
        nt = omp_get_num_threads();  
        id = omp_get_thread_num();  

        //#pragma omp parallel for schedule(static)
        //#pragma omp atomic
        for (int i = 0; i < 10; i++) {
            std::cout << i;
        }
        std::cout << std::endl;
    }

1 个答案:

答案 0 :(得分:2)

在并行区域内,您必须使用

#pragma omp parallel
{
    ...
    #pragma omp for
    for (...) {
        ....
    }
}

#pragma omp parallel forparallelfor的组合结构,如果您已经在并行区域内,则该结构不正确。

请注意,订单本质上是非确定性的。您可以使用和ordered子句序列化,但这通常会违背并行处理的目的。另请参阅此question/answer

另请注意,并行写入流会产生乱码输出。如果必须,请使用#pragma omp critical保护输出。