使用环境变量集合运算控制在英特尔® 至强融核™ 协处理器上执行英特尔® MPI 库集合优化

摘要

本文讨论了一个方法,用于优化与英特尔®MPI 库连接的编程应用的消息传递接口(MPI)集合性能。 英特尔 MPI 库添加了 I_MPI _ADJUST 环境变量家族,允许对与其每个群体操作相关的算法进行显式选择。 使用英特尔 MPI 库时,MPI 集合优化的方法通过添加进程固定和互联架构控制,从而测量英特尔® MPI 基准测试的消息传递延迟进行了证明。 针对集合的英特尔 MPI 基准测试分析是在英特尔® 至强融核™ 协处理器的本机模式下运行的,但这种选择最佳集合算法的模式适用于其他英特尔® 微架构。

  1. 简介
    • 哪些人将从本文中受益?
    • 使用什么方法来改进消息传递接口 (MPI) 集合性能?
    • 文本是如何组织的?
  2. 英特尔® MPI 库中的集合运算控制
  3. 英特尔® 至强融核™ 协处理器的架构
  4. 英特尔® MPI 性能指标评测
  5. 调整 I_MPI_ADJUST_ALLREDUCE 环境变量设置所带来的 MPI_Allreduce 性能改进
  6. 结论
  7. 参考资料

1. 简介

哪些人将从本文中受益?

如果您在与英特尔® MPI 库(用于在 Linux* 或 Windows* 操作系统上执行)相连的消息传递接口 (MPI)1,2,3,4应用中使用集合运算,并从表明集合运算是热点瓶颈的英特尔® VTune™ 放大器 XE5Intel® Trace Analyzer and Collector6 等软件工具进行统计分析,那么本文将可以帮助您实现更出色的执行性能。

使用什么方法来改进 MPI 集合性能?

英特尔 MPI 库4 提供了一种通过使用 I_MPI_ADJUST 环境变量家族来明确控制集合算法选择的方式。 集合优化流程将通过使用从英特尔® MPI 基准测试构建且与7 英特尔 MPI 库4 相连接的本机模式可执行文件,在英特尔® 至强融核™ 协处理器架构上进行演示。用户可以将这一方法用于其与英特尔 MPI 库相连接且包含群体操作的 MPI 应用。 此外,这种优化技术与其他英特尔® 微架构以及 MPI 实施(拥有针对支持英特尔® 架构的英特尔® 微架构和非英特尔微处理器的集合算法控制)相关。

本文是如何组织的?

第 2 部分描述了针对 MPI 的集合运算1,2,3 以及可用于控制集合优化的英特尔 MPI 库所支持的一类环境变量。 第 3 部分提供了有关英特尔至强融核处理器架构的背景,以及一组用于利用英特尔至强融核协处理器插槽之间的计算核心与通信的英特尔 MPI 库环境变量。 第 4 部分简要介绍了英特尔 MPI 基准测试。7 第 5 部分使用英特尔 MPI 基准测试内的 MPI 集合展示了英特尔至强融核协处理器上的性能结果。 最后提供结论。

2. 英特尔® MPI 库内的集合运算控制

面向 MPI 进程的集合运算有三种基本形式:3

  • 障碍同步
  • Broadcast、Gather、Scatter 和 Gather/Scatter 等全球通信功能,从所有成员到一组的所有成员(完整的交换或多对多)
  • 全局归约操作,如最大值、最小值、产品、总和或用户定义的函数

在所有这些情况下,消息传递库可以充分利用有关计算系统结构的知识,从而提高这些集合运算的并行性1 并提高应用的执行性能。3

根据 MPI 标准1图 1 显示了针对 MPI 集合运算的子集(即 Broadcast、Scatter、Gather、Allgather 和 Alltoall 集合功能)的 MPI 数据转换。1 行表示 MPI 进程,列表示与这些 MPI 进程相关的数据。Ai, Bi, Ci, Di, Ei 和 Fi 代表可以与每个 MPI 进程相关联的数据项。

Figure 1

图 1. MPI 集合函数 Broadcast、Scatter、Gather、Allgather 和 Alltoall 分别如何与 MPI 进程的数据进行交互的插图。1

图 1 中实施集合运算的典型方法可归纳为两大类:6

  • 通过一种优化技术进行处理的短矢量
  • 通过一种不同方法进行处理的长矢量

对于使用集合的 MPI 应用而言,拥有一个对于所有矢量长度运行良好的 MPI 库是当务之急。8 例如,9 集合优化算法可以用于区分短消息和长消息,并在短消息和长消息10 算法之间切换。 因此,在一般情况下,优化 MPI 集合运算可以包括以下内容:11,12

  • 各种可能的算法
  • 有关网络拓扑的知识
  • 编程方法

因此,通过构建针对 MPI 集合的参数化模型,可以实施一个自动化流程,以选择该集合算法在运行时最高效的实施方法。13 本文并未使用选择最高效的实施方法的自动流程,而专注于介绍英特尔 MPI 库内基于集合的环境变量。在英特尔 MPI 库中,用户可以编译其 MPI 应用一次,然后使用集合环境变量控制来确定针对各种集群拓扑的应用。

正如在介绍中提到的,英特尔 MPI 库内的每个集合运算支持多种通信算法。 除了高度优化的默认设置之外,英特尔 MPI 库提供了一种通过使用 I_MPI_ADJUST 环境变量家族来明确控制算法选择的方法,这部分介绍了这种方法。

I_MPI_ADJUST 环境变量可用于英特尔和非英特尔微处理器,但它可以为英特尔微处理器执行比支持英特尔® 架构的非英特尔微处理器更多的优化。4

表 1 提供了一个 I_MPI_ADJUST 环境变量名称列表和一套在英特尔 MPI 库内针对每个集合运算实施的算法。4 根据集群拓扑、互连结构和共享内存通信的不同,one collective optimization algorithm may provide better performance over that of the other algorithms associated with that collective operation. 对于图 1 中所示的 MPI 集合函数 Broadcast、Scatter、Gather、Allgather 和 Alltoall,表 1 中的算法选择列列出了可用于执行各自的集合运算的可能算法。

表 1. 针对英特尔® MPI 库集合运算的 I_MPI_ADJUST 家族的环境变量定义。4

环境变量名称

集合运算

算法选择

I_MPI_ADJUST_ALLGATHER

MPI_Allgather

  1. 递归倍增算法
  2. Bruck 算法
  3. 环算法
  4. 拓扑感知 Gatherv + Bcast 算法
  5. Knomial 算法

I_MPI_ADJUST_ALLGATHERV

MPI_Allgatherv

  1. 递归倍增算法
  2. Bruck 算法
  3. 环算法
  4. 拓扑感知 Gatherv + Bcast 算法

I_MPI_ADJUST_ALLREDUCE

MPI_Allreduce

  1. 递归倍增算法
  2. Rabenseifner 算法
  3. Reduce + Bcast 算法
  4. 拓扑感知 Reduce + Bcast 算法
  5. 二项式收集+分散算法
  6. 拓扑感知二项式收集+分散算法
  7. Shumilin 的环算法
  8. 环算法
  9. Knomial 算法

I_MPI_ADJUST_ALLTOALL

MPI_Alltoall

  1. Bruck 算法
  2. Isend/Irecv + waitall 算法
  3. 成对交换算法
  4. Plum 的算法

I_MPI_ADJUST_ALLTOALLV

MPI_Alltoallv

  1. Isend/Irecv + waitall 算法
  2. Plum 的算法

I_MPI_ADJUST_ALLTOALLW

MPI_Alltoallw

Isend/Irecv + waitall 算法

I_MPI_ADJUST_BARRIER

MPI_Barrier

  1. 传播算法
  2. 递归倍增算法
  3. 拓扑感知传播算法
  4. 拓扑感知递归倍增算法
  5. 二项式收集 + 分散算法
  6. 拓扑感知二项式收集 + 分散算法

I_MPI_ADJUST_BCAST

MPI_Bcast

  1. 二项式算法
  2. 递归倍增算法
  3. Ring 算法
  4. 拓扑感知二项式算法
  5. 拓扑感知递归倍增算法
  6. 拓扑感知环算法
  7. Shumilin 的算法
  8. Knomial 算法

I_MPI_ADJUST_EXSCAN

MPI_Exscan

  1. 部分结果收集算法
  2. 收集关于流程算法布局的部分结果

I_MPI_ADJUST_GATHER

MPI_Gather

  1. 二项式算法
  2. 拓扑感知二项式算法
  3. Shumilin 的算法

I_MPI_ADJUST_GATHERV

MPI_Gatherv

  1. 线性算法
  2. 拓扑感知线性算法
  3. Knomial 算法

I_MPI_ADJUST_REDUCE_SCATTER

MPI_Reduce_scatter

  1. 递归减半算法
  2. 成对交换算法
  3. 递归倍增算法
  4. Reduce + Scatterv 算法
  5. 拓扑感知 Reduce + Scatterv 算法

I_MPI_ADJUST_REDUCE

MPI_Reduce

  1. Shumilin 的算法
  2. 二项式算法
  3. 拓扑感知 Shumilin 算法
  4. 拓扑感知二项式算法
  5. Rabenseifner 算法
  6. 拓扑感知 Rabenseifner 算法
  7. Knomial 算法

I_MPI_ADJUST_SCAN

MPI_Scan

  1. 部分结果收集算法
  2. 拓扑感知部分结果收集算法

I_MPI_ADJUST_SCATTER

MPI_Scatter

  1. 二项式算法
  2. 拓扑感知二项式算法
  3. Shumilin 的算法

I_MPI_ADJUST_SCATTERV

MPI_Scatterv

  1. 线性算法
  2. 拓扑感知线性算法

对于表 1,如果应用使用 MPI_Scatter 集合,则 I_MPI_ADJUST_SCATTER 环境变量可设为 1、2 或 3 的整数值,从而分别选择二项式算法、拓扑感知二项式算法,或 Shumilin 算法。 Shumilin 算法适用于小规模集群,能够高效利用带宽。 阅读器可以在文献中找到各种算法实施的描述(例如参见 Thakur 等和其中的参考文献)。12

正如在介绍中提到的,用于体验集合性能的英特尔微架构是英特尔至强融核协处理器,它采用英特尔® 集成众核架构(英特尔® MIC 架构)。 接下来的部分将简要描述英特尔至强融核协处理器架构,并探讨一组选定的英特尔 MPI 库环境变量,以便理解:

  • 在英特尔至强融核协处理器插槽内的多个内核上执行 MPI 进程固定的概念
  • 控制英特尔至强融核协处理器插槽通信

3. 英特尔® 至强融核™ 协处理器的架构

英特尔至强融核协处理器主要包含 61 个处理内核,每个内核 4 条硬件线程。 英特尔至强融核协处理器还有高速缓存、内存控制器、PCIe*(外设组件互连 Express*)客户端逻辑和带宽很高的双向环互连网络。(图 2)。14 每个内核都有一个专用的 L2 高速缓存,通过全球分布的标签目录(图 2中标有“TD”)保持完全一致。 二级高速缓存为八路设置集联,大小为 512 KB。 高速缓存是统一的,可对数据和指令进行高速缓存。 一级高速缓存包含一个八路集联 32 KB 一级指令和 32 KB 一级数据缓存。 内存控制器和 PCIe 客户端逻辑分别为协处理器和 PCIe 总线上的 GDDR5 内存(双倍数据速率五型同步图形随机存取存储器)提供了一个直接接口。 所有这些组件都是通过环互连网络连接在一起的。

Figure 2

图 2. 英特尔® 至强融核™ 协处理器的架构14

图 2 显示了内核的子集、与每个内核相关联的二级高速缓存和标签目录。

正如之前提到的,I_MPI_ADJUST 环境变量对于控制英特尔 MPI 库集合的算法选择至关重要。 不过有 4 个与英特尔 MPI 库相关联的其他环境变量,这些变量将有助于利用英特尔至强融核协处理器的架构特性,即:

export I_MPI_MIC=1

当 I_MPI_MIC 环境变量设为 1 或“启用”或“确定”时,英特尔 MPI 库将尝试检测和使用英特尔 MIC 架构组件。

export I_MPI_PIN_MODE=lib

lib 值使得进程的固定在英特尔 MPI 库内进行。

export I_MPI_PIN_CELL=core

I_MPI_PIN_CELL 环境变量定义了固定分辨率粒度。 I_MPI_PIN_CELL 指定了运行 MPI 进程时所分配的最小处理器单元。 值核心是指物理处理器内核,如图 2 中所示的内核抽象。

export I_MPI_FABRICS= <fabric>|<intra-node fabric>:<inter-nodes fabric>

I_MPI_FABRICS 环境变量用于选择将使用的特定网络结构,在这个结构中:

<fabric> := shm | dapl | tcp | tmi | ofa | ofi

<intra-node fabric> := shm | dapl | tcp | tmi | ofa | ofi

<inter-nodes fabric> := dapl | tcp | tmi | ofa | ofi

表 2 汇总了有哪些结构值以及哪种定义与值相关。

表 2. I_MPI_FABRICS 环境变量的可能数值4

<结构>

定义网络结构

shm

共享内存

dapl

支持 DAPL 的网络结构,如 InfiniBand*、iWarp*、Dolphin* 和 XPMEM*(通过 DAPL*)

tcp

支持 TCP/IP 的网络结构,如以太网和 InfiniBand(通过 IPoIB*)

tmi

支持 TMI 的网络结构,包括英特尔® True Scale Fabric 和 Myrinet*(通过标签匹配接口)

ofa

支持 OFA 的网络结构,包括 InfiniBand(通过 OFED* verbs)

ofi

支持 OFI(OpenFabrics 接口*)的网络结构,包括括英特尔® True Scale Fabric 和 TCP
(通过 OFI* API)

已介绍过的英特尔 MPI 库环境变量将应用到英特尔 MPI 基准7 可执行文件中,以便在英特尔至强融核协处理器上进行 MPI_Allreduce 实验。 因此我们有必要简单回顾一下如何构建面向英特尔 MIC 架构的英特尔 MPI 基准,以及一个有用的命令行选项子集,后者可帮助实验基准测试中 MPI 集合测试的分类。

4. 英特尔® MPI 基准

英特尔 MPI 基准7 会对各种消息大小的点对点和全局通信操作制定一组 MPI 性能测量工作。 生成的基准数据充分表现:

  • 集群系统的性能,包括节点性能、网络延迟和吞吐量
  • MPI 实施的效率。 这使得用户可以在 MPI 标准的各种实施之间进行性能比较。

根据 “开始使用英特尔® MPI 性能指标评测 4.17 和针对英特尔 MIC 架构的英特尔 MPI 基准测试可执行文件“指南,用户可以在 Linux 操作系统中发布以下内容:

cd <path to the Intel MPI Benchmarks directory>/src

make –f make_ict_mic

make 命令完成后,以下可执行文件应驻留在上面提到的 src 子目录中:

IMB-EXT.mic

IMB-IO.mic

IMB-MPI1.mic

IMB-NBC.mic

IMB-RMA.mic

假定集群系统中至少有 4 个 MIC(集成众核)卡,MIC 卡有 mic0、mic1、mic2 和 mic3 等名称,对集合函数 MPI_Allreduce 的英特尔 MPI 基准测试分析可能如下:15

mpirun –host mic0,mic1,mic2,mic3 –ppn 15 –n 60 ./IMB-MPI1.mic ALLREDUCE –npmin 60 –time 50

其中通常 mpirun 命令行选项

-ppn <# of processes>

表示进程使用轮转调度来固定组内与每个主机相关的连续 MPI 进程的数量。 通常情况下,<进程数> 的伪参数表示将固定到主机的 MPI 进程数的整数值。 对于上面显示的 mpirun 命令,处理固定值为每个主机 15 个 MPI 列。

–npmin 英特尔 MPI 基准测试命令行选项指定了运行所有选定基准测试的 P_min 进程数量。15 –npmin 后的 P_min 值必须为整数。 通过获得 P_min 值,选定的英特尔 MPI 基准测试将在以下进程数序列的进程上运行:

P_min, 2×P_min, 4×P_min, …, largest 2n×P_min < P, P

英特尔MPI基准测试命令行开关 –time 指定了基准测试单位消息大小的运行秒数。15 –time 后的参数是一个浮点数。

这个标志与 -iter 标志或其默认替代的组合可确保英特尔 MPI 基准测试始终选择符合所有限制的最大重复数量。 在默认状态下,重复数量通过<英特尔 MPI 基准测试目录的路径>/src/IMB_settings.h 中定义的 MSGSPERSAMPLE、OVERALL_VOL、MSGS_NONAGGR 和 ITER_POLICY 参数进行控制。

满足 -time 请求的每个样品的大致重复数在使用约 1 秒开销的准备运行中进行预估。

对于默认的 -time 参数,指定每个样品的运行时间秒数的浮点值在<英特尔 MPI 基准测试目录的路径>/src/IMB_settings.h 或<英特尔 MPI 基准测试目录的路径>/src/IMB_settings_io.h 所定义的 SECS_PER_SAMPLE 变量中进行设置。

5. 调整 I_MPI_ADJUST_ALLREDUCE 环境变量设置所带来的 MPI_Allreduce 性能改进

作为回顾,以下主题目前已涵盖:

  • 英特尔 MPI 库集合操作控制
  • 英特尔至强融核协处理器的架构以及与控制计算内核和插槽通信相关的环境变量
  • 如何建立面向英特尔至强融核协处理器架构的英特尔 MPI 基准测试

在本部分,在之前部分中讨论的信息将被合并,以便对 MPI_Allreduce 集合进行试验。 需要注意的是,您实现的试验结果很可能与本文提供的结果不同。 观察到的结果可以是英特尔至强融核协处理步进、互连结构、插槽配置、软件堆栈和内存大小的函数。 专注于针对特定的集群配置进行调整,不要担心是否符合此处所示的图表结果的问题。

在名为 mic0 和 mic1 的两个英特尔至强融核协处理器插槽上运行英特尔 MPI 基准测试的“allreduce” 组件的 test_on_2_mics.sh 脚本为:

#!/bin/sh
export I_MPI_MIC=1
export I_MPI_PIN_MODE=lib
export I_MPI_PIN_CELL=core
export I_MPI_ADJUST_ALLREDUCE=$3
export I_MPI_FABRICS=$4

case "$3" in
1) ADJUST_ALLREDUCE="RDA"
;;
2) ADJUST_ALLREDUCE="RaA"
;;
3) ADJUST_ALLREDUCE="RBA"
;;
4) ADJUST_ALLREDUCE="TARBA"
;;
5) ADJUST_ALLREDUCE="BGSA"
;;
6) ADJUST_ALLREDUCE="TABGSA"
;;
7) ADJUST_ALLREDUCE="SRA"
;;
8) ADJUST_ALLREDUCE="RA"
;;
9) ADJUST_ALLREDUCE="KA"
;;
*) ADJUST_ALLREDUCE="ALL_REDUCE_ERROR"
echo "An error occurred regarding the collective algorithm selection. Value is $3; Exiting..."
exit 1
;;
esac

case "$4" in
1) export I_MPI_FABRICS=shm:tcp
   FABRIC="shm_tcp"
;;
2) export I_MPI_FABRICS=tcp
   FABRIC="tcp"
;;
*) FABRIC="FABRIC_ERROR"
echo "An error occurred regarding the fabric selection. Value was $4; Exiting..."
exit 1
;;
esac

mpirun -hosts mic0,mic1 -ppn $1 -n $2 ./IMB-MPI1.mic allreduce -npmin $2 -time 20 > allreduce_report.$1.$2.${ADJUST_ALLREDUCE}.${FABRIC} 2>&1

对于上面的脚本,请注意对环境变量 I_MPI_MIC、I_MPI_PIN_MODE、I_MPI_PIN_CELL、I_MPI_ADJUST_ALLREDUCE(见表 3)和 I_MPI_FABRICS(见表 2)的引用。 您可以将上面的文本剪切和粘贴到自己的 test_on_2_mics.sh 脚本中,并修改语义以匹配您的集群。 命令行脚本的伪参数可能是这样的:

./test_on_2_mics.sh <processes-to-pin> <mpi-ranks> <adjust-allreduce> <fabric>

其中伪参数 <processes-to-pin> 的值为 30

          <mpi-ranks> 的值为 60
          <adjust-allreduce> 的值为 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
          <fabric> 的值为 1 | 2

为方便起见,表 3 提供了针对伪参数 <adjust-allreduce> 的语义。

表 3. 可用于 MPI_Allreduce Collective 的实施算法。4

 

环境变量名称

集合运算

算法选择

I_MPI_ADJUST_ALLREDUCE

MPI_Allreduce

  1. 递归倍增算法
  2. Rabenseifner 算法
  3. Reduce + Bcast 算法
  4. 拓扑感知 Reduce + Bcast 算法
  5. 二项式收集+分散算法
  6. 拓扑感知二项式收集+分散算法
  7. Shumilin 的环算法
  8. 环算法
  9. Knomial 算法

图 3 显示了使用命令行语法的结果,语法类似于:

./test_on_2_mics.sh 30 60 4 1

其中 MPI_Allreduce 的拓扑感知 Reduce + Bcast 算法被选中,互连结构设为 shm:tcp,并且

./test_on_2_mics.sh 30 60 4 2

其中 MPI_Allreduce 的拓扑感知 Reduce + Bcast 算法被选中,互连结构设为 tcp。 针对上面显示的 test_on_2_mics.sh 的每个命令行参考,使用了两个英特尔至强融核协处理器插槽,每个插槽有 61 个内核。 应用采用 60 个 MPI 列运行,30 个 MPI 列被固定(见图 2)到每个插槽上。

Figure 3

图 3. 使用 test_on_2_mics.sh 脚本(有 30 个 MPI 进程固定在每个英特尔至强融核协处理器插槽上)在两个英特尔至强融核协处理器插槽的本机模式下分析英特尔 MPI 基准测试的 “allreduce” 组件的结果。 共有 60 个 MPI 列。

在名为 mic0、mic1、mic2 和 mic3 的四个英特尔至强融核协处理器插槽上运行英特尔 MPI 基准测试的“allreduce” 组件的 test_on_4_mics.sh 脚本为:

#!/bin/sh
export I_MPI_MIC=1
export I_MPI_PIN_MODE=lib
export I_MPI_PIN_CELL=core
export I_MPI_ADJUST_ALLREDUCE=$3
export I_MPI_FABRICS=$4

case "$3" in
1) ADJUST_ALLREDUCE="RDA"
;;
2) ADJUST_ALLREDUCE="RaA"
;;
3) ADJUST_ALLREDUCE="RBA"
;;
4) ADJUST_ALLREDUCE="TARBA"
;;
5) ADJUST_ALLREDUCE="BGSA"
;;
6) ADJUST_ALLREDUCE="TABGSA"
;;
7) ADJUST_ALLREDUCE="SRA"
;;
8) ADJUST_ALLREDUCE="RA"
;;
9) ADJUST_ALLREDUCE="KA"
;;
*) ADJUST_ALLREDUCE="ALL_REDUCE_ERROR"
echo "An error occurred regarding the collective algorithm selection. Value was $3; Exiting..."
exit 1
;;
esac

case "$4" in
1) export I_MPI_FABRICS=shm:tcp
   FABRIC="shm_tcp"
;;
2) export I_MPI_FABRICS=tcp
   FABRIC="tcp"
;;
*) FABRIC="FABRIC_ERROR"
echo "An error occurred regarding the fabric selection. Value was $4; Exiting..."
exit 1

;;
esac

mpirun -hosts mic0,mic1,mic2,mic3 -ppn $1 -n $2 ./IMB-MPI1.mic allreduce -npmin $2 -time 50 > allreduce_report.$1.$2.${ADJUST_ALLREDUCE}.${FABRIC} 2>&1

同样,您可以将上面的文本剪切和粘贴到您自己的 test_on_4_mics.sh 脚本中。 命令行脚本的伪参数可能是这样的:

./test_on_4_mics.sh <processes-to-pin> <mpi-ranks> <adjust-allreduce> <fabric>

其中伪参数 <processes-to-pin> 的值为 15 | 60

<mpi-ranks> 的值为 60 | 240

<adjust-allreduce> 的值可以是 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<fabric> 的值可以是 1 | 

上面的表 3 为 test_on_4_mics.sh 脚本的 <adjust-allreduce> 伪参数提供了语义。

图 4 显示了使用命令行语法的结果,语法类似于:

./test_on_4_mics.sh 15 60 1 1

其中 MPI_Allreduce 的递归倍增算法被选中,互连结构设为 shm:tcp,并且

./test_on_4_mics.sh 15 60 1 2

其中 MPI_Allreduce 的递归倍增算法被选中,互连结构设为 tcp。 针对上面显示的 test_on_4_mics.sh 的每个命令行参考,使用了四个英特尔至强融核协处理器插槽,每个插槽有 61 个内核。 应用采用 60 个 MPI 列运行,15 个 MPI 列被固定到每个插槽上。

Figure 4

图 4. 使用 test_on_4_mics.sh 脚本(有 15 个 MPI 进程固定在每个英特尔至强融核协处理器插槽上)在四个英特尔至强融核协处理器插槽的本机模式下分析英特尔 MPI 基准测试的 “allreduce” 组件的结果。 共有 60 个 MPI 列。

图 5 显示了使用命令行语法的结果,语法类似于:

./test_on_4_mics.sh 60 240 2 1

其中 MPI_Allreduce 的 Rabenseifner 算法被选中,互连结构设为 shm:tcp,并且

./test_on_4_mics.sh 60 240 2 2

其中 MPI_Allreduce 的 Rabenseifner 算法被选中,互连结构设为 tcp。 同样,针对上面显示的 test_on_4_mics.sh 的每个命令行参考,使用了四个英特尔至强融核协处理器插槽,每个插槽有 61 个内核。 应用采用 240 个 MPI 列运行,60 个 MPI 列被固定到每个插槽上,每个插槽有 61 个内核。

Figure 5

图 5. 使用 test_on_4_mics.sh 脚本(有 60 个 MPI 进程固定在每个英特尔至强融核协处理器插槽上)在四个英特尔® 至强融核™ 协处理器插槽的本机模式下分析英特尔 MPI 基准测试的 “allreduce” 组件的结果。 共有 240 个 MPI 列。

通常情况下,对于图 3、图 4和图 5 而言,纵坐标轴上较小的延迟值对于所示的每个曲线更有好处。

6. 结论

文本概述了一种使用英特尔 MPI 库的方法,用于选择实施一种 MPI 集体算法,这种算法可为在集群上运行的应用提供最佳性能。 举例说明这种方法的试验在英特尔至强融核协处理的架构上使用英特尔 MPI 基准测试进行。 当一款应用使用 MPI 集合运算时,重点是利用基于集合的环境变量来选择合适的优化算法。 对于英特尔至强融核协处理器插槽拓扑和 MPI 流程固定,试验表明用户可以通过使用面向基于集合的环境变量的适当设置,实现更出色的性能。

实现 MPI 集合性能的框架并非仅限于英特尔至强融核处理器的架构,也适用于其他英特尔微架构。 通常情况下,支持集合算法环境变量选择的 MPI 库实施还可以运用这种类型的方法来改进 MPI 应用性能。

您可以将此方案作为优化特定 MPI 应用集合性能的模型。

7. 参考资料

  1. “MPI 文档,” http://www.mpi-forum.org/docs/
  2. W. Gropp, E. Lusk 和 A. Skjellum,使用 MPI: 消息传递接口的便携式并行编程,第 2 版,麻省理工学院出版社,马萨诸塞州剑桥市,1999 年。
  3. M. Snir,S. W. Otto,S. Huss-Lederman,D. W. Walker 和 J. Dongarra,MPI: 完全参考手册,麻省理工学院出版社,马萨诸塞州剑桥,1996 年。
  4. “面向 Linux* 操作系统的英特尔® MPI 库参考手册, ” https://software.intel.com/sites/default/files/Reference_Manual_1.pdf
  5. “英特尔® VTune™ Amplifier,” https://software.intel.com/zh-cn/intel-vtune-amplifier-xe
  6. “英特尔® 跟踪分析器和跟踪采集器,” https://software.intel.com/zh-cn/intel-trace-analyzer
  7. “开始使用英特尔® MPI 基准测试 4.1,” https://software.intel.com/zh-cn/articles/intel-mpi-benchmarks,2013 年 10 月。
  8. M. Barnett,L. Shuler,R. van de Geijn,S. Gupta, D. G. Payne,J. Watts,“处理器间集群通信库,” IEEE 可扩展高性能计算会议事项,1994 年 5 月 23 至 25 日,357 页。
  9. Rabenseifner,R.,“一种新的优化 MPI 约简算法,” https://fs.hlrs.de/projects/par/mpi/myreduce.html, November 1997
  10. R. Thakur and W. Gropp,“改进 MPICH 中的集合运算性能,”第 10 届 PVM/MPI 用户小组会议事项 (Euro PVM/MPI 2003),并行虚拟机和消息传递接口领域的现状,计算机科学讲义,LNCS 2840,Springer,2003 年 9 月,257 至 267 页。
  11. J. Pješivac-Grbovic,T. Angskun,G. Bosilca,G. E. Fagg,E. Gabriel,J. J. Dongarra,“MPI 集合运算的性能分析,”第 19 届 IEEE国际并行与分布处理研讨会事项,2005 年 4 月。
  12. R. Thakur,R. Rabenseifner,W. Gropp,“ MPICH 中集合通信业务的优化,”高性能计算应用国际期刊,2005 年春季,第 19 卷 1 号,49-66 页。
  13. H. N. Mamadou,T. Nanri,K. Murakami,“针对 MPI Alltoall 运算的强大动态优化,”IEEE 并行与分布式处理国际研讨会,2009 年 5 月。
  14. G. Chrysos,“英特尔® 至强融核™ 协处理器 – 架构,” https://software.intel.com/zh-cn/articles/intel-xeon-phi-coprocessor-codename-knights-corner
  15. 英特尔® MPI 基准测试用户指南与方法说明,” https://software.intel.com/sites/default/files/managed/66/e8/IMB_Users_Guide.pdf
有关编译器优化的更完整信息,请参阅优化通知