订阅移动开发RSS CSDN首页> 移动开发

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

发表于2016-01-25 17:28| 次阅读| 来源CSDN| 0 条评论| 作者csdn

摘要:本文讨论了一个方法,用于优化与英特尔®MPI 库连接的编程应用的消息传递接口(MPI)集合性能。 英特尔 MPI 库添加了 I_MPI _ADJUST 环境变量家族,允许对与其每个群体操作相关的算法进行显式选择。 使用英特尔 MPI 库时,MPI 集合优化的方法通过添加进程固定和互联架构控制,从而测量英特尔® 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™ 放大器 XE5 或 Intel® 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 内存(双倍数据速率五型同步图形随机存取存储器)提供了一个直接接口。 所有这些组件都是通过环互连网络连接在一起的。

查看全文

0
0