限制OMPython使用的核心数

时间:2018-01-05 19:03:45

标签: slurm pyzmq openmodelica

背景

我需要运行块模拟。我已经使用OMEdit来创建系统,我调用omc来使用带有zmq的OMPython进行模拟以进行消息传递。模拟工作正常但现在我需要将其移动到服务器以长时间模拟系统。

由于服务器是由一群人共享的,因此它使用slurm对作业进行排队。服务器有32个核心,但他们让我在调整脚本时只使用8个,然后在我想运行最终模拟时使用24个。

我已经配置了slurm以下列方式调用我的脚本:

#!/bin/bash 
#
#SBATCH --job-name=simulation_Test_ADC2_pipe_4096s
#SBATCH --output=simulation_Test_ADC2_pipe_4096s.txt 
#
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --time=10:00
#SBATCH --mem-per-cpu=10000
source activate /home/jabozzo/conda_envs/py27
#which python
python ./Test_ADC2_pipe_4096s.py

然后我使用sbatch执行slurm文件。

问题

omc编译工作正常。当它开始模拟服务器的所有32个核心变为加载时,即使它被配置为仅使用8。

我已经尝试了

可以将compilationsimulation标志传递给omc。我曾尝试使用--numProcs(编译标志),但这似乎只适用于编译过程中,并不影响最终的可执行文件。我已经扫描了模拟标志页面,寻找相关的东西,但似乎没有更改cpu使用的选项。

2 个答案:

答案 0 :(得分:1)

我们在并行执行OpenModelica测试时添加的唯一内容是添加GC_MARKERS=1环境变量和--numProcs=1;这使得我们对10000个测试的夜间库测试全部按顺序运行。但是GC_MARKERS不应该影响模拟,除非他们分配了大量的内存。除此之外,OpenModelica模拟是串行的,除非你使用并行的blas / lapack / sundials库,它可能会使用更多的内核而没有OpenModelica知道它的任何内容;在这种情况下,您需要阅读消耗所有资源的库的文档。

有点令人惊讶的是slurm如何允许您的进程消耗比您设置的CPU更多的CPU;它可以使用taskset命令使内核强制进程只使用某些CPU。

答案 1 :(得分:1)

我的服务器管理员不确定taskset是否会干扰slurm内部。所以我们找到了另一个选择如果omc使用openMP进行编译,我们还可以使用以下内容限制替换slurm文件最后一行的核心数:

OMP_NUM_THREADS=8 python ./Test_ADC2_pipe_4096s.py

我将这个anwser留在这里以补充sjoelund.se anwser