[openmp]使用嵌套并行

变量OMP_NESTED设置使其可以在函数中并行。

#include "omp.h"
#include <cstdio>
#include <iostream>

using namespace std;

omp_nest_lock_t lock;

void roll(int d)
{
    omp_set_nest_lock(&lock);
    cout << "first thread " << d << endl;
    omp_unset_nest_lock(&lock);
#pragma omp parallel
    {
        int d = omp_get_thread_num();
        omp_set_nest_lock(&lock);
        cout << "thread " << d << endl;
        omp_unset_nest_lock(&lock);
    }
}

int main()
{
    omp_set_num_threads(4);
    omp_set_nested(1);  //允许嵌套并行,注释掉这句看效果,注释掉这句看效果
    omp_init_nest_lock(&lock);
#pragma omp parallel
    {
        int d = omp_get_thread_num();
        roll(d);
    }
    omp_destroy_nest_lock(&lock);
    return 0;
}

你可能感兴趣的:(open)