openMP的线程数高于要求的数量

时间:2015-01-12 11:24:38

标签: openmp

我正在实现顺序程序的openMP版本,对于为线程分发列表的函数,我需要函数来知道线程数。

简化,代码如下:

int numberOfThreads = 0;
#pragma omp parallel
{
    //split nodeQueue
    omp_set_num_threads(NUM_THREADS);

    #pragma omp master
    {
        cout << "Asked for " << NUM_THREADS << endl;
        numberOfThreads = omp_get_num_threads();
        cout << "Got " << numberOfThreads << " threads" << endl;
        splitNodeQueue(numberOfThreads);
    }
}

无论我将NUM_THREADS设置为什么,它似乎都有4个线程和输出:

Asked for 1
Got 4 threads

当我使用omp_set_num_threads(NUM_THREADS)时,Shouln最多获得NUM_THREADS个?

我要求的线程数量并不重要 - 它总是得到4(这是CPU上可用的线程数)...

我不能强制它使用指定数量的线程作为最大值吗?

1 个答案:

答案 0 :(得分:0)

我认为,在并行区域内设置num_threads不会更改并行区域开始处的fork的线程数,它只会更改嵌套并行区域的线程数,默认为1根据OMP规范