0

最近我在我的 M1 Mac mini 上做一些分子动力学模拟 (LAMMPS)。

对于一个简单的任务,我使用命令:

lmp_serial -in run.in.npt

我相信这意味着单CPU计算。我需要 4 分 45 秒的运行时间。然后我尝试使用 4 个内核运行:

mpirun -np 4 lmp_mpi -in run.in.npt

我需要 1 分 51 秒。

但是当我使用 8 个内核时:

mpirun -np 8 lmp_mpi -in run.in.npt

它没有跑得更快,花了我 3 分 38 秒。

为了对比,后来我试了2核和6核,我在这里总结一下:

1 core  : 4 min 45 second
2 cores : 2 min 55 second
4 cores : 1 min 51 second
6 cores : 4 min 45 second
8 cores : 3 min 38 second

有人知道是什么原因吗?这与 Open MPI 有关吗?(如果不是Mac预装的,我后面就没装了)

4

1 回答 1

0

LAMMPS 通过执行域分解来分配工作。例如,通过空间分解,模拟体积被切割成盒子,特定盒子中的所有粒子都被分配到某个 MPI 等级进行处理。因为分子动力学中的积分是全局同步操作,所以每个步骤只有在所有 MPI 等级都完成后才完成。因此,完成一个积分步骤所花费的时间等于最慢的 MPI 等级完成其分配的框所花费的时间。

M1 是一种类似于 ARM DynamIQ(big.LITTLE 的继任者)的架构,包含速度快但耗电的内核(Firestorm内核)和速度慢但能效高的内核(Icestorm核心)。Mac Mini 中的 M1 芯片每种类型有四个。由于 macOS 不提供明确的 CPU 亲和性,MPI 库只是启动给定数量的等级,并由操作系统在可用内核上尽可能高效地调度它们。拥有多达四个 MPI 等级,它们最终都使用自己的 Firestorm 核心。一旦你超过了四个 MPI 等级,有些人要么落在慢速 Icestorm 核心之一上,要么会与其他等级分时共享一个快速核心。在这两种情况下,至少会有一个等级比其他等级慢得多,因此整体性能会受到影响。

另一件需要注意的是,现代 CPU 会根据热条件改变其核心频率。如果只加载一个内核,它可能会被提升到超过其标称频率。当加载更多内核时,会产生更多热量,并且内核的频率提升不会像前一种情况那样高。因此,从 1 核到 2 核再到 4 核不会给你带来线性加速,即使问题是令人尴尬的并行。

另外,请记住,使用的域分解类型会对并行性能产生巨大影响。例如,在空间分解中,如果原子在子域之间分布不均,或者它们以不均匀的方式在子域之间移动,则会出现负载不平衡,并且加速会再次受到影响。

于 2021-01-05T11:27:32.060 回答