2

我已阅读有关在 AMD 上运行 linpack 的文章 [1]。根据我的理解,执行策略是每个 L3 缓存有 1 个 MPI 等级,每个有 4 个线程,因为 L3 缓存用于四个物理内核。现在,通过阅读这篇文章,我有三个无法通过谷歌搜索回答的问题:

1) 他正在对单个 CPU 系统进行基准测试。我想通常 OpenMPI 用于在集群上部署 linpack。但是使用多个 MPI 等级而不是具有更多线程的等级是否有任何性能优势?在多插槽/共享内存机器上,根据我的理解,这应该没有任何区别。

2) 他运行基准测试如下:

export OMP_PROC_BIND=TRUE
export OMP_PLACES=cores
export OMP_NUM_THREADS=4
mpirun -np 8 --map-by l3cache --mca btl self,vader xhpl

我的问题是 mpirun 的 bind-to 的默认设置是绑定到核心。据我了解,这意味着每个等级都绑定到一个核心。现在,即使 OMP 线程也绑定到核心,我看不到每个等级的四个线程将在四个核心上执行。相反,由于等级(进程)绑定到一个核心,等级由四个 OMP 线程组成​​,它们都共享同一个核心,这不是预期的吗?我没有 CPU 来验证我的假设。我是否正确,这里缺少 --bind-to l3cache 设置以允许 OMP 线程分布在共享 l3 缓存的所有内核上?如果不是,为什么?

3) 他指出,在进行基准测试时应该禁用 SMT。为什么?我知道如果像 FPU 这样的共享执行单元已经饱和,硬件线程可能不会总是提高性能,但为什么它们会降低性能呢?

非常感谢您的帮助。

亲切的问候,马克西米利安

[1] https://www.pugetsystems.com/labs/hpc/How-to-Run-an-Optimized-HPL-Linpack-Benchmark-on-AMD-Ryzen-Threadripper----2990WX-32-core-性能-1291

4

0 回答 0