具体实施例
现在将详细参考本公开的各种实施例,其示例在附图中示出。尽管结合这些实施例进行描述,但将理解,它们并不旨在将本公开限制到这些实施例。相反,本公开旨在涵盖可包括在所附权利要求所定义的本公开的精神和范围内的替代、修改和等同物。此外,在本公开的以下详细描述中,为了提供对本公开的透彻理解,阐述了许多具体细节。然而,将理解,本公开可以在没有这些特定细节的情况下实施。在其他实例中,未详细描述公知的方法、过程、组件和电路,以便避免不必要地模糊本公开的方面。
以下详细描述的某些部分以过程、逻辑块、处理和对计算机存储器中的数据位的操作的其他符号表示的方式呈现。这些描述和表示是数据处理技术领域的技术人员使用的手段,以最有效地将其工作的实质传达给本领域的其他技术人员。在本公开中,过程、逻辑块、处理等被认为是导致期望结果的步骤或指令的自洽序列。这些步骤是那些利用物理量的物理操作的步骤。通常,尽管不是必须的,这些量采取电或磁信号的形式,能够在计算系统中存储、传输、组合、比较和以其他方式操纵。事实证明,主要是出于常见用法的原因,将这些信号称为事务、比特、值、元素、符号、字符、样本、像素等有时是方便的。
但是,应该记住,所有这些和类似术语都是与适当的物理量相关联的,且仅仅是应用于这些量的方便的标签。除非从下面的讨论中明确指出,否则可以理解,在整个本公开中,使用诸如“访问”、“分配”、“存储”、“接收”、“发送”、“写入”、“读取”、“发射”、“加载”、“推送”、“拉动”、“处理”、“缓存”、“路由”、“确定”、“选择”、“请求”、“同步”、“复制”、“映射”、“更新”、“转换”、“生成”、“分配”等术语的讨论指的是设备或计算系统(例如,图9的方法)或类似的电子计算设备、系统或网络(例如,图2A的系统及其组件和元件)的动作和过程。计算系统或类似电子计算设备操纵和变换在存储器、寄存器或其他此类信息存储、传输或显示设备中表示为物理(电子)量的数据。
这里描述的一些元件或实施例可以在驻留在某种形式的计算机可读存储介质(例如程序模块)上的由一个或多个计算机或其他设备执行的计算机可执行指令的一般上下文中讨论。作为示例而非限制,计算机可读存储介质可以包括非暂时性计算机存储介质和通信介质。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。在各种实施例中,可以根据需要组合或分配程序模块的功能。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于双倍数据速率(double data rate,DDR)存储器、随机存取存储器(RAM)、静态RAM(SRAM)或动态RAM(DRAM)、只读存储器(ROM)、电可擦除可编程ROM(EEPROM)、闪存(例如,SSD)或其他存储器技术、小型光盘 ROM(CD-ROM)、数字多功能光盘或其他光存储器、磁盒、磁带、磁盘存储器或其他磁存储设备、或可用于存储所需信息且可被访问以获取该信息的任何其他介质。
通信介质可以包含计算机可执行指令、数据结构和程序模块,还包括任何信息传递介质。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频(RF)、红外和其他无线介质的无线介质。上述任一项的组合也可以包括在计算机可读介质的范围内。
本公开的系统和方法被配置为高效和有效地实现并行数据流路由方案。在一个实施例中,并行数据流路由方案在芯片互连网络(interconnected chip network,ICN) 中实现。在一个实施例中,系统和方法提供均衡的工作负载、有保证的依赖性和有保证的访问顺序(例如,为了一致性,等等)。通过经由最小链路的多流以及与流 ID、源并行处理单元(PPU)ID的交织,可以提供均衡的工作负载。通过使用与流ID 交织并且在源并行处理单元(PPU)进行哈希算法(hashing)的物理地址(PA),可以提供有保证的依赖性。通过使用沿路由的流ID和可拆分的远程屏障,可以提供有保证的访问顺序。系统和方法还可以支持工作负载均衡。应能理解,可存在各种路由方案。路由方案可以包括路由表。路由方案可用以指向在源PPU、中继PPU等处的路由。在一个示例性实施例中,可以使用简化的多路径路由方案。
图2A示出了根据本公开实施例的示例系统200的框图。系统200可用于各种类型的工作负载(例如,通用处理、图形处理、神经网络数据处理等)。在一个实施例中,系统200可用于神经网络和人工智能(Artificial Intelligence,AI)工作负载。通常,系统200可用于任何并行计算,包括大量数据并行处理。
通常,系统200包括多个计算节点(例如,服务器等),并且每个计算节点或服务器包括多个并行计算单元或芯片(例如,PPU)。在图2A的示例中,系统200包括计算节点(例如,服务器等)201和计算节点202。虽然图2包括两个计算节点,但可以理解的是,计算节点的数量可以不同。
在图2A的一个实施例中,计算节点201包括主中央处理单元(CPU)205,并经由网络接口控制器或卡(NIC)206连接到网络240。计算节点201可以包括除了将要描述的那些元件和组件之外的元件和组件。计算节点201的并行计算单元包括网络处理单元(PPU)PPU_0a至PPU_na,网络处理单元PPU_0a至PPU_na连接到外围组件互连高速 (PCIe)总线208,外围组件互连高速(PCIe)总线208继而连接到NIC206。
在一个实施例中,计算节点202包括与计算节点201的元件相似的元件(尽管'm'可以等于也可以不等于'n')。系统200中的其他计算节点可以类似地构造。在一个示例性实施例中,计算节点201和计算节点202可以具有相同的结构,至少达到本文所描述的程度。
计算节点201上的PPU可以通过总线208彼此通信(通信耦合)。计算节点201上的PPU可以经由总线208和总线209以及NIC206和NIC207通过网络240与计算节点 202上的PPU通信。
图2A的系统200包括高带宽芯片互连网络(ICN)250,其允许系统200中的PPU之间的通信。即是说,系统200中的PPU经由ICN250彼此通信耦合。例如,ICN250允许PPU_0a与计算节点201上的其他PPU通信,并且还允许PPU_0a与其他计算节点(例如,计算节点202)上的PPU通信。在图2A的示例中,ICN250包括直接连接两个PPU 且允许两个连接的PPU之间的双向通信的互连(例如,互连252和互连254)。互连可以是半双工链路,在其上一次只有一个PPU可以传输数据,或者互连可以是全双工链路,在其上可以同时在两个方向上传输数据。在一个实施例中,互连(例如,互连252和互连254)是基于或利用串行/解串器(SerDes)功能的线路或电缆。
在图2A的一个示例实施例中,互连252是将计算节点201上的PPU_0a直接连接到PPU_na的硬连线或电缆连接,互连254是将计算节点201上的PPU_na直接连接到计算节点202上的PPU_0b的硬连线或电缆连接。也即是说,例如,互连252的一端连接到计算节点201上的PPU_0a,而另一端连接到PPU_na。更具体地说,互连252的一端插入到交换机234(图2C)上的端口或耦合到交换机234的端口,互连252的另一端插入到PPU_na的交换机上的端口或耦合到PPU_na的交换机的端口。
可以理解的是,实际连接拓扑结构(各PPU分别连接到自身之外的哪个PPU)可以不同。图2B示出了本公开一个实施例的示例ICN拓扑结构的框图,其中每个计算节点有三个PPU。可以理解的是,每个计算节点的PPU数量可以不同。在一个示例性实施例中,计算节点291上的PPU_0c连接到计算节点291上的PPU_xc,计算节点291上的PPU_xc继而连接到计算节点291上的PPU_yc。计算节点291上的PPU_0c可以连接到另一计算节点(未示出)上的PPU。计算节点291上的PPU_yc连接到计算节点292 上的PPU_0d。在一个实施例中,PPU可以连接到其在计算节点上的直接邻居 (immediate neighbor)或其在相邻计算节点上的直接邻居。应当理解的是,PPU的连接可以不同。因此,在图2B的示例中,计算节点292上的PPU_0d连接到计算节点292上的PPU_yd,计算节点292上的PPU_yd继而连接到计算节点292上的PPU_xd。计算节点292上的PPU_xd可以连接到另一计算节点(未示出)上的PPU。连接相同计算节点上的PPU的互连可称为芯片内互连,连接不同计算节点上的PPU的互连可称为芯片间互连。
任何两个PPU(例如,两个PPU可以在相同的计算节点上或在不同的计算节点上,等等)之间的通信可以是直接的或间接的。在一个实施例中,通过两个PPU之间的单个链路进行直接通信,且当来自一个PPU的信息经由一个或多个中间PPU中继到另一个PPU时发生间接通信。例如,在图2A所例示的配置中,计算节点201上的PPU_0a 可以经由互连252与计算节点201上的PPU_na直接通信,并且计算节点201上的 PPU_0a可以经由到PPU_na的互连252以及计算节点202上的从PPU_na到PPU_0b的互连254与计算节点202上的PPU_0b间接通信。PPU之间的通信可以包括存储器访问请求(例如,读请求和写请求)的传输和响应于这些请求的数据传输。
PPU之间的通信可以在命令级(例如,DMA拷贝)和指令级(例如,直接加载或存储)。ICN250允许系统200中的计算节点和PPU在不使用PCIe总线208的情况下进行通信,从而避免其带宽限制和相对速度不足。
PPU还可以使用神经PPU来实现,或者可以称为神经PPU。PPU还可以被实现为或使用各种不同的包括通用处理单元、图形处理单元、神经网络数据处理等的处理单元。
在一个实施例中,计算节点201上的PPU除了经由ICN250通信之外,还可以通过总线208彼此通信(通信耦合)。类似地,计算节点201上的PPU还可以经由总线208 和总线209以及NIC206和NIC207通过网络240与计算节点202上的PPU通信。
系统200和PPU(例如,PPU_0a等)可以包括除了下面所示和所描述的元件或组件之外的元件或组件,并且元件或组件可以如图中所示或以不同的方式布置。示例系统200和PPU中的一些块可以根据其执行的功能来描述。系统的元件和组件被描述和示出为分开的块,本公开不限于此;也就是说,例如,块/功能的组合可以集成到执行多个功能的单个块中。系统200可以被扩展以包括附加PPU,并且系统200与包括分层缩放方案和扁平化缩放方案的不同缩放方案兼容。
通常,计算节点201上的每个PPU包括诸如处理核和存储器的元件。图2C示出了根据本公开一个实施例的示例并行处理单元PPU_0a的框图。图2C所示的PPU_0a包括耦合到一个或多个计算元件或处理核(例如,核212a、核212b、核212c、核212d,等等)以及一个或多个高速缓存(例如,高速缓存214a、高速缓存214b、高速缓存 214c、高速缓存214d,等等)的片上网络(network-on-a-chip,NoC)210。PPU_0a还包括例如耦合到NoC210的一个或多个高带宽存储器(high bandwidth memory,HBM) (例如,HBM 216a、HBM 216b、HBM 216c、HBM216d,等等)。图2C的处理核、高速缓存和HBM在此也可分别统称为核212、高速缓存214和HBM216。在一个示例性实施例中,高速缓存214是HBM216和NoC210之间的最后一级高速缓存。计算节点 201可以包括其它级别的高速缓存(例如,L1、L2等;未示出)。HBM216中的存储器空间可以被声明或分配(例如,在运行时)作为缓冲器(例如,乒乓缓冲器(ping-pongbuffer),图2C中未示出)。
PPU_0a还可以包括其他功能块或组件(未示出),例如命令处理器、直接存储器访问(direct memory access,DMA)块和便于与PCIe总线208通信的PCIe块。PPU_0a 可以包括这里描述的或图2C所示的那些元件和组件以外的元件和组件。
在一些实施例中,系统200包括例如使用分区全局地址空间(PGAS)编程模型的统一存储器寻址空间。因此,可以全局分配系统200中的存储器空间,使得例如 PPU_0a上的HBM216可由该计算节点上的其他PPU以及由系统200中的其他计算节点上的PPU访问。类似地,PPU_0a可以访问系统中的其他PPU/计算节点上的HBM。因此,在图2A和图2B的示例中,一个PPU可以从系统200中的另一个PPU读取数据或向系统200中的另一个PPU写入数据,其中,两个PPU可以在相同的计算节点上或不同的计算节点上,并且读或写可以直接或间接地发生。
计算节点201通过ICN子系统230(如图2C所示)耦合到ICN 250,ICN子系统230 与NoC 210耦合。在一个实施例中,ICN子系统230包括ICN通信控制块(通信控制器) 232、交换机234和一个或多个互通信链路(inter-communication link,ICL)(例如,ICL 236;统称为ICL 236)。ICL236可以耦合到交换机234,或可以是交换机234的组件。 ICL236构成或包括端口。在一个示例实施例中,有7个ICL。每个ICL236连接到相应的互连(例如,互连252)。互连252的一端耦合或插入到PPU_0a上的ICL(端口) 236中,并且互连的另一端耦合或插入到另一PPU上的另一ICL/端口中。
在图2C的一个配置中,例如,PPU_0a的存储器访问请求(例如,读请求或写请求)从NoC210发出到ICN通信控制块232。存储器访问请求包括标识哪个计算节点 /PPU/HBM是存储器访问请求的目标的地址。ICN通信控制块232使用该地址来确定哪个ICN236(直接或间接地)通信耦合到由该地址标识的计算节点/PPU/HBM。那么,由交换机234将存储器访问请求路由到选定的ICL 236,然后,通过ICN 250将存储器访问请求路由到由该地址标识的计算节点/PPU/HBM。在接收端,在目标PPU的 ICL接收存储器访问请求,将存储器访问请求提供给ICN通信控制块且然后提供给该 PPU的NoC,且最后将存储器访问请求提供给由存储器访问请求寻址的该PPU上的 HBM。如果存储器访问请求是写请求,则数据被存储到目标PPU上的HBM中的地址。如果存储器访问请求是读请求,则将位于目标PPU上的HBM中地址的数据返回到 PPU_0a。以这种方式,使用高带宽ICN250快速地完成芯片间通信,绕过PCIe总线208,从而避免其带宽限制和相对速度不足。
PPU可以包括耦合在核212和ICN子系统230之间的计算命令环。计算命令环可以实现为多个缓冲器。在核和计算命令环之间可以存在一对一的对应关系。来自在核上执行的进程的命令按照它们被发出或将要被执行的顺序被推送到相应计算命令环的报头中。
ICN子系统230还可以包括耦合到命令调度块和指令调度块的多个芯片到芯片(chip-to-chip,C2C)的DMA单元。DMA单元还经由C2C结构(fabric)和网络接口单元(network interface unit,NIU)耦合到NoC210,并且DMA单元308还耦合到交换机234,交换机234相应地耦合到与ICN250耦合的ICL236。
在一个实施例中,存在16个通信命令环和7个DMA单元。在DMA单元和ICL之间可以存在一对一的对应关系。命令调度块将通信命令环映射到DMA单元,且因此映射到ICL236。命令调度块、指令调度块和DMA单元可以各自包括诸如先进先出 (FIFO)缓冲器(未示出)的缓冲器。
ICN通信控制块232将输出的存储器访问请求映射到基于该请求中的地址所选择的ICL236。ICN通信控制块232将存储器访问请求转发到与所选择的ICL 236相对应的DMA单元。然后由交换机234将该请求从DMA单元路由到所选择的ICL。
系统200和PPU是用于实现诸如本公开的那些方法(例如,图9中的方法等)的系统和处理单元的示例。
图3示出了根据本公开实施例的示例统一存储器寻址空间的框图。统一存储器寻址空间能够实现分区全局地址空间(PGAS)类型的编程模型。程序(program)之间的通信可以在不同的级别上流动。在命令级中,通信可以包括直接存储器访问(DMA) 复制操作。在指令级中,通信可以包括直接加载/存储操作。在一个实施例中,可以在一个物理存储器中本地存储被认为是共享空间的部分的变量VAR。在一个示例性实施例中,可以将VAR的值写入第一PPU上的第一进程,且可以由第二PPU上的第二进程读取VAR的值。
图4示出了根据本公开实施例的示例系统400的框图。系统400是根据本公开一个实施例的示例缩放层次结构或拓扑方法。在一个示例性实施例中,多个PPU通过ICN连接(例如,401、402、403、404、405、409、411、412、421、422、423、 441、442、443等)彼此通信耦合。
在一个实施例中,在一些拓扑结构中多个芯片通信地联网在一起,路由方案使系统能够针对每个请求将通信路由到合适的目标芯片。在一个示例性实施例中,芯片包括通信处理组件。通信处理组件可以被认为是并行处理单元(PPU)。在一个实施例中,路由表和一些路由规则指示硬件如何控制数据流。在一个示例性实施例中,可以在神经网络配置中实现路由方案。
可以理解的是,通信网络可以具有各种配置。一般而言,信息/数据通信从源流向目标。在一个实施例中,通信路由路径可以通过与通信相关联的源和目标的指示来标识。网络可以包括比PPU中包括的出口端口更多的目标组件,在这种情况下,每个PPU不能直接耦合到网络中的每个其他PPU。在一个实施例中,网络包括除源 PPU和目标PPU之外的中间PPU,以帮助在源和目标之间路由数据。在一个示例性实施例中,中间PPU被认为是中继。可以用在源和目标之间(例如,在“网状”拓扑结构中,等等)的中间或中继组件配置网络。一般而言,源是路径中的起始/第一通信PPU,中继是中间PPU(例如,其从上行/先前PPU接收通信且将该通信转发到路径中的下行/下一个PPU,等等),且目标是路径中的最终/最后通信PPU。网络可以包括源和目标之间的多个路径或路由。
数据可以沿着经由通信组件(例如,PPU等)之间的通信“链路”形成的网络中的通信“路径”进行通信或沿着该通信“路径”流动。数据可以划分/分离成包。不同的包可以沿着相同的链路或不同的链路流动。在本详细说明书的其他部分中呈现通信路径和链路的附加描述。
当在网络中通信时,通常需要解决一些关键的考虑。一个考虑是,当存在从源到目标位置的多个网络路径时,如何处理通信。在多个路径网络中实现资源利用和工作负载分布的适当均衡可能是困难的,因为始终仅利用单个链路基本上会使其他可用资源闲置,但尝试始终充分利用所有链路可能会引入不切实际的协调复杂性。在许多应用中,精确度通常是非常重要的,且存储器访问操作的定时对于保持精确度通常是必不可少的。
在复杂的通信网络中,可能存在潜在地影响存储器访问操作(例如,读、写等) 的定时的各种问题和条件。在一个示例性实施例中,可以存在与传送信息相关联的多个写操作(例如,不同的写可以涉及/传送数据的不同部分,等等),并且写操作的不同部分可以潜在地经由不同的网络路径通信。一条路径可以比另一条路径更快地传递信息。如果不能保证适当的写操作定时(例如,包括对通信持续时间等的考虑),则第二(例如,“后来的”、随后的,等等)写请求可以通过另一个更快的通信路径超越第一(例如,先前的、“早期的”等)写请求,并且第二写操作可以以违反适当操作定时的方式比第一写操作更早地发生。通常,定时或写操作可以与存储器/数据一致性相关联。应用可以要求将第一数据段和第二数据段写入相同的地址/位置或不同的地址/位置。在一个实施例中,如果这两个不同的数据段被写入相同的地址,则认为定时与数据依赖性有关,且如果这两个不同的数据段被写入不同的地址,则认为定时与访问顺序有关。
图5A示出了根据本公开实施例的通信网络的示例部分的框图。通信网络部分 510包括源PPU501、中继PPU502和目标PPU503。源PPU501经由通信链路511通信耦合到中继PPU502,而中继PPU502经由通信链路512和通信链路513通信耦合到目标PPU503。在一个实施例中,带宽受到源和目标之间最窄路径/链路的约束。例如,虽然在PPU 502和PPU 503之间的网络段中有两个链路/路径(即通信链路512 和通信链路513),但是在PPU 501和PPU502之间的网络段中只有一个链路/路径 511。在一个示例性实施例中,即使存在链路512和链路513(对于第二PPU 502和第三PPU 503之间的总共两个路径宽度,等等),但是吞吐量由链路511确定。在一个示例性实施例中,一个链路(例如,链路511等)是对总吞吐量的限制,因此其是最小链路思想的基础。从包括PPU501的芯片的角度来看,到达包括PPU503 的目标芯片的路由具有最小链路(minimum link,Minlink#)1。
图5B示出了根据本公开实施例的通信网络的示例部分的框图。通信网络部分520包括源PPU 521、中继PPU 522和目标PPU 523。源PPU521经由通信链路531和通信链路532通信耦合到中继PPU522,中继PPU 522经由通信链路533通信耦合到目标PPU 523。通信网络部分520具有与通信网络部分510不同的配置,但仍然具有最小链路1。与通信部分510类似,在通信部分520中,带宽由源和目标之间的最窄路径/链路约束。例如,尽管在PPU 521和PPU522之间的网络段中有两个链路/路径(即通信链路531 和通信链路532),但在PPU 522和PPU 523之间的网络段中只有一个链路/路径533。在一个示例性实施例中,即使存在链路531和链路532(对于第一PPU 521和第二PPU 522之间的总共两个路径宽度,等等),但是吞吐量由链路533确定。在一个示例性实施例中,再次,一个链路(例如,链路533等)是对总吞吐量的限制,因此其是最小链路构思的基础。从包括PPU521的芯片的角度来看,到达包括PPU523的目标芯片的路由具有最小链路(Minlink#)1。
在多流系统中,中继芯片可以以对出口之间的流进行均衡的方式运行。从 PPU501到PPU503,最小链路是1,因此在PPU502和PPU503之间的网络段中,利用链路512或链路513中的一个来从PPU501到PPU503传递信息。可以理解的是,如果将诸如链路512的链路之一用于从PPU501到PPU503的通信,则可以将诸如链路513的另一链路用于其他通信。在一个示例性实施例中,类似于PPU 501的另一个PPU(未示出)耦合到PPU 502,并且来自该另一个PPU的通信经由链路513从PPU 502转发到 PPU503。当两个PPU之间有多个链路时,通常希望均衡多个链路上的数据流。在这种情况下,本公开的系统和方法均衡通信通道/路径中的PPU工作负载。
图5C示出了根据本公开实施例的通信网络的示例部分的框图。通信网络部分540包括源PPU 541、中继PPU 542和目标PPU 543。源PPU541经由通信链路551和通信链路552通信耦合到中继PPU 542,而中继PPU 542经由通信链路553和通信链路554通信耦合到目标PPU 543。链路551将数据571从PPU 541传递到PPU 542,且链路552将数据572从PPU 541传递到PPU 542。链路553将数据571和数据572从PPU 542传递到 PPU543。在一个示例性实施例中,工作负载通信网络部分540不是由中继PPU542以最优方式均衡的。通信网络部分540在PPU 541和PPU 542之间的网络段中具有两个链路/路径(即通信链路551和通信链路552),通信网络部分540在PPU 542和PPU 543 之间的网络段中具有两个链路/路径(即通信链路553和通信链路554)。因此,最小链路数(Minlink#)为2。源PPU541通过在链路551上发送数据571和在链路552上发送数据572来均衡数据传输量(data traffic)。不幸的是,链路553和链路554上从PPU542 到PPU543的数据传输量是不均衡的(例如,中继PPU542将数据571和数据572均在链路553上发送,留下链路554为空,等等)。
图5D示出了根据本公开实施例的通信网络的示例部分的框图。通信网络部分 580包括源PPU 581、中继PPU 582和目标PPU 583。源PPU581经由通信链路591和通信链路592通信耦合到中继PPU 582,中继PPU 582经由通信链路593和通信链路594 通信耦合到目标PPU583。链路591从PPU 581到PPU 582传递数据577,且链路592从 PPU 581到PPU 582传递数据578。链路593从PPU 582到PPU 583传递数据578,链路 594从PPU 582到PPU 583传递数据577。在一个示例性实施例中,图5D中的工作负载通信网络部分580比图5C中的通信网络部分540更优化均衡。通信网络部分580在PPU 581和PPU 582之间的网络段中具有两个链路/路径(即通信链路591和通信链路592),通信网络部分580在PPU 582和PPU 583之间的网络段中具有两个链路/路径(即通信链路593和通信链路594)。因此,最小链路数(Minlink#)为2。源PPU581通过在链路 591上传递数据577和在链路592上传递数据578来均衡数据传输量。中继PPU582还通过在链路593上传递数据578和在链路594上传递数据577来均衡数据传输量。
在一个实施例中,基本路由方案是简单的并且在硬件中实现。在一个示例性实施例中,使用静态预定路由且在运行之前设置静态预定路由。在一个示例性实施例中,一旦设置了路由表,就不能在运行时由硬件改变它。可以在运行时间之前将路由信息编程/再编程到硬件寄存器中。硬件可以在下次重置路由时再配置路由,但一旦设置了路由,就不能在运行时更改它。在一个实施例中,系统使用基本XY路由方案加上一些简单规则来开发路由表。
在一个实施例中,PPU包括路由表。在一个实施例中,路由表可以具有以下配置:
表1
在一个实施例中,每个芯片/PPU具有7个端口,并且设置比特来指示端口是否可用/是否应该用于路由包。在一个实施例中,比特被设置为逻辑1以指示出口端口可用,比特被设置为逻辑0以指示出口端口不可用。在一个示例性实施例中,系统可以支持多达1024个芯片/PPU,并且路由表可以具有来自每个源PPU的相应数量的条目。这意味着从源PPU可以达到多达1023个目标芯片/PPU。每个条目对应于从相关联的源PPU到特定目标PPU的通信。对于上面的示例表,路由表指示7个出口端口中的哪个可用/应该用于与PPU4和PPU5通信。路由表可以包括用于与到所指示的目标PPU 的通信相关联的最小链路指示的字段。在一个实施例中,尽管可以存在具有多跳的多个路径,但最小链路数是最窄路径。为了到达芯片/PPU编号4,存在最小链路2。在这种情况下,源和目标之间的整个路由/路径中的另一跳可以具有3个链路,但从搜索表相关联的PPU到PPU4的这一跳是2个链路。
图6示出了根据本公开实施例的通信网络600的示例部分的框图。通信网络600 包括经由链路631至链路693通信耦合的PPU610至PPU625。
在一个示例性实施例中,数据从PPU610发送到PPU615。在此示例中,PPU610 作为源PPU,PPU615作为目标PPU。PPU611和PPU614可以作为中继PPU。链路631 和链路632可用于将数据从PPU 610转发到PPU 611,链路671可用于将数据从PPU 611 转发到PPU 615。链路661可用于将数据从PPU 610转发到PPU 614,链路633和链路 634可用于将数据从PPU 614转发到PPU 615。虽然链路631、链路632、链路633、链路634、链路661和链路671通常可用于在一些PPU之间传递信息,但可以关闭或禁用一些链路。关闭或禁用PPU的附加说明在本详细说明书的其他部分中呈现。
在PPU610是源PPU且PPU615是目标PPU的这种场景下,当检查经由中继PPU614 的第一路径和经由中继PPU611的第二路径时,确定最小链路数是1。例如,对于经由中继PPU614的第一路径,即使PPU 614和PPU 615之间的路径可以具有两个链路 (例如链路633和链路634),但PPU 610和PPU 614之间的路径仅具有一个链路(例如链路661)。因此,最小链路数是1(例如,对应于链路661等)。类似地,经由中继 PPU611的第二路径具有最小链路1(例如,对应于链路671)。在一个实施例中,驱动程序使用最小链路信息并禁用链路631或链路632。
在一个示例性实施例中,PPU 610不关心使用哪个中继PPU(例如,PPU611, PPU614等),其只关心指示目标PPU 615以及通信将从哪个出口端口转发。在一个示例性实施例中,信息被发送到中继PPU611,并且从源PPU610到目标PPU615的路径中的第一跳是通过PPU610的出口端口1或出口端口2。如果使用PPU610的出口端口 1,那么出口端口2可以被禁用/关闭,反之亦然。由于PPU614没有被使用,链路633 和链路634可以保持启用/保持打开以处理其他通信(例如,服务于从PPU618到 PPU615的通信,等等)。在一个示例性实施例中,虽然PPU 610不一定关心使用哪个中继PPU(例如PPU611、PPU614等),但是整个系统可以关心并且使用哪个中继 PPU可能是重要的。路径/链路/PPU选择的考虑因素(例如,对工作负载均衡、数据一致性等的影响)的附加说明在本详细说明书的其他部分中呈现。
在一个示例性实施例中,数据从PPU610发送到PPU620。在此示例中,PPU610 作为源PPU,PPU620作为目标PPU。PPU611、PPU612、PPU614、PPU615、PPU616、 PPU618和PPU619可以作为中继PPU。尽管从PPU 610到PPU 620的潜在路径比从PPU 610到PPU 615的路径更多,但就PPU610而言,所关注的路由决策是相同的,因为在两种场景中PPU 610都将信息转发到PPU 611或PPU 614,并且PPU 610对从PPU 610 到PPU 620的路径上进一步下游的路由决策没有任何控制。在一个示例性实施例中, PPU所关注的仅仅唯一的流是离开该PPU的下一跳,而不是路径或流中的其他跳。
在一个实施例中,在路由决策中使用流ID(Identifier,标识)。流ID可以对应于源和目标位置之间的唯一路径。如上所述,从PPU610到目标PPU615的数据流可以被分成两个数据流(例如,经由PPU611和PPU614)。在一个示例性实施例中,可以通过哈希(hashing)从目标PPU的物理地址中选择的比特来创建流ID。此外,流ID函数可以包括最小链路指示。在一个示例性实施例中,流ID确定操作可以表示为:
Flow_id=gen_flow_id(hashing(selected_bits(&PA)),#MinLink)
类似地,出口端口选择的指示可以表示为:
ePort_id=mapping(Flow_id%#MinLink)
如前所述,对于源PPU和目标PPU对(例如,srcPUU-dstPPU等),可以有多个路径。在一个实施例中,源PPU仅使用最小链路数(例如#MinLink等)。在一个示例性实施例中,每个程序流(例如,处理、流等)中,从本地PPU(或源PPU)流向目标PPU的数据沿着多个路径均匀分布。在一个实施例中,基于物理地址(PA)划分 (split)路径。可以应用哈希函数来更好地均衡访问步幅(accesses with strides)。
图7示出了根据本公开实施例的通信网络700的示例部分的框图。通信网络700 包括PPU701、PPU702、PPU703、PPU704、PPU705和PPU706。PPU701经由链路 711和链路712通信耦合到PPU705。PPU702经由链路713和链路714通信耦合到 PPU704。PPU703经由链路717和链路719通信耦合到PPU704。PPU704经由路径 721通信耦合到PPU705。PPU705经由链路731、链路732和链路733通信连线到 PPU706。链路711、链路712、链路713、链路714、链路717和链路719分别传送数据751、数据752、数据753、数据754、数据757和数据759。链路731传送数据751和数据759。链路732传送数据753和数据752。链路733传送数据757和数据754。
在一个实施例中,中继PPU 705从PPU 701、PPU702、PPU703和PPU704接收 RR入口数据,并将该数据转发给PPU 706。关于向PPU 706转发信息,PPU 705查找目标PPU 706的条目以确定哪些出口端口是可用的。在一个实施例中,路由表包括芯片或PPU之间的连接拓扑结构的信息。表2是由PPU705用于到目标PPU706 的通信的路由表的示例部分的框图。
表2
路由表指示出口端口2、出口端口3和出口端口5可用于将信息转发到PPU 706。在确定可用的端口之后,PPU705然后利用“智能”特征以确定哪个出口端口来发送前往目标PPU706的数据。
在一个实施例中,存在包括目标信息ID(例如,PPU706等)的唯一流ID。流ID用于确定在哪个可用出口端口上转发通信包。在一个示例性实施例中,流ID在本地是唯一的。在一个示例性实施例中,通过将源PPU的指示添加到流ID来建立全局唯一ID。在一个实施例中,第一源使用第一链接(linkage)和第三链接,第二源使用第二链接和第三链接,第三源使用第三链接和第一链接(例如,参见图7,链路731、链路732和链路733从第一源701、第二源702和第三源703传送信息,等等)。在一个示例性实施例中,六个传输流(traffic flow)总体均衡。
表3不是路由表,而仅仅是示出在中继路由算法为特定数据流选择出口端口之后数据流到出口端口的关联的示例性说明。
表3
再次参考图7,经由出口端口2在链路731上转发数据751和数据759,其中数据751与流ID“流-A”相关联,数据759与流ID“流-F”相关联。经由出口端口3在链路732上转发数据752和数据753,其中数据752与流ID“流-B”相关联,数据753 与流ID“流-C”相关联。经由出口端口5在链路733上转发数据754和数据757,其中数据754与流ID“流-D”相关联,数据757与流ID“流-E”相关联。在一个实施例中,通过将源PPU ID相加,系统给流ID一些偏移(offset),使得不同的源流将从不同的链接开始。然而,工作负载可能没有得到很好的均衡。
在一个实施例中,使用更多PA比特进行交织可以改善工作负载分布和均衡。图8示出了根据一个实施例的基于不同数量的PA比特交织的不同工作负载均衡的示例。表810和表820示出了在三个通信链路(例如,A、B、C等)上的2比特交织和3比特交织之间的不同工作负载分布。在一个实施例中,被交织的比特是地址的最低有效位。底部表以不同的表格式显示相同的信息,其提供了三比特交织的与两比特交织相比较好的工作负载均衡的较直观的指示。表810中的交织模式重复 (interleaving pattern repetition)由顶部表中的参考编号811A、812A和813A以及底部表中对应的参考编号811B、812B和813B指示。表820中的交织模式重复由顶部表中的参考编号821A和底部表中的对应参考编号821B指示。
在一个实施例中,路由方案利用路由表和目标物理地址交织。在源PPU处的路由方案可以包括基于将物理地址交织成最小链路数指示来分配流ID(例如,PA-inter intoMinLink=>flowid,等等)。中继PPU处的路由方案可以包括流ID和源ID的交织 (例如,使用flowid=srcid交织,等等)。
在一个实施例中,PPU包括由PPU的ICN子系统(例如,230,等等)的两个不同模块共享的路由表。在一个示例性实施例中,当PPU作为源PPU时,ICN子系统通信控制块(例如,232,等等)利用路由表转发消息。在一个示例性实施例中,当PPU 作为中继PPU时,ICN子系统交换机(例如,234,等等)利用路由表转发消息。在一个示例性实施例中,ICN子系统通信控制块(例如,232,等等)实现利用路由表转发消息的第一算法。在一个示例性实施例中,当PPU作为中继PPU时,ICN子系统交换机(例如,234,等等)实现利用路由表转发消息的第二算法。第一算法和第二算法可以不同。第一算法可以包括:
ePort_id=mapping(Flow_id%#MinLink)
且第二算法可以包括:
ePort=mapping[(src_PPU_ID+flow_ID)%num_possible_ePort]
在一个示例性实施例中,当PPU作为中继PPU时,中继的出口端口选择的指示可以表示为第二算法。
图9是根据一个实施例的示例通信方法900的流程图。
在框910中,执行包括创建路由表的设置操作。路由表可以包括静态预定路由表。在一个示例性实施例中,在设置期间,驱动程序遍历拓扑结构,收集包括在路由表中的信息。路由表可以包括到目标PPU的路径中的最小链路数的指示。在一个实施例中,路由链路中的一些链路被禁用,使得表中的每个目标PPU条目具有等于通信路径中最小链路数的可用出口端口数(例如,#ePort=#minLink,等等)。
在框920中,从源并行处理单元(PPU)转发通信包。在一个实施例中,根据静态预定路由表形成和转发通信包。
在一个实施例中,基于路由方案转发通信包。在一个示例性实施例中,通过以下步骤确定源PPU处的路由方案:创建与通过互连的唯一通信路径相关联的流ID,其中通过哈希物理地址中选定的多个比特来建立流ID;利用相应路由表来确定到目标的最小链路路径;以及基于流ID和最小链路路径建立路由选择。在一个示例性实施例中,中继PPU处的路由方案包括选择出口端口,其中选择出口端口包括:创建与通过互连的唯一通信路径相关联的流ID,其中通过哈希物理地址中选定的多个比特来建立流ID;映射源PPU ID和流ID;基于映射确定多个可用的可能出口端口;利用相应路由表来确定到目标的最小链路路径;以及基于流ID、多个可能出口端口和最小链路路径建立路由选择。
在方框930中,在目标并行处理单元(PPU)处接收通信包。在一个实施例中,源 PPU和目标PPU包括在网络中的多个处理单元中的相应处理单元中,其中多个处理核的第一处理核组包括在第一芯片中,多个处理核的第二处理核组包括在第二芯片中,多个处理单元通过多个互连进行通信,并且根据静态预定路由表配置相应的通信。
在一个实施例中,示例通信方法900进一步包括均衡通信包的转发,均衡通信包的转发包括经由基于物理地址的交织分发通信包。
在一个实施例中,处理系统包括:多个处理核,其中多个处理核的第一处理核组包括在第一芯片中;多个存储器,其中多个存储器的第一存储器组包括在第一芯片中且耦合到该多个处理核的第一处理核组;以及多个互连,被配置为通信耦合多个处理核。多个互连可以包括在芯片互连网络(ICN)中。多个互连可以包括多个处理核的第一处理核组,其中多个处理单元通过多个互连进行通信,并且根据路由表配置相应的通信。路由表可以是静态的和预定的。路由表可以包括源和目标之间的最小链路的指示。路由表可以作为运行正常处理操作之前多个处理器设置的部分加载在与多个处理单元相关联的寄存器中。路由表可以再配置。在一个示例性实施例中,路由表与基本X-Y路由方案兼容。在一个示例性实施例中,示意性地将PPU组织在二维阵列中,其中Y对应于二维阵列中的一个维度,X对应于二维阵列中的另一维度,并且路由方案限制从Y维度到X维度的路由方向转向。Y维可以对应于二维阵列的“列”维,而X维可以对应于二维阵列的“行”维。
在一个实施例中,多个处理器中的相应处理器包括多个并行处理单元中的相应并行处理单元。在一个示例性实施例中,多个并行处理单元中的相应的并行处理单元包括相应的路由表。在一个实施例中,当通信在多个并行处理单元中的相应一个并行处理单元处发起时,多个并行处理单元中的相应并行处理单元被认为是源PPU,当通信通过多个并行处理单元中的相应一个并行处理单元时,多个并行处理单元中的相应并行处理单元被认为是中继PPU,或者当通信在多个并行处理单元中的相应一个并行处理单元处结束时,多个并行处理单元中的相应并行处理单元被认为是目标PPU。多个互连中的相应互连可以被配置用于单流均衡,其中源PPU支持多达源 PPU和目标PPU之间的最窄链路数的并行通信流。多个互连中的相应互连可以被配置用于多流均衡,其中中继PPU运行路由以均衡出口之间的流。可以根据提供均衡的工作负载、有保证的依赖性和有保证的访问顺序的路由方案来处理通信。
在一个实施例中,通信方法包括:执行包括创建静态预定路由表的设置操作;从源并行处理单元(PPU)转发通信包,其中根据静态预定路由表形成和转发通信包;以及在目标并行处理单元(PPU)处接收通信包。在一个实施例中,源PPU和目标PPU 包括在网络中的多个处理单元中的相应处理单元中,其中多个处理核的第一处理核组包括在第一芯片中,多个处理核的第二处理核组包括在第二芯片中,多个处理单元通过多个互连进行通信,并且根据静态预定路由表配置相应的通信。
在一个实施例中,基于路由方案转发通信包。在一个示例性实施例中,通过以下步骤确定源PPU处的路由方案:创建与通过互连的唯一通信路径相关联的流ID,其中通过哈希物理地址中选定的多个比特来建立流ID;利用相应路由表来确定到目标的最小链路路径;以及基于流ID和最小链路路径建立路由选择。在一个示例性实施例中,中继PPU处的路由方案包括选择出口端口,其中选择出口端口包括:创建与通过互连的唯一通信路径相关联的流ID,其中流ID是通过哈希物理地址中选定的多个比特来建立的;映射源PPU ID和流ID;基于映射确定多个可用的可能出口端口;利用相应路由表来确定到目标的最小链路路径;以及基于流ID、多个可能出口端口和最小链路路径建立路由选择。在一个实施例中,通信方法进一步包括均衡通信包的转发,均衡通信包的转发包括经由基于物理地址的交织分发通信包。
在一个实施例中,一种处理系统包括:多个处理核、多个存储器、多个互连,多个互连被配置为通信耦合多个处理核和多个存储器。多个处理核包括多个处理核的第一处理核组,多个处理核的第一处理核组包括在第一芯片中,多个处理核的第二处理核组包括在第二芯片中。多个存储器包括多个存储器的第一存储器组,第一存储器组包括在第一芯片中且耦合到多个处理核的第一处理核组,多个存储器的第二存储器组包括在第二芯片中且耦合到多个处理核的第二处理核组。多个互连可以包括在芯片互连网络(ICN)中。多个互连可以被配置为通信耦合多个处理核的第一处理核组和多个处理核的第二处理核组,其中多个处理核通过多个互连通信。可以根据路由表配置相应的通信。路由表可以是静态的和预定的。路由表可以作为运行正常处理操作之前多个处理器设置的部分加载在与多个处理单元相关联的寄存器中。路由表可以包括源和目标之间的最小链路的指示。在一个实施例中,可通过经由最小链路的多流以及与流ID、源并行处理单元(PPU)ID交织来提供均衡的工作负载。在一个示例性实施例中,可通过利用与流ID交织以及在源并行处理单元(PPU)处进行了哈希算法的物理地址(PA)来提供有保证的依赖性。通过使用沿路由的流ID和可拆分的远程屏障,可以提供有保证访问顺序。
总之,根据本公开的实施例提供了对常规计算系统和诸如在这样的计算系统上执行的例如神经网络和AI工作负载的应用的功能的改进。更具体地说,根据本公开的实施例提供了方法、编程模型和系统,通过提高系统元件之间的存储器访问请求 (例如,读请求和写请求)的传输速度和结果数据传输的完成速度来提高诸如神经网络和AI工作负载之类的应用的操作速度。
在一个实施例中,系统包括在第一芯片中包括的并行处理单元(PPU),并且该PPU是多个PPU中的一个,芯片互连网络(ICN)中的多个互连被配置为通信耦合该多个PPU。PPU可以包括多个处理核和多个存储器,其中多个存储器的第一存储器组包括在第一芯片中且耦合到多个处理核的第一处理核组。PPU可以是通过ICN彼此通信的多个PPU之一,并且根据路由表配置相应的通信。路由表可以存储并驻留在包括在PPU中的ICN子系统的寄存器中。路由表可以包括可用于转发从PPU到另一PPU的通信的最小链路的指示。
在一个实施例中,系统包括:包括在第一芯片中的多个PPU和ICN中的多个互连。多个PPU包括在第一芯片中并且多个PPU中的每一个PPU包括多个处理核和多个存储器,其中多个存储器的第一存储器组耦合到多个处理核的第一处理核组。ICN中的多个互连被配置为通信耦合多个PPU。多个PPU中的每个PPU被配置为根据存储并驻留在包括在相应PPU中的寄存器中的相应路由表在ICN上通信。相应路由表包括可用于转发从PPU到另一PPU的通信的最小链路的指示。PPU可以包括被配置为通信耦合到ICN的相应的多个出口端口,其中相应路由表包括最小链路和相应多个出口端口之间的相关性的指示。
在一个实施例中,相应路由表包括最小链路与多个出口端口中的相应出口端口之间的相关性的指示,多个出口端口可用于通信耦合到作为可能的目标PPU的相应 PPU。路由表可以包括每个相应信息通信流的两个PPU之间的单个路径的指示,其中单个路径基于最小链路与多个出口端口中的相应出口端口之间的相关性,多个出口端口可用于通信耦合与作为可能的目标PPU的相应PPU。路由表可以被加载并存储在包括在PPU中的ICN子系统的寄存器中。路由表可以被加载作为在运行正常处理操作之前,ICN和多个PPU的通信能力的配置和设置操作的部分。在一个实施例中,路由表是静态的,且在ICN和多个PPU的通信能力的配置和设置操作的执行之间预设路由表;路由表可再配置,其作为ICN和多个PPU的通信能力的配置和设置操作的部分,其中设置操作包括将路由表加载并存储在PPU中包括的ICN子系统的寄存器中。在一个示例性实施例中,路由表与基本维度有序的X-Y路由方案(basicdimension ordered X-Y routing scheme)兼容,其中示意性地将PPU组织在二维阵列中,其中Y对应于二维阵列中的一个维度,X对应于二维阵列中的另一个维度,并且路由方案限制从Y维到X维的路由方向转向。
在一个实施例中,PPU包括在多个PPU的第一PPU组中,并且多个PPU的第一PPU 组包括在第一计算节点中,并且多个PPU的第二PPU组包括在多个PPU的第二节点中。多个并行处理单元中的相应并行处理单元可以包括相应路由表。当通信在多个并行处理单元中的相应一个并行处理单元发起时,可以将多个并行处理单元中的相应并行处理单元视为源PPU,当通信通过多个并行处理单元中的相应一个并行处理单元时,可以将多个并行处理单元中的相应并行处理单元视为中继PPU,或者当通信在多个并行处理单元中的相应一个并行处理单元结束时,可以将多个并行处理单元中的相应并行处理单元视为目标PPU。多个互连中的相应互连可以被配置用于单流均衡,其中源PPU支持多达源PPU和目标PPU之间最窄链路数的并行通信流。多个互连中的相应互连可以被配置用于多流均衡,其中中继PPU运行路由以均衡出口之间的流。可以根据提供均衡的工作负载、有保证的依赖性和有保证的访问顺序的路由方案来处理通信。
在一个实施例中,通信方法包括:执行包括创建静态预定路由表的设置操作;从源并行处理单元(PPU)转发通信包;以及在目标并行处理单元(PPU)接收通信包。可以根据静态预定路由表来形成和转发通信包。源PPU和目标PPU可以包括在网络中的多个处理单元中的相应处理单元中。在一个示例性实施例中,多个处理核的第一处理核组包括在第一芯片中,多个处理核的第二处理核组包括在第二芯片中。多个 PPU可以通过多个互连进行通信。可以根据静态预定路由表配置相应的通信。在源 PPU处的路由方案可以通过以下步骤确定:创建与通过互连的唯一通信路径相关联的流ID,其中通过哈希物理地址中选定的多个比特来建立流ID;利用相应的路由表来确定到目标的最小链路路径;以及基于流ID和最小链路路径建立路由选择。中继 PPU处的路由方案可以包括选择出口端口。选择出口端口可以包括:创建与通过互连的唯一通信路径相关联的流ID,其中流ID是通过哈希物理地址中选定的多个比特来建立的;映射源PPU ID和流ID;基于映射确定多个可用的可能出口端口;利用相应的路由表来确定到目标的最小链路路径;以及基于流ID、多个可能出口端口和最小链路路径建立路由选择。通信方法还可以包括均衡通信包的转发,均衡通信包的转发包括通过基于物理地址的交织来分配通信包。
在一个实施例中,系统包括:包括在第一计算节点中的第一并行处理单元(PPU)组、包括在第二计算节点中的第二并行处理单元(PPU)组以及芯片互连网络(ICN) 中的多个互连,多个互连被配置为通信耦合第一PPU组和所述第二PPU组。第一PPU 组中的相应PPU可以包括在单独的相应芯片中,并且第二PPU组中的相应PPU可以包括在单独的相应芯片中。包括在第一PPU组和第二PPU组中的PPU可以通过多个互连进行通信。根据驻留在第一PPU组和第二PPU组中的相应的PPU的存储特征中的路由表来配置相应的通信。第一PPU组和第二PPU组中的相应PPU可以包括:多个处理核,其中相应处理核组包括在相应的PPU中;以及多个存储器,其中相应存储器组通信耦合到相应处理核组且包括在相应PPU中。
在一个实施例中,多个处理单元可以通过多个互连进行通信,并且根据路由表配置相应的通信。路由表可以是静态的和预定的。运行正常处理操作之前,路由表可以作为多个处理器设置的部分加载在与多个处理单元相关联的寄存器中。在一个示例性实施例中,路由表包括在源和目标之间的最小链路的指示。通过经由最小链路的多流以及与流ID、源并行处理单元(PPU)ID交织,可以提供均衡的工作负载。通过利用与流ID交织的以及在源并行处理单元(PPU)处进行了哈希算法(hashing)的物理地址(PA),提供有保证的依赖性。通过使用沿路由的流ID和可拆分的远程屏障,可以提供有保证的访问顺序。
尽管前述公开使用特定的框图、流程图和示例阐述了各种实施例,但本文描述和/或示出的每个框图组件、流程图步骤、操作和/或组件可以使用广泛的配置单独和 /或共同地实现。此外,因为可以实现许多其他架构来实现相同的功能,所以任何包含在其他组件中的组件的公开都应该被视为示例。
尽管已经用特定于结构特征和/或方法行为的语言描述了主题,但应当理解,在本公开中定义的主题不一定限于上述特定特征或动作。相反,上面描述的特定特征和动作被公开作为实现本公开的示例形式。
这样描述了根据本公开的实施例。虽然在特定实施例中描述了本公开,但本公开不应被解释为受这些实施例的限制,而是根据上面的权利要求书来解释。