我在使用Intel Xeon CPU的机器上使用Ubuntu 14.04 x64。我正在经历一种奇怪的行为。我有一个Fortran代码,计算的冗长部分与OpenMP并行。使用较小的数据集(比如小于4000)一切正常。但是,当我测试一个具有90K元素的数据集时,在计算中间,使用的线程数突然下降到1,这显然减慢了计算速度。
我已经做过这些检查了: 使用OMP_GET_NUM_THREADS()我监视进程中的线程数,即使在系统使用1个线程之后它仍然是相同的。
我在循环内使用LAPACK例程进行特征值计算。我在我的系统上再次编译了Lapack,以确保我系统上的库不做任何事情。
系统是否可以从外部更改已使用线程的数量?如果是这样的话? 谢谢。
答案 0 :(得分:2)
它看起来像负载平衡问题。尝试动态调度:
!$OMP PARALLEL SCHEDULE(DYNAMIC)