中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

产品介绍

概念介绍

MPI(Message Passing Interface)是一种支持多语言编程的并行计算通讯应用接口规范,它定义了一组函数和语法规则,使得多个进程可以在不同的计算机节点上协同工作,共同完成一个任务。MPI有多种实现,例如Open MPI、Intel MPI、MPICH等。

Hyper MPI是在Open MPI的基础上,结合Open UCX框架的点对点通信操作,开发出专为集合通信优化的UCG框架,该框架中实现了多种集合操作加速算法。Hyper MPI具有高性能、大规模性、可移植性等特点,以支持制造、气象和政府HPC场景的解决方案,其长远意义在于构建以鲲鹏服务器为硬件基础的高性能计算生态。

价值

MPI支持点对点通信和集合通信,可以实现多种通信模式,例如广播、散射、聚集等。其中,仅MPI 3.1标准中定义的集合通信函数就高达30多种。在众多集合通信操作函数中,Allreduce、Bcast、Barrier、Allgatherv、Gatherv和ScattervAllreduce、Bcast、Barrier和Alltoallv的调用频率较高。

Hyper MPI在集合通信模式中,不管是大包数据,还是小包数据,它的通信性能相较于其它MPI的实现,具有以下优势:

  • 高性能

    Hyper MPI针对Allreduce、Bcast、Barrier、Allgatherv、Gatherv和ScattervAllreduce、Bcast、Barrier和Alltoallv集合通信函数实现基于拓扑感知的算法优化(包括非阻塞接口),Hyper MPI相较于开源Open MPI,集合通信性能有较高提升。

  • 构筑自由生态

    目前业界中主流MPI的实现均采用闭源发布策略,且不支持鲲鹏生态。Hyper MPI开源发布,支持以鲲鹏芯片为核心的服务器和集群。

    鲲鹏服务器具有单节点核数多、指令集简单、耗能低、价格实惠等特点,方便构建以鲲鹏芯片为硬件核心的计算生态。

功能

  • Hyper MPI支持MPI 3.1标准,主要优化的集合通讯操作如表1所示。

    Hyper MPI集合通讯算法支持最大发送数据包长度为232字节。

    表1 集合通讯操作说明

    集合操作名称

    函数简介

    阻塞接口函数原型

    非阻塞接口函数原型

    Allreduce

    Allreduce是MPI组规约函数。

    作用:将各个独立进程中的send buffer进行数学(例如加法、乘法)或逻辑(例如与、或)运算,然后将结果同步到通信域内所有进程的receive buffer中。

    int MPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
    int MPI_Iallreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, MPI_Request *request)

    Bcast

    Bcast是MPI广播操作函数。

    作用:root进程将buffer中的信息发送给通讯域内其余进程,使得所有进程获取相同的信息。

    int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm)
    int MPI_Ibcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm, MPI_Request *request)

    Barrier

    Barrier是MPI同步函数。

    作用:该通讯域中全部进程进行同步操作,即保证进程调用函数后具有良好的同步性。

    int MPI_Barrier(MPI_Comm comm)
    int MPI_Ibarrier(MPI_Comm comm, MPI_Request *request)

    Alltoallv

    Alltoallv是MPI多对多通信函数。

    作用:该通讯域中全部进程进行点对点通信操作,发送数据至其他进程,并从其他进程接收数据,且通信中每个进程发送和接收的长度可变。

    int MPI_Alltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm)
    int MPI_Ialltoallv(const void *sendbuf, const int sendcounts[], const int sdispls[], MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int rdispls[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)

    Allgatherv

    Allgatherv是MPI数据收集函数。

    作用:收集该通讯域中每个进程可变的数据,并将收集的数据传送给该通讯域中的所有进程。

    int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm)
    int MPI_Iallgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm, MPI_Request *request)

    Scatterv

    Scatterv是MPI数据分发函数。

    作用:该通讯域中根进程将不同的数据块分发给该通讯域中不同的进程。

    int MPI_Scatterv(const void *sendbuf, const int sendcounts[], const int displs[], MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
    int MPI_Iscatterv(const void *sendbuf, const int sendcounts[], const int displs[], MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm, MPI_Request *request)

    Gatherv

    Gatherv是MPI数据收集函数。

    作用:收集该通讯域中每个进程可变的数据。

    int MPI_Gatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype,                 void *recvbuf, const int *recvcounts, const int *displs,                 MPI_Datatype recvtype, int root, MPI_Comm comm)
    int MPI_Igatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf,                  const int recvcounts[], const int displs[], MPI_Datatype recvtype, int root,                  MPI_Comm comm, MPI_Request *request)
  • Hyper MPI支持Singularity容器化,即支持将Hyper MPI部署在Singularity容器中。
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词