用于动态分配归约引擎的系统和方法
阅读说明:本技术 用于动态分配归约引擎的系统和方法 (System and method for dynamically assigning reduction engines ) 是由 J·P·比克罗夫特 E·J·特纳 于 2020-03-23 设计创作,主要内容包括:提供了一种配备有能够在网络中动态地分配的归约引擎的交换机。在操作期间,所述归约引擎可以基于多播帧进行动态装备。因此,所述网络可以促进高效且可扩展的高性能计算环境。(A switch equipped with a reduction engine that can be dynamically allocated in a network is provided. During operation, the reduction engine may be dynamically equipped based on multicast frames. Thus, the network may facilitate an efficient and scalable high performance computing environment.)
发明人:Jonathan P.Beecroft和Edward J.Turner
背景
技术领域
本公开总体上涉及联网技术领域。更具体地,本公开涉及用于在网络中促进归约引擎(reduction engine)的动态分配的系统和方法。
相关技术
随着支持网络的设备和应用变得越来越普遍,各种类型的流量以及不断增加的网络负载继续要求底层网络架构提供更高的性能。例如,如高性能计算(HPC)、流媒体和物联网(IOT)等应用可以生成具有鲜明特征的不同类型的流量。因此,除了如带宽和延迟等传统网络性能指标之外,网络架构师还持续面临如可扩展性、多功能性和效率等挑战。
发明内容
提供了一种配备有能够在网络中动态地分配的归约引擎的交换机。在操作期间,所述归约引擎可以基于多播帧进行动态装备。因此,所述网络可以促进高效且可扩展的高性能计算环境。
附图说明
图1示出了示例性网络。
图2示出了用于归约过程的示例性多播树。
图3A示出了示例性归约过程的流程图。
图3B示出了归约引擎的示例性归约操作的流程图。
图4示出了一个叶端点较晚加入归约过程的示例。
图5A示出了一个叶端点由于错误而未能供应贡献的示例。
图5B示出了基于定时器的示例性归约过程的流程图。
图6示出了叶交换机上的归约引擎不可用的示例。
图7示出了示例性归约操作。
图8示出了可以在归约过程中使用的一组MINMAXLOC操作数。
图9示出了可以在归约过程中使用的舍入模式。
图10示出了门户格式的归约帧。
图11示出了归约报头。
图12示出了可以在归约过程中用于MINMAXLOC可再现求和运算符的操作数的字节序。
图13示出了示例性归约结果代码。
图14示出了门户包可以预装有以太网报头的示例。
图15示出了促进归约引擎的示例性交换系统。
在这些附图中,相同的附图标记指代相同的附图元素。
具体实施方式
对所公开实施例的各种修改对于本领域技术人员来说将是显而易见的,并且在不脱离本公开的精神和范围的情况下,本文定义的一般原理可以应用于其他实施例和应用。因此,本发明不限于所示实施例。
本发明的实施例通过提供可以动态地配置的归约引擎解决了在网络中容纳大量计算端点的问题,这允许以及时、灵活且可扩展的方式归约因大规模计算而产生的流量。对网络主体内的任何共享资源的分配和管理都可能会比较困难,尤其是在单元在处理数据时出现错误的情况下。本文描述的系统和方法可以显著地简化对动态分配的交换机/路由器资源的分配、解除分配和错误处置。
通常,网络可以支持上千用户。如果提供了功能,并且预期任何用户都使用所述功能,那么高效地管理资源很重要。一种方法可以是使用对已经被授权管理功能的基于网络的服务器的系统调用。尽管所述方法可能看起来是简单的解决方案,但实际上管理可能会变得复杂,尤其是在所提供的功能广泛分布在整个网络中并且上千用户可能在试图获得访问的情况下。建立用于单次使用的操作所需的时间可以长达数秒,并且在使用后释放功能可能需要类似的时间量。任何错误状况都可能还需要错误状况期间的软件开发和实时分析两方面的大力支持。
正在使用的功能类型可以仅在几微秒或甚至几纳秒内是主动的。即使同一应用程序重复使用功能,建立和拆卸成本也可能缩短功能的有用时间量。对于这种开销巨大的计算特征,使用软件来获取和释放对这种功能的访问可能无法容纳大量用户。
本发明的实施例可以向网络的所有用户提供合理公平的访问,同时略微降低建立成本,并且确保在成功完成操作后可以快速释放资源。还可以确保在出现错误时合理快速地(例如,几毫秒)释放资源,而无需任何管理软件干预。
具体地,可以在交换机内提供归约引擎。归约引擎可以从多个端点取得包,并且将所述包组合以生成可以返回到节点的单个包。归约引擎还可以执行同步函数(常常称为屏障),或者可以执行将端点提供的值组合或分类为单个值的某种数学函数。通过将归约引擎放置在网络主体内,时延(即,完成操作所需的时间)可以减少一个数量级,因为典型地,跨网络的单轮通信通常足以完成整体归约。
归约过程(reduction process)可以使用从归约根节点的边缘端口发出并发送到所有边缘叶端口的多播会话来建立或装备网络内的每个归约引擎。网络内的交换机的每个端口都可以具有归约引擎的实例。装备多播(即,多播建立包)可以在根节点的入口边缘端口处开始。当接收到建立包时,所述建立包可以装备与对应的端口相关联的局部归约引擎。然后,可以将包多播到多个输出端口,在所述多个输出端口处,所述包被转发到输出的链路伙伴入口端口,所述链路伙伴入口端口可以驻留在另一个交换机上。下游交换机可以进一步将建立包多播到一组输出端口,同时装备与入口端口相关联的归约引擎的实例。
上述过程可以重复,从而沿多播数据路径装备归约引擎,直到建立包到达叶交换机的出口边缘端口,所述建立包在所述出口边缘端口处被传递到计算节点。此时,可以装备所有归约引擎并准备好接收归约包,所述归约包可以沿多播树向上游行进并被归约至表示归约的结果的单个包。
在计算操作之后,叶节点可以准备将其结果包注回到网络中。所述叶节点可以通过使包在原始多播包采用的相反路径上回溯的方式这样做。这确保结果包可以各自被归约功能可以发生于的现在装备好的归约引擎拦截。
结果包可以通过网络以相反的方向遍历多播树。除了建立初始多播树之外,此归约过程不需要任何软件干预。现代交换设备通常可以容纳大量单独的多播树,这允许在网络中同时配置许多归约配置。因此,建立和拆卸成本可以大大地分摊和并行化,这允许归约功能扩展至大量用户。
还可以向每个归约包添加计数值,以表示用于构建包内保持的归约结果的输入数量。如有必要,这允许在不影响归约功能的情况下跳过归约引擎所提供的加速。这是可能的,因为接收节点然后被给予足够的信息来完成操作本身。
还可以向归约引擎添加超时机制,以确保归约引擎资源最终可以变得空闲(即使在存在错误的情况下)。如果出现错误,或者如果由于到归约功能的输入之一不存在或因某种原因被延迟而无法完成归约,则超时可以确保利用可以用于归约计算的可用输入信息来释放资源,直到完成归约为止。归约的根节点可以接收此部分结果,并且识别出此结果是不完整的。根节点可以可选地等待缺失的结果到达,而不阻塞共享的归约资源。
图1示出了示例性网络。在此示例中,交换机网络100(其也可以称为“交换机结构”)可以包括交换机102、104、106、108和110。每个交换机在交换机结构100内可以具有唯一地址或ID。各种类型的设备和网络可以耦接到交换机结构。例如,存储阵列112可以通过交换机110耦接到交换机结构100;基于无限带宽(IB)的HPC网络114可以通过交换机108耦接到交换机结构100;如主机116等多个终端主机可以通过交换机104耦接到交换机结构100;并且IP网/以太网网络118可以通过交换机102耦接到交换机结构100。通常,交换机可以具有边缘端口和结构端口。边缘端口可以耦接到结构外部的设备。结构端口可以通过结构链路耦接到结构内的另一个交换机。通常,流量可以通过边缘交换机的入口端口注入到交换机结构100中,并且通过另一个(或同一)边缘交换机的出口端口离开交换机结构100。入口链路可以将边缘设备(例如,HPC终端主机)的网络接口控制器(NIC)耦接到边缘交换机的入口边缘端口。然后,交换机结构100可以将流量传输到出口边缘交换机,所述出口边缘交换机进而可以通过另一个NIC将流量传送到目的地边缘设备。
在一个实施例中,交换机的每个端口可以包括用于加速归约操作的归约引擎。可以使用多播树来执行归约。多播树中的每个归约引擎可以由根交换机通过多播树发送的归约装备帧来装备。在接收到归约装备帧之后,多播树的叶节点可以沿多播树向上向根节点发送包含所述叶节点的贡献的归约数据帧。树中的每个归约引擎可以拦截归约数据帧并对所述归约数据帧执行归约。当归约引擎接收到预期数量的贡献或超时时,所述归约引擎可以将归约的结果向上转发到多播树。根节点可以接收单个完全归约的数据帧,或者如果任何归约引擎超时,则所述根节点可以接收多个部分归约的数据帧。在任一种情况下,根节点都可以结合自身贡献完成归约。然后,归约的最终结果可以沿多播树向下发送到叶节点。结果帧可以携带另一轮归约装备指令,所述归约装备指令然后可以同时重新装备归约引擎。
归约引擎可以降低关键网络操作(包括归约、全归约和屏障)中的时延。可以在嵌入到网络内的生成树上执行归约操作。图2示出了用于归约过程的示例性多播树。在此示例中,用于归约过程的多播树可以包括根端点202、根交换机204、如叶交换机206等多个叶交换机以及如端点208等多个叶端点。根交换机204负责启动用于归约过程的多播树。每个交换机可以包括归约引擎,所述归约引擎可以在多播会话建立时装备。叶端点可以注入帧,所述帧可以在沿树向上流动时进行组合,其中结果传送到在树的根处运行的过程。如下所述,根过程可能需要完成软件的归约。这是归约的准备阶段。然后,可以将归约的结果沿树向下多播回叶端点处的过程,并且可以重新装备归约引擎,为下一轮归约做好准备。这是归约过程的多播阶段。
归约过程的多播阶段可以为屏障操作提供同步,在此期间不需要数据并且使用空归约操作。每个节点可以加入归约树并等待结果。当根节点收到结果时,所述根节点可以沿归约树向下发出多播。在一个实施例中,在所有端点都进入之前,不允许任何端点离开屏障。
可以在每个链路的输出侧提供归约引擎。所述归约引擎可以对归约缓冲区中保持的数据进行操作。在一个实施例中,每个归约引擎可以支持八个主动归约树。也可以支持其他数量的归约树。归约引擎可以执行数据帧的即时组合。在多播阶段期间装备归约引擎。所述归约引擎可以在给定时间量内组合上游帧。归约引擎可以在当前操作已经完成时或在超时时段之后解除装备。在归约超时的情况下,任何部分结果可以沿树向上朝根转发。超时的目的是确保在归约树内出现错误、设备故障或帧丢失的情况下不保留任何归约状态。
图3A示出了示例性归约过程的流程图。在操作期间,根过程首先初始化归约树(操作302)。在HPC编程模型中,初始化可以是涉及要参与归约的多个过程的集体操作。一个过程(其在这种情况下可以是根过程)可以与网络管理软件通信以创建生成树(多播树),所述生成树可以由多播地址表示。网络可以使用多播协议来建立多播树拓扑,并将转发信息存储在如多播表等数据结构中。此数据结构通常存储拓扑和转发信息(如对于给定多播地址,多播包应该转发到哪些输出端口)。根过程然后可以通过向多播地址发送帧来装备生成树中的归约引擎(操作304)。其他过程可以等待,直到它们接收到此帧为止。一旦此帧到达所有参与过程,归约树就马上准备好使用。
随后,参与过程可以执行计算任务,所述计算任务使所述参与过程对归约操作做出贡献。除了根过程之外的过程可以各自构建归约帧,并将所述归约帧发送到归约树的多播地址(操作306)。驻留在参与归约树的交换机中的归约引擎可以对接收到的帧执行归约,并且各自向上游朝归约树的根交换机发送归约的帧(操作308)。根过程可以消耗数据归约帧。根过程可以将来自叶节点的贡献接收在一个或多个数据归约帧中,并通过对这些帧(包括所述根过程自身的贡献)执行归约操作来完成准备阶段(操作310)。可选地,根过程然后可以确定计算任务是否完成(操作312)。如果计算任务完成,则根过程可以将结果发送到多播地址并释放归约引擎(操作316)。如果计算任务未完成,则根过程随后构建包含结果的归约帧,并将所述归约帧发送到多播地址,这进而可以重新装备归约树中的所有归约引擎(操作314)。此操作可以为下一轮归约准备归约引擎。然后,可以重复类似的归约过程,直到计算任务完成为止。
根节点,或者更一般地,根节点上的过程可以执行特殊的角色。根节点首先完成归约过程。如稍后描述的,多播树中通常不允许回路;因此,根通常不向自己发送自身的贡献。假设归约树的根节点处的归约引擎能够在超时之前累积来自叶节点的所有贡献,则根节点可以从叶节点接收单个数据归约帧。在这种情况下,根节点可以将此结果与所述根节点自身的贡献组合。另一方面,如果根节点处的归约引擎超时或无法得到分配,则根节点可以接收要在软件中组合的多个数据归约帧。一旦根节点计算出最终归约,所述根节点就可以将此结果多播到叶节点。根过程还可以在处置错误方面有附加责任。
图3B示出了归约引擎的示例性归约操作的流程图。在操作期间,驻留在交换机上的归约引擎可以首先接收发送到多播地址的屏障帧(操作322)。应注意,屏障帧是用于首次为归约树装备归约引擎的初始帧。在接收到屏障帧之后,归约引擎可以记录父节点(即,从其接收屏障帧的交换机),并且在多播表中执行查找,以确定屏障要转发到的下游节点(操作324)。另外,归约引擎还设置了等待计数,所述等待计数对应于预期基于多播表条目接收的来自端点的贡献的数量。
随后,归约引擎将屏障帧转发到子节点(操作326)。在屏障帧沿归约树向下行进时,装备参与此归约树的所有归约引擎。因此,本地交换机处的归约引擎开始接收从子节点或端点返回的归约帧(操作328)。接下来,归约引擎可以聚集贡献并将归约帧转发到父节点(操作330)。此时,归约引擎现在准备好进行归约操作。接下来,归约引擎可以从根节点接收结果帧,所述根节点为涉及实际数据的归约操作装备所有归约引擎。
此描述中示出的示例假设每个节点一个过程有助于归约,但不需要这样。每个节点可以有多个贡献。在一些实施例中,可以执行局部共享存储器归约和网络归约两者。此外,本文描述的归约引擎可以支持同一归约树上的多个并发非阻塞归约操作。
归约引擎支持的计算操作可以包括但不限于:
·空(即,不涉及任何有效载荷数据的屏障操作);
·对整数或浮点数据类型的MIN运算、MAX运算以及求和(SUM)运算;
·对整数或浮点值和整数索引的MINMAXLOC运算(其返回在数组中找到的最小值和最大值的位置);
·对整数数据类型的按位与(AND)运算、或(OR)运算和异或(XOR)运算;
·对浮点数据类型的可再现求和运算。
归约引擎支持的数据类型可以包括但不限于64位整数和64位IEEE 754浮点。
在一个实施例中,当被比较的值相等时,MINMAXLOC运算符可以遵循用于MINLOC运算符和MAXLOC运算符的消息传递接口(MPI)约定。在一个实施例中,返回两个索引值中的较低索引值。
为了与常用的现代指令组兼容,舍入模式和异常行为可以遵循高级RISC机器(ARM)架构参考手册ARMvS中的定义。例如,如果浮点运算的任何操作数都不是数字(NaN),则结果可以是符号=0的安静NaN。
可再现和与MINMAXLOC运算符可以在每个端点使用一个操作数。可以一次对四个64位操作数执行其他归约,其中对每个操作数应用相同的操作。
一组IEEE浮点值的和可以取决于操作数相加的顺序。当归约包括幅值变化很大的操作数时,这可能是一个重要的问题。可在https://bebop.cs.berkeley.edu/reproblas/docs/talks/SIAM_AN13.pdf获得的出版物“Efficient Reproducible Floating PointReduction Operations on Large Scale Systems[大规模系统上的高效可再现浮点归约操作]”描述了一种可以用于针对给定数量的元素实现期望的精度水平的技术。
可以使用全局最大值、之后是使用标准浮点算法的全局和来执行确定性归约。也可以使用利用整数算法的单个全局和。利用第二种归约方法,当多个贡献被传送到根节点时,主机软件要执行相同的操作。
通常,每个归约引擎可以支持多个独立的归约树,每个归约树由全局唯一的多播地址来标识。树中的每个点都可以用表示为rt_waitcount的局部等待计数值来初始化。此计数值通常等于树的此级下方的端点的数量(即,树中的给定节点的子节点的数量)。
可以通过在多播表中创建指定等待计数和所述一组输出端口的条目来初始化归约树。在树中的不同位置之间变化的此静态状态可以由管理软件以与多播树相同的方式初始化。
每个归约树可以使用单个多播地址。在父端口处,多播表条目可以指定子端口组。在每个子端口处,多播表条目可以指定父端口(即,往回指向根节点的相反路径)。通常,在归约树内不允许回路。与多播群组的任何成员都能够多播到多播群组的所有其他成员的典型多播条目不同,为了归约而建立的多播条目是单侧的,并且只有归约根能够多播到多播组的所有成员。当归约树的任何其他成员向多播地址发送帧时,此帧仅被转发回归约树的根节点。另外,此帧的转发通常与从根节点开始的下游多播路径完全相反。此转发机制保证归约帧可以被为其建立的归约引擎正确拦截。
在一个实施例中,帧的报头中的一个或多个字段可以用作保护密钥,以确保对给定归约的所有贡献因素都来自相同的应用程序或服务。例如,来自帧报头的虚拟网络标识符(VNI)字段可以用作保护密钥。另外,帧的归约报头可以包含32位cookie。可以要求归约中的所有帧具有与用于装备同一归约树中的所有归约引擎的帧相同的保护密钥和cookie。
如上文所提及的,在使用归约树之前装备归约树。多播会话可以用来装备树。在全局归约过程中,分布归约结果的多播阶段可以重新装备树。在一个实施例中,reduction_arm请求可以包括对于归约树中的所有点都恒定的状态。给定树上的归约操作可以由所述归约操作的多播地址、cookie rt_cookie和序列号rt_seqno来标识。可以要求所有贡献因素提供相同的保护密钥(其可以是VNI值)、cookie值和正确的序列号。归约引擎可以确认这些条件得到满足。cookie值可以用于帮助防止归约中的意外或恶意干扰。cookie值可以是根过程生成的随机值。
装备归约树的过程可以在归约引擎中创建用于给定树的动态状态。等待计数值可以从多播表中复制,所述多播表指示给定多播地址的输出端口的数量。通过将rt_waitcount值与管理软件编程的值进行比较,可以确定超时值。保护密钥、cookie值和序列号可以从多播帧中复制。跟踪接收到的归约帧的数量的局部计数器rt_count可以初始化至零。
对给定归约的所有贡献可以指定相同的归约操作,所述归约操作可以由rt_op值来标识。如果具有相同序列号的帧指定不同的操作,则归约硬件可以生成错误。
部分结果帧可以包括累积贡献数量的计数。叶端点可以注入计数为一的帧。归约引擎在执行归约操作时可以使局部计数器按每个帧的部分计数递增。当局部计数达到等待计数时,归约操作在给定归约引擎中完成。在归约完成或超时到期时,归约引擎转发部分结果并释放归约树的动态状态。静态状态保持在多播表中,直到多播表条目被删除为止。归约树必须重新装备才可以被再次使用。
归约的结果由根节点处的过程完成。在全局归约中,可以使用沿归约树向下的多播将结果分布到叶节点。此操作也可以重新装备树。在一个实施例中,系统可以供应正在分布的结果的序列号rt_resno和正在装备的归约的序列号rt_seqno。管理软件可以从一个归约到下一个归约使序列号递增。在正常操作中,以计数器的大小为模,rt_seqno通常比rt_resno高一,在出现错误的情况下情况可能不是这样。对于上游归约数据帧,rt_resno不需要由管理软件设置,并且因此可以被硬件忽略。归约引擎可以在向上游发送帧时将rt_resno设置为等于rt_seqno。
在图2中示出的示例中,归约树的分支比为四。如叶端点208等端点以计数一供应自身的贡献。此示例中的每个第一级交换机(如交换机206)的等待计数为四,这对应于连接到每个叶交换机的四个叶端点。这些交换机可以将来自其四个子交换机的帧组合。贡献计数为四的部分结果帧沿树向上转发到第二级交换机,所述第二级交换机在此示例中是交换机204。交换机204的等待计数可以为16。此第二级交换机然后将归约运算符应用于四个帧(来自其每个子交换机的帧),并将计数为16的结果帧转发到根端点202。实际上,多播树可以不是完全平衡的,其中一些叶节点可以具有不同于其他叶节点的贡献计数,并且一些稍后级交换机可以具有不同于相同级别的其他交换机的贡献计数。
应注意,每个交换机中的归约引擎可以加速归约的分量,这对于适当的功能来说可能并不总是必要的。归约装备命令可能无法分配描述符,因为可能所有描述符都是忙碌的,或者归约描述符可能在所有结果被接收到之前已经超时。在任一种情况下,用于此归约的数据帧可能无法找到匹配的描述符并且然后沿多播路径转发。多播树中较高的交换机中的归约引擎可以归约这些帧,或者所述帧可以到达所述帧可以在软件中进行归约的根。
通常,单个屏障或归约操作继续进行,其中除了根节点之外的每个节点都提供贡献并且然后等待从根节点返回结果。根节点收集贡献,完成归约并且多播结果。序列号从这种归约到下一个归约递增。可以期望在同一组节点上同时流水线化多个归约,例如,以卸载非阻塞归约的级数或者增加多元素浮点归约的带宽。软件可以通过使用多播地址的高位区分多个并发归约来在相同树上执行这种归约。例如,多播格式目的地的结构地址(DFA)(其在一个实施例中用作用于在交换机结构内路由流量的交换机间地址)的位15-3可以区分8K个多播树。然后,可以使用相同多播地址的位20-18来区分在同一树上同时执行的至多8个归约。当归约引擎形成多于一个归约树的一部分时,争用概率在多个归约同时执行的情况下可以增加。因此,可以在树的较高处执行更多的归约操作。
在一个实施例中,归约引擎可以使用定时器来限制其花费在等待贡献上的时间量。因此,归约操作可能会超时。在定时器到期时,可以沿树向上朝根端点发送部分归约结果。还可以沿树向上发送与已经超时的归约相关联的任何另外的数据帧。
图4示出了一个叶端点402(以灰色示出)较晚加入归约过程的示例。其余所有叶端点发送计数为一的包。当超时到期时,第一级交换机之一交换机404(以灰色示出)已经从其三个子交换机接收到帧。所述交换机然后可以沿树向上发送计数为三的结果帧。稍后某个时间,端点402供应其对归约的贡献。沿树向上转发此帧。在此示例中,第二级交换机406累积五个帧,三个帧的计数为四,一个帧的计数为三(来自交换机404)并且来自端点402的后一个帧的计数为一。交换机406随后将其计数为16的结果发送到根端点408。在一个实施例中,第二级交换机406可以具有更长的超时时段来适应较晚到达。如果所有交换机的超时值相同,则第二级交换机406可以向根端点408转发两个帧,一个帧的计数为15并且来自端点402的后一个帧的计数为一。根端点然后可以完成归约。
在一个实施例中,可以基于归约操作之间的预期时间加上到达时间的预期变化的两倍来设置归约超时值。高超时值(秒)不会改变无错误操作,但可能会在出现错误的情况下延迟部分结果的到达。在帧丢弃或部分结果延迟到达的情况下,高超时值还可能使归约引擎资源被占用更长时间。另一方面,低超时值可能引起可扩展性问题。
归约引擎的目的是加速时延敏感的操作(例如,所有过程大约同一时间到达归约或屏障的操作)。当存在显著的负载不平衡并且一个或多个端点较晚到达时,根节点可以接收多个帧。根节点可以在最后的帧到达时快速完成归约。如果正确地(或保守地)设置超时,则花费在处理这些帧上的时间与花费在等待上的时间相比可以很少。
在一些系统(如百万兆级系统)中,通常预期会出现如帧丢弃等错误。归约机制可以被设计成在存在错误的情况下仍充分起作用。两类错误对于归约操作可以很重要:使帧损坏的链路错误和使帧丢弃的设备错误。在可用的情况下,链路级重试可以预防常见的链路错误;因此,可以预期主要的错误情况是由交换机或电缆故障引起的帧丢弃。在使用前向纠错(FEC)而没有链路级重试的情况下,一小部分链路错误可能导致帧丢弃。大多数这种帧丢弃可能出现在批量数据传送中而不是归约中。但是,使归约帧丢失的错误的可能性可以随着作业大小而增加。
检测归约操作中的由帧丢失引起的错误所需的时间通常可以按秒计数。在正常操作下,此时段可以设置成比到达时间的预期分布或节点在等待非阻塞归约完成的同时可能花费在计算上的时间更长。在此时段之后,可以合理地假设根过程被阻塞,从而等待归约完成。然而,在许多示例中,过程在归约操作或屏障操作中等待较长时间段,同时其他过程完成顺序工作。在归约中花费较长时间并不总是意味着出现了错误。
图5A示出了一个叶端点由于错误而未能供应贡献的示例。在此示例中,叶端点502经历错误,并且未向归约过程供应其贡献。因此,中间交换机504超时并转发计数为三的部分结果。根交换机506再次超时(因为在交换机506的定时器到期之前未接收到总计数16),并转发计数为15的帧,或者可能转发计数为12的帧和计数为三的第二后续帧。在任一种情况下,根端点508然后消耗(多个)帧并确定已经存在错误。
图5B示出了基于定时器的示例性归约过程的流程图。在此示例中,归约引擎首先从根节点接收结果帧,所述根节点装备归约引擎(操作522)。归约引擎然后为结果帧中标识的归约树装备就绪,并将结果帧转发到其在归约树中的子节点(操作524)。接下来,归约引擎确定是否已经接收到足够数量的归约贡献(操作526)。此确定基于对应的等待计数,所述等待计数已经在归约树第一次启动的准备阶段期间被建立好。如果等待计数得到满足,则归约引擎然后对接收到的贡献执行归约操作,生成自身的归约帧并将归约帧转发到根(操作532)。如果等待计数未得到满足,则归约引擎进一步确定定时器是否已经到期(操作528)。如果定时器尚未到期,则归约引擎继续等待归约帧从子节点到达(操作530)。如果定时器已经到期,则归约引擎然后对接收到的归约贡献(如果有的话)执行归约操作并将自身的归约帧转发到根节点(操作532)。如果有任何较晚贡献帧在定时器到期之后到达,则归约引擎海可以将所述较晚贡献帧转发到根节点(操作534)。
在一个实施例中,可以在传输层实施可靠归约。网络硬件可以被设计成加速常见情况,并在错误的情况下释放所有硬件资源。软件可以通过在两个独立的树上执行相同的归约操作来预防归约树中的设备故障。不相关的双重错误的概率很小。当根端点从一个树接收到结果(或足够的帧以构建结果)时,主机软件可以在两个树上多播结果。来自成功操作的序列号可以用作结果号。
在第二树留有部分结果、潜在地几步后退或者滞留在拥塞的链路或繁忙的队列上的情况下,传送具有rt_arm位组的归约多播帧可以将序列号提前并清除状态。可以丢弃具有旧序列号的帧。一个或多个帧可能仍在沿树向上飞行中。
归约通常是时延敏感的,而不是带宽密集的。通过同时执行两个归约而产生的附加网络负载通常可忽略不计。在不同的树上执行两次归约的额外好处是,如果网络拥塞,则可以使用第一结果,从而潜在地减少完成操作的时间。然而,此方法的缺点是使用了两倍之多的归约资源(例如,多播表条目和归约引擎/ID),从而潜在地将同时归约的数量减少了两倍。
由于机箱电源故障,可能出现相关的双重错误,但这种错误也可能引起节点故障。在多切片网络中,软件可以在不同的切片上创建归约树。在只有单个网络切片的情况下,同一切片上的树可以共享公共机箱交换机。归约容易损坏此交换机,但这种错误也可以断开节点。
允许归约超时确保了在出现错误的情况下不会留下任何归约状态。故障之后,不需要要求发出管理请求来搜索和释放硬件资源。在一些实施例中,在出现错误的情况下,归约状态可以留在网络中,并且故障恢复可能较为复杂。
在一些实施例中,可以提供灵活的归约协议,在所述归约协议中,缺失的归约引擎或所有资源都已经被消耗的归约引擎不会使协议失去功能。缺失的早期叶归约计算可以由树中较高的归约引擎完成,如图6中所示。在此示例中,叶交换机604上的归约引擎不可用于归约过程。因此,叶交换机604将由四个子叶端点生成的所有四个贡献帧都转发到根交换机606。同时,其他三个叶交换机601、602和603各自将各自的归约帧(计数为四)发送到根交换机606。根交换机可以处理所有这七个帧,并将计数为16的单个归约帧转发到根端点608。通常,树中较高处的归约计算可以由运行在根节点上的过程完成。归约引擎在这些情况下提供的加速可以不同,但计算的结果保持相同。
如果装备了归约树,但在所有主动归约引擎超时之前未提供任何贡献,则所有贡献都可以转发到根端点。根过程随后可以执行整个计算。执行此计算所需的时间可以比超时时段短得多。此归约场景不需要加速。
给定系统上可以支持的最大归约树数量可以由可以充当根的端点数量与给定归约引擎支持的主动树数量的乘积来确定。在少量节点上加速归约通常价值有限,因为每个节点可以仅将其贡献发送到根节点。假设目标是加速十六个节点及以上的归约。系统可以运行一千个或更多个这种作业,而大型系统往往运行不同大小的作业,这进而可以减少主动归约树的数量。大型应用程序可以同时使用多个归约树。在规范示例中,可以将过程布置成2D网格,并且在行、列和整个网格上执行归约。对于P个过程,主动归约的数量可以是P加一的平方根的两倍。出于实施考虑,多播表在管芯区域方面相对昂贵。在一个实施例中,交换机芯片可以支持8192个多播地址,而其他数量也是可能的。应注意,不相交的树可以使用相同的多播地址。
在一些实施例中,软件可以决定卸载哪些归约。可以向网络管理系统发送请求以创建归约树。如果此请求失败,则网络应用程序接口(API)可以在软件中执行操作。但是,利用基于软件的归约或加速的归约来运行同一作业的不同实例可能潜在地导致性能变化,这是不期望的。归约卸载策略可以被配置成使得归约树不太可能用完。
在一个实施例中,6位命令字段用于指示不同的归约操作,如图7所示。如果需要,此6位命令字段可以提供扩展范围。多个并发归约可以在同一个树上操作。每个归约可以在DFA中使用不同的归约ID。等待计数可以被设置成在最大规模系统中足够用于每个节点一个贡献。在一个实施例中,等待计数可以是20位值。
另外,可以提供四个可配置的超时值。这些24位值可以以1024个时钟周期为单位给出。在850MHz时,这提供了1.20us到20.2s的范围。另外,可以使用10位序列号,这可以在具有相同多播地址和相同cookie值的旧归约帧仍在网络中时避免被重复使用。应注意,此问题不会出现在同一个归约树上,因为按顺序传送会阻止旧归约帧在同一个树上稍后传输的帧之后被传送。因此,对于较晚到达的帧会引起问题,所述帧所属的过程需要首先退出,使得新启动的过程可以请求新的多播树,所述新的多播树可以使用相同的多播地址来构建。旧归约帧在多播表的重新编程后存活下来的机会较低。如果所述旧归约帧确实存活下来,它仍然需要在新树执行1024个归约之后与新树相交。应注意,32位cookie值还可以提供额外的保护层。
图7示出了归约操作的示例性列表,所述归约操作将在下文进行解释。FLT_REPSUM运算和MINMAXLOC运算支持每个树每次一个归约。对于所有其他运算,每个树可以并行执行四个归约。浮点求和运算可以具有四种舍入模式和刷新至零(FTZ),所述四种舍入模式和刷新至零可以用三个位编码为八个不同的命令。浮点MIN和MAX具有两种模式用于处置NaN(反映ARM MIN运算和MINNUM运算)。FTZ仅适用于反归一化结果。如果结果要被反归一化,则反而将所述结果设置为0,并引发flt_inexact。叶节点处的软件中可以支持有时被称为DAZ的操作。
屏障(BARRIER):屏障运算返回的数据始终为0。
MINMAXLOC:MINMAXLOC运算符用于支持MINLOC和MAXLOC。操作数0和1计算MINLOC,并且操作数2和3计算MAXLOC。图8示出了一组MINMAXLOC操作数。应注意,当多于一个索引包括最小值/最大值时,将最低的这种索引记录在MINLOC/MAXLOC字段中。
FLT MIN和FLT MAX:当FLT_MIN或FLT_MAX的所有输入都是浮点数时,返回最小值或最大值。当FLT_MIN或FLT_MAX的任何操作数为NaN时,返回NaN。在给定成对归约中,如果一个操作数是信号发送NaN并且一个操作数是安静NaN,则选择返回信号发送NaN。返回的NaN可以变成符号位被清零的安静NaN。
FLT MINNUM和FLT MAXNUM:这些运算类似于FLT_MIN和FLT_MAX,但以不同的方式处置为NaN的操作数。在不存在信号发送NaN的情况下,FLT_MINNUM和FLT_MAXNUM可以返回归约的最小数/最大数。只有当这些归约之一中的所有操作数都是安静NaN时,才返回安静NaN。
关于这些运算符用信号发送NaN的行为可以由R_TF_RED_CFG_MODE缓存器控制。在标准IEEE模式下,作为成对归约的操作数的信号发送NaN(SNaN)总是产生安静NaN作为结果。这对于完全归约产生了不确定的结果。在推荐的关联模式下,当一个操作数是SNaN并且另一个操作数是数字时,结果是数字。因此,在关联模式下,如果归约中的至少一个操作数是浮点数,则返回最小浮点操作数或最大浮点操作数。在任一模式下,如果任何操作数是信号发送NaN,则返回flt_invalid。
FLT_MINMAXNUMLOC:此运算计算FLT_MINNUM和FLT_MAXNUM两者。
FLT_SUM:此浮点求和运算具有刷新至零选项和四种舍入模式。当启用刷新至零时,如果和被反归一化,则将其设置为0。保存反归一化结果的符号。四种舍入模式与ARM舍入模式相匹配,并且在图9中示出。
FLT_REPSUM:可再现浮点和通过将每个浮点操作数拆分为至多四个整数分量来实现,每个整数分量的精度有限。选择每个分量中的有效位数(W),使得不会出现整数溢出。W的值由软件选择并且在硬件中不可观察到。W用于计算要加载到归约操作数rt_data中的整数值IX。当归约完成时,W用于构建浮点结果。软件可以选择将W设置为40;在这种情况下,可以减少至多2^24个操作数。浮点数可以由至多四个W位整数如下表示:
对于每个浮点操作数,软件选择M的最大值,使得操作数的最低有效位出现在IX[0]中。软件负责将四个IX值加载到rt_data中并将M的值加载到rt_repsum_m中,所述rt_repsum_m是八位带符号整数。最低有效操作数IX[0]被加载到rt_data[0]中。
当归约引擎将此格式的两个操作数相加时,如果一个操作数的M,M’大于另一个操作数的M,M’,则硬件可以丢弃较小操作数中的任何IX[j](其中j<M’),因为这些值在最终结果中可能没有意义。如果在归约的过程期间出现此情况,并且丢弃了任何非零操作数,则可以返回repsum_inexact。
当归约完成时,根过程可以将所得操作数和rt_repsum_m转换为浮点数。如果操作数多于选定W所支持的操作数,则可以返回int_overtflow。在这种情况下,结果是无效的。应注意,仅在结果中返回的有效值之一出现溢出时才报告int_overflow。rt_repsum_oflow_id标识要溢出的最高有效操作数。当带有int_overflow的部分结果随着另一个部分结果减少时,如果溢出部分结果的(M+rt_repsum_oflow_id)小于另一个部分结果的M’,则丢弃int_overflow结果代码。
在一些实施例中,可以在多播表中对归约操作的静止状态进行编程。此状态在同一归约树中的设备之间可以有所不同。当作业启动或新的归约树创建成时,管理代理可以创建此状态。所述状态可以使用与用于建立标准多播条目相同的机制。多播归约树通过非零等待计数与多播树区分开。用于特定归约引擎中的归约的超时值可以由其等待计数值和配置确定。
reduction_arm帧和reduction_data帧的归约帧格式相同。所述帧可以通过rt_arm字段来区分,所述字段可以沿树以递减方式设置在所有帧上。图10中示出了门户格式的84字节归约帧。
将门户报头和命令字段存储在归约状态下一次。图11中示出了12字节归约报头。图12中示出了用于MINMAXLOC可再现求和运算符的操作数的字节序。
rt_rc中报告了归约的过程期间遇到的错误或不精确结果。通常,这些事件不会阻止归约完成。然而,在操作码不匹配的情况下,无法执行归约。在这种情况下,具有不同操作码的两个操作数的源结构地址(SFA)在rt_data[0]中返回。图13中总结了归约结果代码。
四个并行归约共享仅一个结果代码。结果代码按优先级顺序定义。如果归约遇到多于一个异常状况,则保留最大的一个。例如,flt_invalid是最高优先级的FLT_SUM结果代码。
在一些实施例中,可以从通常未配备的以太网NIC开始利用归约引擎,以在HPC以太网规范下操作并利用门户包格式。为了促进使用归约引擎进行归约,系统可以使用软门户封装,在所述软门户封装中,门户包可以预装有以太网报头,所述以太网报头被构建成与NIC连接到的端口上的门户的配置相一致。图14中图示了这一点。
在Linux操作系统中,可以使用原始套接字来构建这些包;这适合于功能性测试,因为它要求过程作为根或利用CAP_NET_RAW执行。可以打开套接字以仅接收交换机被配置成在其预装到门户包的以太网报头中使用的指定以太网类型。应该注意,门户包的VNI字段是保护机制,所述保护机制可以插入到特权域中,并且出于生产用途,所述保护机制可以在内核模块中执行。
图15示出了促进归约引擎的示例性交换系统。在此示例中,交换机1502可以包括如端口1520等多个通信端口。每个端口可以包括发射器和接收器。交换机1502还可以包括处理器1504、存储设备1506和交换逻辑块1508。交换逻辑块1508可以耦接到所有通信端口,并且可以进一步包括交叉开关交换机1510和归约引擎逻辑块1514。
交叉开关交换机1510可以包括一个或多个交叉开关交换机芯片,所述一个或多个交叉开关交换机芯片可以被配置成在通信端口之间转发数据包并控制包。归约引擎逻辑块1514可以被配置成执行如上所述的各种动态归约功能。交换逻辑块1508中还包括多播表1516,所述多播表可以存储归约树拓扑和状态信息,以促进归约引擎逻辑块1514执行的归约操作。其他类型的数据结构也可以用于存储拓扑和状态信息。
总之,本公开描述了一种能够在网络中动态地分配归约引擎的交换机。所述交换机配备有可以基于多播帧进行动态分配以执行即时归约的归约引擎。因此,所述网络可以促进高效且可扩展的高性能计算环境。
上述方法和过程可以由硬件逻辑块、模块、逻辑块或装置来执行。硬件逻辑块、模块、逻辑块或装置可以包括但不限于专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)、在特定时间执行一段代码的专用或共享处理器、以及现在已知或以后开发的其他可编程逻辑设备。当硬件逻辑块、模块或装置被激活时,所述硬件逻辑块、模块或装置执行其中所包括的方法和过程。
本文描述的方法和过程也可以被体现为代码或数据,所述代码或数据可以存储在存储设备或计算机可读存储介质中。当处理器读取并执行存储的代码或数据时,处理器可以执行这些方法和过程。
本发明的实施例的先前描述是仅出于说明和描述的目的而呈现的。所述描述并不旨在是详尽的或将本发明限于所公开的形式。相应地,对于本领域普通技术人员而言,许多的修改和变化将是显而易见的。另外,上述公开并不旨在限制本发明。本发明的范围由所附权利要求书限定。