我一直在想,在某个地方是否存在某种图表,确切地解释了slurm背后的“计算模型”(如果这有意义的话)。基本上,我想知道“节点”、“任务”、"CPU“、”核心“和”线程“(相对于彼此的含义)以及与机器/系统的关系之间的联系。
我读过S批和srun的手册页,但我不能百分之百地肯定它。到目前为止,我的理解如下
是这样吗?
然后,假设我混合了MPI和OpenMP。我基本上使用了OpenMP部件的核心、cpu和线程的概念,然后使用了用于MPI的任务和节点。
对吗?
谢谢:)
发布于 2017-03-03 14:25:39
Node是一台物理机器(非常简单和清晰:D),机器通常是通过网络连接的。
事实上,节点是一台物理机器,有一个带有一个或多个套接字的主板,每个主机承载一个CPU包,每个CPU包由多个核心组成。
上面是一个分布式内存模型,下面是一个共享内存模型(?)
这是一种自然的思维方式,但是编程模型和硬件结构是两种不同的东西。您可以在单个节点内运行分布式内存模型(例如MPI)程序,并且可以使用Coarray Fortran或施梅姆等PGAS框架在多个节点上运行共享内存程序。
任务通常是一个进程。这就是MPI的级别(对吗?)
是。
CPU ==处理器(?)是实际的物理CPU。
在Slurm上下文中,CPU被理解为禁用硬件超线程的系统的核心,或者在启用超线程时禁用(硬件)线程的核心。
但是一般来说,当你购买一个CPU时,你会得到一个芯片,上面有几个核心(CPU包),可以放进一个插座里。
核心是多核CPU的一部分
核心是CPU包中的一个独立的计算单元。它有自己的算法和逻辑单元,但共享一些高速缓存存储器。
线程是在给定的核心上运行的东西。这只对超线程有用吗?
硬件线程是一种技术,它允许单个物理核显示为两个不同的计算核,因为某些寄存器和缓存是重复的。但是两个硬件线程共享相同的算法和逻辑单元。当工作负载由许多I/O组成时,它们非常有用,这些I/O使得算术和逻辑单元在进行数据传输时处于空闲状态。在计算集群中,硬件超线程通常被禁用。
软件线程是进程的轻量级版本。一个进程可以由多个线程组成,可以使用库/工具(如p线程)或OpenMP。
然后,假设我混合了MPI和OpenMP。我基本上使用了OpenMP部件的核心、cpu和线程的概念,然后使用了用于MPI的任务和节点。
您可以简单地将--ntasks
设置为所需的MPI进程数,并将--cpus-per-task
设置为所需的OpenMP线程数,假设Slurm配置了内核作为可消耗资源。
https://stackoverflow.com/questions/42498079
复制相似问题