Slurm计算模型

Slurm Computing Model

我一直想知道是否存在某种图表可以准确解释 slurm 背后的 "computing model"(如果它有意义的话)。基本上,我想知道 "Node"、"Tasks"、"CPU"、"Core" 和 "Thread" 概念之间的联系(它们相对于彼此的含义)以及与 machine/system.

的关系

我已经阅读了 sbatch 和 s运行 的手册页,但我不是 100% 确定。 到目前为止,我的理解如下

对吗?

然后,假设我混合使用了 MPI 和 OpenMP。对于 OpenMP 部分,我基本上使用了核心、cpu 和线程的概念,然后是 MPI 的任务和节点。

正确吗?

谢谢:)

A Node is a Physical Machine (that's pretty easy and clear :D), and the machines are typically connected by a network.

事实上,一个节点是一台物理机器,一块主板有一个或多个插槽,每个插槽承载一个 CPU 包,每个包由多个内核组成。

Above it's a distributed memory model, below it's a shared memory model (?).

这是一种自然的思维方式,但是编程模型和硬件结构是两个不同的东西。您可以在单个节点内拥有分布式内存模型(例如 MPI)程序 运行,并且您可以使用 PGAS 框架(例如 Coarray Fortran or shmem[=] 跨多个节点拥有共享内存程序 运行 20=]

A Task is typically a process. That is what would be a rank in MPI (right ?)

是的。

A CPU == Processor (?) is an actual physical CPU

在 Slurm 上下文中,CPU 应理解为禁用硬件超线程的系统的核心或启用超线程时的(硬件)线程。

但一般来说,当你购买一个 CPU 时,你会得到一个带有多个内核的芯片(CPU 封装),可以装入一个插槽。

A Core is part of a multicore CPU

核心是 CPU 包中的一个独特的计算单元。它有自己的算术和逻辑单元,但共享一些缓存存储器

A Thread is something that will run on a given core. Is that only useful for like hyper threading ?

硬件线程是一种允许单个物理核心显示为两个不同计算核心的技术,因为某些寄存器和缓存是重复的。但是两个硬件线程共享相同的算术和逻辑单元。当工作负载由大量 I/Os 组成,使得算术和逻辑单元在进行数据传输时处于空闲状态时,它们很有用。硬件超线程通常在计算集群上被禁用。

软件线程是进程的轻量级版本。单个进程可以由多个线程组成,使用 libraries/tools 例如 pthreads 或 OpenMP。

Then, say I have a mix of MPI and OpenMP. I basically use the concept of core, cpu and thread for the OpenMP part, and then task & node for MPI.

您可以简单地将 --ntasks 设置为您想要的 MPI 进程数,并将 --cpus-per-task 设置为您想要的 OpenMP 线程数,假设 Slurm 配置了核心作为可消耗资源。