Slurm计算模型
Slurm Computing Model
我一直想知道是否存在某种图表可以准确解释 slurm 背后的 "computing model"(如果它有意义的话)。基本上,我想知道 "Node"、"Tasks"、"CPU"、"Core" 和 "Thread" 概念之间的联系(它们相对于彼此的含义)以及与 machine/system.
的关系
我已经阅读了 sbatch 和 s运行 的手册页,但我不是 100% 确定。
到目前为止,我的理解如下
- 节点是物理机器(这很简单明了 :D),机器通常通过网络连接。上面是分布式内存模型,下面是共享内存模型(?)。
- 一个任务通常是一个进程。这就是 MPI 中的排名(对吗?)
- A CPU == 处理器 (?) 是一个实际的物理 CPU
- 核心是多核的一部分CPU
- 线程是在给定核心上 运行 的东西。这仅对类似超线程有用吗?
对吗?
然后,假设我混合使用了 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 配置了核心作为可消耗资源。
我一直想知道是否存在某种图表可以准确解释 slurm 背后的 "computing model"(如果它有意义的话)。基本上,我想知道 "Node"、"Tasks"、"CPU"、"Core" 和 "Thread" 概念之间的联系(它们相对于彼此的含义)以及与 machine/system.
的关系我已经阅读了 sbatch 和 s运行 的手册页,但我不是 100% 确定。 到目前为止,我的理解如下
- 节点是物理机器(这很简单明了 :D),机器通常通过网络连接。上面是分布式内存模型,下面是共享内存模型(?)。
- 一个任务通常是一个进程。这就是 MPI 中的排名(对吗?)
- A CPU == 处理器 (?) 是一个实际的物理 CPU
- 核心是多核的一部分CPU
- 线程是在给定核心上 运行 的东西。这仅对类似超线程有用吗?
对吗?
然后,假设我混合使用了 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 配置了核心作为可消耗资源。