Multithreading OpenMPI和OpenMP核心绑定
我读过关于在AMD上运行linpack的文章[1]。根据我的理解,执行策略是每个三级缓存有1个MPI列组,每个列组有4个线程,就像三级缓存用于4个物理核心一样。现在,通过阅读这篇文章,我有三个问题无法通过谷歌搜索来回答: (一) 他正在对单CPU系统进行基准测试。我猜OpenMPI通常用于在集群上部署linpack。但是,使用多个MPI列组而不是一个具有多个线程的列组是否有性能优势?在多插槽/共享内存机器上,根据我的理解,这不会有任何区别 (二) 他按照以下方式运行基准:Multithreading OpenMPI和OpenMP核心绑定,multithreading,openmp,openmpi,linpack,Multithreading,Openmp,Openmpi,Linpack,我读过关于在AMD上运行linpack的文章[1]。根据我的理解,执行策略是每个三级缓存有1个MPI列组,每个列组有4个线程,就像三级缓存用于4个物理核心一样。现在,通过阅读这篇文章,我有三个问题无法通过谷歌搜索来回答: (一) 他正在对单CPU系统进行基准测试。我猜OpenMPI通常用于在集群上部署linpack。但是,使用多个MPI列组而不是一个具有多个线程的列组是否有性能优势?在多插槽/共享内存机器上,根据我的理解,这不会有任何区别 (二) 他按照以下方式运行基准: export OMP_
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绑定到的默认设置是绑定到核心。根据我的理解,这意味着每个等级都与一个核心相关。现在,即使OMP线程也绑定到内核,我也看不到每个列组的四个线程将在四个内核上执行。相反,由于列组(进程)绑定到一个核心,因此列组由四个OMP线程组成,这些线程都共享同一个核心,这不是预期的吗?我没有CPU来验证我的假设。这里缺少--bind to l3cache设置,以允许OMP线程分布在共享l3缓存的所有内核上,这是否正确?若否,原因为何
(三)
他指出,在进行基准测试时,应该禁用SMT。为什么?我知道,如果像FPU这样的共享执行单元饱和,硬件线程可能不会总是提高性能,但是为什么它们会降低性能呢
非常感谢你的帮助
亲切问候,,
马西米兰
[1] 我不确定,但我猜当您将MPI进程映射到三级缓存时,实际上是将进程绑定到共享三级缓存的内核列表。举例:如果4个内核共享L3缓存,则进程可以在执行期间在这4个特定内核之间迁移