Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading OpenMPI和OpenMP核心绑定_Multithreading_Openmp_Openmpi_Linpack - Fatal编程技术网

Multithreading OpenMPI和OpenMP核心绑定

Multithreading OpenMPI和OpenMP核心绑定,multithreading,openmp,openmpi,linpack,Multithreading,Openmp,Openmpi,Linpack,我读过关于在AMD上运行linpack的文章[1]。根据我的理解,执行策略是每个三级缓存有1个MPI列组,每个列组有4个线程,就像三级缓存用于4个物理核心一样。现在,通过阅读这篇文章,我有三个问题无法通过谷歌搜索来回答: (一) 他正在对单CPU系统进行基准测试。我猜OpenMPI通常用于在集群上部署linpack。但是,使用多个MPI列组而不是一个具有多个线程的列组是否有性能优势?在多插槽/共享内存机器上,根据我的理解,这不会有任何区别 (二) 他按照以下方式运行基准: export OMP_

我读过关于在AMD上运行linpack的文章[1]。根据我的理解,执行策略是每个三级缓存有1个MPI列组,每个列组有4个线程,就像三级缓存用于4个物理核心一样。现在,通过阅读这篇文章,我有三个问题无法通过谷歌搜索来回答:

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

(二) 他按照以下方式运行基准:

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个特定内核之间迁移