假设我有一个 4 核工作站,如果我执行
mpirun-np 9 XXX
Q1. 9 会立即一起运行吗,还是会 4 个接 4 个地运行?
Q2. 我认为使用 9 并不好,因为余数为 1,这会让计算机感到困惑,(我不知道它是否会感到困惑,或者计算机的“头脑”会决定使用 4 个核心中的哪个核心?)或者它会被随机挑选。谁决定调用哪一个核心?
Q3. 如果我觉得我的 CPU 还不错,内存也还行,而且足够大,机箱也不是很大。为了充分利用我的 CPU 和内存,我是否应该执行 mpirun -np 8 XXX,甚至 mpirun -np 12 XXX?
Q4. 谁决定所有这些效率优化,Ubuntu,还是 Linux,还是主板或 CPU?
若能得到您的启发我将十分感激。
答案1
- 9将同时运行。
- 剩下的 1 个进程不会造成混淆;
mpirun
默认情况下按循环顺序进行调度,因此第 1 个核心/节点将被分配给该进程。 - 当然,您可以增加
np
可用的物理核心/节点数量。但代价是,进程数量超过核心/节点数量时,开销也会增加。如果您的代码不是严格受 CPU 限制的(例如,需要大量的 IO 等待时间),那么您可以应该这样做。最终,除非你尝试,否则你不知道它是否会更快。 - MPI 进行初始调度,但是对于每个节点的多个进程,或者只是一般情况(因为后台还有许多其他进程在运行),Linux 内核调度程序将接管。
看本手册页了解更多信息。
答案2
9 立即。
如果不是,宇宙的大小将不正确。所有进程必须同时存在,否则其他实例将看不到。
如果您的实例的内存太高,您可以手动停止其他 5 个进程,直到其他 4 个进程完成。
但是,如果您以这种方式使用 MPI(仅适用于本地计算机),我建议您改用 OpenMP/tbb。 MPI 实际上是为跨多个网络计算机或集群节点分发应用程序而设计的。
答案3
是的,您需要对代码进行大量修改,才能将其从 MPI 应用程序转变为 OpenMP 或 TBB 应用程序。如果您的应用程序已经开发完成,请在进行任何重大改动之前先试用并进行性能测量。