OMP_NUM_THREADS的运用

AMS默认都会采用MPI并行,同时还有一种并行机制叫做OpenMP。环境变量中OMP_NUM_THREADS值为1,则关闭OpenMP,即不使用OpenMP并行。

如果OMP_NUM_THREADS的值为2,则当我们提交一个4核心作业,实际将占用4*2=8核心,即OMP_NUM_THREADS的值表示实际使用核心数是MPI并行核心数的倍数。因此当你有一个64核的服务器,如果OMP_NUM_THREADS的值被设为8,那么你提交一个8核心的作业,实际上64核心都被占用了,再继续提交作业,CPU就会因为过载,而导致效率大幅度下降。因此,这个值设置为多少,用户需要非常清楚,同时清楚计算机有多少核心,已经用了多少核心。

OpenMP的线程数量也太高,一般设置为2、4效果是较好的,对于大体系,也可以设置为8,具体如何通过测试才能非常准确,不过大致上有这样的规律。