一种基于网络控制器的超大规模栅栏同步方法

文档序号:6399974阅读:315来源:国知局
专利名称:一种基于网络控制器的超大规模栅栏同步方法
技术领域
本发明主要涉及到并行计算机系统中网络接口控制器领域,特指一种基于网络控制器的超大规模栅栏同步方法。
背景技术
基于网络接口控制器(NIC)的聚合通信硬件卸载技术是高性能计算机系统提高聚合通信性能的主要途径,也是NIC体系结构设计中的核心技术。所谓“聚合通信卸载”是指将软件实现的聚合通信算法下放到NIC硬件上执行,实现计算与通信的重叠执行,提高聚合通信操作效率的技术。消息传递并行编程模型MPI (Message Passing Interface)是在高性能计算机系统中应用最广泛的通信机制,是目前解决并行应用的最主要编程模型。聚合通信是MPI标准中重要的组成部分,能够大大简化并行编程,在诸如情报处理、原子核建模、天气预报、天体物理学和生物系统等科学和工程计算中有着非常广泛的应用。而栅栏同步是MPI聚合通信中重要的组成部分,对于并行程序的性能有着至关重要的影响,基于栅栏同步聚合通信的并行算法效率要远远高于基于点对点通信程序的效率。在现有系统中,栅栏同步的硬件卸载技术主要有三种方法:(I)基于嵌入式处理器的软件代码下放技术。这种方法在算法级仍然采用软件算法,即在点对点通信的基础上实现全局聚合通信算法。通过将处理器的执行代码下放到NIC上执行,因而实现了计算与通信的重叠,且减少了报文跨越处理器PCI总线的次数,降低了报文的传输和处理延迟。基于Infiniband/Myrinet等商用互连网络所采用目标体系结构都是基于NIC中有嵌入式处理器的前提。对于全局操作的卸载,所采用的方法大致有两种:一是基于宿主处理器进行运算,NIC的功能是将规约操作所需要的数据收集到根节点上,计算任务仍然由主处理器完成;而另一种是在NIC的嵌入式处理器中进行运算,由于NIC的计算能力很弱,通常只能完成简单的规约运算。(2)基于专用全局网络的聚合通信加速技术。这种技术途径的出发点是考虑到聚合通信的通信模式与普通点对点的通信模式存在着很大的差别,聚合通信网络可以有效利用其特有的通信模式。采用这种技术的典型系统是IBM的BlueGene/L计算机,除了普通的数据通信网络外,BlueGene/L还采用了专用的全局操作树和栅栏网络对组播、归约、栅栏同步等全局操作进行支持。采用专用同步网络的计算机系统还包括CM-5、T3D和AP1000,他们所采用的方案类似。CM-5系统采用两套二叉树网络,其中一套用来实现规约,另一套用来实现广播。CM-5实现了规约和同步的硬件卸载功能,支持多个全局操作并行执行。(3)基于NIC的专用硬件算法加速技术。这种技术方案在NIC中集成专用硬件来实现聚合通信算法,节点间聚合通信消息传输仍然在普通数据网络上进行,这种方案是目前在大系统中采用较多的方案。K计算机支持栅栏同步的方案是在硬件中引入若干“门”的硬件逻辑,完成一次全局栅栏同步需要通过若干个门,门被处理器激活后,等待触发消息到达,触发消息到达后再将消息自动转发给其他节点。BlueGene/Q将栅栏同步和规约操作实现在数据torus网络上,系统中的聚合通信由CR(Class Route)定义,通过配置寄存器激活对应的CR单元。寄存器中的信息定义了 CR的上行链路及下行链路,以及本CR是否有数据参与操作。为了降低栅栏同步的延迟,系统定义了专用的栅栏报文,不携带数据载荷。Q系统聚合操作卸载方案的特色是NIC支持丰富的浮点和整数运算,规约操作有效地卸载到NIC上执行。近几年来,超级计算机的系统规模快速增长,在万万亿次级计算机系统下,节点规模将达到十万级,支持的线程数目达到了上百万个,在这样的系统规模下,栅栏同步通信的可扩展性要求达到了前所未有的高度,算法的规模和复杂度都将急速增长,导致硬件卸载聚合通信算法的难度大大增加。万万亿次计算机系统要求单节点的处理能力显著提高,众核处理器成为一种必要的选择。在这种体系结构下,NIC需要支持的并行线程数大大增加,达到了上百个之多,目前的架构还无法对众核处理器的全局通信需求提供有效支持。另一方面,在众核处理器中,各个处理核心都需要与NIC进行数据交换,系统PCI总线的延迟较大,现有方法的性能大大受限于总线的带宽。

发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、操作方便、可有效提高MPI等并行应用程序的栅栏同步性能、简化NIC硬件设计复杂度的基于网络控制器的超大规模栅栏同步方法。为解决上述技术问题,本发明采用以下技术方案:一种基于网络控制器的超大规模栅栏同步方法,其步骤为:步骤(I):一次栅栏同步操作首先由并行程序的一次MPI栅栏同步调用开始;进入该调用后,软件构造同步通信域,并将参与线程与物理节点的映射关系发送给所有参与节
占.
步骤⑵:基于软件线程号,构建栅栏同步描述符;步骤(3):基本节点的信息,完成线程号与物理节点号的映射,生成最终的同步描述符;所述同步描述符为一种数据结构,硬件根据约定解析其中的内容;步骤(4):栅栏同步描述符提交给硬件执行;步骤(5):网络接口控制器NIC收到描述符后,按照描述符中规定的步骤,向目的物理节点发送栅栏同步报文,并按步骤接收源节点发送来的栅栏同步报文,收到报文后,给出响应报文;步骤¢):描述符中所有的步骤执行完成后,硬件向软件返回执行结果;步骤(7):软件收到硬件返回的完成响应后,一次完整的栅栏同步操作完成,继续执行后续程序。作为本发明的进一步改进:所述步骤(3)中由软件计算出每个步骤中栅栏同步操作的目的节点、以及算法所需要执行的栅栏同步的步骤 数,本节点栅栏同步描述符通过软硬件接口通知硬件。所述软件负责生成的信息包括:操作标号、算法执行的总步骤数、各步骤目的物理节点号、各步骤源节点号、操作完成事件。在步骤(4)中,所述同步描述符存放在系统主存中,所述网络接口控制器NIC主动访问系统主存获取;或者,主机通过主机与网络接口控制器NIC的接口 PCIe发送NIO寄存器写命令将描述符写入网络接口控制器NIC中。在步骤(5)中,采用两节点间的单向栅栏消息方法,即单向栅栏消息中源节点通知目的节点栅栏点到达。在步骤(5)中,采用两节点间的双向栅栏消息,即双向栅栏消息中两个节点都需要知道对方到达栅栏点。与现有技术相比,本发明的优点在于:本发明基于网络控制器的超大规模栅栏同步方法原理简单、操作方便,实现了硬件自主完成MPI通信域的广播操作,具有软件干预少、硬件实现简单、软硬件接口清晰简洁等优点,可明显加速大规模MPI并行程序栅栏同步操作的性能。


图1是本发明进行一次栅栏同步操作的流程示意图。图2是本发明中栅栏同步描述符生成算法的流程示意图。图3是本发明中栅栏同步描述符的格式示意图。图4是本发明中基本同步消息的流程示意图。图5是本发明在具体应用实例中NIC硬件的结构示意图。
具体实施例方式以下将结合说明书附图和具体实施例对本发明做进一步详细说明。如图1所示,本发明基于网络控制器的超大规模栅栏同步方法,其步骤为:步骤(I):一次栅栏同步操作首先由并行程序的一次MPI栅栏同步调用开始;进入该调用后,软件构造同步通信域,并将参与线程与物理节点的映射关系发送给所有参与节点。为了避免广播操作的开销,操作系统可在作业分配时,固定线程与物理节点的映射关系O步骤(2):基于软件线程号(Rank号),构建栅栏同步描述符。即在现有栅栏同步软件执行算法的基础上,构造硬件独立执行该算法时需要的信息,但软件不执行实际的通信操作。由于并行程序中使用的是线程的标号来进行栅栏同步的,在该步骤中生成的描述符是以线程号作为栅栏请求消息的源节点号和目的节点号的。软件负责生成的信息包括:操作标号、算法执行的总步骤数、各步骤中栅栏请求消息的目的线程号、各步骤接收的栅栏请求消息源线程号。如图2所示,为栅栏同步描述符生成算法示意图。其中所采用的描述符生成算法基于现有的软件栅栏算法,所不同的是算法不执行实际的通信操作。软件计算出每个步骤中栅栏同步操作的目的节点,以及算法所需要执行的栅栏同步的步骤数,这些信息完全由节点的本地信息计算出来。本节点栅栏同步描述符通过软硬件接口通知硬件。硬件按照软件计算好的步骤数和目的节点自动完成栅栏算法,不再需要软件参与。图2给出的是基于对等交换栅栏同步算法(pairwise-exchange)生成栅栏同步描述符的方法,基于其它软件算法生成栅栏同步描述符的方法与之类似。以节点O为例说明,在算法步骤I中,节点O需要接收节点4发来的栅栏请求消息,在该步骤中,不需要向其它节点发送栅栏请求消息;在本算法中,节点O向节点I发送栅栏请求消息,并接收节点I发来的栅栏请求消息,依此类推,各节点可根据软件栅栏算法计算出本节点栅栏同步的步骤数,以及各步骤的目的节点号和源节点号。在对等交换栅栏同步算法下,共需要进行2*log2(p)个步骤的操作,每个节点需要久^log7(P)J+ 2)个步骤即可完成全局的栅栏同步。本发明可支持大规模系统的栅栏同步。假设全系统有65536个节点,则需要16位表示节点号。全系统栅栏同步共需要进行16轮。处理器的PCIe总线上仅需传输256位的栅栏同步描述符数据,有效缓解了处理器总线的拥塞,算法的可扩展性能够满足十万节点的栅栏同步需求。步骤(3):基本节点的信息,完成线程号与物理节点号的映射,生成最终的同步描述符。“同步描述符”采用的是一种定长的数据结构,硬件根据约定解析其中的内容。同步描述符可以存放在系统主存,NIC硬件主动访问系统主存获取;主机也可以通过主机与NIC的接口(PCIe),发送NIO寄存器写命令将描述符写入NIC中。栅栏同步描述符描述了一次栅栏同步的硬件执行步骤,由主机端软件通过确定的算法生成。NIC硬件接收到描述符后,按照描述符规定的步骤独立完成栅栏同步。栅栏同步完成之后,NIC通知软件操作完成。并行计算机系统中参与栅栏同步的节点各自产生本节点的描述符,本方法中描述符的生成过程不需要节点间进行通信。如图3所示,为本发明在上述步骤(2)、(3)中生成的栅栏同步描述符的格式示意图。在栅栏软件执行算法的基础上,构造硬件独立执行该算法时需要的信息,但软件不执行实际的通信操作。软件负责生成的信息包括:操作标号、算法执行的总步骤数、各步骤目的物理节点号、各步骤源节点号、操作完成事件等。步骤(4):栅栏同步描述符提交给硬件执行,具体方式可采用内存提交或PIO命令提交方式。同步描述符的提交方式可采用内存提交或发送NIO寄存器写命令的方式(PIO)提交。内存提交方式所采用的步骤是:软件将栅栏同步描述符写入内存中某个固定的队列,完成后通知NIC描述符已经准 备好,硬件便可以通过DMA方式从内存中取回描述符。PIO提交方式将描述符直接发送给NIC中预设的硬件寄存器。步骤(5) =NIC收到描述符后,按照描述符中规定的步骤,向目的物理节点发送栅栏同步报文,并按步骤接收源节点发送来的栅栏同步报文,收到报文后,给出响应报文。栅栏同步描述符描述的硬件算法在NIC中采用分步骤的方式执行。在栅栏同步描述符规定的每个操作步骤中,参与栅栏同步的节点通过传送定制的消息实现栅栏同步通信。每个节点向某个目的物理节点发送消息,并等待某个源节点发来的消息,只有上述两个操作均完成后,NIC硬件开始执行下一个步骤的操作。栅栏同步描述符中包含的信息有:描述符序列号、算法执行的总步骤数、各个步骤中消息的目的物理节点号、各个步骤中消息的源物理节点号。其具体步骤为:NIC收到描述符后,按照描述符中规定的步骤,向目的物理节点发送栅栏请求消息。经过分解算法,栅栏同步操作可以通过最基本的消息序列操作实现。如果节点2需要知道节点I到达栅栏同步点,则节点I通过发送栅栏请求消息给目的节点2,通知目的节点2,节点I已经到达栅栏同步点。由于节点2可能出现接收缓冲区满,无法处理节点I发来消息的情况,因而需要节点2发送响应消息给节点1,节点I根据响应消息可获悉该节点是否成功通知了节点2。在栅栏请求消息的目的节点中,NIC硬件中设置有一定深度的消息缓冲区,栅栏请求消息只要写入缓冲区,目的节点即向源节点给出完成响应。目的节点的栅栏同步描述符提交后,硬件检查缓冲区中是否有已收到栅栏请求消息,如果有,则进行处理。如果目的节点的消息接收缓冲区满,且目的节点的栅栏同步描述符还未提交,则目的节点给出未处理(NACK)响应,通知源节点该栅栏请求消息未被处理,源节点收到NACK响应后,将延迟一段时间后,重发栅栏请求消息,直到收到了成功响应消息为止。在参与栅栏同步的任何一个节点上,硬件从上一个操作步骤i进入下一个步骤i+Ι的条件是:如果源节点有效,则收到了从源节点发来的序列号为i (该序列号携带在栅栏请求消息中)的栅栏请求报文;如果目的节点有效,则向目的节点发送了序列号为i的栅栏请求报文,并收到了目的节点返回的成功响应消息。NIC节点可并行处理多个描述符,每个描述符携带由软件分配的标识号,多个节点上属于同一个栅栏同步的描述符的标识号相同。同步报文中携带了描述符的标识号,用于在目的节点进行报文与描述符的匹配。如图4所示,为本发明在步骤(5)中所采用的栅栏消息处理流程示意图。通过对现有的软件栅栏算法的分析,本发明提取出的基本栅栏消息有两种:两节点间的单向栅栏消息和双向栅栏消息。单向栅栏消息中源节点通知目的节点栅栏点到达;双向栅栏消息中,两个节点都需要知道对方到达栅栏点。NIC硬件可通过简单的消息协议实现单向栅栏和双向栅栏两种栅栏同步功能。在单向栅栏和双向栅栏消息的基础上,全系统栅栏同步可以通过按步骤执行的多个栅栏消息组合实现。对某个节点来说,硬件完成一次栅栏同步的描述符由软件独立生成:源节点号与目的节 点号同时有效且互为对方的目的节点号时,两节点之间进行的是双向栅栏同步;只有一个节点号有效,或者同时有效但不互为对方的目的节点时,节点间进行的是单向栅栏同步。实现栅栏同步硬件卸载功能的NIC模块主要有以下4个:栅栏请求消息接收队列DMAQ(Dynamically Allocated Mult1-Queue)、栅栏响应消息接收队列DMAQ、栅栏请求发送模块、栅栏请求处理模块。栅栏请求消息接收队列和栅栏响应消息接收队列分别用于接收其他节点发来的栅栏请求消息和栅栏响应消息。栅栏请求发送模块根据描述符指定的步骤,向规定的节点发送栅栏请求消息。栅栏请求处理模块接收其它节点的栅栏请求消息。栅栏同步描述符中指明了当前步骤等待接收的栅栏请求消息的源节点号,当接收到该源节点发来的栅栏消息后,栅栏请求处理模块才处理下个步骤中源节点发来的栅栏请求消息。由于各个节点处理栅栏同步描述符可能存在不同步的情况(例如,节点O正在执行步骤I时,而节点I有可能正在执行步骤2),栅栏请求处理模块能对消息接收队列中的消息乱序处理。其它节点发送的栅栏请求消息,先保存在节点的栅栏请求消息接收队列中。栅栏请求处理模块所接收消息的步骤号输出给栅栏请求发送模块,以确定本节点栅栏请求消息的发送时机。步骤¢):描述符中所有的步骤执行完成后,硬件向软件返回执行结果。硬件通知软件的方式可采用向内存事件队列写通知报文的形式,也可以向某个内存地址(在描述符中设定)写完成值的方式。步骤(7):软件收到硬件返回的完成响应后,一次完整的栅栏同步操作完成,继续执行后续程序。以上步骤完成后,并行程序中的一次栅栏同步操作即完成。如图5所示,为本发明在具体应用实例中所采用的NIC硬件的结构示意图,该NIC硬件包括:内存队列模块:用于在内存中的描述符队列;描述符接收寄存器模块:NIC芯片上使用随机访问存储器(RAM)实现的描述符队列,通过处理器与NIC芯片的命令接口提交。描述符派发模块:负责向执行部件派发描述符执行,描述符从内存队列模块或描述符寄存器模块通过仲裁选取。栅栏请求发送模块:本模块从描述符派发模块接收描述符,根据描述符规定的栅栏请求报文发送顺序,向目标节点发出栅栏请求报文;在某个步骤中,有可能需要向多个节点发出栅栏请求报文,发送完毕后,硬件检查响应消息队列中,响应消息是否收齐。如果已经收齐了当前步骤中源节点应发来的栅栏请求消息,则硬件进入下一个步骤的操作。栅栏同步描述符的步骤i中,栅栏请求消息允许发送的条件是:该节点已经收齐了 1-Ι步骤的源节点发来的栅栏请求消息,该信息由栅栏请求接收模块给出。栅栏请求接收模块:该模块接收来自其它节点的栅栏请求消息,根据描述符规定的步骤,其它节点发送的栅栏请求消息,先保存在栅栏请求消息接收队列中。栅栏请求消息接收队列:保存其它节点发送给本节点栅栏请求消息,采用动态分配多队列(DMAQ)方式管理,消息只要进入队列,就认为栅栏请求消息送达目的节点,并给出完成响应;如果队列已满,则给出重试(NACK)响应,通知源节点目的节点接收队列满,源节点需要在延迟一段时间后,重新发出栅栏请求消息。栅栏响应消息接收队列:本节点发出的栅栏请求消息的响应消息先保存在该队列中,队列的容量应能够容纳下发出的所有栅栏请求消息的响应消息。以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
权利要求
1.一种基于网络控制器的超大规模栅栏同步方法,其特征在于,步骤为: 步骤(I):一次栅栏同步操作首先由并行程序的一次MPI栅栏同步调用开始;进入该调用后,软件构造同步通信域,并将参与线程与物理节点的映射关系发送给所有参与节点; 步骤(2):基于软件线程号,构建栅栏同步描述符; 步骤(3):基本节点的信息,完成线程号与物理节点号的映射,生成最终的同步描述符;所述同步描述符为一种数据结构,硬件根据约定解析其中的内容; 步骤(4):栅栏同步描述符提交给硬件执行; 步骤(5):网络接口控制器NIC收到描述符后,按照描述符中规定的步骤,向目的物理节点发送栅栏同步报文,并按步骤接收源节点发送来的栅栏同步报文,收到报文后,给出响应报文; 步骤¢):同步描述符中所有的步骤执行完成后,硬件向软件返回执行结果; 步骤(7):软件收到硬件返回的完成响应后,一次完整的栅栏同步操作完成,继续执行后续程序。
2.根据权利要求1所述的基于网络控制器的超大规模栅栏同步方法,其特征在于,所述步骤(3)中由软件计算出每个步骤中栅栏同步操作的目的节点、以及算法所需要执行的栅栏同步的步骤数,本节点栅栏同步描述符通过软硬件接口通知硬件。
3.根据权利要求2所述的基于网络控制器的超大规模栅栏同步方法,其特征在于,所述软件负责生成的信息包括:操作标号、算法执行的总步骤数、各步骤目的物理节点号、各步骤源节点号、操作完成事件。
4.根据权利要求1或2或3所述的基于网络控制器的超大规模栅栏同步方法,其特征在于,在步骤(4)中,所述冋步描述符存放在系统王存中,所述网络接口控制器NIC王动访问系统主存获取;或者,主机通过主机与网络接口控制器NIC的接口 PCIe发送NlO寄存器写命令将描述符写入网络接口控制器NIC中。
5.根据权利要求1或2或3所述的基于网络控制器的超大规模栅栏同步方法,其特征在于,在步骤(5)中,采用两节点间的单向栅栏消息方法,即单向栅栏消息中源节点通知目的节点栅栏点到达。
6.根据权利要求1或2或3所述的基于网络控制器的超大规模栅栏同步方法,其特征在于,在步骤(5)中,采用 两节点间的双向栅栏消息,即双向栅栏消息中两个节点都需要知道对方到达栅栏点。
全文摘要
一种基于网络控制器的超大规模栅栏同步方法,步骤为(1)进行MPI栅栏同步调用,软件构造同步通信域,并将参与线程与物理节点的映射关系发送给所有参与节点;(2)基于软件线程号,构建栅栏同步描述符;(3)基本节点的信息,完成线程号与物理节点号的映射,生成同步描述符;(4)栅栏同步描述符提交给硬件执行;(5)NIC收到描述符后,按照描述符中规定的步骤,向目的物理节点发送栅栏同步报文,并接收源节点发送来的栅栏同步报文;收到报文后,给出响应报文;(6)执行完成后,硬件向软件返回执行结果;(7)软件收到完成响应后,完成同步操作。本发明可有效提高MPI等并行应用程序的栅栏同步性能、简化NIC硬件设计复杂度。
文档编号G06F9/52GK103116527SQ20131006984
公开日2013年5月22日 申请日期2013年3月5日 优先权日2013年3月5日
发明者徐炜遐, 王绍刚, 肖立权, 庞征斌, 王克非, 夏军, 童元满, 陈虎, 张峻, 齐星云, 王桂彬, 常俊胜, 张建民, 罗章, 徐金波, 董德尊, 赖明澈, 陆平静 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1