OpenMP - 为同一并行区域中的两个for循环分配不同的线程

时间:2017-07-31 12:02:18

标签: c multithreading openmp

我有两个for循环,我想并行化,我希望一半的线程在第一个循环上工作,另一半在第二个循环上工作。但似乎OpenMP不允许for内的section指令。还有另一种方法吗?

以下是一个例子:

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

int main() {
    int i,j;
    #pragma omp parallel num_threads(4)
    {
        #pragma omp for
        for (i = 0; i < 2; ++i)
            printf("Thread %d, i %d\n", omp_get_thread_num(), i);

        #pragma omp for
        for (j = 0; j < 2; ++j)
            printf("Thread %d, j %d\n", omp_get_thread_num(), j);
    }
    return 0;
}

我得到的输出是:

Thread 0, i 0
Thread 1, i 1
Thread 0, j 0
Thread 1, j 1

但是我想要

Thread 0, i 0
Thread 1, i 1
Thread 2, j 0
Thread 3, j 1

0 个答案:

没有答案