我想提高我的作业的处理能力,但不确定如何进行。目前我正在SLURM上请求1个节点(#SBATCH --nodes 1
),但不确定是应该请求更多内核还是更多节点?我知道我的工作场所HPC的每个节点有44个内核,那么,我当前是否正在使用全部44个节点,还需要使用另外44个节点?或者,此命令是否仅在默认情况下从该节点请求一个核心,而我需要找到一种方法来从该节点请求更多核心?
我还知道像--ntasks=1
、--ntasks-per-node 10
和--cpus-per-task=4
这样的命令会修改任务的数量,但是我认为我所有的代码都是按顺序运行的(我没有使用线程模块或类似的模块),所以这样做有什么用呢?
编辑:我已将代码从
# SBATCH --nodes 1
# SBATCH --ntasks-per-node 10
(最初是从其他人那里复制的,不知道它在做什么)
至
# SBATCH --nodes 1
# SBATCH --ntasks 1
# SBATCH --cpus-per-task 10
如有任何建议,欢迎提出
1条答案
按热度按时间omtl5h9j1#
只有当您的应用程序受益于分布式计算时,增加节点数量才是值得的(例如使用MPI)。这是大多数HPC应用程序的情况。增加节点数量还是增加内核数量更好,这在很大程度上取决于目标应用(以及目标平台的低级详细信息)。需要进行大量通信的混合应用程序往往使用更多内核来提高性能,而内存受限的应用程序则需要更多节点来提高执行速度。请注意,使用更多内核通常有助于更好地利用可用的HPC资源,因为剩余的内核通常未被使用和浪费(允许多个用户同时使用同一节点的内核的HPC群集/超级计算机非常罕见)。但是,许多HPC应用程序在共享内存中无法很好地扩展(通常是由于IO/内存饱和或NUMA平台的支持不足)。这是一个复杂的主题,研究人员已经研究了几十年。
我认为我所有的代码都是按顺序运行的(我没有使用线程模块或类似的东西),那么这样做有什么用呢?
如果您的应用程序只使用一个进程和一个线程(并且不使用GPU等加速器),那么您无法通过使用更多内核或更多节点来提高应用程序的速度。您需要首先对应用程序进行并行化。从OpenMP和MPI(用于基础)开始,有许多工具可以实现这一点。天下没有免费的午餐。