CN110121699A - 多瓦片、多芯片处理布置中的同步 - Google Patents
多瓦片、多芯片处理布置中的同步 Download PDFInfo
- Publication number
- CN110121699A CN110121699A CN201880004198.7A CN201880004198A CN110121699A CN 110121699 A CN110121699 A CN 110121699A CN 201880004198 A CN201880004198 A CN 201880004198A CN 110121699 A CN110121699 A CN 110121699A
- Authority
- CN
- China
- Prior art keywords
- tile
- tiles
- domain
- chip
- external
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4247—Bus transfer protocol, e.g. handshake; Synchronisation on a daisy chain bus
- G06F13/4256—Bus transfer protocol, e.g. handshake; Synchronisation on a daisy chain bus using a clocked protocol
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17325—Synchronisation; Hardware support therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/505—Clust
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一种操作系统的方法,包括被划分成多个域的多个处理器瓦片,其中在每个域内,瓦片通过时间确定性互连的相应实例彼此连接,并且在域之间,瓦片通过非时间确定性互连彼此连接。所述方法包括:执行计算级,然后在每个域内执行相应的内部屏障同步,然后在每个域内执行内部交换阶段,然后执行外部屏障同步以在不同域之间同步,然后在域之间执行外部交换阶段。
Description
技术领域
本公开涉及在包括多瓦片处理布置的处理器中同步多个不同瓦片的工作负载,每个瓦片包括其自己的处理单元和存储器。具体地,本公开涉及批量同步并行(BSP)通信方案,其中瓦片组中的每个瓦片必须在组中的任何瓦片可以继续到交换阶段之前完成计算阶段。
背景技术
多线程处理器是能够彼此并行执行多个程序线程的处理器。处理可以包括对多个不同线程是共同的一些硬件(例如共同指令存储器、数据存储器和/或执行单元);但是为了支持多线程,处理器还包括一些特定于每个线程的专用硬件。
专用硬件至少包括可以一次执行的多个线程中的每个的相应上下文寄存器文件。当谈到多线程处理器时,“上下文”指的是彼此并行执行的线程的相应一个的程序状态(例如程序计数器值、状态和当前操作数值)。上下文寄存器文件指的是用于表示相应线程的这种程序状态的相应寄存器集合。寄存器文件中的寄存器不同于通用存储器,因为寄存器地址固定为指令字中的位(bit),而存储器地址可以通过执行指令来计算。给定上下文的寄存器通常包括用于相应线程的相应程序计数器,以及相应操作数寄存器集,用于临时保持在由该线程执行的计算期间作用于相应线程并由相应线程输出的数据。每个上下文还可以具有相应的状态寄存器,用于存储相应线程的状态(例如它是暂停还是正在运行)。因此,每个当前运行的线程都具有自己独立的程序计数器,并可选地具有操作数寄存器和状态寄存器。
多线程的一种可能形式是并行(parallelism)。即是说,除了多个上下文之外,还提供了多个执行流水线:即,用于要并行执行的每个指令流的独立执行流水线。但是,这需要在硬件方面进行大量重复。
因此,另一种形式的多线程处理器采用并发(concurrency)而不是并行,其中线程共享共同的执行流水线(或至少流水线的共同部分),并且不同的线程通过该相同、共享的执行流水线交错。由于增加了隐藏流水线延迟(latency)的机会,与没有并发或并行相比,多线程处理器的性能仍然可以改善。此外,这种方法不需要具有多个执行流水线的完全并行处理器所需那么多的专用于每个线程的额外硬件,因此不会需要如此多的额外硅。
一种形式的并行可以通过包括在同一芯片(即相同管芯)上的多个瓦片的布置的处理器来实现,其中每个瓦片包括其自己独立的相应处理单元和存储器(包括程序存储器和数据存储器)。因此,程序代码的独立部分可以在不同的瓦片上并行运行。这些瓦片通过芯片上互连连接在一起,这使得在不同瓦片上运行的代码能够在瓦片之间进行传送(communicate)。在一些情况下,每个瓦片上的处理单元本身可以在瓦片上运行多个并发线程,每个瓦片具有其自己的相应上下文集和如上所述的相应流水线,从而支持通过同一流水线的在同一瓦片上的多个线程的交错。
通常,不同瓦片上运行的程序的各部分之间可以存在依赖性。因此,需要一种技术来防止一个瓦片上的代码段在它所依赖于的数据被另一瓦片上的另一段代码使其变得可用之前运行。存在许多用于实现此目的的可能方案,但是本文中感兴趣的方案被称为“批量同步并行”(BSP)。根据BSP,每个瓦片以交替周期执行计算阶段和交换阶段。在计算阶段期间,每个瓦片在瓦片上本地执行一个或多个计算任务,但是不与任何其他瓦片传送其计算的任何结果。在交换阶段,允许每个瓦片将来自先前计算阶段的计算的一个或多个结果交换到组中的一个或多个其他瓦片,和/或从组中的一个或多个其他瓦片交换,但是还未继续到下一个计算阶段。此外,根据BSP原理,屏障同步被置于从计算阶段过渡到交换阶段、或者从交换阶段过渡到计算阶段、或两者的接合点。也就是说:(a)在允许组中的任何瓦片继续到下一个交换阶段之前,需要所有瓦片都完成其相应的计算阶段,或者(b)在允许组中的任何瓦片继续到下一个计算阶段之前,需要组中的所有瓦片都完成其相应的交换阶段,或者(c)两者。在一些情况下,可以允许执行计算的瓦片与其他系统资源(例如网卡或存储盘)进行传送,前提是不涉及与组中其他瓦片的传送。
在也可能具有在彼此传送之间执行的计算任务的发送器和接收器的互连系统中,发送器和接收器基本上有三种方式可以实现这一点。第一种是“约会”(rendez vous)方法。根据这种方法,发送器在准备好发送数据时发信号通知接收器,而接收器在准备接收数据时发信号通知发送器。如果发送器已准备好发送数据,但接收器正在执行一些其他计算任务,则发送器必须等待接收器完成其计算任务并发信号通知其准备好从发送器接收数据,否则发送器必须中断接收器。类似地,如果接收器在发送器仍然在执行一些其他计算任务时需要来自发送器的数据,则接收器必须等待发送器完成其计算任务并发信号通知其准备好向接收器发送数据,否则接收器必须中断发送器。约会方法的优点在于它不需要队列来对所发送数据进行排队,因为只有发送器和接收器都同意它们准备好进行传送时,才会进行数据传送。但是,缺点是延迟:发送器和接收器将花费大量时间等待彼此,否则将需要执行大量中断,这也会导致延迟惩罚(penalty)。延迟最终表现为吞吐量降低。
第二种可能性是“后箱”方法。根据这种方法,发送器在发送数据之前不会等待接收器。而是将所发送数据缓冲在队列中,接收器在准备好时从该队列中读取数据。只要队列有足够的长度,这就解决了约会方法的延迟问题。但是,如果填满了队列,过程便会停止,实际上传送将回退到约会方法。为了减少这种情况,相对于有机会发送的数据量,需要使队列变得更长。但是队列会产生巨大的硅足迹,特别是在发送器和接收器的许多潜在组合的阵列中。而且,在实践中,队列不能是无限长的。
批量同步并行(BSP)提供了第三种方法:每个瓦片在计算阶段执行特定定义量的计算处理,然后所有瓦片在前进到交换阶段之前一起同步(屏障同步)。这不会产生如约会方法那么多的延迟,并且不会像后箱方法产生那么多排队。
在机器智能中可以找到多线程和/或多瓦片并行处理的示例性使用。如机器智能领域的技术人员所熟悉的,机器智能算法是基于对“知识模型”执行迭代更新,该模型可以由多个互连节点的图形表示。每个节点表示其输入的函数。一些节点接收对图形的输入,一些接收来自一个或多个其他节点的输入,而一些节点的输出形成其他节点的输入,一些节点的输出提供图形的输出(在一些情况下,给定节点甚至可能具有以下全部:对图形的输入、来自图形的输出和对其他节点的连接)。此外,由一个或多个相应参数(例如权重)对每个节点的函数进行参数化。在学习级期间,目标是基于经验输入数据集,找到各个参数的值,使得图形作为整体针对可能输入范围而生成期望的输出。用于这样做的各种算法在本领域中是已知的,例如基于随机梯度下降(stochastic gradient descent)的反向传播算法(back propagation algorithm)。在基于输入数据的多次迭代中,逐渐调整参数以减少它们的误差,并且因此图形收敛于解(solution)。在随后的阶段,学习的模型然后可以用于对在给定的指定输入集的情况下对输出进行预测,或者在给定的指定输出集的情况下对输入(原因)进行推断。
每个节点的实现将涉及数据的处理,并且图形的互连对应于要在节点之间交换的数据。通常,每个节点的至少一些处理可以独立于图形中的一些或所有其他节点来执行,因此大的图形显露出巨大的并发和/或并行的机会。
发明内容
本发明从将批量同步并行(BSP)方法选择为瓦片间传送的基础开始。
根据本发明,期望在包括布置成不同时间确定性域的多个处理器瓦片的系统上实现BSP,其中相同域中的瓦片之间的传送是时间确定性的,但是不同域中的瓦片之间的传送是非时间确定性的。在这种情况下,发明人已经确定期望将BSP过程分成时间确定性和非时间确定性级,从而防止在时间确定性域内的至少一些时间确定性交换的时间确定受到这些域之间的非时间确定性交换污染。
根据本文公开的一个方面,提供了操作系统的方法,包括被划分成多个域的多个处理器瓦片,其中在每个域内,瓦片通过时间确定性互连的相应实例(instance)彼此连接,并且在域之间,瓦片通过非时间确定性互连彼此连接;所述方法包括:
在跨越域的一些或所有瓦片的参与组中的每个相应的一个上,执行计算级,其中相应的瓦片执行相应的一个或多个瓦片上计算,但既不向也不从组中的任何其他瓦片传送计算结果;
在所述一个或多个域中的每个相应的一个域内,执行相应的内部屏障同步以要求相应域中的所有参与瓦片在相应域中的任何参与瓦片被允许继续到内部交换阶段之前已经完成计算阶段,从而在所述一个或多个域中的每一个内部的所有参与瓦片之间建立共同时间参考;
在相应的内部屏障同步之后,在所述一个或多个域中的每个内执行所述内部交换阶段,其中相应域内的每个参与瓦片通过时间确定性互连向和/或从同一域内的一个或多个其他参与瓦片传送其相应计算的一个或多个结果,但既不向也不从任何其他所述域传送计算结果;
执行外部屏障同步以要求所述域的所有参与瓦片在任何参与瓦片被允许继续到外部交换阶段之前已经完成内部交换阶段,从而在跨越域的所有参与瓦片之间建立共同时间参考;和
在所述外部屏障同步之后,执行外部交换阶段,其中一个或多个参与瓦片与另一个域通过非时间确定性互连传送一个或多个所述计算结果。
即,首先执行一个或多个内部BSP级,由此同一时间确定性域中的瓦片彼此同步和交换数据,但不需要与不同确定性域中的任何实体同步,并且不在这些域之间交换数据。然后,执行独立的外部BSP级,其中跨越更宽的非时间确定性领域的所有瓦片在″全局同步″中同步,然后在域之间交换数据。
期望时间确定性的一个原因是它允许在同一域中的瓦片之间进行传送,而不会产生相应互连中任何队列的硅足迹。
因此,在实施例中,通过非时间确定性互连的传送被排队,但是瓦片之间通过时间确定性互连的传送不被排队。
在实施例中,在时间确定性互连上,每对发送瓦片和接收瓦片之间的传送可以通过以下方式执行:
从接收瓦片发送消息,和
控制接收瓦片在发送瓦片发送之后的预定时间间隔内监听发送瓦片的地址,
其中预定时间间隔等于发送瓦片和接收瓦片之间的总预定延迟,时间间隔由具有关于延迟的预定信息的编译器设置。
在时间确定性领域和非时间确定性领域之间划分的另一个原因是时间确定性通常意味着物理层上的无损介质,但另一方面,将其延伸到不确定的瓦片范围是不切实际的。因此,再次期望允许某些域内的时间确定性,同时避免较宽的非时间确定性传送污染时间确定性交换阶段。
因此,在实施例中,在物理层、传输层或网络层上,非时间确定性互连是有损的,而时间确定性互连是无损的。
在时间确定性领域和非时间确定性领域之间划分的另一个原因是在实施例中,提供了时间确定性互连以用于在芯片上内部交换数据,但是使芯片之间的传送变成时间确定性是较不实际的。
因此,在实施例中,每个域可以是不同的相应芯片,其中时间确定性互连是内部芯片上互连,并且非时间确定性互连是芯片之间的外部互连。
与同一芯片上的瓦片之间的内部传送相比,在芯片之间交换数据将产生更大惩罚。与内部通信相比,由于外部通信较不局部化,所以它具有更长的延迟和更大的不确定性。由于封装所施加的限制,芯片之间的连接倾向于具有较低的布线密度,因此具有较少的可用数据带宽。而且,线进一步延伸,因此更具电容性,并且更容易受到噪声的影响(这可能导致损耗,因此需要在物理层进行重传)。此外,除了更大的物理距离之外,芯片之间的数据传输通常穿过更大量的逻辑,例如SerDes(串行器-解串器),以及流控制机制,相对于内部传送,所有这些都添加了额外的延迟。
通过分开内部芯片上和外部芯片外BSP级,这可以防止同一芯片上的瓦片之间的一些交换受到全局交换的延迟“污染”,这是就延迟而言更昂贵的操作。如果每个BSP级都涉及全局同步和交换,那么这将导致程序显著变慢。
不同的芯片可以是同一集成电路(IC)封装上的不同管芯(die),或是不同IC封装上的不同管芯,或是这些的混合。
还要注意,更一般地,不排除在芯片上/芯片外边界之外的别处进行时间确定性领域和非时间确定性领域之间的划分。例如,可以提供时间确定性互连以用于多个芯片的子组之间的数据交换,或者替代地,可以在同一芯片上形成彼此异步的不同时间确定性域。
因此,在实施例中,每个域可以包括多个芯片,时间确定性互连是外部无损芯片间互连,并且非时间确定性互连是外部有损互连。
在实施例中,方法可以包括执行一系列重复迭代,每个包括计算级的相应实例,接着是内部屏障同步的相应实例,接着是内部交换阶段的相应实例,接着是外部屏障同步的相应实例,接着是外部交换阶段的相应实例;其中,不允许每个连续迭代继续进行,直至已经执行了紧接在前的迭代的外部屏障同步。
在实施例中,方法可以包括执行一顺序的计算阶段的实例,每个接着是内部交换阶段的相应实例,然后是内部屏障同步的相应实例,并且外部屏障同步可以接着所述顺序中计算阶段的最后实例。
在实施例中,一个或多个所述迭代中的每一个可以包括一相应顺序的计算阶段的多个实例,每个接着是内部交换阶段的相应实例,然后是内部屏障同步的相应实例,并且相应的外部屏障同步可以接着相应顺序中计算阶段的最后实例。
在实施例中,内部屏障同步和外部屏障同步中的每一个可以通过执行包括操作码和操作数的同步指令来执行,其中操作码将同步指令的模式指定为内部或外部,并且其中操作码在执行时使时间确定性互连中的硬件逻辑在操作数指定内部模式时协调内部屏障同步的性能,并且使非时间确定性互连中的硬件逻辑在操作数指定外部模式时协调外部屏障同步的性能。
在实施例中,方法可以包括将多个预定义区域之一选择为参与瓦片,每个区域包括所述多个域的不同组或子集。
在实施例中,区域可以是分层的,其中至少两个较低级别的区域嵌套在至少一个较高级别的区域内。
在实施例中,同步指令的操作数可以指定外部屏障同步应用于外部模式的多个不同可能变体中的哪一个,每个对应于所述区域中不同的一个。
在实施例中,外部模式的变体可以至少指定外部屏障同步应用于区域的哪个层级。
在实施例中,外部同步和交换可以包括:
首先执行第一级外部同步和之后的交换,其约束在所述分层区域的第一、较低级别的一个内;和
在第一级同步和交换之后,在所述区域的第二、较高级别的一个上执行第二级外部同步和交换。
在实施例中,其中所述分层区域之一可以由同一IC封装中的所有瓦片组成,但不超过于此;和/或所述分层区域之一可以由同一卡中的所有瓦片组成,但不超过于此;和/或所述分层区域之一可以由同一机箱中的所有瓦片组成,但不超过于此。
在实施例中,方法可以包括在一个或一些瓦片上执行弃权指令,所述弃权指令的操作码使在其上执行它的一个或多个瓦片被选择退出所述组。
在实施例中,在外部交换阶段中,一个或多个参与瓦片还可以与主处理器通过外部互连传送一个或多个所述计算结果,所述主处理器在独立的主处理器芯片上实现。
在实施例中,在计算阶段中,一些或所有参与瓦片可以各自以交错方式运行成批的工作者线程,并且内部屏障同步可以要求每个批次中的所有工作者线程都已退出。
在实施例中,方法可以包括使用系统执行机器智能算法,其中图形中的每个节点具有一个或多个相应的输入顶点和一个或多个相应的输出顶点,其中至少一些节点的输入顶点是至少一些其他节点的输出顶点,每个节点包括将其输出顶点与其输入顶点相关联的相应函数,其中每个相应函数由一个或多个相应参数参数化,并且每个相应参数具有相关错误,使得图形随着一些或所有参数中的误差减少而收敛于解;其中每个瓦片可以用于对图形中的相应的一个或多个节点进行建模。
在实施例中,所述芯片可以采用辅助主处理器的AI加速器芯片的形式。
在本公开的替代方面,可以在芯片上与芯片外领域之间进行不同级别的BSP之间的主要划分,而不一定根据时间确定性领域和非时间确定性领域来划分BSP过程。不排除内部和外部通信都是时间确定性的,也不排除两者都不是时间确定性的,也不排除不是根据瓦片是否在同一芯片或不同芯片上而特别地划分时间确定性领域。在这种情况下,就上文讨论的延迟而言,内部芯片上和外部芯片外BSP的分开仍然是有利的。
因此,根据本文公开的另一方面,提供了一个操作系统的方法,包括通过外部互连彼此连接的多个处理器芯片,其中至少一个芯片包括由内部互连连接在一起的处理器瓦片的阵列;所述方法包括:
在跨越一个或多个芯片的一些或所有瓦片的参与组中的每个相应的一个上,执行计算级,其中相应的瓦片执行相应的一个或多个瓦片上计算,但既不向也不从组中的任何其他瓦片传送计算结果;
在所述一个或多个芯片的每个相应的一个芯片上,执行相应的内部屏障同步以要求相应芯片上的所有参与瓦片在相应芯片上的任何参与瓦片被允许继续到内部交换阶段之前已经完成计算阶段;
在相应的内部屏障同步之后,在所述一个或多个芯片中的每一个上执行所述内部交换阶段,其中相应芯片上的每个参与瓦片通过内部互连向和/或从同一芯片上的一个或多个其他参与瓦片传送其相应计算的一个或多个结果,但既不向也不从任何其他所述芯片传送计算结果;
执行外部屏障同步以要求所述一个或多个芯片上的所有参与瓦片在组中的任何瓦片被允许继续到外部交换阶段之前已经完成内部交换阶段;和
在所述外部屏障同步之后,执行参与芯片集之间的外部交换阶段,其中所述组中的一个或多个瓦片中的每个与另一个参与芯片通过外部互连传送一个或多个所述计算结果。
根据本文公开的另一方面,提供了一种计算机程序产品,实现在计算机可读存储上,并包括代码,所述代码被配置为当在所述瓦片上执行时,执行根据本文公开的任何方法的操作。
根据本文公开的另一方面,提供了一种系统,包括被划分成多个域的多个处理器瓦片,其中在每个域内,瓦片通过时间确定性互连的相应实例彼此连接,并且在域之间,瓦片通过非时间确定性互连彼此连接;系统被编程为执行以下操作:
在跨越域的一些或所有瓦片的参与组中的每个相应的一个上,执行计算级,其中相应的瓦片执行相应的一个或多个瓦片上计算,但既不向也不从组中的任何其他瓦片传送计算结果;
在所述一个或多个域中的每个相应的一个域内,执行相应的内部屏障同步以要求相应域中的所有参与瓦片在相应域中的任何参与瓦片被允许继续到内部交换阶段之前已经完成计算阶段,从而在所述一个或多个域中的每一个内部的所有参与瓦片之间建立共同时间参考;
在相应的内部屏障同步之后,在所述一个或多个域中的每个内执行所述内部交换阶段,其中相应域内的每个参与瓦片通过时间确定性互连向和/或从同一域内的一个或多个其他参与瓦片传送其相应计算的一个或多个结果,但既不向也不从任何其他所述域传送计算结果;
执行外部屏障同步以要求所述域的所有参与瓦片在任何参与瓦片被允许继续到外部交换阶段之前已经完成内部交换阶段,从而在跨越域的所有参与瓦片之间建立共同时间参考;和
在所述外部屏障同步之后,执行外部交换阶段,其中一个或多个参与瓦片与另一个域通过非时间确定性互连传送一个或多个所述计算结果。
附图说明
为了帮助理解本公开,并示出如何实施实施例,通过示例的方式参考附图,其中:
图1是多线程处理单元的示意框图,
图2是多个线程上下文的示意框图,
图3示意性地示出了交错执行时隙的方案,
图4示意性地示出了监督者线程和多个工作者线程,
图5是用于聚合多个线程的退出状态的逻辑的示意图,
图6示意性示出了同一瓦片上的工作者线程之间的同步,
图7是包括多个瓦片的处理器芯片的示意框图,
图8是批量同步并行(BSP)计算模型的示意图,
图9是BSP模型的另一个示意图,
图10是多线程处理单元之间的BSP的示意图,
图11是互连系统的示意框图,
图12是多个互连处理器芯片的系统的示意图,
图13是多层BSP方案的示意图,
图14是多个处理器芯片的系统的另一示意图,
图15是机器智能算法中使用的图形的示意图,
图16示意性地示出了用于在瓦片之间交换数据的布置,
图17示意性地示出了交换时间的方案,
图18示出了用于在芯片之间同步的示例性布线,和
图19示意性地示出了用于芯片之间交换的外部流控制机制。
具体实施方式
以下描述了具有一种架构的处理器的部件,该架构已被开发用于解决机器智能应用中涉及的计算中出现的问题。本文描述的处理器可以用作工作加速器;也就是说,它从在主计算机上运行的应用接收工作负载,该工作负载通常采用要处理的非常大的数据组的形式(例如机器智能算法用来学习知识模型的大型经验数据组,或者使用先前学习的知识模型从中执行预测或推断的数据)。本文所示的架构的目的是高效地处理这些非常大量的数据。处理器架构是为处理机器智能中涉及的工作负载而开发的。尽管如此,显而易见的是,所公开的架构也可以适用于共享相似特性的其他工作负载。
图1示出了根据本公开实施例的处理器模块4的示例。例如,处理器模块4可以是同一芯片上类似处理器瓦片的阵列中的一个瓦片,或者可以实现为在其自己的芯片上的独立处理器。处理器模块4包括采取桶形线程处理单元的形式的多线程处理单元10,以及本地存储器11(即,在多瓦片阵列的情况下在同一瓦片上,或者在单一处理器芯片的情况下在同一芯片上)。桶形线程处理单元是一种多线程处理单元,其中流水线的执行时间被划分为重复顺序的交错时隙,每个都可以由给定的线程拥有。这将在稍后更详细地讨论。存储器11包括指令存储器12和数据存储器22(其可以在不同的可寻址存储器单元中或同一可寻址存储器单元的不同区域中实现)。指令存储器12存储将由处理单元10执行的机器代码,而数据存储器22存储由执行的代码操作的数据和由执行的代码输出的数据(例如,作为这种操作的结果)。
存储器12存储程序的各种不同线程,每个线程包括用于执行特定任务的相应顺序的指令。注意,本文所指的指令指机器代码指令,即处理器指令集的基本指令之一的实例,由单个操作码和零个或更多个操作数组成。
本文描述的程序包括多个工作者线程和监督者子程序,监督者子程序可被构造为一个或多个监督者线程。这些将在稍后更详细地讨论。在实施例中,一些或所有工作者线程中的每一个采用相应“小代码”(codelet)的形式。小代码是一种特殊类型的线程,有时也称为“原子”线程。它具有从线程开头(从启动时起)执行所需的所有输入信息,即,它在启动后不会从程序的任何其他部分或从存储器获取任何输入。此外,程序的其他任何部分都不会使用线程的任何输出(结果),直到它终止(完成)。除非遇到误差,否则保证完成。注意,有些文献也将小代码定义为无状态,即如果它运行两次,则无法从第一次运行中继承任何信息,但这里不采用这个附加定义。还要注意,并非所有工作者线程都需要是小代码(原子),在实施例中,一些或所有工作者可能能够彼此进行传送。
在处理单元10内,来自指令存储器12的多个不同的线程可以通过单个执行流水线13交错(尽管在整个程序的任何给定的时间点,通常只有存储在指令存储器中的总线程的子集可以交错)。多线程处理单元10包括:多个上下文寄存器文件26,每个布置为表示要并发执行的线程中不同的相应一个的状态(上下文);共享执行流水线13,其对并发执行的线程是共同的;和调度器24,用于以交错方式(优选地以轮循(round robin)方式)调度并发线程以便通过共享流水线执行。处理单元10连接到对多个线程是共同的共享指令存储器12,以及对多个线程也是共同的共享数据存储器22。
执行流水线13包括获取级14,解码级16和执行级18,所述执行级18包括执行单元,所述执行单元可以执行算术和逻辑运算、地址计算、加载和存储操作,以及其他操作,如指令集架构所定义。每个上下文寄存器文件26包括用于表示相应线程的程序状态的相应寄存器集。
在图2中示意性地示出了构成每个上下文寄存器文件26的寄存器的示例。每个上下文寄存器文件26包括相应的一个或多个控制寄存器28,至少包括相应线程的程序计数器(PC)(用于跟踪线程当前正在执行的指令地址),并且在实施例中还有一个或多个状态寄存器(SR)的集,其记录相应线程的当前状态(例如它当前正在运行还是暂停,例如因为遇到了误差而暂停)。每个上下文寄存器文件26还包括相应的操作数寄存器(OP)32的集,用于临时保存由相应线程执行的指令的操作数,即,在相应线程的指令的操作码在执行时定义的操作上操作或由其产生的值。应当理解,每个上下文寄存器文件26可以可选地包括相应的一个或多个其他类型的寄存器(未示出)。还要注意,虽然术语“寄存器文件”有时用于表示共同地址空间中的寄存器组,但这不一定是本公开中的情况,并且每个硬件上下文26(表示每个上下文的寄存器组26中的每一个)可以更一般地包括一个或多个这样的寄存器文件。
如稍后将更详细讨论的,所公开的布置对于M个(在示出的示例中M=3,但这不是限制性的)可以并发执行的线程中的每一个具有一个工作者上下文寄存器文件CX0...CX(M-1),以及一个额外的监督者上下文寄存器文件CXS。工作者上下文寄存器文件被保留用于存储工作者线程的上下文,并且监督者上下文寄存器文件被保留用于存储监督者线程的上下文。注意,在实施例中,监督者上下文是特殊的,因为它与每个工作者具有不同数量的寄存器。每个工作者上下文优选地彼此具有相同数量的状态寄存器和操作数寄存器。在实施例中,监督者上下文可以比每个工作者具有更少的操作数寄存器。工作者上下文可能具有而监督者没有的操作数寄存器的示例包括:浮点寄存器、累加寄存器和/或专用权重寄存器(用于保持神经网络的权重)。在实施例中,监督者还可以具有不同数量的状态寄存器。此外,在实施例中,处理器模块4的指令集架构可以配置为使得工作者线程和监督者线程执行一些不同类型的指令,但是也共享一些指令类型。
连接获取级14以在调度器24的控制下从指令存储器12中获取要执行的指令。调度器24配置为控制获取级14在重复顺序的时隙中依次从并发执行线程集中的每一个获取指令,从而将流水线13的资源划分为多个时间上交错的时隙,如将在稍后更详细地讨论。例如,调度方案可以是轮循或加权轮循。以这种方式操作的处理器的另一个术语是桶形线程处理器。
在一些实施例中,调度器24可以访问每个线程的状态寄存器SR之一,其指示线程是否被暂停,以便调度器24实际上控制获取级14仅获取当前有效的那些线程的指令。在实施例中,优选地每个时隙(和相应的上下文寄存器文件)总由一个或另一个线程拥有,即每个时隙总是由某个线程占用,并且每个时隙总是包括在调度器24的顺序中;尽管占用任何给定时隙的线程可能恰好在该时间被暂停,在这种情况下,当顺序来到该时隙时,相应线程的指令获取被传递。替代地,不排除例如在替代、较不优选的实现中,一些时隙可以暂时空出,并从调度顺序中排除。在参考执行单元可操作以交错的时隙数量或类似的情况下,这指的是执行单元能够并发执行的时隙的最大数量,即执行单元的硬件支持的并发时隙数。
获取级14可以访问每个上下文的程序计数器(PC)。对于每个相应的线程,获取级14从指程序存储器12中的下一个地址获取该线程的下一个指令,如程序计数器所指示。程序计数器递增每个执行周期,除非由分支指令分支。然后,获取级14将所获取的指令传递到解码级16以进行解码,然后解码级16将所解码的指令的指示连同指令中所指定的任何操作数寄存器32的解码地址一起传递给执行单元18,从而执行指令。执行单元18可以访问操作数寄存器32和控制寄存器28,它可以将其用于基于解码的寄存器地址执行指令,例如在算术指令的情况下(例如通过加、乘、减或除两个操作数寄存器中的值,并将结果输出到相应线程的另一个操作数寄存器中)。或者,如果指令定义了存储器访问(加载或存储),则执行单元18的加载/存储逻辑根据指令将来自数据存储器的值加载到相应线程的操作数寄存器中,或者将来自相应线程的操作数寄存器的值存储到数据存储器22中。或者,如果指令定义了分支或状态改变,则执行单元相应地改变其中一个状态寄存器SR或程序计数器PC中的值。注意,当执行单元18正在执行一个线程的指令时,解码级16可以解码来自交错顺序中的下一个时隙的线程的指令;和/或当一个指令被解码级16解码时,来自这之后的下一个时隙的线程的指令可以被获取级14获取(尽管一般地本公开的范围不限于一个时隙一个指令,例如,在替代的情况下,可以在每个时隙从给定线程发出两个或更多个指令的批次)。因此,根据已知的桶形线程处理技术,交错有利地隐藏了流水线13中的延迟。
图3示出了由调度器24实现的交错方案的示例。这里根据轮循方案交错并发线程,由此在方案的每个轮次内,轮次被分为时隙顺序S0、S1、S2...,每个时隙用于执行相应的线程。通常,每个时隙是一个处理器周期长,并且不同的时隙是均匀的大小,尽管在所有可能的实施例中不一定如此,例如加权轮循方案也是可能的,由此一些线程在每个执行轮次中比其他线程获得更多循环。通常,桶形线程可以采用偶数轮循或加权的轮循调度,其中在后一种情况下,加权可以是固定或自适应的。
然后,不管每次执行轮次的顺序,重复这种模式,每一轮次包括每个时隙的相应实例。因此,请注意,本文所指的时隙指顺序中的重复分配位置,而不是时隙在顺序的给定重复中的特定实例。换句话说,调度器24将流水线13的执行周期分配到多个时间交错(时分多路复用)的执行信道中,其中每个包括重复的时隙顺序中的相应时隙的重现。在所示的实施例中,有四个时隙,但这仅用于说明目的,而且其他数量也是可能的。例如,在一个优选实施例中,实际上有六个时隙。
然后,不管轮循方案被划分成多少个时隙,根据本公开,处理单元10包括比时隙数量多一个的上下文寄存器文件26,即它支持比它能够进行桶形线程的交错时隙的数量多一个的上下文。
这在图2中以示例方式示出:如果存在四个时隙S0...S3,如图3所示,则存在五个上下文寄存器文件,在此标记为CX0、CX1、CX2、CX3和CXS。也就是说,尽管桶形线程方案中只有四个执行时隙S0...S3,因此可并发执行仅四个线程,本文公开了添加第五个上下文寄存器文件CXS,包括第五程序计数器(PC)、第五集操作数寄存器32,以及在实施例中还有第五集的一个或多个状态寄存器(SR)。尽管注意到如上所述,在实施例中,监督者上下文可以与其他CX0...3不同,并且监督者线程可以支持用于操作执行流水线13的不同指令集。
首四个上下文CX0...CX3中的每个用于表示当前分配给四个执行时隙S0...S3之一的多个“工作者线程”的相应一个的状态,用于执行程序员所期望的任何特定于应用的计算任务(再次注意,这可能只是存储在指令存储器12中的程序的工作者线程总数的子集)。然而,第五个上下文CXS被保留用于特殊函数,以表示“监督者线程”(SV)的状态,其角色是至少在以下意义上协调工作者线程的执行:在整个程序中哪一点在时隙S0、S1、S2...中的哪一个中分配要执行哪个工作者线程W。可选地,监督者线程可以具有其他“监视者”或协调职责。例如,监督者线程可以负责执行屏障同步以确保特定的执行顺序。例如,在一个或多个第二线程依赖于由在同一处理器模块4上运行的一个或多个第一线程输出的数据的情况下,监督者可以执行屏障同步以确保第二线程都不会开始,直至第一线程已经完成。和/或,监督者可以执行屏障同步以确保处理器模块4上的一个或多个线程不会开始,直至某个外部数据源(例如另一个瓦片或处理器芯片)已经完成了使该数据变得可用所需的处理。监督者线程还可以用于执行与多个工作者线程相关的其他功能。例如,监督者线程可以负责向处理器模块4外部发送数据(以接收要由一个或多个线程作用的外部数据,和/或发送由一个或多个工作者线程输出的数据)。通常,监督者线程可以用于提供程序员期望的任何类型的监视或协调函数。例如,作为另一个例子,监督者可以监视瓦片本地存储器12与诸如存储盘或网卡的较宽系统(在阵列6外部)中的一个或多个资源之间的传输。
当然要注意,四个时隙仅是示例,并且通常在其他实施例中,可以存在其他数量,使得如果每个轮次存在最多M个时隙0...M-1,则处理器模块4包括M+1个上下文CX...CX(M-1)&CXS,即每个可以在任何给定时间交错的工作者线程一个,以及为监督者提供额外的上下文。例如,在一个示例性实现中,存在六个时隙和七个上下文。
参考图4,在交错时隙的方案中,监督者线程SV本身没有其自己的时隙。工作者线程的时隙分配也不是灵活定义的。相反,每个时隙都有其自己专用的上下文寄存器文件(CX0...CXM-1),用于存储工作者上下文,其在将时隙分配给工作者时由工作者使用,但不在将时隙分配将监督者时使用。当给定的时隙被分配给监督者时,该时隙使用监督者的上下文寄存器文件CXS。注意监督者总是可以访问其自己的上下文,而没有工作者能够占用监督者上下文寄存器文件CXS。
监督者线程SV具有在任何和所有时隙S0...S3(或更一般地S0...SM-1)中运行的能力。调度器24被配置成,当程序作为整体开始时,通过将监督者线程分配给所有时隙而开始,即,监督者SV开始在所有时隙S0...S3中运行。但是,向监督者线程提供了一种机制,用于在某个后续点(直接或者在执行一个或多个监督者任务之后)将其正在运行的每个时隙暂时放弃给相应的一个工作者线程,例如图4所示的示例中的初始工作者W0...W3。这是通过监督者线程执行放弃指令来实现,在本文中通过示例的方式称为“RUN”(运行)。在实施例中,该指令采用两个操作数:指令存储器12中的工作者线程的地址和数据存储器22中针对该工作者线程的一些数据的地址:
RUN task_addr,data_addr
工作者线程是可以彼此并发运行的代码的一部分,每个表示要执行的一个或多个相应计算任务。数据地址可以指定工作者线程要作用的一些数据。替代地,放弃指令可以只采用指定工作者线程地址的单个操作数,并且数据地址可以被包括在工作者线程的代码中;或者,在另一个示例中,单个操作数可以指向指定工作者线程和数据的地址的数据结构。如上所述,在实施例中,至少一些工作者可以采用小代码的形式,即,可并发执行的代码的原子单元。替代地或附加地,一些工作者不一定是小代码,并且可能能够彼此进行传送。
放弃指令(“RUN”)作用于调度器24,从而将当前时隙(该指令本身在该时隙被执行)放弃给由操作数指定的工作者线程。注意,在放弃指令中隐含的是,在其中执行该指令的时隙正被放弃(在机器代码指令的上下文中隐含指不需要操作数来指定这点——从操作码本身隐含地理解)。因此,交出的时隙是其中监督者执行放弃指令的时隙。或者,换句话说,监督者正在它所交出的相同空间中执行。监督者说“在这个位置运行这段代码”,然后从该点起,重复的时隙由相关的工作者线程(临时)拥有。
监督者线程SV在一个或多个其他时隙中的每一个中执行类似的操作,以将其一些或全部时隙分配给工作者线程W0...W3中的不同的相应的一些(从指令存储器12中较大组W0...wj中选择)。一旦它为了最后时隙这样做,监督者就会被暂停(后来当工作者W将其一中一个时隙交还时,将从它停下来的地方继续)。
因此,监督者线程SV能够将不同的工作者线程分配给不同交错执行时隙S0...S3,每个工作者线程执行一个或多个任务。当监督者线程确定是时候运行工作者线程时,它使用放弃指令(“RUN”)将该工作者分配给其中执行RUN指令的时隙。
在一些实施例中,指令集还包括运行指令的变体RUNALL(″运行全部″)。这个指令用于一起启动多于一个工作者的集,全部都执行相同的代码。在实施例中,这在处理单元的时隙S0...S3(或更一般地S0...S(M-1))的每一个中启动工作者。
此外,在一些实施例中,RUN和/或RUNALL指令在被执行时还自动地将一些状态从一个或多个监督者状态寄存器CXS(SR)复制到由RUN或RUNALL启动的工作者线程的相应的一个或多个状态寄存器中。例如,复制的状态可以包括一个或多个模式,例如浮点舍入模式(例如舍入到最近或舍入到零),和/或溢出模式(例如饱和或使用表示无穷大的独立值)。然后,复制的状态或模式控制讨论中的工作者根据复制的状态或模式操作。在实施例中,工作者稍后可以在其自己的状态寄存器中重写它(但是不能改变监督者的状态)。在进一步的替代或附加实施例中,工作者可以选择从监督者的一个或多个状态寄存器中读取一些状态(并且稍后也可以改变它们自己的状态)。例如,再次,这可以是采用来自监督者状态寄存器的模式,例如浮点模式或舍入模式。然而,在实施例中,监督者不能读取工作者的上下文寄存器CX0...中的任何一个。
一旦启动,当前分配的工作者线程W0...W3中的每一个继续执行在由相应的放弃指令指定的代码中定义的一个或多个计算任务。在此结束时,相应的工作者线程然后将其中它正在运行的时隙交给监督者线程。这是通过执行退出指令(“EXIT”(退出))来实现的。
EXIT指令采取至少一个操作数并且优选地仅采取单个操作数,exit_state(例如二进制值),用于程序员期望的任何目的,以在结束时指示相应小代码的状态(例如以指示是否达到某个条件):
EXIT exit_state
EXIT指令作用于调度器24,使得将它在其中执行的时隙归还给监督者线程。然后,监督者线程可以执行一个或多个后续监督者任务(例如,屏障同步和/或与诸如其他瓦片的外部资源交换数据),和/或继续执行另一个放弃指令以将新的工作者线程(W4等)分配给讨论中的时隙。因此,再次注意,指令存储器12中的线程总数可以大于桶形线程处理单元10在任何一个时刻可以交错的数量。监督者线程SV的作用是调度来自指令存储器12的工作者线程W0...Wj中的哪一个在整个程序的哪个阶段分配到调度器24的轮循调度中的交错时隙S0...SM中的哪一个。
此外,EXIT指令还有一个特殊函数,即,使EXIT指令的操作数中指定的退出状态与通过相同处理器模块4(例如同一瓦片)的相同流水线13运行的多个其他工作者线程的退出状态(通过专用硬件逻辑)自动聚合。因此,在用于终止工作者线程的指令中包括额外的隐式设施。
用于实现此目的的示例性电路如图5所示。在该示例中,单独线程的退出状态和聚合的退出状态均采用单个位的形式,即0或1。处理器模块4包括寄存器38,用于存储该处理器模块4的聚合退出状态。该寄存器在本文中可称为“本地共识”寄存器$LC(与当中处理器模块4包括为类似处理器瓦片阵列之一的全局共识相反,将在稍后更详细地讨论)。在实施例中,这种本地共识寄存器$LC 38是监督者上下文寄存器文件CXS中的监督者状态寄存器之一。用于执行聚合的逻辑包括AND(和)门37,其被布置为执行(A)EXIT指令的操作数中指定的退出状态和(B)本地共识寄存器($LC)38中的当前值的逻辑AND,以及将结果(Q)输出回到本地共识寄存器$LC 38中作为本地聚合的新值。
在程序中的适当同步点,存储在本地共识寄存器($LC)38中的值最初被重置成为1。即,在此点之后退出的任何线程将对本地聚合退出状态$LC做出贡献,直到下次重置为止。如果两个输入(A,B)都是1,则AND门37的输出(Q)是1,但是如果输入(A,B)的任何一个是0,则输出Q变为0。每次执行EXIT指令时,其退出状态与之前已经过去(自上次重置后)的那些聚合。因此,透过图5中所示的布置,逻辑保持自上次重置本地共识寄存器($LC)38以来已经通过EXIT指令终止的任何工作者线程的退出状态的运行聚合。在此示例中,运行聚合指的是目前为止所有线程是否已退出了真(tree):来自任何工作者线程的任何退出状态为0将意味着寄存器38中的聚合被锁存为0,直到下一次重置。在实施例中,监督者SV可以通过从本地共识寄存器($LC)38获得当前值来随时读取运行聚合(它不需要等待瓦片上同步来这样做)。
本地共识寄存器($LC)38中的聚合的重置可以由监督者SV使用一个或多个通用指令对本地共识寄存器($LC)38的寄存器地址执行PUT(放置)来执行,在这示例中对寄存器38放置1的值。替代地,不排除可以通过自动机制执行重置,例如通过执行本文稍后所述的SYNC指令来触发。
使用用于形成布林(Boolean)AND的功能的任何适合的电子组件组合,在执行级18的执行单元中的专用硬件电路中实现聚合电路37,在这种情况下是AND门。专用电路或硬件指具有硬连线函数的电路,而不是使用通用代码软件中编程。通过执行特殊EXIT指令触发本地退出状态的更新,该特殊EXIT指令是处理器模块4的指令集中的基本机器代码指令之一,具有聚合退出状态的固有功能。此外,本地聚合存储在控制寄存器38中,意味着专用存储器(在实施例中是单个存储位),其值可以由在流水线上运行的代码访问,但是不能由加载-存储单元(LSU)用来存储任何通用数据。相反,保持在控制寄存器中的数据的函数是固定的,在这种情况下是固定到存储本地聚合退出状态的函数。优选地,本地共识寄存器($LC)38形成处理器模块4上(例如瓦片上)的控制寄存器之一,其值可以由监督者通过执行GET(取得)指令访问和通过执行PUT指令来设置。
注意,图5中所示的电路只是一个例子。等效电路将用OR(或)门替换AND门37,并反转软件中退出状态0和1的解释,即0→真,1→假(其中寄存器38在每个同步点被重置为0而不是1)。等效地,如果AND门被替换为OR门,但退出状态的解释和重置值未被反转,那么$LC中的聚合状态将记录有没有任何(而不是全部)工作者状态以状态1退出。在其他实施例中,退出状态不需要是单个位。例如,每个单独工作者的退出状态可以是单个位,但是聚合的退出状态$LC可以包括表示三态的两个位:所有工作者以状态1退出,所有工作者以状态0退出,或者工作者的退出状态是混合的。作为用于实现这点的逻辑的示例,编码三元值的两个位之一可以是单独退出状态的布林AND(或OR),并且三元值的另一个位可以是单独退出状态的布林OR。然后,可以随着这两个位的XOR形成表示工作的退出状态混合的第三编码情况。
退出状态可用于表示程序员希望的任何内容,但一个特别设想示例是使用退出状态1来指示相应的工作者线程已经以“成功”或“真”状态退出,而退出状态0指示相应工作者线程以“不成功”或“假”状态退出(或者,如果聚合电路37执行OR而不是AND,并且寄存器$LC38最初被重置为0,则反之亦然)。例如,考虑一个应用,其中每个工作者线程执行具有相关条件的计算,例如指示机器智能算法的图形中的相应节点的一个或多个参数的误差是否落在根据预定度量的可接受水平内的条件。在这种情况下,可以使用一个逻辑级别的单独退出状态(例如1)可以用于指示条件被满足(例如,节点的一个或多个参数中的误差在根据某个度量的可接受级别内);而相反逻辑级别的单独退出状态(例如0)可以用于指示条件未被满足(例如,误差不在根据讨论中的度量的可接受级别内)。条件可以例如是放置在单个参数或每个参数上的误差阈值,或者可以是与工作者线程执行的相应计算相关联的多个参数的更复杂的函数。
作为另一个更复杂的示例,工作者的单独退出状态和聚合的退出状态可以包括两个或更多个位,例如,可以用于表示工作者线程的结果的置信度。例如,每个单独工作者线程的退出状态可以表示对相应工作者线程的结果的置信度的概率性度量,并且聚合逻辑37可以替换为较复杂的电路,用于执行硬件中的单独置信度的概率性聚合。
然后,不管程序员给退出状态赋予什么意义,监督者线程可以从本地共识寄存器($LC)38获得聚合值,以确定自上次重置以来(例如在最后的同步点)退出的所有工作者线程的聚合退出状态,例如以确定所有工人是否以成功或真的状态退出。然后,根据该聚合值,监督者线程可以根据程序员的设计做出决定。程序员可以选择地使用他或她希望的本地聚合退出状态。例如,监督者线程可以查询本地聚合的退出状态,以便确定由工作者线程的某个子集构成的程序的特定部分是否已按预期或期望完成。如果不是(例如,至少一个工作者线程以不成功或假的状态退出),则它可以向主处理器报告,或者可以执行包括相同工作者线程的程序部分的另一次迭代;但如果是的话(例如,所有工作者线程都以成功或真的状态退出),它可以转而分支到包括一个或多个新工作者的程序的另一部分。
优选地,监督者线程不应访问本地共识寄存器($LC)38中的值,直至所有讨论中的工作者线程已经退出,使得其中存储的值表示所有期望的线程的正确、最新的聚合状态。等待这点可以通过由监督者线程执行的屏障同步来强制执行,以等待所有当前运行的本地工作者线程(即,在同一处理器模块4上的那些,通过同一流水线13运行)退出。也就是说,监督者线程重置本地共识寄存器($LC)38,启动多个工作者线程,然后启动本地屏障同步(局部于处理器模块4,局部于一个瓦片),从而等待所有剩余的工作者线程在监督者被允许继续到从本地共识寄存器($LC)38获得聚合退出状态之前退出。
参考图6,在实施例中,在处理器的指令集中提供SYNC(同步)指令。SYNC指令具有使监督者线程SV等待直到所有当前正在执行的工作者W已通过EXIT指令退出的效果。在实施例中,SYNC指令采取操作数(在实施例中是其唯一的操作数)的模式,该模式指定SYNC是否仅与那些与监督者在同一处理器模块4(例如同一瓦片)上本地运行的工作者线程相关联地仅本地作用,其中SYNC在该处理器模块4的部分上执行(即,只有通过同一桶形线程处理单元10的同一流水线13的线程);或者它是否跨多个瓦片或甚至跨多个芯片应用。
SYNC mode//mode∈{tile,chip,zone_1,zone_2}
这将在后面更详细地讨论,但是出于图6的目的,将假设本地SYNC(“SYNC瓦片”,即单个瓦片内的同步)。
工作者不需要被识别为SYNC指令的操作数,因为隐含的是然后使监督者SV自动等待,直到桶形线程处理单元10的时隙S0、S1....都没有被工作者占用。如图6所示,一旦当前批次的工作者WLn中的每一个都由监督者启动,监督者便会执行SYNC指令。如果监督者SV启动桶形线程处理单元10的所有时隙S0...3中(在所示示例中的全部四个,但这仅是一个示例性实现)的工作者W,则一旦当前的批次工作者线程WLn中的第一个离开了,SYNC便由监督者执行,从而将对至少一个时隙的控制交还给监督者SV。否则,如果工作者没有占用所有时隙,则只需在启动当前批次的WLn的最后一个线程后立即执行SYNC。无论哪种方式,SYNC使得监督者SV等待当前批次的全部其他工作者WLn-1在监督者可以继续之前执行EXIT。只有在此之后,监督者才执行GET指令以获得本地共识寄存器($LC)38的内容。一旦执行了SYNC,这种监督者线程的等待就会施加在硬件中。即,响应于SYNC指令的操作码,执行级18的执行单元(EXU)中的逻辑使得获取级14和调度器24暂停发出监督者线程的指令,直至所有余下的工作者线程都执行了EXIT指令。在获得本地共识寄存器($LC)38的值(可选地在其间具有一些其他监督者代码)之后的某个点刻,监督者执行PUT指令以重置本地共识寄存器($LC)38(在所示示例中重置为1)。
还如图6所示,SYNC指令还可以用于在工作者线程的不同相互依赖层WL1、WL2、WL3...之间放置同步屏障,其中每个连续层中的一个或多个线程依赖于由其前一层中的一个或多个工作者线程输出的数据。由监督者线程执行的本地SYNC确保下一层WL+1中的工作者线程都不会执行,直至紧接在前的层WLn中的所有线程已经退出(通过执行EXIT指令)。
如上所述,在实施例中,处理器模块4可以实现为形成多瓦片处理器的互连瓦片阵列之一,其中每个瓦片可以如上面关于图1至图6所述那样配置。
这在图7中进一步示出,图7示出了单芯片处理器2,即单个管芯,包括多个处理器瓦片4的阵列6和连接瓦片4之间的芯片上互连34。芯片2可以单独在其自己的单芯片集成电路封装上实现,或者作为封装在同一IC封装中的多个管芯之一实现。芯片上互连在本文也可以称为“交换结构”34,因为它使得瓦片4能够彼此交换数据。每个瓦片4包括桶形线程处理单元10和存储器11的相应实例,每个如上面关于图1至6所述那样布置。例如,作为说明,芯片2可以包括数百个,甚至超过一千个瓦片4的数量级。为了完整起见,还要注意,本文提到的″阵列″不一定意味着瓦片4的任何特定数量的维度或物理布局。
在实施例中,每个芯片2还包括一个或多个外部链路8,使得芯片2连接到不同芯片上的一个或多个其他外部处理器(例如,同一芯片2的一个或多个其他实例)。这些外部链路8可以包括以下任何一个或多个:用于将芯片2连接到主处理器的一个或多个芯片到主机链路、用于在同一IC封装或卡上或在不同卡上的芯片2的一个或多个实例连接在一起的一个或多个芯片到芯片链路。在一个示例性布置中,芯片2从主处理器(未示出)接收采取要由芯片2处理的输入数据的形式的工作,该主处理器通过芯片到主机链路之一连接到芯片。芯片2的多个实例可以通过芯片到芯片链路一起连接到卡中。因此,主机可以访问被构造为可能布置在互连卡上的单芯片处理器2或多个单芯片处理器2的计算机,这取决于主机应用所需的工作负载。
互连34配置为使阵列6中不同的处理器瓦片4能够与另一个芯片上2进行传送。然而,除了在相同瓦片4上的线程之间可能存在依赖性之外,在阵列6中不同的瓦片4运行的程序的部分之间也可能存在依赖性。因此,需要一种技术来防止一个瓦片4上的代码段在它所依赖于的数据被另一瓦片4上的另一段代码使其变得可用之前运行。
这可以通过实现批量同步并行(BSP)交换方案来实现,如图8和9中示意性所示。
根据BSP的一个版本,每个瓦片4在交换周期中执行计算阶段52和交换阶段50,其通过瓦片之间的屏障同步30彼此分离。在所示的情况下,在每个计算阶段52和随后的交换阶段50之间放置屏障同步。在计算阶段52期间,每个瓦片4在瓦片上本地执行一个或多个计算任务,但是不与任何其他瓦片4传送这些计算的任何结果。在交换阶段50期间,每个瓦片4被允许将来自先前计算阶段的计算的一个或多个结果向和/或从组中的一个或个其他瓦片交换,但是不会执行任何新计算,直至它已经从其他瓦片4接收到其任务依赖于的任何数据。除了在前面的计算阶段计算的数据之外,它也不向任何其他瓦片发送任何数据。不排除可以在交换阶段执行诸如内部控制相关操作的其他操作。在实施例中,交换阶段50不包括任何非时间确定性计算,但在交换阶段50期间可以可选地允许少量时间确定性计算。还要注意,在计算阶段52期间可以允许执行计算的瓦片4与正被同步的瓦片4阵列外部的其他外部系统资源通信,例如网卡、磁盘驱动器或现场可编程门阵列(FPGA),只要这不及与被同步的组内的其他瓦片4的传送。瓦片组外部的传送可以可选地利用BSP机制,但是可选地可以不利用BSP,而是可以使用其自身的一些其他同步机制。
此外,根据BSP原理,屏障同步30被置于从计算阶段52过渡到交换阶段50的接合点、或者从交换阶段50过渡到计算阶段52的接合点或两者。也就是说:(a)在允许组中的任何瓦片继续到下一个交换阶段50之前,需要所有瓦片4都完成它们各自的计算阶段52,或者(b)在允许组中的任何瓦片继续到下一个计算阶段52之前,需要组中的所有瓦片4都完成其相应的交换阶段50,或者(c)这两个条件都被强制执行。在所有三种变体中,单独处理器在阶段之间交替,并且整个组装同步。然后,这个交换和计算阶段的顺序可以重复多次重复。在BSP术语中,交换阶段和计算阶段的每次重复有时被称为“超步”(superstep)(尽管注意在文献中这个术语并不总是一致地使用:有时每个单独交换阶段和计算阶段单独地被称为超步,而其他地方,如本文采用的术语中,交换和计算阶段一起被称为超步)。
还要注意,不排除在同一芯片2或不同芯片上的多个不同独立的瓦片4组可以各自形成彼此异步的独立的相应BSP组,其中BSP周期的计算、同步和交换是仅在给定的组内施加,但每个组独立于其他组执行此操作。即,多瓦片阵列6可以包括多个内部同步群,每个与其他这样组独立地和异步地操作(稍后更详细地讨论)。在一些实施例中,存在同步和交换的分层分组,这将在下文更详细地讨论。
图9示出了在阵列6中的一些或所有瓦片的组4i、4ii、4iii中实现的BSP原理,在这种情况下实施:(a)从计算阶段52到交换阶段50的屏障同步(见上文)。注意,在这种布置中,允许一些瓦片4开始计算52,而其他一些仍在交换。
根据本文公开的实施例,可以通过将附加、特殊、专用的功能结合到执行屏障同步的机器代码指令(即SYNC指令)中来促进这种类型的BSP。
在实施例中,SYNC函数在通过瓦片间模式(例如芯片上模式)限定为操作数时采用此功能:SYNC芯片。
这在图10中示意性地示出。在每个瓦片4包括多线程处理单元10的情况下,每个瓦片的计算阶段52实际上可以包括由同一瓦片4上多个工作者线程W执行的任务(而且,给定瓦片4的给定计算阶段52可以包括工作者线程的一个或多个层WL,其在多个层的情况下可以使用SYNC指令通过内部屏障同步分离,其中本地瓦片上模式作为操作数)。一旦给定瓦片4上的监督者线程SV已经在当前BSP超步中启动了最后的工作者线程,则该瓦片4上的监督者执行SYNC指令,其中瓦片间模式设置为操作数:SYNC芯片。如果监督者要在其相应处理单元10的所有时隙中启动(RUN)工作者线程,一旦将不再需要运行当前BSP超步中的任何更多工作者的第一时隙交还给监督者,便尽快执行“SYNC芯片”。例如,这可能发生在第一线程退出最后层WL之后,或者如果只有一个层,则发生在第一工作者线程退出之后。否则,如果不是所有的时隙都用于运行当前BSP超步的工作者,一旦启动了需要在当前BSP超步中运行的最后工作者,便尽快执行“SYNC芯片”。这可能在一旦运行了最后层的所有工作者便发生,或者如果只有一层,则一旦运行了所有工作者线程便发生。
执行级18的执行单元(EXU)被配置成:响应于SYNC指令的操作码,当由芯片上(瓦片间)操作数限定时,使得其中“SYNC芯片”被执行的监督者线程被暂停,直到阵列6中的所有瓦片4完成了工作者的运行。这可用于实现下一个BSP超步的屏障。即,在芯片2上的所有瓦片4已经通过屏障之后,跨瓦片程序作为整体可以前进到下一个交换阶段50。
图11给出了说明根据本文公开的实施例的由″SYNC芯片″触发的逻辑的示意图。
一旦监督者启动(RUN)了它企图在当前计算周期52中启动的所有线程,它就会以芯片上、瓦片间的操作数执行SYNC指令:SYNC芯片。这触发了在瓦片4上的专用同步逻辑39中以及在硬件互连34中实行的同步控制器36中触发以下功能。瓦片上同步逻辑39和互连34中的同步控制器36二者的这种功能在专用硬件电路中实现,使得一旦执行SYNC芯片,其余的功能继续进行而无需执行另外的指令。
首先,瓦片上同步逻辑39使得讨论中的瓦片4上的监督者的指令发出自动暂停(使得获取级14和调度器24暂停发出监督者的指令)。一旦本地瓦片4上的所有余下的工作者线程都已经执行退出(EXIT),则同步逻辑39自动向互连34中的同步控制器36发送同步请求“sync_req”。然后,本地瓦片4继续等待,并且暂停监督者指令发出。类似的过程也在阵列6中的每个其他瓦片4上实现(每个瓦片包括其自己的同步逻辑39的实例)。因此,在某个点处,一旦当前计算阶段52中的所有最终工作者已经在阵列6中的所有瓦片4上退出(EXIT),则同步控制器36将已从阵列6中的所有瓦片4接收到相应的同步请求(sync_req)。只有这样,响应于从同一芯片2上的阵列6中的每个瓦片4接收到sync_req,同步控制器36将同步确认信号“sync_ack”发送回到每个瓦片4上的同步逻辑39。直到此时,每个瓦片4都已暂停其监督者指令发出,等待同步确认信号(sync_ack)。在接收到sync_ack信号后,瓦片4中的同步逻辑39自动取消对该瓦片4上的相应监督者线程的监督者指令发出的暂停。然后,监督者可以在随后的交换阶段50中自由地继续通过互连34与其他瓦片4交换数据。
优选地,通过互连34中将每个瓦片4连接到同步控制器36的一个或多个专用同步线,分别向同步控制器和从同步控制器发送和接收sync_req和sync_ack信号。
此外,根据本文公开的实施例,SYNC指令中包括附加功能。即,至少当以瓦片间模式(例如,SYNC芯片)执行时,SYNC指令还使用每个同步的瓦片4的本地退出状态$LC自动聚合在互连34中的另一专用硬件40中。在所示的实施例中,该逻辑采用多输入AND门(阵列6中的每个瓦片4一个输入)的形式,例如,由双输入AND门40i、40ii......的串形成,如图11通过示例所示。该瓦片间聚合逻辑40从阵列中的每个瓦片4接收本地退出状态寄存器(本地共识寄存器)$LC 38中的值(在实施例中每个都是单个位),并且将它们聚合成单个值,例如所有本地聚合退出状态的AND。因此,逻辑形成跨越阵列6中的所有瓦片4上的所有线程的全局聚合的退出状态。
每个瓦片4包括全局共识寄存器($GC)42的相应实例,其被布置成接收和存储来自互连34中的全局聚合逻辑40的全局退出状态。在实施例中,这是监督者上下文寄存器文件CXS的另一个状态寄存器。响应于从阵列6中的所有瓦片4接收到同步请求(sync_req),同步控制器36使得聚合逻辑40的输出(例如AND的输出)存储在每个瓦片4上的全局共识寄存器($GC)42中(应当理解,图11所示的“开关”是功能的示意图,并且实际上可以通过任何合适的数字逻辑来实现更新)。一旦恢复了监督者指令发出,该寄存器$GC 42可由相应瓦片4上的监督者线程SV访问。在实施例中,将全局共识寄存器$GC实现为控制寄存器文件中的控制寄存器,使得监督者线程可以通过GET指令获得全局共识寄存器($GC)42中的值。注意,同步逻辑36等待,直至在更新任何全局共识寄存器($GC)42中的值之前从所有瓦片4接收到sync_req,否则使得不正确的值可以由未完成其计算阶段52部分并因此仍在运行的瓦片上的监督者线程访问。
全局聚合的退出状态$GC使程序能够确定在多个不同瓦片4上运行的程序的各部分的整体结果,而不必单独检查每个单独的瓦片上的每个单独的工作者线程的状态。它可以用于程序员期望的任何目的。例如,在图11所示的示例中,其中全局聚合是布林AND,这意味着任何输入为0都会导致聚合为0,但如果所有输入为1,则聚合为1。即,如果1用于表示真或成功的结果,这意味着如果任何瓦片4的任何本地退出状态是假的或不成功的,则全局聚合状态也将是假的或表示不成功的结果。例如,这可以用于确定在所有瓦片上运行的代码的部分是否都满足预定条件。因此,程序可以查询单个寄存器(在实施例中是单个位)来询问“有没有出现问题?有或没有?”或“图形中的所有节点是否都达到了可接收误差级别?是或否?”,而不需要检查每个单独瓦片上的单独工作者线程的单独状态(再次,在实施例中,除了通过退出状态寄存器38和42之外,监督者实际上不能查询工作者的状态)。换句话说,EXIT和SYNC指令每个将多个单独的退出状态减少成单个组合状态。
在一个示例性用例中,一个或多个瓦片上的监督者可以向主处理器报告全局聚合是否指示了假的或不成功的结果。作为另一示例,程序可以根据全局退出状态执行分支决策。例如,程序检查全局聚合退出状态$GC,并根据此确定是否继续循环或是否在其他地方分支。如果全局退出状态$GC仍然是假的或不成功的,则程序继续迭代程序的相同的第一部分,但是,一旦全局退出状态$GC是真的或成功的,程序则分支到程序的不同的第二部分。分支决策可以在每个监督者线程中单独实现,或者由担任主管(master)角色并指示其他瓦片上的其他从属(slave)监督者的监督者之一实现(主管角色在软件中配置)。
注意,图11中所示的聚合逻辑40仅是一个示例。在另一个等效示例中,AND可以用OR替换,并且可以反转0和1的解释(0→真,1→假)。等效地,如果AND门被替换为OR门,但是退出状态的解释和重置值未被反转,那么$GC中的聚合状态将记录有没有任何(而不是全部)瓦片以本地聚合状态1退出。在另一个示例中,全局退出状态$GC可以包括表示三元状态的两个位:所有瓦片的本地聚合退出状态$LC为状态1,所有瓦片的本地聚合退出状态$LC为状态0,或者瓦片的本地聚合退出状态$LC是混合的。作为另一个更复杂的示例,瓦片4的本地退出状态和全局聚合退出状态可以各自包括两个或更多个位,其可以用于例如表示瓦片4的结果的置信度。例如,每个单独的瓦片的本地聚合退出状态$LC可以表示相应瓦片4的结果中的置信度的统计概率测量,并且全局聚合逻辑40可以用更复杂的电路替代,用于执行硬件中的单独置信水平的统计聚合。
如前所述,在实施例中,芯片2的多个实例可以连接在一起以形成跨越多个芯片2的甚至更大的瓦片4阵列。这在图12中说明。一些或全部芯片2可以在同一IC封装上实现,或者一些或全部芯片2可以在不同的IC封装上实现。芯片2通过外部互连72(通过图7中所示的外部链路8)连接在一起。这可以连接在同一IC封装、同一卡上的不同IC封装和/或不同卡上的不同IC封装上的芯片2之间。除了提供用于在不同芯片上的瓦片4之间交换数据的管道之外,外部互连72还提供硬件支持,用于在不同芯片2上的瓦片4之间执行屏障同步,并且聚合不同芯片2上的瓦片4的本地退出状态。
在实施例中,SYNC指令可以采用其模式操作数至少一个另外的可能值来指定外部(即芯片间)同步:SYNC zone_n,其中zone_n表示外部同步区域。外部互连72包括与关于图11描述的硬件逻辑类似的硬件逻辑,但是在外部芯片间的规模上。当使用在其操作数中指定的两个或更多个芯片2的外部同步区域执行SYNC指令时,这使得外部互连72中的逻辑以与关于内部互连34所描述的方式类似的方式操作,但是跨越指定的同步区域中的多个不同芯片2上的瓦片4操作。
也就是说,响应于其操作数指定外部同步的SYNC指令的操作码,执行级18使外部互连72中的专用硬件同步逻辑76被发信号通知由操作数指定的同步水平。响应于此,外部互连中的同步逻辑76进行同步请求(sync_req)和确认(sync_ack)的过程,其只会向所有外部瓦片4(例如系统中的所有芯片2的所有瓦片)执行以进行全局同步。即,一旦从来自芯片的所有瓦片4接收到同步请求(sync_req),外部互连72中的同步逻辑76才会将同步确认信号(sync_ack)传回跨越芯片2的瓦片4。所有那些芯片2的所有瓦片4将自动暂停,直至来自外部同步逻辑76的同步确认(sync_ack)返回。
因此,响应于外部SYNC,暂停监督者指令发出,直至外部同步区域中的所有芯片2上的所有瓦片4已完成其计算阶段52并提交了同步请求。此外,外部互连72中的逻辑聚合跨越讨论中的区域中的多个芯片2的所有这些瓦片4的本地退出状态。一旦外部同步区域中的所有瓦片4都发出了同步请求,外部互连72便向瓦片4发信号传回同步确认,并将跨芯片全局聚合退出状态存储到讨论中的的所有瓦片4的全局共识寄存器($GC)42中。响应于同步确认,区域中的所有芯片2上的瓦片4恢复监督者的指令发布。
注意,在实施例中,互连72的功能可以在芯片2中实现,即逻辑可以分布在芯片2之间,使得仅需要芯片之间的有线连接(图11和12是示意性的)。
所提及的同步区域内的所有瓦片4都被编程为通过其相应的SYNC指令的模式操作数指示相同的同步区域。在实施例中,外部互连72外周中的同步逻辑76配置为使得如果不是编程误差或其他误差(例如存储器奇偶误差)的情况,则一些或所有瓦片4不会接收到确认,因此系统将在下一个外部屏障停止,从而允许管理外部CPU(例如主机)进行干预以进行调试系统恢复。然而,优选地,编译器配置为确保相同区域的瓦片全部在相关时间都指示相同正确的同步区域。同步逻辑还可以配置为在由不同SYNC指令指示的模式不一致的情况下采取其他替代或附加措施,例如向外部CPU引发异常和/或通过某些其他机制停止执行。
如图14所示,在实施例中,SYNC指令的模式可用于指定多个不同的可能外部同步区域中的一个,例如zone_1或zone_2。在实施例中,这些对应于不同的层级。也就是说,每个较高层级92(例如区域2)包含至少一个较低层级的两个或更多个区域91A、91B。在实施例中,仅存在两个层级,但不排除更多数量的嵌套级别。如果SYNC指令的操作数设置为外部同步区域(SYNC zone_1)的较低层级,则相对于仅在执行SYNC的瓦片的相同较低层外部同步区域中的芯片2上的瓦片4执行上述同步和聚合操作。另一方面,如果SYNC指令的操作数设置为外部同步区域(SYNC zone_2)的较高层级,则相对于在与执行SYNC的瓦片相同的较高层外部同步区域中的所有芯片2上的所有瓦片4自动执行上述同步和聚合操作。
响应于具有外部同步区作为操作数的SYNC指令的操作码,执行级18使外部互连72中的专用硬件同步逻辑76被发信号通知由操作数指定的同步水平。响应于此,外部互连中的同步逻辑76进行同步请求(sync_req)和确认(sync_ack)的过程,其仅在被信号通知的组的瓦片4之间执行。即,只有从被信号通知的同步域中的所有瓦片4接收到同步请求(sync_req)之后,外部互连72中的同步逻辑76才将同步确认信号(sync_ack)传回到该域中的瓦片(但是如果不是全局同步,则不会等待该区域外的任何其他瓦片)。
注意在其他实施例中,可以由SYNC指令的模式指定的同步区域本质上不限于分层。通常,可以为SYNC指令提供与任何类型的分组相对应的模式。例如,模式可以能够仅从非分层组中进行选择,或者从分层组和一个或多个非分层组的混合中进行选择(其中至少一个组不完全嵌套在另一个组中)。这有利地使程序员或编译器在最小代码密度下灵活地在相互异步的内部同步组中的不同布局之间进行选择。
在图18中示出了用于在所选同步组91和92之间实现同步的示例性机制。如图所示,外部互连72中的外部同步逻辑76包括与每个相应芯片2相关联的相应同步块95。每个同步块95包括相应的门逻辑和相应的同步聚合器。门逻辑包括硬件电路,其以菊花链拓扑将芯片2连接在一起以实现同步和退出状态聚合,并且根据以下所述传播同步和退出状态信息。同步聚合器包括配置成根据以下所述聚合同步请求(sync_req)和退出状态的硬件电路。
与每个芯片2相关联的相应同步块95连接到其相应的芯片2,使得它可以检测由该芯片2引发的同步请求(Sync_req)和该芯片2的退出状态,并且使得它可以将同步确认(Sync_ack)和全局退出状态送回相应的芯片2。与每个芯片2相关联的相应同步块95还通过包括四条同步线96的线束的外部同步接口连接到至少另一个芯片2的同步块95,其细节将在后面详细讨论。这可以是芯片到芯片链路8之一的一部分。在不同卡上的芯片之间的链路的情况下,接口8可以例如包括PCI接口,并且可以通过重新使用PCI接口的四条线来实现四条同步线96。一些芯片的同步块95连接到两个相邻芯片2的同步块,每个连接通过四条同步线96的相应实例。这样,芯片2可以通过它们的同步块95以一个或多个菊花链连接。这使得同步请求、同步确认、退出状态的运行聚合和全局退出状态能够在链中上和下传播。
在操作中,对于每个同步组91和92,与该组中的一个芯片2相关联的同步块95被设置为用于同步和退出状态聚合目的的主管,该组中其余的同步块则是用于这种目的的从属。每个从属同步块95配置有它为了每个同步组91和92传播同步请求、同步确认和退出状态所需的方向(例如,左或右)(即,朝向主管的方向)。在实施例中,这些设置可由软件配置,例如在初始配置阶段中配置,之后该配置在整个系统的后续操作中一直保持不变。例如,这可以由主处理器配置。替代地,不排除配置可以是硬连线的。无论是哪种方法,不同的同步组91和92可以具有不同的主管,并且通常可以使给定的芯片2(或者是其同步块95)成为一个组的主管,而不是其中它是成员的另一个组的主管,或者成为多个组的主管。
例如,作为说明,考虑图18的示例性场景。例如,芯片2IV的同步块95被设置为给定同步组91A的主管。现在,考虑芯片2链中的第一芯片2I,其通过它们的同步块95和线96最终连接到芯片2IV。当第一芯片2I上的当前计算阶段的所有工作者线程都执行了EXIT指令,而且所有(参与)瓦片4上的监督者都执行了指定同步组91A的SYNC指令,则第一芯片2I发信号通知其相应的相关同步块95其同步准备度。芯片2I还向其相应的同步块95输出其芯片级聚合退出状态(相应芯片2I上的所有参与瓦片上的所有现有工作者的聚合)。作为响应,第一芯片2I的同步块95将同步请求(Sync_req)传播到链中的下一个芯片2II的同步块95。它还将第一芯片2I的退出状态传播到该下一个芯片2II的同步块95。该第二芯片2II的同步块95等待,直至其自己的(参与)瓦片4的监督者全部都执行了指定同步组91A的SYNC指令,导致第二芯片2II发信号通知其同步准备度。然后,第二芯片的同步块95才会将同步请求传播给链中的下一个(第三)芯片2III的同步块95,并且还传播第一芯片2I与第二芯片2II的退出状态的运行聚合。如果第二芯片2II在第一芯片2I之前已经准备好同步,则在将同步请求传播到第三芯片2III的同步块95之前,第二芯片2II的同步块95将等待第一芯片2I以信号发出同步请求。第三芯片2III的同步块95以类似的方式运行,这次聚合来自第二芯片2II的运行聚合退出状态以获得下一个运行聚合以向前传递等。这继续朝向主管同步块,在这个示例中是芯片2IV的主管同步块。
然后,主管的同步块95基于其接收的运行聚合和其自己的芯片2IV的退出状态来确定所有退出状态的全局聚合。它将此全局聚合连同同步确认(Sync_ack)沿着链传播回到所有芯片2。
如果主管是沿着链的一部分,而不是如上例中那样位于一端,那么同步和退出状态信息在主管的任一侧的相反方向上传播,两侧朝向主管。在这样情况下,一旦接收到来自两侧的同步请求,主管才会发出同步确认和全局退出状态。例如,考虑芯片2III是组92的主管的情况。此外,在实施例中,一些芯片2的同步块95可以连接到三个或更多个其他芯片2的同步块,从而创建朝向主管的链的多个分支。然后,每个链如上述运行,并且一旦接收到来自所有链的同步请求,主管才会发出同步确认和全局退出状态。和/或,一个或多个芯片2可以连接到外部资源,例如主处理器、网卡、存储装置或FPGA。
在实施例中,以下述方式实现同步信息和退出状态信息的信号发送。每对芯片2之间的四条同步线96的线束包括两对线:第一对96_0和第二对96_1。每对包括同步请求线的实例和同步确认线的实例。为了以信号发出值0的运行聚合退出状态,发送芯片2的同步块95在以信号发出同步请求(sync_req)时使用第一线对96_0的同步请求线,或者,为了以信号发出值1的运行聚合,同步块95在以信号发出同步请求时使用第二线对96_1的同步请求线。为了以信号发出值0的全局聚合退出状态,发送芯片2的同步块95在以信号发出同步确认(sync_ack)时使用第一线对96_0的同步确认线,或者,为了以信号发出值1的全局聚合,同步块95在以信号发出同步确认时使用第二线对96_1的同步请求线。
注意,以上仅是用于传播同步信息和退出状态信息的机制。实际数据(内容)由另一个信道发送,例如稍后参考图19所讨论。此外,应当理解,这仅是一个示例性实现,并且一旦给出了本文公开的功能的说明,技术人员将能够构建用于实现所公开的同步和聚合功能的其他电路。例如,同步逻辑(图18中的95)可以使用通过互连34、72承载的分组作为专用布线的替代。例如,sync_req和/或sync_ack可以各自以一个或多个分组的形式发送。
如前所述,并非所有瓦片4都必须参与同步。在实施例中,如所讨论的,参与瓦片组可以由同步指令的模式操作数设置。但是,这仅允许选择预定义的瓦片组。在此认识到,还期望能够逐个瓦片地选择同步参与。因此,在实施例中,提供了替代或附加的机制,用于选择哪些单独的瓦片4参与屏障同步。
特别地,这是通过在处理器指令集中提供附加类型的指令来实现的,其由一个或一些瓦片4代替SYNC指令执行。该指令可以称为“弃权”指令或“SANS”(开始自动非参与同步)指令。在实施例中,SANS被保留由监督者线程使用。在实施例中,它采用单个立即操作数:
SANS n_barriers
SANS指令的行为是使得执行它的瓦片放弃当前的屏障同步,但不会阻延等待指定同步组中所有瓦片进行SYNC的其他瓦片。实际上它说“在没有我的情况下继续”。当执行SANS指令时,SANS指令的操作码触发执行级18的执行单元中的逻辑向内部和/或外部同步控制器36和76(取决于模式)发送同步请求信号(Sync_req)的实例。在实施例中,由SANS生成的同步请求适用于包含执行SANS的瓦片4的任何同步组91和92。即,不管该本地芯片中的瓦片4接下来使用什么同步组(它们必须同意该同步组),来自执行了SANS的那些的sync_req将总是有效的。
因此,从同步控制器逻辑36和76和同步组中的其他瓦片4的角度来看,执行SANS指令的瓦片4看起来与执行SYNC指令的瓦片4完全相同,并且不会阻延同步屏障和从同步逻辑36和76发送同步确认信号(Sync_ack)。即,执行SANS而不是SYNC的瓦片4不会阻延或停止涉及其中讨论中的瓦片是成员的任何同步组的任何其他瓦片4。由SANS执行的任何握手对所有同步组91和92都有效。
然而,与SYNC指令不同,SANS指令不会导致监督者指令发出暂停等待来自同步逻辑36和76的同步确认信号(Sync_ack)。相反,相应的瓦片可以继续不受在执行SYNC指令的其他瓦片4之间进行的当前屏障同步所禁止。因此,通过模仿同步但不等待,SANS指令允许其瓦片4继续处理一个或多个任务,同时仍允许其他瓦片4同步。
操作数n_barriers指定“已发布”同步的数量,即瓦片不会参与未来同步点(屏障)的数量。替代地,不排除在其他实施例中SANS指令不采用该操作数,而是SANS指令的每次执行仅引起一次性弃权。
通过SANS指令,某些瓦片4可以负责执行BSP操作调度的直接范围之外的任务。例如,可能期望在芯片2内分配少量的瓦片4以启动(和处理)到主机存储器和/或从主机存储器的数据传输,同时大多数瓦片4被主要计算任务占用。在这些情况下,那些不直接参与主要计算的瓦片4可以使用自动非参与同步特征(SANS)声明它们与同步机制有效地断开连接了一段时间。当使用该特征时,瓦片4不需要主动(即通过执行SYNC指令)发信号通知其对同步的准备度(对于任何同步区域),并且在实施例中对聚合的退出状态作出零贡献。
SANS指令开始或延伸一段时间,在该时段期间执行它的瓦片4将放弃主动参与瓦片间同步(或者,如果它们也参与同步,则放弃参与与其他外部资源的同步)。在此时段期间,该瓦片4可以在所有区域内自动发信号通知其对同步的准备度,并且在在实施例中还对全局聚合共识$GC作出零贡献。该时间段可以表示为无符号立即操作数(n_barriers),其指示该瓦片4将自动发信号通知多少个附加的未来同步点。在执行SANS时,由其操作数指定的值n_barriers被放置在相应的瓦片4的倒计时寄存器SANS_DCOUNT中。这是一段架构状态,用于跟踪应该作出多少个附加的未来sync_req。如果自动非参与同步机制当前处于非活动状态,则立即执行第一准备度断言(同步请求sync_req)。一旦完成了先前的同步,将在背景发生后续断言(即,同步确认sync_ack的断言之后)。如果自动非参与同步机制当前处理活动状态,则倒计时计数器寄存器SANS_DCOUNT将以自动方式更新,使得没有同步确认信号会不被考虑。自动非参与同步机制在专用硬件逻辑中实现,优选地在每个瓦片4中实现,尽管在其他实施例中,不排除它可以对于瓦片组或所有瓦片集中实现。
关于退出状态行为,实际上取决于实现存在许多可能性。在实施例中,为了获得全局聚合的退出状态,同步逻辑36和76仅聚合来自执行SYNC指令的指定同步组中的那些瓦片4的本地退出状态,而不是那些执行SANS指令的(弃权瓦片)。替代地,通过聚合来自执行SYNC的同步组中和执行SANS的所有瓦片4(参与和弃权瓦片4)的本地退出状态,获得全局聚合的退出状态。在后一种情况下,由弃权瓦片4输出以用于全局聚合的本地退出状态输出可以是在执行SANS时该瓦片的工作者的实际本地聚合退出状态,正如SYNC指令一样(参见本地共识寄存器$LC 38的描述)。替代地,由弃权瓦片4输出的本地“退出状态”可以是默认值,例如在退出状态是二进制的实施例中是真值(例如逻辑1)。在任何假的本地退出状态导致全局退出状态是假的实施例中,这防止了弃权瓦片4干扰全局退出状态。
关于全局退出状态的返回,存在两种可能性,不论弃权瓦片是否提交本地退出状态以用于生成全局聚合,并且不论该值是实际值还是默认值。也就是说,在一个实现中,由互连34和72中的同步逻辑36和76产生的全局聚合退出状态仅存储在执行SYNC指令的参与瓦片4(而不是执行SANS指令的弃权瓦片4)的全局共识寄存器$GC 42中。在实施例中,将默认值存储在执行SANS的瓦片4(弃权瓦片)的全局共识寄存器$GC 42中。例如,在二进制全局退出状态的情况下,该默认值可以是真的,如逻辑1。然而,在替代的实现中,由同步逻辑36和76产生的实际全局聚合存储在执行SYNC指令的参与瓦片4和执行SANS指令的弃权瓦片4两者的全局共识寄存器$GC 42中。因此,组中的所有瓦片仍然可以访问全局聚合的退出状态。
图13示出了涉及内部(芯片上)和外部(芯片间)同步的示例性BSP程序流程。如图所示,流程包括内部交换50(同一芯片2上的瓦片4之间的数据的交换)和外部交换50’(不同芯片2上的瓦片4之间数据的交换)。
如图13所示,根据本公开,公开了将内部BSP超步(包括同一芯片2上瓦片4之间数据的内部交换50)与外部同步和交换(不同芯片2上的瓦片4之间数据的外部交换50′)保持分开。
保持内部和外部BSP分离的一原因是,在实施例中,通过内部(芯片上)互连34的数据交换可以是时间确定性的,如将参考图16和17更详细地讨论的;而通过外部互连72的数据交换可以是非时间确定性的,如由于需要重传消息的有损物理信道。通常,外部互连可以是时间确定性的,但是可能难以这样做,或者可能比非时间确定性互连具有太少的优势,因此可能不会在实践中实现。
在这样的实施例中,期望保持内部通信时间确定性,使得它们可以在内部互连34中不需要队列的情况下进行,因为队列将在互连34中引起不期望的硅足迹。然而,在实施例中,外部通信可能不是时间确定性的。如果每个BSP超步都是全局交换,那么时间决定性将被非时间确定性外部交换所“污染”。这是因为一旦给定的瓦片或线程执行了外部交换,则时间确定性将丢失,并且直到下一个屏障同步才能恢复。
如稍后将更详细讨论的,可以由编译器实现没有队列的通信,该编译器知道每个瓦片4发送其数据的时间,并且还知道发送瓦片和接收瓦片之间的芯片上瓦片间延迟。有了这预定的知识,编译器便可以编程接收瓦片以在发送瓦片发送相关数据之后的特定已知时间(即发送时间加上瓦片间延迟)监听发送瓦片的地址。编译器知道传输的时间,因为编译器本身选择每个线程中的哪一点包括发送指令。此外,对于芯片上通信,瓦片间延迟是给定的一对发送瓦片和接收瓦片4的固定可知值。编译器可以从发送瓦片和接收瓦片的不同可能组合的瓦片间延迟的查找表中知道这一点。然后,编译器可以在发送指令之后的相应周期数中包括相应的接收指令,以监听发送器的地址。
将BSP分成内部和外部阶段的另一个原因是,跨多个芯片的全局同步和交换将比仅仅芯片上同步和交换更“昂贵”,总成本是上述内部同步加上全局聚合所需的额外延迟。此外,尽管在实施例中,同步信令本身不需要流控制,因此相对较快,但是外部同步同步到外部交换中。与内部交换相比,外部交换具有更长的延迟和更大的不确定性。
首先,芯片间的可用数据带宽通常比芯片上小得多。这是因为芯片间布线密度受到封装连接(焊球或焊盘)密度的限制,该密度远低于芯片上可用的布线密度。因此,即使传输延迟相似,在芯片之间传输固定量的数据也需要比芯片上更长的时间。此外,外部交换没那么本地:线进一步延伸,因此更具电容性,更容易受到噪声的影响。这反过来可能导致损失,因此需要流量控制机制,其提供物理层的重传,导致吞吐量降低(以及时间确定性的损失,见下文)。此外,除了更大的物理距离之外,芯片之间传输的信令和数据常必须穿过更大量的逻辑(例如SerDes(串行器-解串器)),以及流控制机制,相对于内部传送,所有这些都添加了额外的延迟。例如,发明人已经确定,通过使用传统技术,外部屏障同步过程可以预期是比内部同步长十倍的量级,并且可以占程序运行时间的5至10%。使用本文公开的硬件同步机制,这可以减少到慢三倍的量级,但仍然比内部同步慢。此外,外部数据交换将受一些因素影响,例如由于诸如由于噪声引起的物理层处的丢失和重传和/或芯片之间的序列化和反序列化等。
在其他变体中,芯片之间的互连在物理和/或链路层可以是无损的,但是由于不同源和目的地之间的网络层流的争用导致队列过度流动并且分组丢失,因此在较高的网络实际上是有损的。这就是以太网的工作原理,并且预期替代的非时间确定性互连可以使用以太网。还要注意:情况是,不论无损还是有损,任何交换过程实际上都可能遭受不可恢复的误差(例如由于α辐射),这导致总交换失败,这无法通过任何硬件机制(例如链路层)恢复。在时间确定性情况和非时间确定性情况下,在实施例中,系统可以检测到但不纠正这样的误差。一旦检测到,就可以向主机发信号通知误差,主机的策略可能是要求周期性地检查BSP应用状态,并且在这样致命的硬件误差的情况下,将应用的状态回滚到最后一个检查点。通过这种机制,即使用于实现数据交换的有损机制,也可以在某些性能成本下对用户显得无损。
对于上述原因或其他原因中的任何一个或多个,期望将BSP过程分成时间确定性级和非时间确定性级,从而防止时间确定性域内的至少一些时间确定性交换的时间确定性受到这些域之间的非时间确定性交换污染。
因此,程序可以布置为执行一系列同步、交换阶段和计算阶段,按照以下顺序:(i)第一计算阶段,然后(ii)内部屏障同步30,然后(iii)内部交换阶段50,然后(iv)外部屏障同步80,然后(v)外部交换阶段50’。参见图13中的芯片2II。在内部交换阶段50之后,施加外部屏障80,使得程序仅在内部交换50之后继续到外部交换50’。还要注意,如参照图12中的芯片2I所示,可选地,可以在内部交换(iii)和外部屏障(iv)之间包括计算阶段。
这整个顺序由程序执行(例如由编译器生成成这样)。在实施例中,程序被编程为通过先前描述的SYNC指令以这种方式起作用。内部同步和交换不延伸到另一芯片2上的任何瓦片或其他实体。可以在一系列整体迭代中重复序列(i)-(v)(iii和iv之间具有上述可选的计算阶段)。每次迭代,在外部同步和交换之前,可能存在内部计算、同步和交换(i)-(iii)的多个实例。即,(i)-(iii)的多个实例(保留该顺序)(即多个内部BSP超步)可以在(iv)-(v)(即外部同步和交换)之前实现。还要注意,任何瓦片4可以各自与其他瓦片4并行地执行其自己的同步和交换(ii)-(iii)的实例。
因此,每个总BSP周期(i)-(v),确保是周期(ii)-(iii)的至少一部分,其中同步被约束仅在内部执行,即仅在芯片上执行。
注意,在外部交换50期间,通信不仅限于外部:一些瓦片可以仅执行内部交换,一些可以仅执行外部交换,并且一些可以执行两者的混合。然而,由于在一些实施例中在外部互连72中发生的时间确定性的丢失,在这些实施例中,一旦瓦片已经执行了外部通信,它就不能再次执行内部通信,直至下一次同步(参见下文对优选芯片上通信机制的解释,其依赖于对消息时间和瓦片间延迟的预定知识)。
在一些实施例中,也如图13所示,一些瓦片4可以在计算阶段期间执行本地输入/输出,例如它们可以与主机交换数据。
还要注意,如图13所示,任何或所有瓦片在任何给定的BSP超步中具有空计算阶段52或空交换阶段50通常是可能的。
在实施例中,可以使用不同级别的同步区域91和92来将一些外部同步和交换操作的程度限制于系统中的芯片2的子组,并且限制需要完整的全局同步和交换的惩罚的次数。即,整个周期可以包括:(i)第一计算阶段,然后(ii)内部屏障同步,然后(iii)内部交换阶段,然后(iv)仅第一较低级同步区域91的瓦片内的外部屏障同步80;然后(v)仅第一同步区域91的芯片之间的外部交换阶段;然后(vi)跨越第二较高级别同步区域92的外部屏障同步;然后(vii)第二级别同步区域92的芯片之间的外部交换阶段。在第一级别外部交换阶段之后施加第二级别外部交换阶段的外部屏障,使得程序在第一级别交换阶段之后才会继续到第二级别交换。可以通过SYNC指令来编程此行为,该SYNC指令由在其操作数中的不同级别的外部模式所限定。
在实施例中,同步区域最高层级包含阵列6中的所有芯片2上的所有瓦片4,即它用于执行全局同步。当使用多个较低级别区域时,可以在每个区域内的芯片2上的瓦片4组内部施加BSP,但是每个区域可以相对于彼此异步操作,直至执行全局同步。
注意:对于较低级别的外部同步和交换(iv)-(v),任何较低级别区域91A和91B可以各自与其他较低级别区域并行地执行其自己较低级别外部交换的实例。和/或,在一些情况下,(i)-(v)的多个实例可以在(vi)-(vii)之前实现,即,在外部同步和交换之前可能存在较低级别外部BSP超步的多个实例。此外,该方案可以延伸到三个或更多层级的同步区域。
以下描述用于进行芯片上通信(内部交换)而不需要队列的示例性机制。参考图16。
在每个芯片2上,芯片2包括控制芯片活动的时间的相应时钟。该时钟连接到芯片的所有电路和部件。芯片2还包括内部时间确定性互连或“切换结构”34,其通过连接线集与所有瓦片和链路连接。在实施例中,互连34可以是无状态的,因为它没有软件可读的状态。每个连接线集被端对端固定。线是流水线的。在该实施例中,每个集包括三十二条线。每个集可以携带由一个或多个32位数据组成的分组,每个时钟周期传输一个数据。但是在此注意,单词“分组”(packet)表明表示数据(在本文中有时被称为数据项)的位集,可能具有一个或多个有效位。“分组”不具有报头或任何形式的目的地标识符(其允许预期接收者被唯一识别),它们也不具有分组结束信息。相反,它们每个都表示输入到瓦片或从瓦片输出的数值。每个瓦片都有自己的本地存储器(稍后描述)。芯片没有共享的存储器。切换结构仅构成连接线的交叉集,并且不保存任何状态。同一芯片上的瓦片之间的数据交换是在如本文所述的时间确定性基础上实施的。流水线连接线包括一系列临时存储,例如在将数据释放到下一个存储之前将数据保存一个时钟周期的锁存器或触发器。沿着线行进的时间由这些临时存储来确定,每个临时存储在任意两点之间的路径中用完一个时钟周期。
每个瓦片4向内部互连34中的同步控制器36指示其同步状态。一旦确定了每个瓦片4准确好发送数据,则同步过程30使系统进入交换阶段50。注意每个瓦片都会以不同但已知的时间延迟遇到sync-ack。监督者程序根据需要插入额外的周期延迟,使得每个瓦片在完全相同的周期上开始其交换阶段。在这个交换阶段中,数据值在瓦片之间(实际上以存储器到存储器数据移动在瓦片的存储器之间)移动。在交换阶段中,不存在计算,因此没有并发危险(或者至少没有依赖于要从另一瓦片4接收的数据的计算)。在交换阶段中,每个数据沿着连接线移动,每个数据在连接线上将瓦片从发送瓦片退出到接收瓦片。在每个时钟周期,数据以流水线方式沿着路径(存储到存储)移动一定距离。当从瓦片发出数据时,不会发出标识接收瓦片的报头。相反,接收瓦片知道它将在某个时间预期来自某个发送瓦片的数据。因此,本文所述的计算机是时间确定性的。
每个瓦片4运行程序的一部分,该程序由程序员或编译器练习分配给它,其中程序员或编译器函数知晓特定瓦片在某个时间会发送什么以及接收瓦片在某个时间需要接收什么。为了实现这一点,将SEND指令包括由每个瓦片上的处理器执行的本地程序中,其中SEND指令的执行时间相对于计算机中的其他瓦片上执行的其他指令的时间是预先确定的。
每个瓦片4与其自己的多路复用器210相关联。每个多路复用器具有与芯片上的瓦片4至少一样多的输入,每个输入连接到切换结构34。切换结构的交叉线连接到来自每个瓦片的连接线218的数据输出集(广播交换总线)。为了便于说明,并非所有交叉线都在图16中示出。一个交叉线集被标记为140x,以指示它是多个交叉线集之一。
当将多路复用器210切换到标记为220x的输入时,则将会连接到交叉线140x并因此连接到发送(发出)瓦片4T的数据总线218T。如果多路复用器被控制为在某个时间切换到该输入,则在连接到交叉线140x的总线230上接收到的数据将在某个时间出现在多路复用器210的输出。它将在此之后的一定延迟到达接收瓦片4R,该延迟取决于多路复用器210与接收瓦片4R的距离。由于多路复用器倾向布置为接近切换结构,因此从瓦片到多路复用器的延迟可以取决于接收瓦片4R的位置而变化。
为了实现切换,在瓦片4上执行的本地程序包括切换控制指令(PUTi),其使得多路复用器控制信号214被发出以控制与该瓦片相关联的多路复用器210以在预期在瓦片接收特定数据的时间之前的某个时间切换其输入。在交换阶段中,切换多路复用器并使用切换结构在瓦片之间交换分组(数据)。从该说明可以看出,内部互连34没有状态,并且不需要队列,每个数据的移动由每个多路复用器的输入所连接的特定交叉线预先确定。
在交换阶段中,允许所有瓦片4与其同步组内的所有其他瓦片通信。每个瓦片4具有对其自己的唯一输入多路复用器210的控制。因此,可以从芯片2中任何其他瓦片(或者从外部交换中的外部连接链路之一)选择传入业务。多路复用器210还可以被设置为在任何给定的交换阶段接收空输入,即没有输入。
每个瓦片4具有三个接口:“exin”接口224,其将数据从切换结构34传递到瓦片4;“exout”接口226,其通过广播交换总线218将数据从瓦片传递到切换结构;以及“exmux”接口228,其将控制多路复用器信号214(mux-select)从瓦片4传递到多路复用器210。
为了确保每个单独的瓦片在适当的时间执行SEND指令和切换控制指令以发送和接收正确的数据,将各个程序分配给计算机中的单独瓦片的程序员或编译器需要满足到交换调度要求。该函数由交换调度器执行,优选地在编译时间执行,其需要知道以下参数。
参数I:每个瓦片的相对SYNC确认延迟,RSAK(TID发送瓦片和TID接收瓦片)。这是发送和接收瓦片的瓦片ID(TID)的函数,其保存在TILE_ID寄存器中。这是总是大于或等于0的周期数,其指示每个瓦片相对于所有其他瓦片何时从同步控制器36接收sync ack信号。这可以从瓦片ID计算出,注意,瓦片ID指示该瓦片的芯片上的特定位置,并且因此反映了物理距离。换句话说,sync ack延迟被均衡。如果发送瓦片4T较接近同步控制器36,而接收瓦片4R较远,结果是发送瓦片4T的同步确认延迟比接收瓦片4R更短,反之亦然。对于同步确认延迟,特定值将与每个瓦片相关联。这些值可以保存在例如延迟表中,或者可以每个基于瓦片ID在运行中被计算。
参数II:交换多路复用器控制环路延迟MXP(接收瓦片的TID)。这是发出改变瓦片的输入多路复用器选择的指令(PUTi MUXptr)与同一瓦片可以发出存储在存储器中的交换数据的(假设的)加载指令作为新的多路复用器选择的结果的最早点之间的周期数。这包括控制信号从接收瓦片4R的exmux接口228R到多路复用器210R的延迟以及从多路复用器的输出到数据输入exin接口224的线的长度。
参数III:瓦片到瓦片交换延迟TT(发送瓦片的TID、接收瓦片的TID)。这是在一个瓦片上发出的SEND指令与接收瓦片可以发出指向其自己的存储器中的发送值的(假设的)加载指令的最早点之间的周期数。这可以通过访问表格或通过在运行中计算,从发送瓦片和接收瓦片的TID计算得出。该延迟包括数据从发射瓦片4T从其exout接口226T沿其交换总线218T行进到切换结构14,然后通过接收瓦片4R的输入多路复用器210R行进到接收瓦片的exin接口224R所花费的时间。
参数IV:交换业务存储器指针更新延迟MMP()。这是发出改变瓦片的交换输入业务存储器指针232的指令(PUTi MEMptr)与该同一瓦片可以发出存储在存储器中的交换数据的(假设的)加载指令作为新指针的结果的最早点之间的周期数。这是小的固定周期数。存储器指针232充当指向数据存储器202的指针,并且指示来自exin接口224的传入数据要被存储的位置。
这些参数一起给出了从发送瓦片4T发送数据与由接收瓦片4R接该数据之间将经历的总瓦片间延迟。上面的特定交换机制和参数仅作为示例给出。不同的交换机制的延迟的确切组成可能有所不同,但只要交换保持时间确定性,程序员或编译器就可以知道它,因此无需队列就可以进行交换。
图17更深入地示出了示例性交换时间。左侧示出了从0-30运行的芯片时钟周期。发送瓦片4T上的动作发生在时钟周期0和9之间,从发出发送指令(SEND E0)开始。在时钟周期10到24,数据流水式穿过切换结构34。
查看IPU时钟周期11中的接收瓦片4R,执行改变瓦片输入多路复用器选择的PUTi指令。在周期18中,执行存储器指针指令,在时钟周期25中允许加载指令。在发送瓦片4T上,周期1到9是在发出SEND指令和在exout接口上显示该数据之间的内部瓦片延迟。E1、E2等表示来自较前的SEND指令的数据。在交换结构34中,时钟周期10至24标记为“交换”。在每个周期中,数据沿着流水线(在临时存储之间)移动“一步”。接收瓦片4R上的周期25至29表示在exin接口接收数据和将其编码到存储器中之间的延迟。
简单来说,如果接收瓦片4R的处理器想要作用于作为发送瓦片4T上的过程的输出的数据,则发送瓦片4T需要执行在某个时间(例如图17的时钟周期0)发送的SEND指令,并且接收瓦片4R需要在与在发送瓦片上执行SEND指令相关的某个时间前执行切换控制指令PUTi EXCH MXptr(如在时钟周期11中)。这将确保数据及时到达接收瓦片4R以被加载,以在接收瓦片处执行的小代码中使用。
注意,接收瓦片处的接收过程不需要像指令PUTi MEMptr那样涉及设置存储器指针。相反,存储器指针232在exin接口224处接收到每个数据之后自动递增。然后将接收到的数据加载到下一个可用存储器位置中。然而,改变存储器指针的能力使得接收瓦片能够更改写入数据的存储器位置。所有这些都可以由编译器或程序员确定,所述编译器或程序员将单独程序写入单独瓦片,以便它们正确地通信。这导致内部交换(芯片上的瓦片间交换)的时间完全是时间确定性的。交换调度器可以使用这种时间确定性来高度优化交换序列。
图19示出了用于芯片外通信(外部交换)的示例性机制。该机制是非时间确定性的。该机制在外部互连72中的专用硬件逻辑中实现。数据以分组的形式通过外部互连72发送。与通过内部互连发送的分组不同,这些分组具有报头:由于传输的顺序可以改变,它们要求目的地地址存在于分组报头中。而且,在实施例中,外部互连72采用网络的形式,因此需要用于路由目的的附加信息。
在物理层,互连机制是有损的,但在事务层(transaction layer),由于链路层的架构,该机制不是有损的:如果分组未被确认,则它将由互连72中的硬件自动重发。然而,在数据链路层丢失和重发的可能性意味着通过外部互连传送数据分组不是时间确定性的。此外,给定交换的所有分组可以一起到达或在时间上以任何顺序分开,因此外部互连需要流控制和排队。此外,互连可以使用时钟数据恢复(CDR)技术,从具有足够数据信号转换的所接收数据流推断时钟以维持位锁定。这个推断的时钟与发送时钟的相位关系未知,因此代表了非确定性的额外源。
如图所示,外部互连72包括外部交换块(XB)78。编译器指定瓦片4之一向交换块78发送外部交换请求(XREQ)(步骤S1)。XREQ是包括一个或多个控制分组的消息,指示哪个瓦片4具有要发送到另一芯片2上的另一瓦片4的数据分组(内容)。这在图19中通过钩号和交叉示例性地示出:作为示例性场景,标记有钩号的那些具有要外部地发送的数据分组,而标记有交叉的那些没有。在步骤S2,交换块78将交换-开(XON)控制分组发送给具有要外部地发送的数据的瓦片4中的第一个。这使得第一瓦片开始通过外部互连78将其分组发送到相关目的地(步骤S3)。如果在任何时候XB无法继续向互连发送数据分组(例如,由于之前的分组丢失和互连中的重新传输,或者由于很多其他XB和瓦片对外部互连的过度预订),XB将在XB队列溢出之前向该瓦片发送交换-关(XOFF)。一旦清除了拥塞,XB就在其队列中再次具有足够的空间,它会向瓦片发送XON以允许它继续发送其内容。一旦该瓦片发送了其最后的数据分组,则交换块78在步骤S4向该瓦片发送交换-关(XOFF)控制分组,然后在步骤S5将另一个XON发送给具有要发送的数据分组的下一个瓦片4,如此类推。XON和XOFF的信令被实现为外部交换块78形式的专用硬件逻辑中的硬件机制。
应当理解,这仅是用于芯片之间进行外部通信的流控制机制的一个示例。其他合适的机制本身对于本领域技术人员来说是熟悉的。此外,不排除时间确定性和/或无队列外部互连的可能性。
图15示出了本文所公开的处理器架构的示例性应用,即,对机器智能的应用。
如机器智能领域的技术人员所熟悉的,机器智能从学习级开始,其中机器智能算法学习知识模型。该模型包括互连节点(即顶点)102和边缘(即链路)104的图形。图形中的每个节点102具有一个或多个输入边缘和一个或多个输出边缘。一些节点102的一些输入边缘是一些其他节点的输出边缘,从而将节点连接在一起以形成图形。此外,一个或多个节点102的一个或多个输入边缘作为整体形成对图形的输入,而一个或多个节点102的一个或多个输出边缘作为整体形成图形的输出。有时,给定的节点甚至可能具有以下所有这些:对图形的输入、图形的输出和对其他节点的连接。每个边缘104传送值或更常传送张量(n维矩阵),这些值分别形成在其输入边缘和输出边缘上提供给节点102和从节点102提供的输入和输出。
每个节点102表示在其输入边缘上接收的一个或多个输入的函数,该函数的结果是在输出边缘上提供的输出。由一个或多个相应参数(有时称为权重,尽管它们不需要一定是乘法权重)对每个函数进行参数化。通常,由不同节点102表示的函数可以是不同形式的函数和/或可以通过不同参数来参数化。
此外,每个节点的函数的一个或多个参数中的每一个的特征在于相应的误差值。此外,相应的条件可以与每个节点102的参数中的误差相关联。对于表示由单个参数参数化的函数的节点102,条件可以是简单阈值,即如果误差在指定的阈值内,则满足条件,但如果误差超出阈值,则不满足条件。对于由多于一个相应参数参数化的节点102,对于该节点102达到了可接受的误差水平的条件可能更复杂。例如,仅当该节点102的每个参数都落入相应阈值内时,才可以满足条件。作为另一示例,可以组合相同节点102的不同参数的误差来定义组合度量,并且在组合度量的值落入指定阈值的条件下可以满足条件,但是如果组成度量值超出阈值,则不满足条件(或者反之亦然,取决于度量的定义)。无论条件如何,这都给出了节点的参数中的误差是否低于某一可接受程度或水平的度量。通常,可以使用任何合适的度量。条件或度量对于所有节点可以是相同的,或者对于不同的相应节点可以是不同。
在学习级中,算法接收经验数据,即,表示对图形的输入的不同可能组合的多个数据点。随着接收到越来越多的经验,算法基于经验数据逐渐调整图形中各节点102的参数,以试图最小化参数中的误差。目标是找到参数的值,使得图形的输出尽可能接近给定输入的期望输出。由于图形作为整体倾向于这样状态,因此图形会被形容为收敛。在适当程度的收敛之后,图形可以用于执行预测或推断,即预测某些给定输入的结果或推断某些给定输出的原因。
学习级可以采用多种不同的形式。例如,在监督方法中,输入经验数据采用训练数据的形式,即与已知输出相应的输入。对于每个数据点,算法可以调整参数,使得输出更接近地匹配给定输入的已知输出。在随后的预测级中,图形然后可以用于将输入查询映射到近似预测输出(或者如果进行推断,则反之亦然)。其他方法也是可能的。例如,在无监督的方法中,不存在每个输入数据的参考结果的概念,而是改为将机器智能算法留下来在输出数据中识别其自己的结构。或者在强化方法中,算法针对输入经验数据中的每个数据点试验至少一个可能的输出,并且被告知该输出是正还是负(以及潜在地它是正还是负的程度),例如赢或输、奖励或惩罚等等。在许多试验中,算法可以逐渐调整图形的参数,以便能够预测将导致正结果的输入。用于学习图形的各种方法和算法对于机器学习领域的技术人员来说是已知的。
根据本文所公开的技术的示例性应用,每个工作者线程被编程为执行与机器智能图形中相应的单独一个节点102相关联的计算。在这种情况下,节点102之间的至少一些边缘104对应于线程之间的数据交换,并且一些可以涉及瓦片之间的交换。此外,程序员使用工作者线程的单独退出状态来表示相应的节点102是否满足到其对于该节点的参数的收敛的相应条件,即,参数中的误差是否落入误差空间的可接受水平或区域内。例如,这是实施例的一个示例性使用,其中每个单独的退出状态是单独的位,并且聚合的退出状态是单独退出状态的AND(或等效地,如果0被认为是正的,则是OR);或者,其中聚合的退出状态是三元值,表示各个退出状态是否都是真的,都是假的,还是混合的。因此,通过检查退出状态寄存器38中的单个寄存器值,程序可以确定图形作为整体或图形的至少一个子区域已经收敛到可接受的程度。
作为其另一变体,可以使用其中聚合采用单独置信度值的统计聚合的形式的实施例。在这种情况下,每个单独的退出状态表示由相应线程表示的节点的参数已达到可接受的误差程度的置信度(例如作为百分比)。然后,可以使用聚合的退出状态来确定对于图形或图形的子域是否已经收敛到可接受程度的总体置信度。
在多瓦片布置6的情况下,每个瓦片运行图形的子图。每个子图包括包含一个或多个监督者线程的监督者子程序,以及工作者线程集,其中一些或所有工作者可以采用小代码的形式。
应当理解,仅通过示例方式描述了上述实施例。
例如,分开内部时间确定性和外部非时间确定性BSP阶段的概念不限于通过使用上述实施例的专用同步指令来实现。虽然这是特别有效的,但不排除内部-外部BSP原则可以在由通用机器代码指令组成的代码中实现。
此外,本公开的范围不限于芯片上时间确定性域,也不限于特定在芯片外的非时间确定性交换。还可以以其他方法划分时间确定性领域和非时间确定性领域。例如,不排除在多个芯片2上扩展时间确定性域,其中不同的多芯片时间确定性域由非时间确定性互连连接(例如,在不同卡或服务器机箱上实现的不同的多芯片时间确定性域)。或者作为另一个例子,可以在给定的芯片2上实现不同的时间确定性域,在这些域之间提供非时间确定性芯片上上互连。
此外,时间确定性域的实现不限于使用瓦片间延迟查找表。例如,可以使用分析公式来确定瓦片间延迟。此外,瓦片间延迟以及发送和接收时间不限于由编译器设置。例如,替代地,它们可以由程序员手动安排。
此外,本公开的范围不受划分时间确定性领域和非时间确定性领域的任何一个特定原因所限制。如前所述,有许多潜在的驱动因素:排队、有损与无损传输、延迟和/或芯片上/芯片外划分。在所有这些情况或其他情况下,至少在某些阶段,可能期望避免非时间确定性交换污染时间确定性交换阶段的时间确定性。本公开的范围不受任何一种可能的动机限制。
此外,本文公开的技术的适用性不限于上述架构,其中为监督者线程提供独立的上下文,或者其中监督者线程在某时隙中运行然后将其时隙放弃给工作者。在另一种布置中,例如,监督者可以在其自己专用的时隙中运行。或者,内部-外部BSP概念甚至可以用于一个、一些或所有芯片上的一个、一些或所有瓦片采用非多线程执行的情况中。
除非另外明确说明,否则在使用多线程瓦片的情况下,术语“监督者”和“工作者”不一定暗示具体责任,并且特别地本身并不一定限制于上述方案,其中监督者线程将其时隙放弃给工作者等等。通常,工作者线程可以指分配了某些计算任务的任何线程。监督者可以代表任何类型的监视或协调线程,负责以下行动:将工作者分配给桶形时隙,和/或执行多个线程之间的屏障同步,和/或根据多于一个线程的结果执行任何控制流操作(例如分支)。
在参考交错时隙顺序等的情况下,这并不一定意味着所指的顺序构成所有可能或可用的时隙。例如,讨论中的的顺序可以是所有可能的时隙或仅是当前活动的时隙。不一定排除可能存在当前未包括在调度顺序中的其他潜在时隙。
本文所用的术语瓦片不一定限于任何特定的拓扑图等,并且通常可以指处理资源的任何模块化单元,包括处理单元10和相应的存储器11,其在相似模块的阵列中,通常在相同的芯片(同一管芯)上。
此外,除非明确指出,否则本文参考在瓦片组或多个瓦片等之间执行同步或聚合时,不一定必须参考系统中的所有瓦片或芯片上的所有瓦片。例如,SYNC和EXIT指令可以配置为仅对于给定芯片上的瓦片4的特定子集和/或仅给定系统中的芯片2的子集执行同步和聚合。而给定芯片上的一些其他瓦片4和/或给定系统中的一些其他芯片可能不涉及在给定的BSP组中,甚至可以用于与由手头上的组正在执行的计算无关的一些完全独立的任务集。
此外,在实施例中,上述同步方案不排除多瓦片处理器以外的外部资源(例如诸如主处理器的CPU处理器),甚至不是处理器的一个或多个部件(例如一个或多个网卡、存储装置和/或FPGA)的参与(例如,从而通过更宽的互连而不是通过仅用于同步目的的专用线将全局同步消息作为分组传送)。例如,一些瓦片可以选择与外部系统进行数据传输,其中这些传输形成该瓦片的计算负担。在这种情况下,传输应在下一个屏障之前完成。在一些情况下,瓦片的退出状态可以取决于与外部资源通信的结果,并且该资源可以间接地影响退出状态。替代地或附加地,除了多瓦片处理器之外的资源(例如主机或一个或多个FPGA)可以并入同步网络本身中。也就是说,这种/这些额外的资源需要诸如Sync_req的同步信号,从而满足屏障同步和让瓦片继续下一个交换阶段。此外,在实施例中,聚合的全局退出状态可以在聚合中包括外部资源的退出状态,例如来自FPGA的。
此外,虽然上文描述了SYNC指令的某些模式,但是本公开范围更一般地不限于这些模式。例如,上面给出的模式列表不一定是详尽无遗的。或者,在其他实施例中,SYNC指令可以具有更少模式,例如,SYNC不一定支持外部同步的不同层级,或者不需要区分芯片上和芯片间同步(即,在瓦片间模式中,总是相对于所有瓦片作用,而不论是芯片上还是芯片外)。在另外替代实施例中,SYNC指令完全不需要作为操作数的模式。例如,在实施例中,可以为不同级别的同步和退出状态聚合提供不同版本的同步指令(不同的操作码)(例如用于瓦片上同步和瓦片间、芯片上同步的不同的SYNC指令)。或者,在实施例中,专用SYNC指令可以仅提供以用于瓦片间同步(如有需要,让线程之间的瓦片上同步在通用软件中执行)。
在进一步的变型中,SYNC指令可以采用更多数量的可能模式,以容纳更大粒度或范围的分层同步区域91和92;或者仅仅是不同的模式集,以将系统的不同划分容纳在分层区域中。例如,除了允许在内部(芯片上)和外部(芯片外)同步(或者甚至作为替代)之间选择之外,SYNC指令的模式可以配置为进一步识别一个芯片(例如一个IC封装、一张卡、一盒卡等)以外的其他物理断点。或者,即使没有使用专用SYNC指令,也可以由程序员或编译器使用通用代码来实现这种划分。因此,在实施例中,分层同步区域之一(例如,SYNC指令的模式之一)可以由同一IC封装上的所有芯片上的所有瓦片组成(但不包括这些之外的瓦片或芯片)。替代地或附加地,分层同步区域之一(例如,再次是SYNC指令的模式之一)可以由同一卡上的所有芯片上的所有瓦片组成(但不包括这些之外的瓦片、芯片或封装)。作为另一个替代或附加的示例,分层同步区域之一(例如,再次是SYNC指示的另一可能模式)可以包括同一物理盒(例如同一服务器机箱)中所有卡上的所有芯片上的所有瓦片组成(但不包括这些之外的瓦片、芯片或盒)。这将是有利的,因为不同服务器机箱之间的通信将倾向于比仅仅位于同一机箱内的芯片(管芯)之间产生更大的惩罚。
此外,同步区域不限于是分层的(即,一个嵌套在另一个中),并且在其他实施例中,可选择的同步区域可以由一个或多个非分层组组成或包括一个或多个非分层组(该组的所有瓦片不嵌套在单个其他可选组内)。
一旦给出了本文的公开内容,所公开的技术的其他应用和变体对本领域技术人员而言可变得显而易见。本公开的范围不由所描述的实施例来限定,而是仅由所附权利要求来限制。
Claims (23)
1.一种操作系统的方法,包括被划分成多个域的多个处理器的瓦片,其中在每个域内,瓦片通过时间确定性互连的相应实例彼此连接,并且在域之间,瓦片通过非时间确定性互连彼此连接;所述方法包括:
在跨越域的一些或所有瓦片的参与组中的每个相应的一个上,执行计算级,其中相应的瓦片执行相应的一个或多个瓦片上计算,但既不向也不从组中的任何其他瓦片传送计算结果;
在所述一个或多个域中的每个相应的一个域内,执行相应的内部屏障同步以要求相应的域中的所有参与瓦片在相应的域中的任何参与瓦片被允许继续到内部交换阶段之前已经完成计算阶段,从而在所述一个或多个域中的单独每一个域内部的所有参与瓦片之间建立共同时间参考;
在相应的内部屏障同步之后,在所述一个或多个域中的每个内执行所述内部交换阶段,其中相应的域内的每个参与瓦片通过时间确定性互连向和/或从同一域内的一个或多个其他参与瓦片传送其相应计算的一个或多个结果,但既不向也不从任何其他所述域传送计算结果;
执行外部屏障同步以要求所述域的所有参与瓦片在任何参与瓦片被允许继续到外部交换阶段之前已经完成内部交换阶段,从而在跨越域的所有参与瓦片之间建立共同时间参考;和
在所述外部屏障同步之后,执行外部交换阶段,其中一个或多个参与瓦片与另一个域通过非时间确定性互连传送一个或多个所述计算结果。
2.根据权利要求1所述的方法,其中通过非时间确定性互连的传送被排队,但是瓦片之间通过时间确定性互连的传送不被排队。
3.根据权利要求1或2所述的方法,其中在时间确定性互连上,每对发送瓦片和接收瓦片之间的传送通过以下方式执行:
从接收瓦片发送消息,和
控制接收瓦片在发送瓦片发送之后的预定时间间隔内监听发送瓦片的地址,
其中预定时间间隔等于发送瓦片和接收瓦片之间的总预定延迟,时间间隔由具有关于延迟的预定信息的编译器设置。
4.根据任何前述权利要求所述的方法,其中:在物理层、传输层或网络层上,非时间确定性互连是有损的,而时间确定性互连是无损的。
5.根据任何前述权利要求所述的方法,其中每个域是不同的相应芯片,时间确定性互连是内部芯片上互连,并且非时间确定性互连是芯片之间的外部互连。
6.根据权利要求1至4中任一项所述的方法,其中每个域包括多个芯片,时间确定性互连是外部无损芯片间互连,并且非时间确定性互连是外部有损互连。
7.根据任何前述权利要求所述的方法,包括执行一系列重复的迭代,每个包括计算级的相应实例,接着是内部屏障同步的相应实例,接着是内部交换阶段的相应实例,接着是外部屏障同步的相应实例,接着是外部交换阶段的相应实例;其中,不允许每个连续的迭代继续进行,直至执行了紧接在前的迭代的外部屏障同步。
8.根据任何前述权利要求所述的方法,包括执行一顺序的计算阶段的实例,每个接着是内部交换阶段的相应实例,然后是内部屏障同步的相应实例,其中外部屏障同步接着所述顺序中计算阶段的最后实例。
9.根据权利要求7和8所述的方法,其中一个或多个所述迭代中的每一个包括相应顺序的计算阶段的多个实例,每个接着是内部交换阶段的相应实例,然后是内部屏障同步的相应实例,其中相应的外部屏障同步接着相应顺序中计算阶段的最后实例。
10.根据任何前述权利要求所述的方法,其中内部屏障同步和外部屏障同步中的每一个通过执行包括操作码和操作数的同步指令来执行,其中操作码将同步指令的模式指定为内部或外部,并且其中操作码在执行时使时间确定性互连中的硬件逻辑在操作数指定内部模式时协调内部屏障同步的性能,并且使非时间确定性互连中的硬件逻辑在操作数指定外部模式时协调外部屏障同步的性能。
11.根据任何前述权利要求所述的方法,包括将多个预定义区域之一选择为参与瓦片,每个区域包括所述多个域的不同组或子集。
12.根据权利要求11所述的方法,其中区域是分层的,其中至少两个较低级别的区域嵌套在至少一个较高级别的区域内。
13.根据权利要求10、11或12所述的方法,其中同步指令的操作数指定外部屏障同步应用于外部模式的多个不同可能变体中的哪一个,每个对应于所述区域中不同的一个。
14.根据权利要求12和13所述的方法,其中外部模式的变体至少指定外部屏障同步应用于区域的哪个层级。
15.根据权利要求12或从属于其的任何权利要求所述的方法,其中外部同步和交换包括:
首先执行第一级外部同步和之后的交换,其约束在所述分层区域的第一、较低级别的一个内;和
在第一级同步和交换之后,在所述区域的第二、较高级别的一个上执行第二级外部同步和交换。
16.根据权利要求11至15中任一项所述的方法,其中所述分层区域之一由同一IC封装中的所有瓦片组成,但不超过于此;和/或所述分层区域之一由同一卡中的所有瓦片组成,但不超过于此;和/或所述分层区域之一由同一机箱中的所有瓦片组成,但不超过于此。
17.根据任何前述权利要求所述方法,包括在一个或一些瓦片上执行弃权指令,所述弃权指令的操作码使在其上执行它的一个或多个瓦片被选择退出所述组。
18.根据任何前述权利要求所述的方法,其中在外部交换阶段中,一个或多个参与瓦片还与主处理器通过外部互连传送一个或多个所述计算结果,所述主处理器在独立的主处理器芯片上实现。
19.根据任何前述权利要求所述的方法,其中在计算阶段中,一些或所有参与瓦片各自以交错方式运行成批的工作者线程,并且内部屏障同步要求每个批次中的所有工作者线程都已退出。
20.根据任何前述权利要求所述的方法,包括使用系统执行机器智能算法,其中图形中的每个节点具有一个或多个相应的输入顶点和一个或多个相应的输出顶点,其中至少一些节点的输入顶点是至少一些其他节点的输出顶点,每个节点包括将其输出顶点与其输入顶点相关联的相应函数,其中每个相应函数由一个或多个相应参数参数化,并且每个相应参数具有相关错误,使得图形随着一些或所有参数中的错误减少而收敛于解;
其中每个瓦片对图形中的相应的一个或多个节点进行建模。
21.根据权利要求5或6以及权利要求18和19所述的方法,其中所述芯片是辅助主处理器的AI加速器芯片。
22.一种计算机程序产品,实现在计算机可读存储上,并包括代码,所述代码被配置为当在所述瓦片上执行时,执行根据权利要求1至21中任一项所述的操作。
23.一种系统,包括被划分成多个域的多个处理器的瓦片,其中在每个域内,瓦片通过时间确定性互连的相应实例彼此连接,并且在域之间,瓦片通过非时间确定性互连彼此连接;系统被编程为执行以下操作:
在跨越域的一些或所有瓦片的参与组中的每个相应的一个上,执行计算级,其中相应的瓦片执行相应的一个或多个瓦片上计算,但既不向也不从组中的任何其他瓦片传送计算结果;
在所述一个或多个域中的每个相应的一个域内,执行相应的内部屏障同步以要求相应域中的所有参与瓦片在相应域中的任何参与瓦片被允许继续到内部交换阶段之前已经完成计算阶段,从而在所述一个或多个域中的单独每一个内部的所有参与瓦片之间建立共同时间参考;
在相应的内部屏障同步之后,在所述一个或多个域中的每个域内执行所述内部交换阶段,其中相应的域内的每个参与瓦片通过时间确定性互连向和/或从同一域内的一个或多个其他参与瓦片传送其相应计算的一个或多个结果,但既不向也不从任何其他所述域传送计算结果;
执行外部屏障同步以要求所述域的所有参与瓦片在任何参与瓦片被允许继续到外部交换阶段之前已经完成内部交换阶段,从而在跨越域的所有参与瓦片之间建立共同时间参考;和
在所述外部屏障同步之后,执行外部交换阶段,其中一个或多个参与瓦片与另一个域通过非时间确定性互连传送一个或多个所述计算结果。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1717294.1A GB2569775B (en) | 2017-10-20 | 2017-10-20 | Synchronization in a multi-tile, multi-chip processing arrangement |
GB1717294.1 | 2017-10-20 | ||
PCT/EP2018/077675 WO2019076715A1 (en) | 2017-10-20 | 2018-10-11 | SYNCHRONIZATION IN MULTI-CHIP AND MULTI-PAVING PROCESSING ARRANGEMENT |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110121699A true CN110121699A (zh) | 2019-08-13 |
CN110121699B CN110121699B (zh) | 2023-07-07 |
Family
ID=60481813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880004198.7A Active CN110121699B (zh) | 2017-10-20 | 2018-10-11 | 多瓦片、多芯片处理布置中的同步 |
Country Status (10)
Country | Link |
---|---|
US (2) | US10579585B2 (zh) |
JP (1) | JP6797880B2 (zh) |
KR (1) | KR102263078B1 (zh) |
CN (1) | CN110121699B (zh) |
CA (1) | CA3021409C (zh) |
DE (1) | DE102018126005A1 (zh) |
FR (1) | FR3072797B1 (zh) |
GB (1) | GB2569775B (zh) |
TW (1) | TWI673649B (zh) |
WO (1) | WO2019076715A1 (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2569775B (en) | 2017-10-20 | 2020-02-26 | Graphcore Ltd | Synchronization in a multi-tile, multi-chip processing arrangement |
GB2579412B (en) | 2018-11-30 | 2020-12-23 | Graphcore Ltd | Gateway pull model |
GB2580165B (en) | 2018-12-21 | 2021-02-24 | Graphcore Ltd | Data exchange in a computer with predetermined delay |
JP7207133B2 (ja) | 2019-04-23 | 2023-01-18 | 富士通株式会社 | 情報処理装置、同期装置及び情報処理装置の制御方法 |
US20220326988A1 (en) * | 2019-08-16 | 2022-10-13 | Google Llc | Explicit scheduling of on-chip operations |
CN114270956A (zh) * | 2019-08-23 | 2022-04-01 | 北京希姆计算科技有限公司 | 同步电路和同步芯片 |
CN110716756B (zh) * | 2019-10-15 | 2023-03-14 | 上海兆芯集成电路有限公司 | 多晶粒的多核计算机平台及其开机方法 |
US11127442B2 (en) | 2019-12-06 | 2021-09-21 | Xilinx, Inc. | Data transfers between a memory and a distributed compute array |
GB2590661B (en) * | 2019-12-23 | 2022-02-09 | Graphcore Ltd | Sync network |
GB2590658A (en) * | 2019-12-23 | 2021-07-07 | Graphcore Ltd | Communication in a computer having multiple processors |
US11631001B2 (en) | 2020-04-10 | 2023-04-18 | SiMa Technologies, Inc. | Heterogeneous computing on a system-on-chip, including machine learning inference |
US11321607B2 (en) * | 2020-04-03 | 2022-05-03 | SiMa Technologies, Inc. | Machine learning network implemented by statically scheduled instructions, with compiler |
US11989581B2 (en) | 2020-04-17 | 2024-05-21 | SiMa Technologies, Inc. | Software managed memory hierarchy |
US11734549B2 (en) | 2020-04-21 | 2023-08-22 | SiMa Technologies, Inc. | Avoiding data routing conflicts in a machine learning accelerator |
US11734605B2 (en) | 2020-04-29 | 2023-08-22 | SiMa Technologies, Inc. | Allocating computations of a machine learning network in a machine learning accelerator |
US11886981B2 (en) | 2020-05-01 | 2024-01-30 | SiMa Technologies, Inc. | Inter-processor data transfer in a machine learning accelerator, using statically scheduled instructions |
US11586894B2 (en) | 2020-05-04 | 2023-02-21 | SiMa Technologies, Inc. | Ordering computations of a machine learning network in a machine learning accelerator for efficient memory usage |
GB2597078B (en) * | 2020-07-14 | 2022-07-13 | Graphcore Ltd | Communication between host and accelerator over network |
GB2597945B (en) | 2020-08-11 | 2022-11-16 | Graphcore Ltd | Predictive clock control |
US11782757B2 (en) | 2021-05-07 | 2023-10-10 | SiMa Technologies, Inc. | Scheduling off-chip memory access for programs with predictable execution |
GB202110148D0 (en) * | 2021-07-14 | 2021-08-25 | Graphcore Ltd | Synchronisation for a multi-tile processing unit |
WO2023285304A1 (en) * | 2021-07-14 | 2023-01-19 | Graphcore Limited | Subscription to sync zones |
GB202110147D0 (en) | 2021-07-14 | 2021-08-25 | Graphcore Ltd | time deterministic trace |
GB202110155D0 (en) | 2021-07-14 | 2021-08-25 | Graphcore Ltd | GSP trace unit |
US11675588B2 (en) | 2021-08-20 | 2023-06-13 | Micron Technology, Inc. | Tile-based result buffering in memory-compute systems |
US11966745B2 (en) | 2021-11-15 | 2024-04-23 | Google Llc | Sparse SIMD cross-lane processing unit |
US11972263B2 (en) | 2021-11-22 | 2024-04-30 | Google Llc | Cooperative instruction prefetch on multicore system |
TWI788193B (zh) | 2022-01-14 | 2022-12-21 | 智原科技股份有限公司 | 用來於多分頻時鐘系統中進行分頻時鐘相位同步之方法、同步控制電路、同步控制子電路及電子裝置 |
WO2023183015A1 (en) * | 2022-03-22 | 2023-09-28 | Google Llc | Streaming transfers and ordering model |
US11977499B2 (en) | 2022-03-22 | 2024-05-07 | Google Llc | Streaming transfers and ordering model |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060184905A1 (en) * | 2005-02-11 | 2006-08-17 | International Business Machines Corporation | Method and apparatus for specifying multiple voltage domains and validating physical implementation and interconnections in a processor chip |
CN1942858A (zh) * | 2003-12-01 | 2007-04-04 | 索尼计算机娱乐公司 | 用于高效多任务化的方法和装置 |
CN102282542A (zh) * | 2008-10-14 | 2011-12-14 | 奇托尔·V·斯里尼瓦桑 | 对于多核芯片建立正式验证的并行软件的ticc-范例 |
US20120179896A1 (en) * | 2011-01-10 | 2012-07-12 | International Business Machines Corporation | Method and apparatus for a hierarchical synchronization barrier in a multi-node system |
CN105608191A (zh) * | 2015-12-23 | 2016-05-25 | 云南电网有限责任公司 | 一种基于EnersunWebCache动态生成缓存电网地图瓦片的方法 |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6282583B1 (en) * | 1991-06-04 | 2001-08-28 | Silicon Graphics, Inc. | Method and apparatus for memory access in a matrix processor computer |
GB2284494B (en) * | 1993-11-26 | 1998-09-09 | Hitachi Ltd | Distributed shared memory management system |
JPH07234842A (ja) * | 1994-02-22 | 1995-09-05 | Fujitsu Ltd | 並列データ処理システム |
GB2303274B (en) | 1995-07-11 | 1999-09-08 | Fujitsu Ltd | Switching apparatus |
US5887143A (en) * | 1995-10-26 | 1999-03-23 | Hitachi, Ltd. | Apparatus and method for synchronizing execution of programs in a distributed real-time computing system |
JP3532037B2 (ja) | 1996-07-31 | 2004-05-31 | 富士通株式会社 | 並列計算機 |
US6771264B1 (en) | 1998-08-20 | 2004-08-03 | Apple Computer, Inc. | Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor |
US7100021B1 (en) | 2001-10-16 | 2006-08-29 | Cisco Technology, Inc. | Barrier synchronization mechanism for processors of a systolic array |
US8307194B1 (en) * | 2003-08-18 | 2012-11-06 | Cray Inc. | Relaxed memory consistency model |
US7437521B1 (en) * | 2003-08-18 | 2008-10-14 | Cray Inc. | Multistream processing memory-and barrier-synchronization method and apparatus |
US7861060B1 (en) | 2005-12-15 | 2010-12-28 | Nvidia Corporation | Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior |
US7636835B1 (en) | 2006-04-14 | 2009-12-22 | Tilera Corporation | Coupling data in a parallel processing environment |
US7577820B1 (en) | 2006-04-14 | 2009-08-18 | Tilera Corporation | Managing data in a parallel processing environment |
US7761485B2 (en) * | 2006-10-25 | 2010-07-20 | Zeugma Systems Inc. | Distributed database |
US8407428B2 (en) * | 2010-05-20 | 2013-03-26 | Hicamp Systems, Inc. | Structured memory coprocessor |
US8234652B2 (en) | 2007-08-28 | 2012-07-31 | International Business Machines Corporation | Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks |
US8078834B2 (en) | 2008-01-09 | 2011-12-13 | Analog Devices, Inc. | Processor architectures for enhanced computational capability |
US8866827B2 (en) | 2008-06-26 | 2014-10-21 | Microsoft Corporation | Bulk-synchronous graphics processing unit programming |
US7978721B2 (en) * | 2008-07-02 | 2011-07-12 | Micron Technology Inc. | Multi-serial interface stacked-die memory architecture |
US8151088B1 (en) | 2008-07-08 | 2012-04-03 | Tilera Corporation | Configuring routing in mesh networks |
US20100115236A1 (en) * | 2008-10-31 | 2010-05-06 | Cray Inc. | Hierarchical shared semaphore registers |
GB2471067B (en) | 2009-06-12 | 2011-11-30 | Graeme Roy Smith | Shared resource multi-thread array processor |
CN101586961B (zh) | 2009-07-06 | 2011-04-06 | 中国人民解放军国防科学技术大学 | 用于组合导航处理器的多任务调度方法及组合导航处理器 |
GB201001621D0 (en) | 2010-02-01 | 2010-03-17 | Univ Catholique Louvain | A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms |
JP5549575B2 (ja) * | 2010-12-17 | 2014-07-16 | 富士通株式会社 | 並列計算機システム、同期装置、並列計算機システムの制御方法 |
CN103108000B (zh) | 2011-11-09 | 2016-08-10 | 中国移动通信集团公司 | 用于任务同步的方法和系统及系统中的主节点和工作节点 |
JP5974703B2 (ja) * | 2012-07-20 | 2016-08-23 | 富士通株式会社 | 情報処理装置およびバリア同期方法 |
US9465432B2 (en) | 2013-08-28 | 2016-10-11 | Via Technologies, Inc. | Multi-core synchronization mechanism |
US9977676B2 (en) | 2013-11-15 | 2018-05-22 | Qualcomm Incorporated | Vector processing engines (VPEs) employing reordering circuitry in data flow paths between execution units and vector data memory to provide in-flight reordering of output vector data stored to vector data memory, and related vector processor systems and methods |
JP6007430B2 (ja) | 2015-05-20 | 2016-10-12 | 大澤 昇平 | 機械学習モデル設計支援装置、機械学習モデル設計支援方法、機械学習モデル設計支援装置用プログラム |
US10210134B2 (en) | 2015-05-21 | 2019-02-19 | Goldman Sachs & Co. LLC | General-purpose parallel computing architecture |
US10248177B2 (en) | 2015-05-22 | 2019-04-02 | Advanced Micro Devices, Inc. | Droop detection and regulation for processor tiles |
WO2017028908A1 (en) | 2015-08-18 | 2017-02-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Method for observing software execution, debug host and debug target |
WO2017069900A1 (en) | 2015-10-21 | 2017-04-27 | Advanced Micro Devices, Inc. | Droop detection and regulation for processor tiles |
EP3400688B1 (en) | 2016-01-04 | 2020-05-20 | Gray Research LLC | Massively parallel computer, accelerated computing clusters, and two dimensional router and interconnection network for field programmable gate arrays, and applications |
US10324730B2 (en) | 2016-03-24 | 2019-06-18 | Mediatek, Inc. | Memory shuffle engine for efficient work execution in a parallel computing system |
GB2569844B (en) | 2017-10-20 | 2021-01-06 | Graphcore Ltd | Sending data off-chip |
GB2569775B (en) | 2017-10-20 | 2020-02-26 | Graphcore Ltd | Synchronization in a multi-tile, multi-chip processing arrangement |
GB2569271B (en) | 2017-10-20 | 2020-05-13 | Graphcore Ltd | Synchronization with a host processor |
-
2017
- 2017-10-20 GB GB1717294.1A patent/GB2569775B/en active Active
-
2018
- 2018-02-01 US US15/886,138 patent/US10579585B2/en active Active
- 2018-10-11 WO PCT/EP2018/077675 patent/WO2019076715A1/en active Application Filing
- 2018-10-11 CN CN201880004198.7A patent/CN110121699B/zh active Active
- 2018-10-18 FR FR1859638A patent/FR3072797B1/fr active Active
- 2018-10-19 DE DE102018126005.9A patent/DE102018126005A1/de active Pending
- 2018-10-19 JP JP2018197213A patent/JP6797880B2/ja active Active
- 2018-10-19 CA CA3021409A patent/CA3021409C/en active Active
- 2018-10-19 TW TW107136871A patent/TWI673649B/zh active
- 2018-10-22 KR KR1020180126033A patent/KR102263078B1/ko active IP Right Grant
-
2019
- 2019-12-23 US US16/725,313 patent/US11023413B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1942858A (zh) * | 2003-12-01 | 2007-04-04 | 索尼计算机娱乐公司 | 用于高效多任务化的方法和装置 |
US20060184905A1 (en) * | 2005-02-11 | 2006-08-17 | International Business Machines Corporation | Method and apparatus for specifying multiple voltage domains and validating physical implementation and interconnections in a processor chip |
CN102282542A (zh) * | 2008-10-14 | 2011-12-14 | 奇托尔·V·斯里尼瓦桑 | 对于多核芯片建立正式验证的并行软件的ticc-范例 |
US20120179896A1 (en) * | 2011-01-10 | 2012-07-12 | International Business Machines Corporation | Method and apparatus for a hierarchical synchronization barrier in a multi-node system |
CN105608191A (zh) * | 2015-12-23 | 2016-05-25 | 云南电网有限责任公司 | 一种基于EnersunWebCache动态生成缓存电网地图瓦片的方法 |
Non-Patent Citations (1)
Title |
---|
KRSTIC MILOS ET AL.: "Globally Asynchronous, Locally Synchronous Circuits: Overview and Outlook", 《IEEE DESIGN & TEST OF COMPUTERS》 * |
Also Published As
Publication number | Publication date |
---|---|
KR102263078B1 (ko) | 2021-06-09 |
WO2019076715A1 (en) | 2019-04-25 |
GB2569775A (en) | 2019-07-03 |
US20200133914A1 (en) | 2020-04-30 |
JP2019079526A (ja) | 2019-05-23 |
KR20190044568A (ko) | 2019-04-30 |
TW201928665A (zh) | 2019-07-16 |
CA3021409C (en) | 2021-02-02 |
US11023413B2 (en) | 2021-06-01 |
US20190121784A1 (en) | 2019-04-25 |
DE102018126005A1 (de) | 2019-04-25 |
GB201717294D0 (en) | 2017-12-06 |
FR3072797A1 (fr) | 2019-04-26 |
GB2569775B (en) | 2020-02-26 |
US10579585B2 (en) | 2020-03-03 |
CA3021409A1 (en) | 2019-04-20 |
TWI673649B (zh) | 2019-10-01 |
CN110121699B (zh) | 2023-07-07 |
JP6797880B2 (ja) | 2020-12-09 |
FR3072797B1 (fr) | 2024-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110121699A (zh) | 多瓦片、多芯片处理布置中的同步 | |
US11586483B2 (en) | Synchronization amongst processor tiles | |
CN110214317A (zh) | 多瓦片处理布置中的同步 | |
CN110121702A (zh) | 结合多线程处理器中多个线程的状态 | |
KR102161683B1 (ko) | 호스트 프로세서와의 동기화 | |
KR20190044566A (ko) | 복수-타일 프로세싱 구성에서의 동기화 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |