前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MPI消息传递接口协议和硬件卸载

MPI消息传递接口协议和硬件卸载

原创
作者头像
晓兵
发布2024-05-29 18:52:00
1950
发布2024-05-29 18:52:00
举报
文章被收录于专栏:DPUDPU

术语

  • MPI: 消息传递接口(Message Passing Interface)是一种标准化、可移植的消息传递标准,旨在在并行计算 架构上运行。[1] MPI 标准定义了库例程的语法和语义,这些例程对使用C、C ++和Fortran编写可移植消息传递程序的广大用户都很有用。 有几种开源MPI实现,它们促进了并行软件行业的发展,并鼓励开发可移植且可扩展的大规模并行应用程序, 它是分布式内存系统中并行计算的消息传递接口的标准规范。MPI 不是一种编程语言。它是一个函数库,程序员可以从 C、C++ 或 Fortran 代码中调用它来编写并行程序。使用 MPI,可以动态创建 MPI 通信器,并让多个进程同时在集群的不同节点上运行。每个进程都有一个唯一的 MPI 等级(RANK)来标识它,它有自己的内存空间,并且独立于其他进程执行。进程通过传递消息来交换数据,从而相互通信。当程序任务被划分为小块并在进程之间分配这些块时,就会发生并行性,其中每个进程处理其部分
  • Rendezvous Offloads: 约会消息卸载
  • envelope: 信封, MSG消息包含信封和数据, 信封包含标签、通信器、长度、源信息以及实现, 私有数据

简介

MPI 通信方法

MPI 提供了三种不同的通信方法,MPI 进程可以使用这些方法相互通信。下面讨论了这些通信方法:

点对点通信

​MPI 点对点通信是 MPI 中最常用的通信方法。它涉及在同一通信器中将消息从一个进程传输到特定进程。MPI 提供阻塞(同步)和非阻塞(异步)点对点通信。使用阻塞通信,MPI 进程将消息发送到另一个 MPI 进程,并等待接收进程完全正确地接收消息后再继续工作。另一方面,使用非阻塞通信的发送进程将消息发送到另一个 MPI 进程并继续工作,而无需等待以确保接收进程已正确接收消息。

集体沟通

在这种类型的 MPI 通信方法中,一个进程向同一通信器中的所有进程(包括它自己)广播消息。

单向沟通

采用MPI单边通信方式,一个进程可以直接访问另一个进程的内存空间,而无需经过另一个进程的参与

Nvidia

标签匹配和集合卸载是 Mellanox 采用的一项技术,用于将 MPI 消息的处理从主机卸载到网卡上。 采用该技术可以实现 MPI 消息的零复制,即消息直接分散到用户的缓冲区,无需中间缓冲和复制。 它还通过 Mellanox 设备提供完整的集合通信进度。 这种重叠功能使 CPU 能够在适配器收集远程数据的同时执行应用程序的计算任务。ConnectX-5 IC 中提供了此功能

在 MPI 中,发送/接收操作通过通常由标签、通信器和源组成的包络进行标识。 信封用于将给定消息与其相应的用户缓冲区进行匹配。 给定进程发布的缓冲区的整个列表称为匹配列表。 从匹配列表中找到给定消息对应的缓冲区的过程称为标签匹配。

代码语言:javascript
复制
# 发送语义
MPI_Send( void* data, int count, MPI_Datatype datatype, int destination, int tag, MPI_Comm communicator)

#接收语义
MPI_Recv( void* data, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm communicator, MPI_Status* status)

消息传递有两种常见的协议(Eager和Rendezvous)

  • Eager – 在 Eager 协议中,消息及其所有数据被直接发送到目标。 Eager 协议主要用于中小型消息。
  • Rendezvous (约会协议) – 在 Rendezvous 协议中,事务的发起者发送一个小描述符,描述其发送数据的意图(约会)。 当目标有匹配的缓冲区时,它将从启动器获取数据。 Rendezvous 主要用于大型消息。参考如下过程:
    • 发送方仅将信封发送到目标进程
    • 当接收者想要数据(并且有地方放置数据)时,它会告诉发送者“向我发送数据”
    • 发送方可以发送数据
    • 如果到达的信封过多怎么办?MPI 对于意外消息的数量有一个相当大的限制可以处理

MPI中Eager和Rendezvous协议的消息大小如下(参数可配置)

Eager 协议的显著特点

  • 减少同步延迟
  • 简化编程(仅MPI_Send
  • 需要大量缓冲
  • 可能需要 CPU 的积极参与来耗尽接收端的网络
  • 可能会引入额外的副本(缓冲到最终目的地)
  • 最大程度减少延迟

Eager 协议的可扩展性

  • 必须为任意发送者保留缓冲
  • 用户模型不匹配(通常期望缓冲完全分配给使用的连接)
  • 实现中的常见方法是为所有成员提供相同的缓冲MPI_COMM_WORLD;这是针对不可扩展计算的优化
  • 利用消息模式的可扩展实现是可能的(但尚未广泛实现)

Rendezvous 会合/约会协议

发送者只有在接收者表示准备好(信号)时才开始发送。envelope首先传送消息,然后当接收缓冲区可用于接收时传送数据。因此,只有信封缓冲才是必要的。

会合协议的显著特点

  • 坚固安全(信封数量限制除外)
  • 可以删除副本(用户直接对用户)
  • 更复杂的编程(等待/测试)
  • 可能会引入同步延迟(等待接收方确认发送)
  • 三次消息握手引入了延迟

选择 MPI 发送模式

对于 MPI 发送模式,没有完美的选择;然而确实存在一些很好的性能建议场景:

  • Eager 比 rendezvous 快,直到
    • 意外数据(Data is unexpected)2*latency < 从缓冲区复制的时间
  • Ready 可以强制 Eager,但需要预先发布接收
    • 数据较长不太长时效果最佳(以 s/r 衡量)
  • 选择同步
    • 当 MPI 实现的流量控制不充分且消息很大时

标签匹配和集合卸载是为 IB/RoCE 传输定义的。

标签匹配卸载使进程能够将匹配列表的头部推送到NIC以对其进行标签匹配。 适配器将处理 MPI 消息并执行标签匹配。

  • 如果找到匹配的缓冲区,消息将直接分散到用户的缓冲区。
  • 如果没有找到匹配的缓冲区,消息将被分散到通用缓冲区中,并被传递到SW以完成对匹配列表的其余部分的标签匹配。

总结一下:

  • 软件实现中的标签匹配卸载旨在通过在消息到达之前发布匹配缓冲区来实现。
  • 集合点卸载扩展了标签匹配功能。 凭借此功能,ConnectX-5 能够识别 Rendezvous 协议消息、收集远程数据并将其分散到匹配缓冲区,而无需任何软件干预。 在 Rendezvous 的软件实现中,只有当软件明确调用 MPI 库时才能收集远程数据,从而在数据传输的发起者和目标之间创建依赖关系。 由于 Mellanox 设备的交会进度重叠,数据传输是单向的,从而节省了用于应用程序计算任务的宝贵 CPU 周期。

要了解有关标签匹配的更多信息,请参阅:

了解开发人员的标签匹配(Understanding Tag Matching for Developers)标签匹配动词 API 和实现示例(Tag Matching Verbs API and Implementation Example)

TAG Match与Rendezvous流程图

参考

官方文档: https://www.mpi-forum.org/docs/

了解 MPI 标签匹配和集合点(RENDEZVOUS)卸载 (CONNECTX-5): https://enterprise-support.nvidia.com/s/article/understanding-mpi-tag-matching-and-rendezvous-offloads--connectx-5-x

MPI协议: https://pavanakumar.github.io/post/mpi-protocols

https://en.wikipedia.org/wiki/Message_Passing_Interface

MPI简介: https://hpc.nmsu.edu/discovery/mpi/introduction/

晓兵(ssbandjl)

博客: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts | https://chattoyou.cn

DPU专栏

https://cloud.tencent.com/developer/column/101987

技术会友: 欢迎对DPU/智能网卡/卸载/网络,存储加速/安全隔离等技术感兴趣的朋友加入DPU技术交流群

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 术语
  • 简介
    • MPI 通信方法
      • 点对点通信
      • 集体沟通
      • 单向沟通
    • Nvidia
      • 消息传递有两种常见的协议(Eager和Rendezvous)
        • MPI中Eager和Rendezvous协议的消息大小如下(参数可配置)
          • Eager 协议的显著特点
            • Eager 协议的可扩展性
              • Rendezvous 会合/约会协议
                • 会合协议的显著特点
                  • 选择 MPI 发送模式
                    • TAG Match与Rendezvous流程图
                    • ​参考
                    • 晓兵(ssbandjl)
                      • DPU专栏
                      相关产品与服务
                      GPU 云服务器
                      GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档