具体实施例
现在将详细参考本公开的各种实施例,其示例在附图中示出。尽管结合这些实施例进行描述,但将理解,它们并不旨在将本公开限制到这些实施例。相反,本公开旨在涵盖可包括在所附权利要求所定义的本公开的精神和范围内的替代、修改和等同物。此外,在本公开的以下详细描述中,为了提供对本公开的透彻理解,阐述了许多具体细节。然而,将理解,本公开可以在没有这些特定细节的情况下实施。在其他实例中,未详细描述公知的方法、过程、组件和电路,以便避免不必要地模糊本公开的方面。
以下详细描述的某些部分以过程、逻辑块、处理和对计算机存储器中的数据位的操作的其他符号表示的方式呈现。这些描述和表示是数据处理技术领域的技术人员使用的手段,以最有效地将其工作的实质传达给本领域的其他技术人员。在本公开中,过程、逻辑块、处理等被认为是导致期望结果的步骤或指令的自洽序列。这些步骤是那些利用物理量的物理操作的步骤。通常,尽管不是必须的,这些量采取电或磁信号的形式,能够在计算系统中存储、传输、组合、比较和以其他方式操纵。事实证明,主要是出于常见用法的原因,将这些信号称为事务、比特、值、元素、符号、字符、样本、像素等有时是方便的。
但是,应该记住,所有这些和类似术语都是与适当的物理量相关联的,且仅仅是应用于这些量的方便的标签。除非从下面的讨论中明确指出,否则可以理解,在整个本公开中,使用诸如“访问”、“分配”、“存储”、“接收”、“发送”、“写入”、“读取”、“发射”、“加载”、“推送”、“拉动”、“处理”、“缓存”、“路由”、“确定”、“选择”、“请求”、“同步”、“复制”、“映射”、“更新”、“转换”、“生成”、“分配”等术语的讨论指的是设备或计算系统(例如,图7、8、9和10的方法)或类似的电子计算设备、系统或网络(例如,图2A的系统及其组件和元件)的动作和过程。计算系统或类似电子计算设备操纵和变换在存储器、寄存器或其他此类信息存储、传输或显示设备中表示为物理(电子)量的数据。
这里描述的一些元件或实施例可以在驻留在某种形式的计算机可读存储介质(例如程序模块)上的由一个或多个计算机或其他设备执行的计算机可执行指令的一般上下文中讨论。作为示例而非限制,计算机可读存储介质可以包括非暂时性计算机存储介质和通信介质。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。在各种实施例中,可以根据需要组合或分配程序模块的功能。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于双倍数据速率(double data rate,DDR)存储器、随机存取存储器(RAM)、静态RAM(SRAM)或动态RAM(DRAM)、只读存储器(ROM)、电可擦除可编程ROM(EEPROM)、闪存(例如,SSD)或其他存储器技术、小型光盘ROM(CD-ROM)、数字多功能光盘或其他光存储器、磁盒、磁带、磁盘存储器或其他磁存储设备、或可用于存储所需信息且可被访问以获取该信息的任何其他介质。
通信介质可以包含计算机可执行指令、数据结构和程序模块,还包括任何信息传递介质。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频(RF)、红外和其他无线介质的无线介质。上述任一项的组合也可以包括在计算机可读介质的范围内。
图2A示出了根据本公开实施例的示例系统200的框图。系统200可用于神经网络和人工智能(AI)工作负载,但不限于此。通常,系统200可用于任何并行计算,包括大量数据并行处理。
图2C示出了根据本公开实施例的示例神经网络处理单元NPU_0的框图。系统200和NPU_0是用于执行诸如本文公开的那些方法(例如,图7-10的方法)的示例系统和处理单元。
系统200和NPU_0可以包括除了下面所示和描述的元件或组件之外的元件或组件,并且元件或组件可以如图中所示或以不同的方式布置。示例系统200和NPU_0中的一些块可以根据它们执行的功能来描述。系统的元件和组件被描述和示出为分开的块,本公开不限于此;也就是说,例如,块/功能的组合可以集成到执行多个功能的单个块中。系统200可以被扩展以包括附加NPU,并且系统200与包括分层缩放方案和扁平化缩放方案的不同缩放方案兼容。
一般而言,系统200包括多个计算节点或服务器,并且每个计算节点或服务器包括多个并行计算单元或芯片(例如,NPU)。在图2A的示例中,系统200包括计算节点(服务器)201和202,以下简称为服务器。虽然仅示出和描述了两个服务器,但根据本公开的实施例不限于此。
在图2A的实施例中,服务器201包括主机中央处理单元(CPU)205,并且经由网络接口控制器或网络接口卡(NIC)206连接到网络240。服务器201可以包括除了将要描述的元件和组件之外的元件和组件。
在图2A的实施例中,服务器201的并行计算单元包括网络处理单元(NPU),即NPU_0至NPU_n,它们连接到外围组件互连高速(PCIe)总线208,外围组件互连高速总线208相应地连接到NIC 206。NPU还可以使用神经NPU来实现,或者可以称为神经NPU。NPU还可以实现为或使用通用图形处理单元、或并行处理单元、或可加速神经网络数据处理的任何其他处理单元。
服务器202包括类似于服务器201的元件的元件。也即是说,在一些实施例中,服务器201和202具有相同的结构(尽管'm'可以等于也可以不等于'n'),至少达到本文所描述的程度。系统200中的其他服务器可以类似地构造。
服务器201上的NPU可以通过总线208彼此通信(通信耦合)。服务器201上的NPU可以通过网络240经由总线208和总线209以及NIC 206和NIC207与服务器202上的NPU通信。
一般而言,服务器201上的每个NPU包括诸如但不限于处理核和存储器的元件。具体而言,在图2C的实施例中,NPU_0包括耦合到一个或多个计算元件或处理核(例如,核212)以及一个或多个高速缓存(例如,高速缓存214)的片上网络(network-on-a-chip,NoC)210。NPU_0还包括耦合到NoC 210的一个或多个高带宽存储器,例如HBM 216。处理核、高速缓存和HBM在此也可分别统称为核212、高速缓存214和HBM216。在图2C的示例中,高速缓存214是HBM216和NoC210之间的最后一级高速缓存;服务器201可以包括其它级别的高速缓存(例如,L1、L2等;未示出)。HBM216中的存储器空间可以被声明或分配(例如,在运行时)作为缓冲器(例如,乒乓缓冲器(ping-pong buffer),图2C中未示出)。
NPU_0还可以包括其他功能块或组件(未示出),例如命令处理器、直接存储器访问(direct memory access,DMA)块和便于与PCIe总线208通信的PCIe块。NPU_0可以包括本文描述的或图2C中所示的元件和组件以外的元件和组件。
服务器201和202上的其他NPU包括与NPU_0的元件和组件类似的元件和组件。也即是说,在一些实施例中,服务器201和202上的NPU具有相同的结构,至少达到本文所描述的程度。
图2A的系统200包括高带宽芯片间网络(ICN)250,其允许系统200中的NPU之间通信。也即是说,系统200中的NPU经由ICN250彼此通信耦合。例如,ICN250允许NPU_0与服务器201上的其他NPU通信,并且还允许NPU_0与其他服务器(例如,服务器202)上的NPU通信。在图2A的示例中,ICN250包括直接连接两个NPU并允许两个连接的NPU之间的双向通信的互连(例如,互连252和254)。互连可以是半双工链路,在其上一次只有一个NPU可以传送数据,或者互连可以是全双工链路,在其上可以同时在两个方向上传送数据。在一个实施例中,互连(例如,互连252和254)是基于或利用串行/解串行器(Serial/Deserializer,SerDes)功能的线路或电缆。
在图2A的示例中,互连252是将服务器201上的NPU_0直接连接到NPU_n的硬连线或电缆连接,而互连254是将服务器201上的NPU_n直接连接到服务器202上的NPU_0的硬连线或电缆连接。也即,例如,互连252的一端连接到服务器201上的NPU_0,另一端连接到NPU_n。更具体地,互连252的一端插入到交换机234(如图2C所示)上的端口或耦合到交换机234上的端口,互连252的另一端插入到NPU_n的交换机上的端口或耦合到NPU_n的交换机上的端口。
实际的连接拓扑结构(哪个NPU连接到其他哪个NPU)是设计或实施方式的选择。图2B示出了根据本公开实施例的示例ICN拓扑结构的框图。每个服务器仅示出三个NPU;然而,本公开并不限于此。在本示例中,服务器201上的NPU_0连接到服务器201上的NPU_1,服务器201上的NPU_1相应地连接到服务器201上的NPU_2。服务器201上的NPU_0可以连接到另一服务器(未示出)上的NPU。服务器201上的NPU_2连接到服务器202上的NPU_0。虽然NPU可以连接到其在服务器上的直接邻居(immediate neighbor)或其在相邻服务器上的直接邻居,但本公开并不限于此。因此,在图2B的示例中,服务器202上的NPU_0连接到服务器202上的NPU_2,服务器202上的NPU_2相应地连接到服务器202上的NPU_1。服务器202上的NPU_1可以连接到另一服务器(未示出)上的NPU。连接同一服务器上的NPU的互连可称为芯片内互连,而连接不同服务器上的NPU的互连可称为芯片间互连。
NPU之间的通信可以在命令级(例如,DMA拷贝)和在指令级(例如,直接加载或存储)。ICN250允许系统200中的服务器和NPU在不使用PCIe总线208的情况下进行通信,从而避免其带宽限制和相对速度不足。
NPU之间的通信包括存储器访问请求(例如,读请求和写请求)的传输和响应于这些请求的数据传送。任意两个NPU之间的通信可以是直接的或间接的,其中,两个NPU可以在同一个服务器上,也可以在不同的服务器上。
通过两个NPU之间的单个链路进行直接通信,当来自一个NPU的信息通过一个或多个中间NPU中继到另一个NPU时发生间接通信。例如,在图2A所例示的配置中,服务器201上的NPU_0可以经由互连252与服务器201上的NPU_n直接通信,并且服务器201上的NPU_0可以经由到NPU_n的互连252以及从NPU_n到服务器202上的NPU_0的互连254与服务器202上的NPU_0间接通信。
在一些实施例中,系统200包括例如使用分区全局地址空间(PGAS)编程模型的统一的存储器寻址空间。因此,可以全局分配系统200中的存储器空间,使得例如NPU_0上的HBM216可由该服务器上的NPU以及由系统200中的其他服务器上的NPU访问,并且NPU_0上的NPU可访问系统中的其他NPU/服务器上的HBM。因此,在图2A的示例中,一个NPU可以从系统200中的另一个NPU读取数据或向系统200中的另一个NPU写入数据,其中,两个NPU可以在相同的服务器上或不同的服务器上,并且其中,读或写可以如上所述直接或间接地发生。
服务器201通过ICN子系统230(如图2C所示)耦合到ICN 250,ICN子系统230与NoC210耦合。在图2C所示的实施例中,ICN子系统230包括ICN通信控制块(通信控制器)232、交换机234和一个或多个互通信链路(inter-communication link,ICL)(例如,ICL 236;统称为ICL 236)。ICL236可以耦合到交换机234,或可以是交换机234的组件。在一些实施例中,每个ICL236构成或包括端口。在一个实施例中,有7个ICL。每个ICL236连接到相应的互连(例如,互连252)。例如,在一些实施例中,互连252的一端插入到NPU_0上的ICL(端口)236中,并且互连的另一端插入到另一NPU上的另一ICL/端口中。下面结合图3A进一步描述ICN子系统230。
在图2C的配置中,例如,NPU_0的存储器访问请求(例如,读请求或写请求)从NoC210发出到ICN通信控制块232。存储器访问请求包括标识哪个服务器/NPU/HBM是存储器访问请求的目的地的地址。ICN通信控制块232使用该地址来确定哪个ICN236(直接或间接地)连接到由该地址标识的服务器/NPU/HBM。那么,由交换机234将存储器访问请求路由到选定的ICL 236,然后,通过ICN 250将存储器访问请求路由到由该地址标识的服务器/NPU/HBM。在接收端,在目的NPU的ICL接收存储器访问请求,将存储器访问请求提供给ICN通信控制块且然后提供给该NPU的NoC,且最后将存储器访问请求提供给由存储器访问请求寻址的该NPU上的HBM。如果存储器访问请求是写请求,则请求相关联的数据被写入(加载或存储)到目的NPU上的HBM中的地址。如果存储器访问请求是读请求,则将位于目的NPU上的HBM中地址的数据返回到NPU_0。以这种方式,使用高带宽ICN250快速地完成芯片间通信,绕过PCIe总线208,从而避免其带宽限制和相对速度不足。
图3A示出了根据本公开实施例的NPU300的框图,NPU300包括ICN子系统230。NPU300是上面结合图2A和2C讨论的示例NPU,即NPU_0至NPU_n。NPU300可以包括图3A中描述或示出的元件和组件以外的元件和组件。
在图3A中,NPU 300包括耦合在核212和ICN子系统230之间的一个或多个计算命令环(例如,计算命令环302;统称为计算命令环302)。计算命令环302可以实现为多个缓冲器。在核212和计算命令环302之间可以存在一对一的对应关系。来自在核212上执行的进程的命令按照它们被发出或将要被执行的顺序被推送到相应计算命令环302的报头中。
ICN子系统230包括耦合到计算命令环302的ICN通信命令环(例如,通信命令环312;统称为通信命令环312)。通信命令环312可以实现为多个缓冲器。在通信命令环312和计算命令环302之间可以存在一对一的对应关系。在一个实施例中,有16个计算命令环302和16个通信命令环312。
在图3A所示的实施例中,ICN通信控制块232包括命令调度块304和指令调度块306。命令调度块304和指令调度块306用于NPU300对另一个NPU寻址的存储器访问请求。命令调度块304用于涉及相对较大数据量(例如,两兆字节(megabyte)或多兆字节)的存储器访问请求。指令调度块306提供更精细的控制级别,并用于涉及较小数据量(例如,小于两兆字节;例如,128或512字节)的存储器访问请求。一般来说,在一些实施例中,命令调度块304处理ICN读和写,指令调度块306处理远程存储和远程加载,尽管本公开不限于此。来自通信命令环312的命令被发送到命令调度块304。来自NoC210的指令被发送到指令调度块306。指令调度块306可以包括远程加载/存储单元(未示出)。
更具体地,当计算命令被分解并分派到核212中的一个(或多个)时,操作系统内核(kernel,例如,程序或处理器指令序列)将开始在该一个或多个核中运行。当存在存储器访问指令时,向存储器发出该指令:如果存储器地址被确定为本地存储器地址,则该指令经由NoC210到达本地HBM216;否则,如果存储器地址被确定为远程存储器地址,则该指令到达指令调度块306。
ICN子系统230还包括耦合到命令调度块304和指令调度块306的多个芯片到芯片(chip-to-chip,C2C)的DMA单元(例如,DMA单元308;统称为DMA单元308)。DMA单元308还经由C2C结构(fabric)309和网络接口单元(network interface unit,NIU)310耦合到NoC210,并且DMA单元308还耦合到交换机234,交换机234相应地耦合到与ICN250耦合的ICL236。
在一个实施例中,存在16个通信命令环312和7个DMA单元308。在DMA单元308和ICL236之间可以存在一对一的对应关系。命令调度块304将通信命令环312映射到DMA单元308,且因此映射到ICL236。命令调度块304、指令调度块306和DMA单元308可以各自包括诸如先进先出(FIFO)缓冲器(未示出)的缓冲器。
ICN通信控制块232将输出的存储器访问请求映射到基于该请求中的地址所选择的ICL236。ICN通信控制块232将存储器访问请求转发到与所选择的ICL 236相对应的DMA单元308。然后由交换机234将该请求从DMA单元308路由到所选择的ICL。
由NPU 300在ICL 236接收输入的存储器访问请求,将存储器访问请求转发到与该ICL相对应的DMA单元308,然后经由NIU 310通过C2C结构309将存储器访问请求转发到NoC210。对于写请求,将数据写入到HBM216中对应于存储器访问请求中的地址的位置。对于读请求,从HBM216中对应于存储器访问请求中的地址的位置读取数据。
在一些实施例中,使用屏障命令(FENCE)和等待(WAIT)命令来实现计算命令环302和通信命令环312的同步。例如,NPU300的处理核212可以发出用于处理任务的数据读请求,其中读请求寻址NPU300以外的NPU。计算命令环302中的WAIT命令阻止核212完成任务,直到接收到所请求的数据。将读请求推送到计算命令环302,然后推送到通信命令环312。基于读请求中的地址选择ICL 236,并且命令调度块304或指令调度块306将读请求映射到与所选择的ICL 236相对应的DMA单元308。然后,当从另一个NPU获取所请求的数据且加载到NPU300的存储器(例如,HBM 216)中时,通信命令环312发出同步命令(FENCE命令),该同步命令通知核212所请求的数据可用于处理。更具体地,FENCE命令在计算命令环302中的WAIT命令中设置允许核212继续处理任务的标志。下面结合图4、5和6提供了进一步的讨论。
继续图3A的讨论,例如为了保持带宽,当要读取相对较大的数据量时,读请求可以被划分为多个较小的请求。在这种情况下,当所请求的数据的各个片段全部由NPU300接收时,由DMA单元308累积它们,然后将它们加载到NPU300的存储器(例如,HBM216),然后,如上所述,通信命令环312使用同步命令(FENCE命令)来通知核212所请求的数据可用于处理。
图3B示出了根据本公开实施例的交换机234的元件320(例如,端口)。来自DMA块308的存储器访问请求或数据传送经由出口路径322转发到ICL216和ICN250。来自对NPU_0寻址的另一NPU的存储器访问请求或数据传送经由入口路径324转发到DMA块308。来自对NPU_0以外的NPU寻址并将由NPU_0中继的另一NPU的存储器访问请求或数据传送从入口路径324转发到出口路径322。
图4示出了根据本公开实施例的在命令级数据推送模式下操作的NPU的元件。仅示出了两个NPU(即NPU401和NPU402)的选定元件。NPU401和NPU402是系统200(图2A和2C)的NPU的实施例,并且可以包括图3的NPU300的元件以及附加元件。NPU401和NPU402可以在系统200的相同服务器上或不同服务器上。
表1提供了在推送模式下命令级编程的示例,其中称为NPU0和生产者(producer)的NPU401正在将数据推送到称为NPU1和消费者(consumer)的NPU402。
表1–(推送模式下)命令级编程的示例
在表1的示例中,NPU0已经完成了处理任务,并要将结果数据推送到NPU1。因此,NPU0将数据从本地缓冲器(buff1)复制(写入)到NPU1上的地址a1(位于a1的存储器阵列),并且还将数据从另一本地缓冲器(buff2)复制(写入)到NPU1上的地址a2(位于a2的存储器阵列)。一旦通信命令环312中的写请求都完成,NPU0使用ICN_FENCE命令在NPU1上设置标志(e1)。在NPU1上,计算命令环302中的WAIT命令用于指示NPU1等待,直到标志被设置。当在WAIT命令中设置标志时,NPU1知道写操作都已完成且可以使用数据。
在图4中示出了表1的示例。NPU401的通信命令环312依次将第一写请求(rWrite1)和第二写请求(rWrite2)转发到命令调度块304中的FIFO。在一个实施例中,命令调度块304包括或耦合到转译后备缓冲器控制器(translation lookaside buffer controller,TLBC)412。如果写请求包括虚拟地址,则TLBC将虚拟地址转译为物理地址。
命令调度块304还包括路由表,如前所述,该路由表基于写请求中的地址来标识将使用哪个ICL 236来将写请求从NPU401路由到NPU402。一旦写请求完成(一旦将数据写入NPU402上的NBM216),如上所述,使用FENCE命令(rFENCE)设置WAIT命令中的标志。NPU402上的计算命令环302依次包括WAIT命令(Wait)、第一使用命令(use1)和第二使用命令(use2)。当在WAIT命令中设置标志时,计算命令环302中的使用命令可以被执行,且用于向NPU402上的合适的处理核指示HBM216中的数据被更新和可用。
图5示出了根据本公开实施例的在命令级数据拉取模式下的操作。仅示出了两个NPU(即NPU501和NPU502)的选定元件。NPU501和NPU502是系统200(图2A和2C)的NPU的实施例,并且可以包括图3的NPU300的元件以及附加元件。NPU501和NPU502可以在系统200的相同服务器上或不同服务器上。
表2提供了在拉取模式下命令级编程的示例,其中称为NPU1和消费者的NPU502正在从称为NPU0和生产者的NPU501拉取数据。
表2–(拉取模式下)命令级编程的示例
在表2的示例中,NPU0分配HBM 216中的本地缓冲器a1和a2。一旦两个缓冲器都被分配,NPU0使用计算命令环302中的FENCE命令来设置NPU1上标志(e1)。在NPU1上,通信命令环312中的WAIT命令用于指示NPU1等待直到标志被设置。当在WAIT命令中设置标志时,则向NPU1指示分配了两个缓冲器,并且可以执行读请求。
在图5中示出了表2的示例。NPU502的通信命令环312依次包括WAIT命令(rWait)、第一读取请求(rRead1)和第二读取请求(rRead2)。一旦如上所述分配了缓冲器,则如上所述使用FENCE命令设置通信命令环312中的WAIT命令中的标志。当在WAIT命令中设置标志时,可以执行通信命令环312中的第一读取请求和第二读取请求,并且可以读取HBM216中分配的缓冲器中的数据。
图6示出了根据本公开实施例的在指令级的操作。仅示出了两个NPU(即NPU601和NPU602)的选定元件。NPU601和NPU602是系统200(图2A和2C)的NPU的实施例,并且可以包括图3的NPU300的元件以及附加元件。NPU601和NPU602可以在系统200的相同服务器上或不同服务器上。
在下面的讨论中,术语“映射(warp)”被用来指代执行的基本单元:程序中可以独立运行的最小单元或段,尽管可以存在数据级并行。尽管该术语可以与特定类型的处理单元相关联,但根据本公开的实施例不限于此。
每个映射包括多个线程(thread)(例如,32个线程)的集合。多个线程中的每个线程执行指令的同一段,但有其自己的输入和输出数据。
参考图6,NPU 601上的HBM 216包括声明或分配(例如,在运行时)作为乒乓缓冲器610的存储器空间,乒乓缓冲器610包括乒缓冲器(ping buffer)610a和乓缓冲器(pongbuffer)610b。类似地,NPU 602上的HBM 216包括声明或分配(例如,在运行时)作为乒乓缓冲器612的存储器空间,乒乓缓冲器612包括乒缓冲器612a和乓缓冲器612b。
与NPU601正在执行的处理任务(例如,映射)相关联的操作数存储在乒乓缓冲器610中。例如,从乓缓冲器610b读取操作数,该操作数由任务使用以产生结果,并且该结果被(使用远程加载指令)写入到NPU602上的乒缓冲器612a。接下来,从乒缓冲器610a读取操作数,该操作数由任务使用来产生另一结果,并且该结果被(使用远程加载指令)写入到NPU602上的乓缓冲器612b。使用指令调度块306和C2CDMA单元308执行该写(远程加载)操作。
表3和表4提供了在推送模式下指令级编程的示例,其中称为NPU0和生产者的NPU601正在将数据推送到称为NPU1和消费者的NPU 602。
在图6和表3的示例中,NPU601上同时运行多个映射。多个映射可以协同工作,以更新数据并将数据加载到图6的NPU601上的数组(array)“Data”中(参见下面的表3和表4);多个映射中每个映射负责该数据的某些部分。因此,可能有必要同步来自那些映射的结果,以便不仅当所有映射已经完成执行时,而且当所有结果数据已经被加载到数组中时,可以通知NPU602。
为了完成这一点,选择在NPU601上运行的多个线程中的一个线程(例如,第一映射中的第一线程,warp-0;参见表3)作为包括映射的线程块的代表。所选线程与NPU602上的线程通信。具体地,一旦在NPU601上加载并准备好所有数据,所选线程使用子例程(subroutine)(在表3中称为threadfence_system subroutine)来确定这一点,然后在NPU602上设置标志(标记)以向NPU602指示所有写(远程加载)操作已经完成。
表3–NPU 601上(推送模式下)指令级编程的示例
表4–NPU 602上(推送模式下)指令级编程的示例
表3和表4的示例仅包括单个映射(warp-0);然而,正如所指出的,可以有多个映射并行操作,如这些表中所示,每个映射执行相同指令,但有不同的输入和输出。此外,虽然表3和4是推送模式的示例,但本公开并不限于此,并且可以针对拉取模式执行指令级编程。
图7示出了根据本公开实施例的用于芯片间通信的示例方法700的流程图。图8示出了根据本公开的实施例的示例命令级推送操作800的流程图。图9示出了根据本公开的实施例的示例命令级拉动操作900的流程图。图10示出了根据本公开的实施例的示例指令级推送操作1000的流程图。
由图7至图10的流程图中的块表示的所有或一些操作可以实现为驻留在某种形式的非暂时性计算机可读存储介质上的计算机可执行指令,并且由例如图2A的系统200及其元件和组件执行。
在图7的块702中,系统200中的第一服务器或节点或计算节点上的第一处理单元生成存储器访问请求,存储器访问请求包括标识系统中作为存储器访问请求的目的地的第二处理单元的地址。第一处理单元包括互连,该互连被配置为将第一处理单元通信耦合到包括第二处理单元的其他处理单元。
在图7的块704中,第一处理单元使用该地址来选择连接第一处理单元和第二处理单元的互连。
在块706中,第一处理单元将存储器访问请求路由到所选择的互连,且因此路由到第二处理单元。当存储器访问请求是读请求时,第一处理单元通过互连从第二处理单元接收数据。
在图8的块802中,第一处理单元将数据从第一处理单元上的存储器复制到第二处理单元上的存储器。
在块804中,第一处理单元在第二处理单元上设置标志。当设置该标志时,该标志允许第二处理单元使用从第一处理单元推送的数据。
在图9的块902中,第一处理单元分配第一处理单元上存储器。
在块904中,第一处理单元在第二处理单元上设置标志,以指示第一处理单元上的存储器已分配。当设置该标志时,该标志允许第二处理单元从第一处理单元上的存储器中读取数据。
在图10的块1002中,第一处理单元在第一处理单元的缓冲器中存储与第一处理单元正在执行的处理任务相关联的操作数。
在块1004中,第一处理单元将处理任务的结果写入第二处理单元上的缓冲器。
在块1006中,第一处理单元选择处理任务的线程。
在块1008中,第一处理单元使用线程在第二处理单元上设置标志。该标志向第二处理单元指示与处理任务相关联的所有写操作已完成。
总之,概括而言,根据本公开的实施例提供了计算系统和诸如神经网络和AI工作负载的应用的运行的改进。更具体地,根据本公开的实施例提供了方法、编程模型和系统,通过提高发送系统元件之间的存储器访问请求(例如,读请求和写请求)以及完成结果数据传输的速度,来提高诸如神经网络和AI工作负载等应用的执行速度。
尽管前述公开使用特定的框图、流程图和示例阐述了各种实施例,但本文描述和/或示出的每个框图组件、流程图步骤、操作和/或组件可以使用广泛的配置单独和/或共同地实现。此外,因为可以实现许多其他架构来实现相同的功能,所以任何包含在其他组件中的组件的公开都应该被视为示例。
尽管已经用特定于结构特征和/或方法行为的语言描述了主题,但应当理解,在本公开中定义的主题不一定限于上述特定特征或动作。相反,上面描述的特定特征和动作被公开作为实现本公开的示例形式。
这样描述了根据本公开的实施例。虽然在特定实施例中描述了本公开,但本公开不应被解释为受这些实施例的限制,而是根据上面的权利要求书来解释。