首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解PBS输出"mem“和"vmem”在任务x倍随mpirun -np x任务增加时保持不变

如何理解PBS输出"mem“和"vmem”在任务x倍随mpirun -np x任务增加时保持不变
EN

Unix & Linux用户
提问于 2019-03-24 10:38:51
回答 1查看 907关注 0票数 0

下面是我尝试过的一个简单的实验:

给出一个名为"sim.exe“的任务来进行模型模拟,然后我使用MPI在一个节点(共享内存系统)上同时启动x "sim.exe”。我用x尝试了四种不同的值(例如,1,4,8,16)。然后通过PBS报告“使用的内存”和“使用的Vmem”检查内存使用情况。我观察到,对于这些不同的运行,“使用的内存”和“使用的vmem”保持不变,不更改"mem“= 8,432 KB和"vmem”= 489,716 KB。

根据post 关于mem和vmem进程的实际内存使用情况的说法,我对"mem“和"vmem”的理解是作业使用的内存资源。那么,为什么"mem“和"vmem”保持不变,即使通过工作的任务增加x倍?

所有这些作业都是通过PBS作业调度程序提交的。对于每个作业,在使用#PBS -l select=1:ncpus=24:mem=96GB提交作业时都会请求所有内核和内存。

更新此问题:

我在python中测试了threading作为mpi的替代品,以同时启动x "sim.exe“。因此,我启动了x线程,并在每个线程中使用子进程调用"sim.exe“模型模拟。我再次对x=1,4,8,16进行了四次实验。我观察到,这项工作使用的"mem“和"vmem”随x的增加呈线性增长,接近我的预期。

那么,PBS有没有可能没有正确计算"mem“和"vmen”呢?PBS似乎只计算一个实例的内存使用情况。

EN

回答 1

Unix & Linux用户

发布于 2019-03-26 08:19:10

我不确定,但据我所知,MPI每个节点只启动一个实例,然后,经过一些初始化后,将进程分叉到请求的x副本中。这意味着,如果sim.exe在分叉之后不分配任何额外的内存,那么所有内存将在x副本之间共享,并且除了操作系统中用于跟踪进程的微小开销之外,x数对内存的使用没有影响。

如果您在分叉之后加载了一些数据或分配了一些内存,那么您应该会看到内存使用与x之间的关联。

在线程子进程场景中,所有x进程都进行自己的初始化,因此共享的内存不像MPI场景中的那样多。(它们仍将为库和类似的内存映射I/O共享内存)

为了充分理解这种行为,我建议您编写一个小的MPI程序来替换sim.exe,该程序具有几MB的静态数据(例如,某种类型的静态数组)和动态分配的内存,并对实例的大小和数量进行了实验。我的猜测是静态数据在同一个节点上的并行MPI实例之间共享,而动态数据( MPI分叉后分配给实例)不是共享的。

进一步阅读:叉子(中的写上复制是如何处理多个分叉的)?

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/508288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档