为了提供一个有用的框架,我会考虑这个层次结构:
- 主板可以容纳一个或多个芯片/骰子;
- 一个芯片/裸片可以包含一个或多个内核(独立 CPU);
- 一个 CPU 可以同时处理一个或多个线程(我所知道的多线程由两个线程组成)
在早期,您通常拥有一块主板和一块芯片,一个 CPU 运行一个线程。一次只能处理一个进程,而参与的硬件集称为处理器。软件(要运行的任务)和硬件(运行任务的设备)之间存在一对一的映射。
流程绝对是一个软件的概念。 “线程”很简单,是并行并发计算上下文中的“进程”规范。现在处理器可以指物理设备以及它的扩展处理能力(再次是多线程,这可以肯定是一种技术实现)。例如,您可以让机器在主板上有两个芯片,每个芯片有四个内核/CPU,并且每个内核/CPU 同时运行两个线程。然后,您将能够运行 2x4x2=16 个进程(当然不会超额订阅资源)。
您引用的 MPI 语法针对 进程(选项 np)或线程(如果您愿意)。 man mpirun 的描述部分甚至将进程称为“插槽”(例如,请参阅主机文件的规范)。
槽表示一个节点上可能执行的进程数。
这种用法听起来像是当时标准的硬件单元和软件单元之间密切对应的传统。 “插槽”最初是一种材料/硬件特征,与“插槽”一词不同,它有时会经历类似的语义变化。
所以我确实对你的困惑感到很同情。如果你是 Linux 用户,可以可视化cat /proc/cpuinfo 的报告。这些行指的是四个处理器中的一个名为“2”的处理器:
processor : 2
...
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
他们说在这台机器上我只得到了一个芯片(因为'phyical id'在整个列表中只取一个值,省略了),这个芯片是4个'cpu cores'并且这个芯片是运行四个兄弟姐妹(4 个线程,因此没有多线程)。在这种情况下,有 4 个处理元件和 4 个 cpu 内核。
在上面的多线程示例中,您会看到 16 个处理器的列表,“物理 id”(芯片)的 2 个值,“cpu cores”等于 4(每个芯片)和 `由于在该芯片上启用了多线程,兄弟姐妹等于 8(每个芯片)。在这种情况下,您的处理器数量是内核的四倍。
因此,在这个扩展的上下文中,“处理器”表示机器在“进程”上工作的能力,这就是 MPI 和您想要使用的,无论可以启用此功能的内核的数量和功能如何。您只需大致了解这些处理能力的来源。
另一个有用的 Linux 命令是 lscpu:
...
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
...
“插座”确实是主板中插入芯片的物理连接,因此它确实是芯片的别名。这里确实没有多线程。
感谢https://unix.stackexchange.com/q/146051/132913 其他帖子中的讨论