我正在尝试使用混合MPI-OpenMP并行化运行代码。根据我的知识,只要OpenMP线程的数量小于物理处理器的数量,每个处理器就运行一个线程。假设这是真的,假设我有一个由两个计算卡组成的假设计算节点。每个计算卡都有4个处理器+内存的芯片。我的问题是:MPI和OpenMP参数的最佳选择是什么。我会说2个MPI作业和4个线程,这是正确的吗?
OMP_NUM_THREADS = 4
mpirun -np 2 code
我从一些同事那里听说,应该仔细选择这些参数,以获得最佳性能(取决于硬件布局)。我很欣赏有关运行混合工作的一些建议。
由于
答案 0 :(得分:3)
为实际应用程序代码选择正确的并行化配置绝非易事。 MPI进程和OpenMP线程到多处理器节点的最佳映射取决于算法的具体实现,OpenMP运行时,缓存内存层次结构的内部组织以及与处理器体系结构相关的其他因素。
因此,建议用户在其特定硬件上运行不同的配置以找到最佳分配。您可以在研究计算设施和HPC咨询公司的技术报告中找到关于此类研究的大量报告。
在m x n
节点上,其中m
是处理器套接字的数量,n
是CPU核心的数量,这样的实验将涉及为所有可能的整数值运行代码MPI进程数p
和OpenMP线程q
,每个可用编译器p x q = m x n
。
以下是针对4 x 12 AMD Opteron节点的p
和q
的不同组合所获得的并行加速的图。数据取自HiPERiSM Consulting LLC technical report HCTR-2011-2,由George Delic撰写,2010年。
您可以看到,对于此特定代码的处理器体系结构,每个MPI进程的最佳OpenMP线程数为1.然而,4个线程和12个MPI进程的情况紧随其后。