我在群集上运行OpenFOAM模拟。我使用了the Scotch decomposition method,我的decomposeParDict
看起来像这样:
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object decomposeParDict;
}
numberOfSubdomains 6;
method scotch;
checkMesh
和decomposePar
完成后没有任何问题。我已经通过
srun -N6 -l sonicFoam
并且求解器运行顺利,没有任何错误。
问题是与之前运行的非并行模拟相比,速度没有提高的解决方案。我想监视CPU使用情况,看看我分配的所有6个节点是否都被类似地加载。 squeue --user=foobar
命令返回jobNumber
和分配的节点列表(NODELIST(REASON)
),如下所示:
foo,bar[061-065]
来自sinfo
命令,这些节点都位于debug
和main*
PARTITION
s(我完全不知道这意味着什么!)。
This post表示您可以使用sacct
或sstat
命令来监控slurm作业的CPU时间和内存使用情况。但是当我跑步时
sacct --format="CPUTime,MaxRSS"
它给了我:
CPUTime MaxRSS
---------- ----------
00:00:00
00:00:00
00:07:36
00:00:56
00:00:26
15:26:24
我无法理解。当我通过
指定工作号码时sacct --job=<jobNumber> --format="UserCPU"
回报为空。所以我的问题是
--format="..."
和/或sacct
(或其他slurm命令)的正确sstat
是什么才能获得CPU使用/负载? P.S.1。我跟随the official instructions之后的OpenFOAM编译。尽管如此,我没有对OpenMPI
及其mpicc
编译器做任何事情。
P.S.2 对于那些可能会在这里结束的人。也许我正在运行错误的命令,显然可以先通过以下方式分配一些资源:
srun -N 1 --ntasks-per-node=7 --pty bash
其中7是您想要的核心数,而bash只是一个名称。然后运行解算器:
mpirun -np 7 sonicFoam -parallel -fileHandler uncollated
我现在还不确定。
答案 0 :(得分:2)
您可以使用
sacct --format='jobid,AveCPU,MinCPU,MinCPUTask,MinCPUNode'
检查所有CPU是否都处于活动状态。将AveCPU
(作业中所有任务的平均CPU时间)与MinCPU
进行比较(作业中所有任务的最小CPU时间)。如果它们相等,则所有6个任务(您请求6个节点,每个节点隐含地执行1个任务)均可正常工作。如果它们不相等,或者甚至MinCPU
为零,则某些任务一无所获。
但在你的情况下,我相信你会发现所有任务都在努力工作,但他们都在做同样的事情。
除了@timdykes关于-parallel
标志的评论之外,您还必须意识到使用sun
启动MPI作业需要使用Slurm支持编译OpenMPI。在安装OpenFOAM期间,它安装了自己的OpenMPI版本,如果存在文件/usr/include/slurm/slurm.h
或/usr/include/slurm.h
,则可能编译了Slurm支持。但最安全的可能是使用mpirun
但要做到这一点,您必须首先使用sbatch
或salloc
向Slurm请求分配。
答案 1 :(得分:1)
您是否尝试使用'-parallel'参数运行?运行并行作业时,所有OpenFOAM示例都在线使用此参数,一个示例是official guide并行运行。
srun -N $NTASKS -l sonicFOAM -parallel
顺便说一句 - 我看到你自己构建了openfoam,你检查过群集管理员是否为它提供了一个模块吗?您通常可以运行module avail
以查看可用模块的列表,然后运行module load moduleName
(如果存在OpenFOAM模块)。这很有用,因为您可以相信它是使用所有正确的选项构建的,并会自动设置$ PATH等。