我正在实现顺序程序的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上可用的线程数)...
我不能强制它使用指定数量的线程作为最大值吗?
答案 0 :(得分:0)
我认为,在并行区域内设置num_threads
不会更改并行区域开始处的fork的线程数,它只会更改嵌套并行区域的线程数,默认为1根据OMP规范