Netlogo HPC CPU百分比使用增加

时间:2015-02-20 12:01:53

标签: linux cloud netlogo hpc

我使用无头NetLogo通过以下代码将作业提交到HPC服务器:

#!/bin/bash
#$ -N r20p
#$ -q all.q
#$ -pe mpi 24
/home/abhishekb/netlogo/netlogo-5.1.0/netlogo-headless.sh \
    --model /home/abhishekb/models/corrected-rk4-20presults.nlogo \
    --experiment test \
    --table /home/abhishekb/csvresults/corrected-rk4-20presults.csv

以下是使用以下内容的群集队列的快照

qstat -g c

enter image description here

我希望知道我可以为我的模拟增加CQLOAD,它也意味着什么。我无法在网上找到解释性的解释。

CPU使用情况检查:

qhost -u abhishekb

enter image description here

当我通过gui在我的PC上运行行为空间时,为任务分配高优先级使得它使用近99%的CPU,这使得它运行得更快。它使用更大比例的CPU处理器。我希望在这里完成同样的事情。

修改 enter image description here

编辑2;

enter image description here

3 个答案:

答案 0 :(得分:3)

典型的HPC环境,设计为每个CPU内核只运行一个MPI进程(或OpenMP线程),因此可以访问100%的CPU时间,而且无法进一步增加。相比之下,在传统的桌面/服务器计算机上,许多进程争用CPU时间,并且通过使用nice设置适当的优先级确实可以提高其中一个的性能。

CQLOAD似乎是该计算队列的平均负载平均值。如果您没有使用其中的所有CPU核心,则它不是一个有用的指标。此外,即使每次运行的核心负载平均值也只能转换此HPC群集上代码的效率。例如,每个核的值为0.7,意味着代码花费70%的时间进行计算,而剩下的30%可能用于等待与其他计算节点通信(这也是必要的)。

最重要的是,在HPC群集上增加CPU使用率的唯一方法是优化代码。但通常情况下,人们更关心并行扩展(即解决方案的时间如何随CPU核心数量而减少)而不是使用CPU百分比。

答案 1 :(得分:3)

1。 CPU百分比负载

我同意@rth answer关于尝试使用linux作业优先级/ renice来增加CPU百分比 - 这是

  • 几乎肯定不会工作

和,(正如你发现的那样)

  • 你不太可能这样做,因为你不会在节点上拥有超级用户priveliges(你甚至不可能登录到工作节点 - 可能只是头节点)

模型运行时的CPU使用率主要取决于您的代码结构 - 如果它在本地运行100%CPU,它可能会在运行时 上运行< / EM>

以下是您问题中更具体部分的一些答案:

2。 CQLOAD

你问

  

CQLOAD(这又是什么意思?)

很难找到这方面的文档,但你link to the spec of your cluster告诉我们,它的调度引擎是Sun的* Grid Engine“。Man pages are here(你也可以在本地访问它们 - 在特别输入man qstat

如果您搜索qstat -g c,您将看到所描述的输出。特别是,第二列(CQLOAD)被描述为:

  

输出格式

     

...

     

所有队列的标准化负载平均值的平均值           主机。为了反映每个主机不同的意义 -           取消配置的插槽数量用作重量 -           确定集群队列负载时的因素。请           请注意,只考虑具有np_load_value的主机           这个价值。当队列选择仅应用数据时           关于选定的队列在此公式中被考虑。如果           任何主机都没有负载值 -           打印NA-'而不是复合体的值           属性定义。

这意味着CQLOAD指示了处理器在队列中的使用情况。上面的输出屏幕截图显示0.84,因此all.q中(使用中)处理器上的此指标平均负载为84%。这似乎不太低。

3。保留的节点数

In a related question,你说同事抱怨你的进程没有使用足够的CPU。我不确定这是基于什么,但我想知道这里真正的问题是你为一项他们可以看到的工作能够用更少的工作预留了很多节点(即使只是很短的时间)。

您可能希望尝试使用较少的节点(除非您的结果非常慢) - 这是通过更改行#$ -pe mpi 24来实现的 - 可能会将数字24缩小。通过计算1个模型运行在计算机上运行多长时间,然后使用

,您可以计算出所需的节点数(大致)
N = ((time to run 1 job) * number of runs in experiment) / (time you want the run to take)

答案 2 :(得分:2)

所以你想通过赋予程序比所有其他进程更高的优先级来让你的程序在linux上运行得更快?

在这种情况下,你必须修改一个叫做程序 niceness 的东西。这通常通过在程序运行时首次启动程序或命令nice时调用命令renice来完成。一个过程可以具有从-20到19(包括)的良好性,其中较低的值给予过程更高的优先级。出于安全原因,您只能减少流程&#39;如果你是超级用户(root),那就很好。

因此,如果您想让进程以更高的优先级运行,那么请从bash中执行

[abhishekb@hpc ~]$ start_process &
[abhishekb@hpc ~]$ jobs -x sudo renice -n -20 -p %+

或者只使用最后一个命令,并将%+替换为要增加优先级的进程的进程ID