CN114764346A - 一种数据传输方法、系统以及计算节点 - Google Patents

一种数据传输方法、系统以及计算节点 Download PDF

Info

Publication number
CN114764346A
CN114764346A CN202110048880.XA CN202110048880A CN114764346A CN 114764346 A CN114764346 A CN 114764346A CN 202110048880 A CN202110048880 A CN 202110048880A CN 114764346 A CN114764346 A CN 114764346A
Authority
CN
China
Prior art keywords
threads
group
data
thread
mpi process
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110048880.XA
Other languages
English (en)
Inventor
潘孝刚
李思聪
陈一都
陈强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202110048880.XA priority Critical patent/CN114764346A/zh
Priority to PCT/CN2021/142227 priority patent/WO2022151970A1/zh
Publication of CN114764346A publication Critical patent/CN114764346A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4418Suspend and resume; Hibernate and awake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Multi Processors (AREA)

Abstract

一种数据传输方法、系统以及计算节点,本申请中,第一MPI进程能够创建第一组第二线程,还能够将第一组第一线程产生的第一数据分解为多个第一子数据。当第一组第一线程在不使用资源时,第一组第二线程可以占用第一组第一线程的资源发送多个第一子数据。这样,第一组第二线程能够占用第一组第一线程的资源,实现数据传输,不需要为第一组第二线程分配额外的资源,有效提高了计算节点的资源利用率。且第一组第二线程中的多个第二线程可以同时发送该多个第一子数据,也即第一组第二线程并行运行,相比于单个运行的MPI进程,效率更高,能够在更短的时间内完成数据传输。

Description

一种数据传输方法、系统以及计算节点
技术领域
本申请涉及通信技术领域,尤其涉及一种数据传输方法、系统以及计算节点。
背景技术
共享存储并行编程(open multi-processing,OMP)是一种高性能计算(highperformance computing,HPC)机群中常用的编程规范,采用OMP编写的一组线程(简称OMP线程)能够共享内存,该组OMP线程可以对同一块共享内存进行数据读写,也就是说该组OMP线程中的OMP线程之间可以通过共享内存实现数据共享,以使得该组OMP线程可以并行的进行数据处理。但是对于不同组的OMP线程,各组OMP线程对应的共享内存不同,不同组的OMP线程无法通过共享内存达到数据传输。
为了能够实现不同组的OMP线程之间的数据共享,产生了基于混合并行编程(hybrid MPI and OpenMP parallel programming,MPI+OMP)模式编写的消息传递接口标准(message passing interface,MPI)进程以及OMP线程,MPI进程以及OMP线程采用串并行的运行模式,一组OMP线程可以通过MPI进程与其它组OMP线程实现数据传输。
串并结合的运行模式中,在MPI进程运行的过程中,各组OMP线程处于等待状态,空占这所在计算节点上的资源(如处理器等),存在资源浪费。
发明内容
本申请提供一种数据传输方法、系统以及计算节点,用以提高计算节点中的资源利用率。
第一方面,本申请实施例提供了一种数据传输方法,方法包括:第一MPI进程可以先创建第一组第二线程,创建的第一组第二线程中第二线程的数量可以与第一组第一线程中第一线程的数量相同。第一MPI进程还可以将第一组第一线程进行数据处理产生的第一数据分解为多个第一子数据,第一子数据的数量可以与第一组第二线程中第二线程的数量相同,也可以与第一组第二线程的数量不同。当第一组第一线程处于等待状态,第一组第二线程可以占用第一组第一线程的资源发送多个第一子数据,其中,第一组第二线程中的一个第二线程可以占用第一组第一线程中的一个第一线程的资源发送第一子数据,本申请实施例并不限定一个第二线程发送的第一子数据的数量。
通过上述方法,第一组第一线程能够实现数据处理功能,第一组第二线程能够实现数据传输功能。第一组第二线程能够占用第一组第一线程的资源,实现数据传输,这样不需要为第一组第二线程分配额外的资源,有效提高了计算节点的资源利用率。另外,第一组第二线程中的多个第二线程可以同时发送该多个第一子数据,也即第一组第二线程并行运行,相比于单个运行的MPI进程,效率更高,能够在更短的时间内完成数据传输。
在一种可能的设计中,第一组第一线程的资源为第一组第一线程占用的处理器。本申请实施例并不限定处理器的类型,例如该处理器可以是中央处理器(centralprocessing unit,CPU)、现场可编程门阵列(field programmable gate array,FPGA)、图形处理器(graphics processing unit,GPU)等。
通过上述方法,第二线程可以占用第一线程的处理器,使得在第一线程不再占用处理器的情况下,第二线程可以通过该处理器进行数据传输。
在一种可能的设计中,第一组第一线程支持资源共用,也即第一线程能够让出自己的资源,如让出处理器。
通过上述方法,第一组第一线程能够让出资源,保证了第一组第二线程能够顺利占用第一组第一线程的资源。
在一种可能的设计中,第一组第二线程在第一组第一线程处于等待状态的情况下,占用第一组第一线程的资源发送多个第一子数据时,第一MPI进程可以先为第一组第二线程配置资源,第一组第二线程的资源与第一组第一线程的资源相同。在配置了资源之后,在第一组第一线程处于等待状态的情况下,第一组第二线程可以占用第一MPI进程为第一组第二线程配置的资源发送多个第一子数据。
通过上述方法,第一MPI进程可以为第一组第二线程配置与第一组第一线程相同的资源,以使得第一组第二线程可以占用第一组第一线程的资源。
在一种可能的设计中,第一线程为OMP线程。
通过上述方法,OMP线程产生的数据可以由第一组第二线程进行传输,这样第一组第二线程可以实现第一MPI进程的数据传输功能,既能保证数据传输效率,还能够提高资源利用率。
在一种可能的设计中,第一组第二线程在第一组第一线程处于等待状态的情况下,占用第一组第一线程的资源接收多个第二子数据。本申请实施例并不限定一个第二线程接收的第二子数据的数量。
通过上述方法,第一组第二线程除了能够发送多个第一子数据,还能够占用第一组第一线程的资源接收多个第二子数据。
在一种可能的设计中,第一MPI进程执行数据传输与第一组第一线程执行数据处理的运行模式为串并行的运行模式。也即第一MPI进程执行数据传输和第一组第一线程执行数据处理是先后进行的。具体到数据传输过程,第一MPI进程可以与第一组第二线程并行执行数据传输。具体到数据处理过程,第一组第一线程中的多个第一线程可以并行执行数据处理。
通过上述方法,数据传输过程和数据处理过程保持串并行的运行模式,由于第一MPI进程与第一组第二线程均参与了数据传输过程,有效地提高了数据传输效率。
在一种可能的设计中,第一组第二线程在第一组第一线程处于等待状态的情况下发送多个第一子数据时,第一MPI进程也可以参与发送第一子数据。也即第一组第二线程在第一组第一线程处于等待状态的情况下,与第一MPI进程一同发送多个第一子数据,其中,第一组第二线程占用第一组第一线程的资源,第一MPI进程可以发送一个或多个第一子数据。
通过上述方法,第一MPI进程也可以参与发送第一子数据,可以进一步提高数据传输效率,减少数据传输时间。
在一种可能的设计中,第一组第二线程发送多个第一子数据之前,第一MPI进程可以通过传输处理函数的方式指示第一组第二线程中每个第二线程发送的第一子数据。
通过上述方法,第一MPI进程可以通过处理函数告知第一组第二线程中每个第二线程需要发送哪一个或哪几个第一子数据,这样可以保证第一组第二线程中的每个第二线程后续可以根据指示发送第一子数据,保证数据传输的准确性以及有效性。
在一种可能的设计中,第一组第二线程在第一组第一线程的等待状态的情况下接收多个第二子数据时,第一MPI进程也可以参与接收第二子数据。第一组第二线程可以在第一组第一线程的等待状态的情况下与第一MPI进程一起接收多个第二子数据,其中第一组第二线程中的每一个第二线程接收一个或多个第二子数据,第一组第二线程占用第一组第一线程的资源。
通过上述方法,第一MPI进程也可以参与接收第二子数据,加快数据接收过程,可以进一步提高数据传输效率,减少数据传输时间。
在一种可能的设计中,第一组第二线程接收多个第二子数据之前,第一MPI进程可以先获取第二数据的信息,第二数据包括多个第二子数据,第二数据的信息包括第二数据的总大小以及第二数据在内存中的存储地址或起始地址。这样,第一MPI进程根据第二数据的信息指示第一组第二线程接收的多个第二子数据,如通过传递处理函数的方式指示第一组第二线程中每个第二线程接收的第二子数据的大小、第二子数据在内存中的存储地址或起始地址,或第二子数据在第二数据中的位置等。
通过上述方法,第一MPI进程可以告知第一组第二线程中每个第二线程需要接收哪一个或哪几个第二子数据,这样可以保证第一组第二线程中的每个第二线程后续可以根据指示接收第二子数据,保证能够准确、完整的接收各个第二子数据,确保数据传输的准确性以及有效性。
在一种可能的设计中,第二数据为第二组第一线程中的第一线程进行数据处理所产生的数据,是第一组第一线程中第一线程进行数据处理所需要的数据。
通过上述方法,第一组第二线程能够接收第一组第一线程进行数据处理所需要的数据,这样第一组第一线程可以获取该数据,以便进行数据处理。
第二方面,本申请还提供了一种数据传输系统,有益效果可以参见第一方面及第一方面任意一种可能的设计的描述此处不再赘述。
系统包括第一计算节点和第二计算节点,第一计算节点包括第一MPI进程、第一组第一线程以及第一组第二线程,第二计算节点包括第二MPI进程、第二组第一线程以及第二组第二线程。
第一组第一线程,用于进行数据处理,产生第一数据。
第一MPI进程,用于创建第一组第二线程,将第一数据分解为多个第一子数据。
第一组第二线程,用于在第一组第一线程处于等待状态的情况下,占用第一组第一线程的资源向第二计算节点发送多个第一子数据。
第二MPI进程,用于指示第二组第二线程接收多个第一子数据。
第二组第二线程,用于在第二组第一线程处于等待状态的情况下,占用第二组第一线程的资源接收多个第一子数据。
第二组第一线程,用于获取多个第一子数据进行数据处理。
在一种可能的设计中,第一组第一线程的资源可以为第一组第一线程占用的处理器;第二组第一线程的资源可以为第二组第一线程占用的处理器。
在一种可能的设计中,第一组第一线程和第二组第一线程支持资源共用,这样第一线程可以在不使用资源的情况下,如处于等待状态时,让出资源以便第二线程使用。
在一种可能的设计中,第一MPI进程该可以为第一组第二线程配置资源,第一组第二线程的资源与第一组第一线程的资源相同。
第一组第二线程在发送多个第一子数据时,可以在第一组第一线程处于等待状态的情况下,占用第一MPI进程为第一组第二线程配置的资源发送多个第一子数据。
在一种可能的设计中,第二MPI进程可以为第二组第二线程配置资源,第二组第二线程的资源与第二组第一线程的资源相同。
第二组第二线程在接收多个第一子数据时,可以在第二组第一线程处于等待状态的情况下,占用第二MPI进程为第二组第二线程配置的资源接收多个第一子数据。
在一种可能的设计中,第一线程为OMP线程。
在一种可能的设计中,第一MPI进程执行数据传输与第一组第一线程执行数据处理的运行模式为串并行的运行模式;第二MPI进程执行数据传输与第二组第一线程执行数据处理的运行模式为串并行的运行模式。
在一种可能的设计中,第一MPI进程可以与第一组第二线程一起,发送多个第一子数据。第二MPI进程可以与第二组第二线程一起,接收多个第一子数据。
在一种可能的设计中,第一组第二线程发送多个第一子数据之前,第一MPI进程可以通过传输处理函数的方式指示第一组第二线程中每个第二线程发送的第一子数据。
在一种可能的设计中,第二组第二线程接收多个第一子数据之前,第二MPI进程可以通过传输处理函数的方式指示第二组第二线程中每个第二线程接收的第一子数据。
第三方面,本申请还提供了一种计算节点,有益效果可以参见第一方面及第一方面任意一种可能的设计的描述此处不再赘述。计算节点的结构中包括处理器和存储器,处理器被配置为执行上述第一方面及第一方面任意一种可能的设计的方法中相应的功能。存储器与处理器耦合,其保存必要的程序指令和数据。计算节点的结构中还包括通信接口,用于与其他设备进行通信。
第四方面,本申请还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面的方法。
第五方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面的方法。
第六方面,本申请还提供一种计算机芯片,芯片与存储器相连,芯片用于读取并执行存储器中存储的软件程序,执行上述各方面的方法。
附图说明
图1为本申请提供的一种系统的架构示意图;
图2A~图2B为本申请提供的一种第一线程和第二线程运行方式的示意图;
图3为本申请提供的一种创建第二线程的方法示意图;
图4为本申请提供的一种配置第二线程的方法示意图;
图5为本申请提供的一种数据传输的方法示意图;
图6为本申请提供的一种数据传输的方法示意图;
图7为本申请提供的一种消息的结构示意图;
图8为本申请提供的一种数据传输的方法示意图;
图9为本申请提供的一种数据传输的方法示意图;
图10为本申请提供的一种计算节点的结构示意图。
具体实施方式
MPI进程以及OMP线程可以采用串并行的运行模式,这种串并行的运行模式能够保证一组OMP线程可以通过MPI进程与其它组OMP线程实现数据传输。
以两组OMP线程和两个MPI进程,分别为第一组OMP线程、第二组OMP线程、第一MPI进程以及第二MPI进程为例,对MPI进程以及OMP线程采用串并行的运行模式的运行过程进行说明:
第一组OMP线程并行运行,当需要与第二组OMP线程传输数据时,第一组OMP可以将需要发送给第二组OMP线程的数据传输给第一MPI进程,第一组OMP线程进入等待状态。第一MPI进程将获取的数据发送给第二MPI进程,第二MPI进程将数据发送给进入等待状态的第二组OMP线程,第二组OMP线程在获取数据后并行运行。
从上述说明可以看出,当第一MPI进程和第二MPI进程运行的过程中,第一组OMP线程和第二组OMP线程处于等待状态,空占着计算节点上的资源,导致了资源浪费。为此本申请实施例提供了一种数据传输方法以及设备,用于提升数据传输效率。在对本申请实施例提供饿的数据传输方法以及设备介绍之前,先对本申请实施例适用的系统架构进行说明。
如图1所示,为本申请实施例提供的一种系统的架构示意图,该系统中包括多个计算节点。一个应用可以分布式的部署在该多个计算节点中,由该多个计算节点协作以共同实现该应用的功能。
该多个计算节点可以承担该应用中的一部分数据处理工作,该多个计算节点并非简单的并行运行,也即每个计算节点并非是独立的完成各自的数据处理工作,而是需要在进行数据处理的过程中,与该多个计算节点中的其它计算节点进行数据交互,例如从其它计算节点获取进行数据处理过程中所需的数据,或将自身在数据处理过程中产生的数据发送给其它计算节点。
具体到每个计算节点,该计算节点的数据处理功能以及数据交互功能通过部署在该计算节点上的线程和/或进程实现。
每个计算节点上部署有两种线程,一种为用于实现所在计算节点中数据处理功能的第一线程。每个计算节点上可以部署至少一组第一线程,一组第一线程中包括多个第一线程,每个第一线程可以占用该计算节点上的资源(如处理器、内存空间)。不同第一线程可以占用相同的资源,如每个第一线程能够实现内存共享,对同一个内存进行数据读写。该不同第一线程也可以占用不同的资源,例如,不同第一线程可以占用不同处理器,通过处理器进行数据处理。每个计算节点上的一组第一线程中的多个第一线程可以并行运行。不同组第一线程之间不能直接进行数据传输。本申请实施例并不限定该第一线程的具体类型,例如该第一线程可以为OMP线程,也可以是其它能够并行运行的线程。
另一种为用于实现数据交互的功能的第二线程,每个计算节点上可以部署至少一组第二线程,一组第二线程中包括多个第二线程,每个第二线程可以占用该计算节点上的资源(如处理器、内存空间)。不同第二线程可以占用相同的资源,如每个第二线程能够实现内存共享,对同一个内存进行数据读写。该不同第二线程也可以占用不同的资源,例如,不同第二线程可以占用不同处理器,通过处理器实现数据处理。
一组第二线程可以通过该计算节点上的MPI进程获取一组第一线程中的任一第一线程在数据处理过程中产生的数据,还可以将该组第一线程在数据处理过程中产生的数据发送给另一组第二线程。另一组第二线程可以将接收到的数据传输给另一组第一线程。
也就是说,借助两组第二线程之间的数据交互,不同组第一线程可以实现数据传输。
当一组第二线程和一组第一线程位于第一计算节点,另一组第二线程和另一组第一线程位于第二计算节点,两组第二线程之间的数据交互为不同计算节点之间的数据交互,也即第一计算节点和第二计算节点之间的交互。
当两组第二线程、两组第一线程均位于同一计算节点,两组第二线程之间的数据交互为同一计算节点内部的数据交互。
综上,一组第二线程与一组第一线程对应,一组第二线程负责对应的该组第一线程的数据传输。例如,发送该组第一线程产生的数据,又例如,接收该组第一线程所需的数据。
对于任一组第二线程中的一个第二线程可以与对应的一组第一线程中的一个第一线程占用相同的资源。例如,当该组第一线程处于等待状态时,该组第二线程可以通过该组第一线程所占用的处理器,进行数据传输。
除了第一线程和第二线程之外,每个计算节点上还可以部署MPI进程,该MPI进程能够与第一线程并行运行,进行数据处理;还可以与一组第二线程并行运行,进行数据交互。本申请实施例并不限定一个计算节点上部署的MPI进程的数量,可以为一个,也可以为多个。
本申请实施例中,一个MPI进程可以创建一组第二线程。从第二线程的描述可知,第二线程能够实现数据交互。而MPI进程本身也具备数据传输功能,需要完成配置给MPI进程的数据传输任务,该数据传输任务是为了实现不同组第一线程的数据传输所配置的,该数据传输任务可以是接收一组第一线程所需的数据,或发送一组第一线程所产生的数据。
MPI进程创建一组第二线程的目的在于,将自身的数据传输任务分摊给该组第二线程。由该组第二线程并行运行完成该数据传输任务。该组第二线程并行运行完成该数据传输任务的过程可以参见前述内容中第二线程进行数据传输的说明。
需要说明的是,MPI进程可以将自身的数据传输任务全部分摊给该组第二线程,由该组第二线程完成整个数据传输任务。MPI进程也可以将自身的数据传输任务的部分分摊给该组第二线程,自己保留一部分数据传输任务,由该组第二线程和该MPI进程共同完成整个数据传输任务。
在本申请实施例中,对于任一计算节点上,一组第二线程与对应的一组第一线程存在两种可能的运行方式。为方便说明,以第一组第一线程和第一组第二线程的运行方式为例进行说明。
第一种、第一组第一线程先运行,第一组第二线程后运行。
如图2A所示,为本申请实施例提供的第一种运行方式。图2A中,如图2A所示的第一种运行方式可简单概括为:创建第一组第一线程->第一组第一线程并行运行->创建第一组第二线程->第一组第二线程并行运行->第一组第一线程和第一组第二线程交替运行(也即第一组第一线程并行运行后,第一组第二线程并行运行,之后第一组第一线程并行运行,第一组第二线程并行运行)。
图2A中,先创建第一组第一线程,第一组第一线程中的多个第一线程并行运行;在需要与其它组第一线程实现数据传输时,第一组第一线程中的多个第一线程停止运行,处于等待状态(创建第一组第一线程->第一组第一线程并行运行)。
MPI进程创建第一组第二线程,第一组第二线程中的多个第二线程的数量可以与一组第一线程中的第一线程的数量相同。在创建了第一组第二线程后,MPI进程可以将第一组第一线程产生的数据分解为多个子数据,分配给第一组的第二线程,第一组第二线程中的多个第二线程并行运行,将第一组第一线程产生的数据发送给第二组第一线程对应的第二组第二线程。第一组第二线程中的多个第二线程也可以并行运行从第二组第一线程对应的第二组第二线程接收第一组第一线程所需的数据,该数据为第二组第一线程产生的数据(创建第一组第二线程->第一组第二线程并行运行)。
当第一组第二线程接收到第一组第一线程所需的数据,第一组第一线程获取第一组第二线程接收的数据,进行数据处理。当第二组第二线程接收到第一组第一线程产生的数据,第二组第一线程可以获得第一组第一线程产生的数据,进行数据处理。由此,第一组第一线程和第二组第一线程可以通过第一组第二线程和第二组第二线程实现数据传输。
之后,第一组第二线程停止运行,处于等待状态,第一组第一线程并行运行。第一组第一线程和第一组第二线程交替运行,对于每种线程,采用并行运行的方式(第一组第一线程和第一组第二线程交替运行)。
第二种、第一组第二线程先运行,第一组第一线程后运行。
如图2B所示,为本申请实施例提供的第二种运行模块。图2B中,第二种运行方式可简单概括为:创建第一组第二线程->第一组第二线程并行运行->创建第一组第一线程->第一组第一线程并行运行->第一组第二线程和第一组第一线程交替运行(也即第一组第二线程并行运行后,第一组第一线程并行运行,之后第一组第二线程并行运行,第一组第一线程并行运行)。
MPI进程可以先创建第一组第二线程,第一组第二线程中的多个第二线程并行运行,从第二组第一线程对应的第二组第二线程接收第一组第一线程所需的数据,该数据为第二组第一线程产生的数据。当第一组第二线程接收到第一组第一线程所需的数据,第一组第一线程获取第一组第二线程接收的数据。第一组第一线程和第二组第一线程之间可以通过第一组第二线程和第二组第二线程实现数据传输。
之后,第一组第二线程停止运行,处于等待状态。第一组第一线程并行运行,进行数据处理。采用类似的方式,第一组第二线程可以在第一组第一线程处于等待状态时,将第一组第一线程产生的数据发送给第二组第一线程对应的第二组第二线程,或者从第二组第一线程对应的第二组第二线程接收第一组第一线程所需的数据。第一组第一线程和第一组第二线程交替运行,对于每种线程,采用并行运行的方式。
与基于MPI+OMP模式编写的MPI进程以及OMP线程相比,本申请实施例中第一线程能够实现OMP线程的功能,一组第二线程可以实现一个MPI进程的功能,该组第二线程能够在一组第一线程处于等待状态的情况下,占用该组第一线程占用的资源,在不影响该组第一线程情况下,能够使得计算节点中资源利用率提升。另外,该组第二线程中的多个第二线程是并行运行的,相比于单个运行的MPI进程,效率更高,能够在更短的时间内完成数据传输。
在本申请实施例中在一组第二线程并行运行与另一组第二线程进行数据传输之前,需要先执行一些操作。例如,需要先创建第二线程,以及建立第一线程和第二线程的对应关系。
下面分别对这两种操作进行说明。
(1)、第二线程的创建。
如图3所示,以第一MPI进程创建第一组第二线程为例,对本申请实施例提供的一种第二线程的创建方法进行说明,参见图3,该方法包括:
步骤301:第一MPI进程获取第二线程的配置参数。该配置参数是创建第二线程所需的参数,该配置参数包括但不限于:数量参数(指示创建第二线程的数量)、是否使能第二线程(是否可以创建并运行多个第二线程)。
本申请实施例并不限定计算节点获取该配置参数的方式,例如,该配置参数可以是默认的,保存在该计算节点本地。又例如,计算节点可以向用户展示第二线程的配置参数输入界面,提示用户输入该第二参数的配置参数,计算节点在检测到用户的输入后,确定该第二线程的配置参数。
步骤302:第一MPI进程根据该第二线程的配置参数创建第一组第二线程。
当该配置参数中不包括数量参数时,第一MPI进程获取第一线程的数量参数(该第一线程的数量参数指示创建第一线程的数量),根据第一线程的数量参数创建第二线程,也即创建与第一线程数量相同的第二线程。
在创建了第一组第二线程之后,第一MPI进程也可以对第一组第二线程进行一些基础配置,具体可以参见步骤303。
步骤303:第一MPI进程将第一组第二线程中的各个第二线程设置为睡眠状态。
处于睡眠状态的第二线程不会占用计算节点的资源。当需要第二线程运行时,第一MPI进程指示第二线程接收数据或发送数据,为第二线程设置该第二线程所需执行的操作(也即第二线程所需执行的数据传输操作,如设置需要发送的子数据等,这里并不限定为第二线程设置所需执行的操作的方式,例如可以通过传递处理函数的方式),向该第二线程发送唤醒信号,使该第二线程从睡眠状态进入唤醒状态,处于唤醒状态的第二线程可以根据第一MPI进程设置的操作进行数据传输。
通过步骤301~步骤303可以实现第二线程的创建以及第二线程的基础配置,在本申请实施例中也允许第一MPI进程释放第一组第二线程。例如,当部署在计算节点上的应用结束之前,第一MPI进程可以释放第一组第二线程。又例如,第一MPI进程可以在用户的配置(用户可以为第一MPI进程配置释放第一组第二线程的时机)下释放第一组第二线程。
本申请不限定步骤301~步骤303执行的时间,在需要借助该第二线程进行数据传输之前任一时间均可以执行上述步骤。例如,第一MPI进程可以在第一MPI进程初始化过程中执行步骤301~303,其中,第一MPI进程初始化过程是指标准定义的MPI Init。
(2)、建立第一线程和第二线程之间的对应关系。在本申请实施例中,建立第一线程与第二线程之间的对应关系的目的是使得第一线程与第二线程可以占用相同的处理器。
如图4所示,为本申请实施例提供的一种第二线程与第一线程之间的对应关系的建立方法,参见图4,该方法包括:
步骤401:第一MPI进程在创建了第一组第二线程后,获取第一组第一线程中各个第一线程占用的处理器信息,该处理器信息用于标识处理器,本申请实施例并不限定该处理器信息的具体形态。
本申请实施例并不限定第一MPI进程获取第一组第一线程中各个第一线程占用的处理器信息的方式。例如,第一MPI进程可以查看第一组第一线程中任一第一线程的参数,该参数能够指示第一线程占用的处理器。示例性的,该参数可以是资源亲和性(threadaffinity),第一线程的资源亲和性用于表征该第一线程占用的处理器。
以第一线程为OMP线程为例,第一MPI进程可以通过openmp的标准定义的接口感知该OMP线程的资源亲和性。第一MPI进程可以通过openmp的标准定义的接口分别感知各个OMP线程的资源亲和性。
值得注意的是,第一MPI进程能够获取第一组第一线程中各个第一线程占用的处理器信息的前提是该第一组第一线程已创建完成,且已配置了第一组第一线程中各个第一线程占用的处理器。在第一组第一线程未创建的情况下,第一MPI进程无法获取第一组第一线程中各个第一线程占用的处理器信息。
步骤402:第一MPI进程配置第一组第二线程中每个第二线程占用的处理器。第一组第二线程中的一个第二线程与第一组第一线程中的一个第一线程占用的处理器相同。通过步骤402,第二线程和第一线程之间的对应关系建立完成。
本申请实施例并不限定第一MPI进程配置每个第二线程占用的处理器方式。例如,第一MPI进程可以配置第二线程的参数,该参数能够指示第二线程所占用的处理器。示例性的,该参数可以为资源亲和性,第二线程的资源亲和性用于表征该第二线程占用的处理器。为了保证一个第二线程与一个第一线程占用的处理器相同,第一MPI进程可以为第二线程配置与第一线程相同的资源亲和性。
在代码实现上,第一MPI进程可以利用pthread_setaffinity_np命令配置第二线程的资源亲和性。在操作系统中,第一MPI进程可以taskset命令配置第二线程的资源亲和性。
第一组第二线程中的一个第二线程与第一组第一线程中的一个第一线程占用的处理器相同,说明第一线程和第二线程可以占用同一个处理器。
步骤403:第一MPI进程在为第二线程配置了占用的处理器后,可以为该第二线程设置同步标记,该同步标记用于指示该第二线程已与第一线程建立了对应关系。
在第一组第二线程并行运行之前,第一MPI进程可以先判断第一组第二线程中每个第二线程是否已设置了同步标记。若第一组第二线程中每个第二线程已设置了该同步标记,第一MPI进程可以唤醒第一组第二线程中的多个第二线程,触发第一组第二线程中的多个第二线程并行运行,否则,第一MPI进程可以执行步骤401~步骤403。
需要说明的是,若第一MPI进程无法获取第一组第一线程占用的处理器信息,第一MPI进程也可以为第二线程配置占用的处理器。例如第一MPI进程配置每个第二线程的占用任一处理器。之后,第一组第二线程可以并行运行。在后续过程中,如第一组第一线程创建并并行运行结束后,需第一组第二线程再次并行运行,第一MPI进程可以先执行步骤401~403,之后,再触发第一组第二线程中的多个第二线程并行运行。
在完成了上述配置操作之后,各个计算节点再利用并行运行的第二线程实现与其它计算节点的数据传输。
需要说明的是,第一线程和第二线程之间存在一一对应的对应关系。也即一个第一线程对应一个第二线程。对于存在对应关系的一个第一线程和一个第二线程,该第一线程和该第二线程占用的处理器相同。第一组第一线程中第一线程的数量与第一组第二线程的数量是相同的。
下面以第一MPI进程创建的一组第二线程为第一组第二线程,第二MPI进程创建的一组第二线程为第二组第二线程为例,结合附图5对本申请实施例提供的一种数据传输方法进行说明,参见图5,该方法包括:
步骤501:第一MPI进程确定需要并行运行的第一组第二线程中的多个第二线程。
本申请实施例并不限定第一MPI进程确定需要并行运行第一组第二线程中的多个第二线程的方式。例如,可以设置并行运行第一组第二线程中的多个第二线程的条件,第一MPI判断是否满足该条件,在满足该条件的情况下,确定需要并行运行第一组第二线程中的多个第二线程。
第一MPI进程可以根据如下的部分或全部确定需要并行运行第一组第二线程中的多个第二线程。
条件1、待发送的数据大于阈值。
当待发送的数据较小时,通过第二线程并行运行的实现数据传输的效率提升会较小,而且相较于采用一个MPI进程传输数据的方式,通过该多个第二线程发送数据的方式可能会使资源消耗降低的效果不明显。故而,可以设置待发送的数据所需满足的最小数据量(也即该阈值)。
条件2、第一组第一线程中的多个第一线程处于等待状态。
当第一线程处于等待状态时,说明第一线程当前无法进行数据处理,需要第一组第二线程中的多个第二线程将第一组第一线程产生的数据发送给其它组第二线程(这里以其它组为第二组为例),或者从其它组第二线程获取第一组第一线程需要的数据。
条件3、用户预先配置需采用多个第二线程并行运行模式。
用户可以修改第一MPI进程所在计算节点上的应用的启动参数,该启动参数可以指示该计算节点中是否允许采用多个第二线程并行运行模式。该启动参数是应用在启动过程需要遵循的参数。
例如,用户可以修改该启动参数,使得该启动参数指示该计算节点中允许采用多个第二线程。第一MPI进程在该应用启动时,调用该应用的启动参数,根据启动参数确定能够采用多个第二线程并行运行模式。
应需理解的是本申请实施例并不限定条件的具体内容,上述条件仅是举例。
步骤502:第一MPI进程将待发送的数据分解为多个子数据。
该待发送的数据分解后的生成的多个子数据的数量可以等于第一组第二线程中第二线程的数量,也可以小于第一组第二线程中第二线程的数量,例如,该多个子数据的数量等于第一组第二线程中第二线程的数量加一,在后续分配子数据的过程中,第一MPI进程可以保留其中一个子数据,负责该子数据的发送。
这里并不限定第一MPI进程分解该数据的方式,例如第一MPI进程可以随机对该数据进行切分,切分为多个子数据,该多个子数据的数据大小可以相同,也可以不同。又例如,第一MPI进程可以按照预设值,将该待发送的数据分解为多个子数据,每个子数据的大小可以等于该预设值。
步骤503:第一MPI进程为每个第二线程分配一个子数据。
需要说明的是,当子数据的数量等于第一组第二线程中第二线程的数量时,第一MPI进程为每个第二线程分配一个子数据,第一MPI进程为每个第二线程分配的子数据不同。当子数据的数量等于第一组第二线程中第二线程的数量加一时,第一MPI进程为自己保留其中一个子数据;对于剩余的子数据,第一MPI进程为每个第二线程分配一个子数据。
步骤504:第一MPI进程触发第一组第二线程中的一个第二线程将所分配的子数据发送给第二组第二线程中一个第二线程。第一组第二线程中的一个第二线程可以占用处理器发送该子数据,该处理器是第一组第一线程一个第一线程中占用的处理器。
为了能够使得第一线程和第二线程能够占用相同的处理器,可以预先配置第一线程支持处理器共用,也即第一线程能够让出处理器。例如,当第一线程为OMP线程时,可以将OMP线程设置为消极模式,消极模式下的OMP线程允许其他线程占用该OMP线程的处理器。同样的,第一MPI进程也可以配置第二线程支持处理器共用,能够让出该处理器,让其它线程使用。例如,在第二线程发送了子数据之后,第一MPI进程可以设置第二线程处于睡眠状态,不再继续占用该处理器。
作为数据发送侧的第一组第一线程中的第一线程和第一组第二线程中的第二线程,在支持处理器共用的第一线程处于等待状态的情况下,第一MPI进程可以唤醒处于睡眠状态的第二线程。第二线程占用第一线程的处理器发送子数据。第二线程发送了该子数据之后,第一MPI进程可以设置该第二线程进入睡眠状态。之后,第一线程可以继续占用处理器执行操作。
作为数据接收侧的第二组第一线程中的第一线程和第二组第二线程中的第二线程,第二线程占用第一线程的处理器接收了该子数据之后,第二MPI进程可以设置该第二线程进入睡眠状态。之后,第一线程可以继续占用处理器执行操作。
在执行步骤504时,若第一组第二线程和第二组第二线程部署在同一计算节点,第一组第二线程和第二组第二线程可以通过共享内存的方式实现子数据的发送以及接收。
示例性的,在该计算节点中,可以为第一组第二线程和第二组第二线程分配相同的内存,也就是说,该第一组第二线程和第二组第二线程均可以对该内存进行数据读写,该内存即为共享内存。对于第一组第二线程中的一个第二线程,可以预先为该第二线程在该内存中配置子空间,该第二线程只能从该内存中的子空间读取数据,或将数据写入该子空间。对于第二组第二线程中的一个第二线程,可以预先为该第二线程在该内存中配置子空间,该第二线程只能从该内存中的子空间读取数据,或将数据写入该子空间。这样,第一组第二线程中的一个第二线程的子空间与第二组第二线程中的一个第二线程的子空间相同,第一组第二线程中的一个第二线程与第二组第二线程中的一个第二线程可以对同一个子空间进行数据读写。
在第一组第二线程中的一个第二线程将子数据写入到子空间后,第二组第二线程中的一个第二线程可以从该子空间中读取子数据。
在执行步骤504时,若第一组第二线程和第二组第二线程部署在不同计算节点,第一组第二线程和第二组第二线程可以通过不同计算节点之间的传输链路实现子数据的发送以及接收。
例如,第一组第二线程中的第二线程和第二组第二线程中的第二线程是对应的。第一组第二线程的第二线程和第二组第二线程中的第二线程的对应关系可以通过第二线程的编号实现。例如,可以预先为第一组第二线程中的各个第二线程以及第二组第二线程中的各个第二线程配置编号,编号相同的第一组第二线程中的第二线程与第二组第二线程中的第二线程是对应的。
第一组第二线程中的第二线程只能接收第二组第二线程中对应的第二线程发送的数据,或向第二组第二线程中对应的第二线程发送数据。这样第一组第二线程中的各个第二线程可以同时向第二组第二线程中对应的第二线程进行数据传输。
又例如,第一MPI进程可以通过向第一组第二线程每个第二线程传递处理函数的方式指示向第二组第二线程发送该多个子数据,该处理函数可以指示第二线程发送哪一个子数据,还可以指示第二线程将该子数据发送到哪里(如指示接收端内存中的存储地址)。当第一MPI进程也参与子数据发送,第一MPI进程可以自行决定自身需要发送的子数据。
在不同传输模式下,处理函数所指示的内容不同,例如在急迫模式下,处理函数中可以指示需要发送的该子数据以及该子数据描述信息。又例如,在汇合模式下推送(PUT)子模式,处理函数中可以指示第二线程发起PUT操作,告知需要发送的该子数据以及接收端内存中存储数据的起始地址。关于各种模式中数据传输的方法可以参见图6、图8所示的实施例。
需要说明的是,当第一MPI进程本身也负责一个子数据的发送,第一MPI进程可以与第一组第二线程并行运行进行子数据的发送,第一MPI发送子数据的方式与第一组第二线程中的第二线程发送子数据的方式类似,具体可以参见前述说明。类似的,当第二MPI进程本身也负责一个子数据的接收,第二MPI进程可以与第二组第二线程并行运行进行子数据的接收,第二MPI接收子数据的方式与第二组第二线程中的第二线程接收子数据的方式类似,具体可以参见前述说明。
步骤505:第二组第二线程接收到所有子数据后(在第二MPI进程也参与子数据接收的场景下,则为第二组第二线程和第二MIP进程接收到所有子数据),数据传输任务完成,第二MPI进程可以执行其他预先配置的操作,如其他数据处理操作。
第二MPI进程在确定已接收到的多个子数据的总大小与该待发送的数据总大小一致的情况下,可以确定已接收到该多个子数据。第二MPI进程也可以在接收到来自第一MPI进程发送完成消息后,确定已接收到全部子数据。
在如图5所示的实施例中,是以第一MPI进程触发第一组第二线程向第二组第二线程发送子数据为例。在实际应用中,作为数据接收侧的第二MPI进程也可以触发第二组第二线程接收子数据。
具体的,第二MPI进程可以先从第一MPI进程获取待发送的数据的信息,例如可以获取该待发送的数据的总大小、该待发送的数据在发送端内存中的存储地址或起始地址,这里并不限定第二MPI进程从第一MPI进程获取待发送的数据的信息的方式,例如,可以是第二MPI进程主动向第一MPI进程请求待发送的数据的信息,也可以是第一MPI进程主动向第二MPI进程发送待发送的数据的信息。
在获取这些信息之后,第二MPI进程指示第二组第二线程接收多个子数据。第二MPI进程可以通过向第二组第二线程每个第二线程传递处理函数的方式指示第二组第二线程接收该多个子数据,该处理函数可以指示第二线程接收哪一个子数据,还可以指示第二线程从哪里接收该子数据(如指示发送端内存中的存储地址或起始地址,该存储地址或起始地址可以是根据该待发送的数据在发送端内存中的存储地址或起始地址确定的)。当第二MPI进程也参与子数据接收,第二MPI进程可以自行决定自身需要接收的子数据。
在汇合模式下获取(GET)子模式,处理函数中可以指示第二线程发起GET操作,告知需要接收的该子数据以及发送端内存中存储数据的起始地址。关于汇合模式下获取(GET)子模式中数据传输的方法可以参见图9所示的实施例。
基于如图5所示的实施例,本申请提供了三种模式的数据传输方法,下面分别进行介绍。
第一种:急迫(eager)模式。
如图6所示,为本申请实施例提供的一种数据传输方法,参见图6,该方法包括:
步骤601:第一MPI进程确定需要并行运行多个第二线程。具体可以参见步骤501的相关说明,此处不再赘述。
步骤602:第一MPI进程按照第一组第二线程中第二线程的数量对待发送的数据进行分解,获得多个子数据,并在每个子数据之前增加该子数据的描述信息。
步骤603:第一MPI进程通知第一组第二线程中的多个第二线程需要发送的子数据以及该子数据的描述信息,第一MPI进程可以向第一组第二线程中的多个第二线程传递处理函数,处理函数指示第二线程需要发送的子数据以及该子数据的描述信息。每个第二线程获得一个子数据以及该子数据的描述信息。
步骤604:第一组第二线程中的多个第二线程向第二组第二线程发送该多个子数据以及该子数据的描述信息。
每个第二线程发送的消息的结构可以参见图7所示,参见图7所示,为本申请实施例提供的一种消息结构示意图,该消息中包括标签(Tag)、描述头、以及数据段。
其中,Tag为MPI标准中定义的字段,该消息的接收端可以根据Tag识别该消息中携带的数据。该Tag可以在接收端和发送端需要多次传输数据的情况下,作为接收端可以通过Tag识别当前接收的消息中携带的数据为发送端第几次传输的数据。由于在本申请实施例中借助第一组第二线程与第二组第二线程进行数据传输,第二组第二线程作为接收端,可以通过Tag来确定当前消息中携带的数据是第一组第二线程第几次传输的数据。
数据段用于携带该子数据。
描述头携带该子数据的描述信息,该子数据的描述信息用于指示该子数据在该待发送的数据中的位置,还可以指示该子数据的大小。可选的,该子数据的描述数据还可以指示待发送的数据的总大小以及发送该子数据的第二线程的编号。
该子数据的描述信息指示该子数据在该待发送的数据中的位置的方式有许多,例如,可以通过该子数据在该待发送的数据中的偏移位置指示该子数据在该待发送的数据中的位置。也可以通过该子数据的第一个字节和最后一个字节在该待发送的数据的位置指示该子数据在该待发送的数据中的位置。本申请实施例并不限定该子数据的描述信息指示该待发送的数据中的位置、该子数据的大小以及待发送的数据的总大小的方式,凡是能够指示该待发送的数据中的位置、该子数据的大小以及待发送的数据的总大小的方式均适用于本申请实施例。
该第一组第二线程中的多个第二线程可以同时将所分配的子数据和该子数据的描述信息发送给第二组第二线程,这样该多个子数据是同时发送到该第二组第二线程的。
步骤605:第二组第二线程中的第二线程接收来自第一组第二线程中的第二线程的消息。根据子数据的描述信息将子数据存储在第二组第二线程的内存。该内存是第二组第二线程所在计算节点中为第二组第二线程预先分配的内存。该内存可以是第二组第二线程和第二MPI进程的共享内存,也即第二组第二线程和第二MPI进程可以对该内存中进行数据读写。
第二组第二线程根据子数据的描述信息将子数据存储在第二组第二线程的内存的操作也是由第二MPI进程触发的。
以第二组第二线程中的一个第二线程存储一个子数据为例,第二MPI进程可以通过向该第二线程传递处理函数的方式,指示该第二线程接收的子数据以及数据起始地址。数据起始地址可以是第二MPI进程预先配置的,数据起始地址可以理解为所有子数据中待发送的数据中的第一个子数据在内存中的起始地址。第二组第二线程在接收到各个子数据后,需要按照各个子数据在待发送的数据中的位置存储各个子数据,且这些子数据中待发送的数据中的第一个子数据的起始地址是数据起始地址。
该第二线程在第二MPI进程的指示下接收该子数据以及该子数据的描述信息。该第二线程根据数据起始地址和该子数据的描述信息指示的该子数据在该待发送的数据中的位置,确定该子数据在该内存中的起始地址。
以该子数据的描述信息中利用该子数据在待发送的数据的偏移位置指示该子数据在该待发送的数据中的位置为例对第二线程确定该子数据在该内存中的起始地址进行说明。
根据前述说明可知,第一MPI进程将待发送的数据分解为多个子数据。每个子数据是待发送的数据中的一部分,通过子数据在待发送的数据的偏移位置可以确定出该子数据的起始位置与待发送的数据的起始位置之间的偏移。例如一个子数据的描述信息中指示该子数据的偏移位置为24字节,也即该子数据的起始位置与待发送的数据的起始位置之间偏移24字节。当第二线程获知了数据起始地址后,可以确定该子数据在该内存中的起始地址,也即在数据起始地址的基础上偏移24字节的地址,即为该子数据在该内存中的起始地址。
该第二线程还可以根据该子数据的描述信息指示的该子数据的大小确定该子数据的存储长度(也即等于该子数据的大小)。在确定了该子数据在该内存中的起始地址以及该子数据的存储长度后,第二线程根据该子数据在该内存中的起始地址以及该子数据的存储长度将该子数据存储在该内存中。
需要说明的是,在第二组第二线程中的每个第二线程接收来自第一组第二线程中的每个第二线程的消息之前,第二MPI进程也可以先确定是否需要并行运行第二组第二线程中的多个第二线程,第二MPI进程确定是否需要并行运行第二组第二线程中的多个第二线程的方式与第一MPI进程确定需要并行运行第一组第二线程中的多个第二线程的方式类似。
例如,通常第一组第二线程与第二组第二线程之间每次交互传输的数据的数据量可以是固定的,也即第二MPI进程在第二组第二线程未接收到该数据之前,可以确定需要接收的数据的数据量。第二MPI进程可以判断待接收的数据是否大于阈值,在确定待接收的数据大于阈值(条件1)的情况下,确定需要并行运行第二组第二线程中的多个第二线程。
又例如,第二MPI进程可以判断第二组第一线程中的多个第一线程处于等待状态,在确定第二组第一线程中的多个第一线程处于等待状态(条件2)的情况下,确定需要并行运行第二组第二线程中的多个第二线程。
又例如,第二MPI进程可以判断用户是否预先配置需采用多个第二线程并行运行模式,在确定用户预先配置需采用多个第二线程并行运行模式(条件3)的情况下,确定需要并行运行第二组第二线程中的多个第二线程。
又例如,第二MPI进程可以确定满足上述条件的至少两个条件的情况下,确定需要并行运行第二组第二线程中的多个第二线程。
步骤606:在接收到所有子数据之后,第二MPI进程可以执行后续操作,如继续进行数据处理。
第二MPI进程可以通过已接收到子数据的总大小与子数据的描述信息中指示的待发送的数据的总大小确定是否已经接收到所有子数据。当已接收到子数据的总大小(内存中已存储的子数据的总大小)与子数据的描述信息中指示的待发送的数据的总大小相同,则确定已经接收到所有子数据,可以继续执行后续操作。否则,未接收到所有子数据,第二MPI进程继续等待第二组第二线程接收子数据。
第二组第二线程中的一个第二线程在将接收到子数据存储至第二组第二线程中的内存之后,可以视为第二组第二线程中的该第二线程的数据传输操作完成。当第二组第二线程中的每个第二线程的数据传输操作完成后,所有子数据已存储至该内存,第二组第一线程中的任一第一线程可以根据需要从内存读取数据。
从上述可以看出,急迫模式中在数据发送之前无需过多的准备工作,在确定该第一组第二线程中的多个第二线程可以并行运行之后,就可以开始数据传输。也即急迫模式能够实现数据的实时发送,延时较小,对于一些待发送的数据总量较小场景中,通过急迫模块能够有效提升数据的传输效率,节省数据传输时间。
第二种:汇合(rendezvous)模式下的推送(PUT)子模式。发送端的第二线程(也即第一组第二线程中的多个第二线程)通过PUT操作进行子数据的发送。
如图8所示,为本申请实施例提供的一种数据传输方法,参见图8,该方法包括:
步骤801:第一MPI进程向第二MPI进程发送准备发送消息(ready-to-send,RTS),该RTS指示待发送的数据的总大小。
步骤802:第二MPI进程在接收到RTS后,确定需要接收该待发送的数据,并确定接收该数据时内存(该内存是为第二组第二线程分配的内存)中存储该数据的起始地址,向第一MPI进程发送准备接收消息(ready-to-receive,RTR),RTR指示接收端内存中存储该数据的起始地址以及该数据的总大小。
该内存是第二组第二线程所在计算节点中预先分配的内存,该内存可以是第二组第二线程和第二MPI进程的共享内存,也即第二组第二线程和第二MPI进程允许对该内存中进行数据读写。
步骤803:第一MPI进程在接收到该RTR后,确定需要并行运行第一组第二线程中的多个第二线程。
步骤804:第一MPI进程按照第一组第二线程中的第二线程的数量对待发送的数据进行分解,获得多个子数据。
步骤805:第一MPI进程将该多个子数据以及子数据在待发送的数据中的位置发送给第一组第二线程中的多个第二线程。每个第二线程获得一个子数据。
步骤806:第一MPI进程指示第一组第二线程中的多个第二线程发起PUT操作,向第二组第二线程中的多个第二线程发送该多个子数据。
第一MPI进程可以向第一组第二线程中的多个第二线程传递处理函数,处理函数指示第二线程需要发起PUT操作,还可以指示第二组第二线程的内存中存储该数据的起始地址以及子数据在待发送的数据中的位置。
PUT操作是指第一组第二线程直接将子数据发送到第二组第二线程的内存中,第二组第二线程并不感知第一组第二线程的操作。
当第一组第二线程和第二组第二线程部署在同一计算节点上,第一组第二线程中的各个第二线程可以根据子数据在待发送的数据中的位置以及第二组第二线程的内存中存储该数据的起始地址将子数据存储在为第二组第二线程分配的内存中。
也就是说,第一组第二线程中的一个第二线程可以根据子数据在待发送的数据中的位置确定出该子数据的起始位置与待发送的数据的起始位置之间的偏移,在第二组第二线程的内存中存储该数据的起始地址基础上增加了该偏移后的地址即为子数据在第二组第二线程的内存中的起始地址。该第二线程可以根据子数据在第二组第二线程的内存中的起始地址将该子数据存储在第二组第二线程的内存中。
当第一组第二线程和第二组第二线程部署在不同计算节点上,第一组第二线程中的各个第二线程可以基于远程数据直接读取(remote direct memory access,RDMA),根据子数据在待发送的数据中的位置以及第二组第二线程的内存中存储该数据的起始地址将子数据存储在第二组第二线程的内存中。
步骤807:第一MPI进程根据已发送的子数据的大小以及待发送的数据的总大小确定已发送所有子数据,向第二MPI进程发送完成消息(finish,FIN)。
步骤808:第二MPI进程接收到该FIN后,确定接收到所有子数据,第二MPI进程可以继续进行后续操作。
第三种:rendezvous模式下的获取(GET)子模式,接收端的第二线程通过GET操作进行子数据的接收。
如图9所示,为本申请实施例提供的一种数据传输方法,参见图9,该方法包括:
步骤901:第一MPI进程向第二MPI进程发送RTS,该RTS指示待发送的数据的总大小、内存(该内存是为第一组第二线程分配的内存)中该待发送的数据的起始地址。
该内存是第一组第二线程所在计算节点预先分配的内存,该内存可以是第一组第二线程和第一MPI进程的共享内存,也即第一组第二线程和第一MPI进程可以对该内存中进行数据读写。
步骤902:第二MPI进程接收到RTS后,对RTS进行解析,确定待发送的数据的总大小、第一组第二线程的内存中存储该待发送的数据的起始地址。
步骤903:第二MPI进程根据待发送的数据的总大小确定第二组第二线程中的每个第二线程需要接收的子数据的大小以及在该子数据在待发送的数据中的位置。
步骤904:第二MPI进程确定需要并行运行第二组第二线程中的多个第二线程,如第二MPI进程可以检测到第二组第一线程中的多个第一线程处于等待状态时,确定需要并行运行该多个第二线程。
步骤905:第二MPI进程指示第二组第二线程中的多个第二线程发起GET操作,获取该多个子数据。
第二MPI进程可以向第二组第二线程中的多个第二线程传递处理函数,处理函数指示第二线程需要发起GET操作,还可以指示第一组第二线程的内存中存储该待发送的数据的起始地址以及子数据在待发送的数据中的位置。
GET操作是指第二组第二线程直接从第一组第二线程的内存中读取子数据,第一组第二线程并不感知第二组第二线程的操作。
当第一组第二线程和第二组第二线程部署在同一计算节点上,第二组第二线程中的各个第二线程可以直接从该第一组第二线程的内存中根据其需要接收的子数据在待发送的数据中的位置以及内存中存储该待发送的数据的起始地址读取子数据,再将该子数据存储在第二组第二线程的内存中。
也就是说,第二组第二线程中的一个第二线程可以根据子数据在待发送的数据中的位置确定出该子数据的起始位置与待发送的数据的起始位置之间的偏移,在第一组第二线程的内存中存储该待发送的数据的起始地址基础上增加了该偏移后的地址即为子数据在第一组第二线程的内存中的起始地址。该第二线程可以根据子数据在第一组第二线程的内存中的起始地址读取该子数据,将该子数据存储在第二组第二线程的内存中。
当第一组第二线程和第二组第二线程部署在不同计算节点上,第二组第二线程中的各个第二线程可以基于RDMA,根据其需要接收的子数据在待发送的数据中的位置以及内存中存储该数据的起始地址读取子数据,再将该子数据存储在第二组第二线程的内存中。
步骤906:当第二MPI进程根据第二组第二线程的内存已存储的子数据的大小以及待发送的数据的总大小确定已接收到所有子数据,第二MPI进程向第一MPI进程发送完成消息(finish,FIN)。
从上述可以看出,汇合模式中在数据发送之前可以及时通知接收端(第二MPI进程)准备进行数据接收;在数据发送之后,发送端还可以通知该接收端数据发送结束(或接收端可以通知该发送端数据接收结束)。对于一些待发送的数据的总大小较大场景中,通过在数据发送之前以及数据发送之后的交互的消息,能够使得接收端和发送端确定数据的传输过程的开始以及结束,防止发送数据漏发或漏收的情况,保证数据传输的可靠性。
基于与方法实施例同一发明构思,本申请实施例还提供了一种计算节点,用于执行上述方法实施例中计算节点(如第一计算节点、第二计算节点)执行的方法,相关特征可参见上述方法实施例,此处不再赘述,如图10所示,该计算节点包括总线101、处理器102、通信接口103和存储器104。处理器102、存储器104和通信接口103之间通过总线101通信。
其中,处理器102可以为CPU、专用集成电路(application specific integratedcircuit,ASIC)、FPGA、人工智能(artificial intelligence,AI)芯片、片上系统(systemon chip,SoC)或复杂可编程逻辑器件(complex programmable logic device,CPLD),GPU等,本申请并不限定处理器102的数量,每一个处理器102可以被第一线程、第二线程、或MPI进程所占用。
存储器104可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器104还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,硬盘驱动器(hard diskdrive,HDD)或固态驱动器(solid state disk,SSD)。存储器104中存储有可执行代码,处理器102执行该可执行代码以执行图3~图6、图8~图9所描述的方法。存储器104中还可以包括操作系统等其他运行进程或线程所需的软件模块(如第一线程、第二线程、MPI进程)。操作系统可以为LINUXTM,UNIXTM,WINDOWSTM等。
处理器102可以通过调用存储器102中存储的计算机执行指令,使得计算节点可以执行如图3~图6、图8~图9所示的实施例中的方法。
通信接口103,用于收发数据;处理器102在与其他设备进行通信时,可以通过通信接口103进行数据传输,如获取多个子数据等。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
以上所述,仅为本发明的具体实施方式。熟悉本技术领域的技术人员根据本发明提供的具体实施方式,可想到变化或替换,都应涵盖在本发明的保护范围之内。

Claims (21)

1.一种数据传输方法,其特征在于,所述方法包括:第一消息传递接口标准MPI进程创建第一组第二线程,将第一数据分解为多个第一子数据,所述第一数据为第一组第一线程进行数据处理产生的;
所述第一组第二线程在所述第一组第一线程处于等待状态的情况下,占用所述第一组第一线程的资源发送所述多个第一子数据。
2.如权利要求1所述的方法,其特征在于,所述第一组第一线程的资源为所述第一组第一线程占用的处理器。
3.如权利要求1~2任一所述的方法,其特征在于,所述第一组第一线程支持资源共用。
4.如权利要求3所述的方法,其特征在于,所述第一组第二线程在所述第一组第一线程处于等待状态的情况下,占用所述第一组第一线程的资源发送所述多个第一子数据,包括:
所述第一MPI进程为所述第一组第二线程配置资源,所述第一组第二线程的资源与所述第一组第一线程的资源相同;
在所述第一组第一线程处于等待状态的情况下,所述第一组第二线程占用所述第一MPI进程为所述第一组第二线程配置的资源发送所述多个第一子数据。
5.如权利要求1~4任一所述的方法,其特征在于,所述第一线程为共享存储并行编程OMP线程。
6.如权利要求1~5任一所述的方法,其特征在于,所述方法还包括:
所述第一组第二线程在所述第一组第一线程处于等待状态的情况下,占用所述第一组第一线程的资源接收多个第二子数据。
7.如权利要求1~5任一所述的方法,其特征在于,所述第一MPI进程执行数据传输与所述第一组第一线程执行数据处理的运行模式为串并行的运行模式。
8.如权利要求7所述的方法,其特征在于,所述第一组第二线程在所述第一组第一线程处于等待状态的情况下,占用所述第一组第一线程的资源发送所述多个第一子数据,包括:
所述第一组第二线程在所述第一组第一线程处于等待状态的情况下,与所述第一MPI进程发送所述多个第一子数据,所述第一组第二线程占用所述第一组第一线程的资源。
9.如权利要求1~5、7~8任一所述的方法,其特征在于,所述第一组第二线程发送所述多个第一子数据之前,还包括:
所述第一MPI进程通过传输处理函数的方式指示所述第一组第二线程中每个第二线程发送的第一子数据。
10.一种数据传输系统,其特征在于,所述系统包括第一计算节点和第二计算节点,所述第一计算节点包括第一MPI进程、第一组第一线程以及第一组第二线程,所述第二计算节点包括第二MPI进程、第二组第一线程以及第二组第二线程;
所述第一组第一线程,用于进行数据处理,产生第一数据;
所述第一MPI进程,用于创建所述第一组第二线程,将所述第一数据分解为多个第一子数据;
所述第一组第二线程,用于在所述第一组第一线程处于等待状态的情况下,占用所述第一组第一线程的资源向所述第二计算节点发送所述多个第一子数据;
所述第二MPI进程,用于指示所述第二组第二线程接收所述多个第一子数据;
所述第二组第二线程,用于在所述第二组第一线程处于等待状态的情况下,占用所述第二组第一线程的资源接收所述多个第一子数据;
所述第二组第一线程,用于获取所述多个第一子数据进行数据处理。
11.如权利要求10所述的系统,其特征在于,所述第一组第一线程的资源为所述第一组第一线程占用的处理器;所述第二组第一线程的资源为所述第二组第一线程占用的处理器。
12.如权利要求10或11所述的系统,其特征在于,所述第一组第一线程和所述第二组第一线程支持资源共用。
13.如权利要求12所述的系统,其特征在于,所述第一MPI进程还用于:为所述第一组第二线程配置资源,所述第一组第二线程的资源与所述第一组第一线程的资源相同;
所述第一组第二线程在所述第一组第一线程处于等待状态的情况下,占用所述第一组第一线程的资源发送所述多个第一子数据,具体用于:
在所述第一组第一线程处于等待状态的情况下,占用所述第一MPI进程为所述第一组第二线程配置的资源发送所述多个第一子数据。
14.如权利要求12所述的系统,其特征在于,所述第二MPI进程还用于:为所述第二组第二线程配置资源,所述第二组第二线程的资源与所述第二组第一线程的资源相同;
所述第二组第二线程在所述第二组第一线程处于等待状态的情况下,占用所述第二组第一线程的资源接收所述多个第一子数据,具体用于:
在所述第二组第一线程处于等待状态的情况下,占用所述第二MPI进程为所述第二组第二线程配置的资源接收所述多个第一子数据。
15.如权利要求10~14任一所述的系统,其特征在于,所述第一线程为共享存储并行编程OMP线程。
16.如权利要求10~15任一所述的系统,其特征在于,所述第一MPI进程执行数据传输与所述第一组第一线程执行数据处理的运行模式为串并行的运行模式;所述第二MPI进程执行数据传输与所述第二组第一线程执行数据处理的运行模式为串并行的运行模式。
17.如权利要求16所述的系统,其特征在于,所述第一MPI进程还用于:与所述第一组第二线程一起,发送所述多个第一子数据;
所述第二MPI进程还用于:与所述第二组第二线程一起,接收所述多个第一子数据。
18.如权利要求10~17任一所述的系统,其特征在于,所述第一组第二线程发送所述多个第一子数据之前,所述第一MPI进程还用于:
通过传输处理函数的方式指示所述第一组第二线程中每个第二线程发送的第一子数据。
19.如权利要求10~17任一所述的系统,其特征在于,所述第二组第二线程接收所述多个第一子数据之前,所述第二MPI进程还用于:
通过传输处理函数的方式指示所述第二组第二线程中每个第二线程接收的第一子数据。
20.一种计算节点,其特征在于,所述计算设备包括处理器和存储器;
所述存储器,用于存储计算机程序指令;
所述处理器执行调用所述存储器中的计算机程序指令执行如权利要求1至9中任一项所述的方法。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至9任一项所述的方法。
CN202110048880.XA 2021-01-14 2021-01-14 一种数据传输方法、系统以及计算节点 Pending CN114764346A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110048880.XA CN114764346A (zh) 2021-01-14 2021-01-14 一种数据传输方法、系统以及计算节点
PCT/CN2021/142227 WO2022151970A1 (zh) 2021-01-14 2021-12-28 一种数据传输方法、系统以及计算节点

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110048880.XA CN114764346A (zh) 2021-01-14 2021-01-14 一种数据传输方法、系统以及计算节点

Publications (1)

Publication Number Publication Date
CN114764346A true CN114764346A (zh) 2022-07-19

Family

ID=82364344

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110048880.XA Pending CN114764346A (zh) 2021-01-14 2021-01-14 一种数据传输方法、系统以及计算节点

Country Status (2)

Country Link
CN (1) CN114764346A (zh)
WO (1) WO2022151970A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117389731B (zh) * 2023-10-20 2024-04-02 上海芯高峰微电子有限公司 数据处理方法和装置、芯片、设备及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7370156B1 (en) * 2004-11-04 2008-05-06 Panta Systems, Inc. Unity parallel processing system and method
CN102739567A (zh) * 2012-07-03 2012-10-17 苏州阔地网络科技有限公司 一种进程间通信方法及系统
CN104461466B (zh) * 2013-09-25 2018-09-21 广州中国科学院软件应用技术研究所 基于MPI和OpenMP混合编程模型并行计算提高计算速度的方法
CN104753711B (zh) * 2013-12-31 2018-03-09 华为技术有限公司 调整网络设备资源配置的方法及装置
CN104899105A (zh) * 2014-03-05 2015-09-09 安徽皖新金智教育科技有限公司 一种进程间通信方法
CN104317650B (zh) * 2014-10-10 2018-05-01 北京工业大学 一种面向Map/Reduce型海量数据处理平台的作业调度方法
CN108011909B (zh) * 2016-10-28 2020-09-01 北京市商汤科技开发有限公司 通信方法和系统、电子设备和计算机集群
CN108595277B (zh) * 2018-04-08 2021-01-19 西安交通大学 一种基于OpenMP/MPI混合编程的CFD仿真程序的通信优化方法

Also Published As

Publication number Publication date
WO2022151970A1 (zh) 2022-07-21

Similar Documents

Publication Publication Date Title
US7836143B2 (en) Message communications of particular message types between compute nodes using DMA shadow buffers
US8949328B2 (en) Performing collective operations in a distributed processing system
US8478834B2 (en) Low latency, high bandwidth data communications between compute nodes in a parallel computer
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
US7948999B2 (en) Signaling completion of a message transfer from an origin compute node to a target compute node
US8018951B2 (en) Pacing a data transfer operation between compute nodes on a parallel computer
US8452845B2 (en) Effecting hardware acceleration of broadcast operations in a parallel computer
US8565120B2 (en) Locality mapping in a distributed processing system
CN106648896B (zh) 一种Zynq芯片在异构称多处理模式下双核共享输出外设的方法
US9158602B2 (en) Processing posted receive commands in a parallel computer
US7805546B2 (en) Chaining direct memory access data transfer operations for compute nodes in a parallel computer
US9262201B2 (en) Performing collective operations in a distributed processing system
US8959172B2 (en) Self-pacing direct memory access data transfer operations for compute nodes in a parallel computer
US9495205B2 (en) Constructing a logical tree topology in a parallel computer
CN116243995B (zh) 通信方法、装置、计算机可读存储介质以及电子设备
WO2018076882A1 (zh) 存储设备的操作方法及物理服务器
CN110647494A (zh) 多处理器通信方法及装置
CN113032166A (zh) 核间通信的方法、处理器、核间通信系统及计算机可读存储介质
WO2022151970A1 (zh) 一种数据传输方法、系统以及计算节点
CN113886058A (zh) 一种跨集群资源调度方法和装置
US8751600B2 (en) Administering globally accessible memory space in a distributed computing system
CN103823712A (zh) 一种多cpu虚拟机系统的数据流处理方法和装置
US20130304995A1 (en) Scheduling Synchronization In Association With Collective Operations In A Parallel Computer
CN114510325A (zh) 任务调度方法、装置及系统
US8868673B2 (en) Optimized data communications in a parallel computer

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination