在我的主要功能中,我设置了:
omp_set_num_threads(20);
它告诉 OpenMP 使用 20 个线程(有 40 个线程可用)。
然后我执行包含指令的代码:
#pragma omp parallel for shared(x,y,z)
用于主 for 循环,并通过 htop 监控 CPU 使用情况(可能不是最好的方法,但仍然如此)。for 循环必须执行 50 个“任务”,每个都需要相当长的时间。我通过 htop 观察到,任务完成后,线程数下降。具体来说,使用 20 个线程,我希望看到 2000% 的 cpu 使用率,直到剩余的任务少于 20 个,之后线程应该“释放”自己。但是,我看到的是第一个 2000%,在 n 个任务完成后,我看到了 2000% - (n*100%) 的性能。因此,似乎随着任务完成,线程关闭而不是接收新任务。
这是意料之中的还是听起来很奇怪?