CN115398393A - 在粗粒度可重构阵列处理器中处理多个图、上下文和程序 - Google Patents
在粗粒度可重构阵列处理器中处理多个图、上下文和程序 Download PDFInfo
- Publication number
- CN115398393A CN115398393A CN202180017016.1A CN202180017016A CN115398393A CN 115398393 A CN115398393 A CN 115398393A CN 202180017016 A CN202180017016 A CN 202180017016A CN 115398393 A CN115398393 A CN 115398393A
- Authority
- CN
- China
- Prior art keywords
- dfg
- threads
- compute
- fabric
- controller
- 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.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims description 15
- 239000004744 fabric Substances 0.000 claims abstract description 106
- 239000003999 initiator Substances 0.000 claims description 42
- 238000000034 method Methods 0.000 claims description 32
- 230000004044 response Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 13
- 238000004364 calculation method Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000009849 deactivation Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Logic Circuits (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
处理器(20)包括计算结构(24)和控制器(32)。计算结构包括计算节点(28)的阵列和可配置地连接计算节点的互连(30)。控制器被配置成接收表示为互连数据流图(DFG)(54)的集合(50)的软件程序,每个DFG指定执行软件程序的相应部分的代码指令,按时间交替来调度DFG的执行,并且对于被调度的每个DFG,配置计算结构中的至少一些计算节点和互连以执行DFG中指定的代码指令,并向计算结构发送各自执行DFG中指定的代码指令的多个线程。
Description
发明领域
本发明总体涉及处理器架构,特别涉及粗粒度可重构阵列(CGRA)处理器。
发明背景
粗粒度可重构阵列(CGRA)是一种计算架构,在该计算架构中,互连的计算元件阵列根据需要被重新配置以执行给定的程序。各种基于CGRA的计算技术在本领域中是已知的。例如,美国专利申请公开2018/0101387(其公开内容通过引用并入本文)描述了GPGPU兼容的架构,该架构将粗粒度可重构结构(CGRF)与动态数据流执行模型相结合,以加速大规模线程并行代码的执行吞吐量。CGRA将计算分布在功能单元的结构上。计算操作被静态地映射到功能单元,并且互连被配置成在功能单元之间传递值。
发明概述
在本文中描述的本发明的实施例提供了一种包括计算结构(compute fabric)和控制器的处理器。计算结构包括计算节点的阵列和可配置地连接计算节点的互连。控制器被配置成接收表示为互连数据流图(DFG)的集合的软件程序,每个DFG指定执行软件程序的相应部分的代码指令,按时间交替来调度DFG的执行,并且对于正在被调度的每个DFG,配置计算结构中的至少一些计算节点和互连以执行DFG中指定的代码指令,并向计算结构发送各自执行DFG中指定的代码指令的多个线程。
在一些实施例中,控制器被配置成选择以下其中的一个来作为下一个DFG:具有等待执行的最多数量线程的DFG;具有最小数量的代码指令的DFG;按为DFG的集合指定的预定义顺序下一个出现的DFG;以及与当前执行的DFG相同的DFG。在一个实施例中,控制器被配置成在软件程序和表示为互连的DFG的另一集合的至少另一软件程序之间切换。
在一些实施例中,对于正在被调度的给定DFG,控制器被配置成以连续批次向计算结构发送线程,并且计算结构被配置成以流水线方式执行每个批次的线程。在一个示例实施例中,控制器被配置成分配计算结构中的第一计算节点以作为接收线程的批次并启动对批次的执行的启动器节点,并被配置成分配计算结构中的第二计算节点以作为终止批次的执行的终止器节点。在一个实施例中,计算结构被配置成在完成一批次线程的执行时保存软件程序的状态。
在一些实施例中,对于正在被调度的给定DFG,控制器被配置成配置计算结构中的计算节点的多个子集以并发地执行表示软件程序的同一部分的多个相应副本。
在另一实施例中,控制器被配置成在运行时连续地维护为多个线程中的每一个指定相应的下一个DFG的表,并基于该表来调度对DFG中的线程的执行。控制器可以被配置成将表存储在第一存储器中,并将表的一部分高速缓存在具有比第一存储器更快访问的第二存储器中。
附加地或替代地,控制器可以被配置成将DFG的集合存储在第一存储器中,并将集合的一部分高速缓存在具有比第一存储器更快访问的第二存储器中。在一个实施例中,控制器被配置成将DFG中的一个或更多个从第一存储器预取到第二存储器。
在又一个实施例中,控制器被配置成将多个线程拆分为线程集合,并一个接一个地执行线程集合。在又一实施例中,对于正在被调度的给定DFG,控制器或不参与执行给定DFG中指定的代码指令的计算节点被配置成去激活(deactivate)计算节点的至少一部分。在公开的实施例中,对于正在被调度的给定DFG,控制器被配置成去激活控制一个或更多个互连的交换机的至少一部分,该一个或多个互连不参与执行在给定DFG中指定的代码指令。
在示例实施例中,计算结构中的计算节点被配置成响应于验证计算节点已经完成处理与当前配置的DFG相关联的所有线程,从当前配置的DFG切换到下一个DFG。在另一实施例中,控制器被配置为根据下一个DFG配置计算结构,并发地根据当前配置的DFG执行代码指令。在一个实施例中,当下一个DFG与当前配置的DFG相同时,控制器可以被配置成在计算结构已经完成对与当前配置的DFG相关联的线程的执行之前,将与下一个DFG相关联的一个或多个线程发送到计算结构。
根据本发明的实施例,还提供了一种计算方法,该方法包括在包括计算结构的处理器中接收表示为互连的数据流图(DFG)的集合的软件程序,该计算结构包括计算节点的阵列和可配置地连接计算节点的互连,每个DFG指定执行软件程序的相应部分的代码指令。按时间交替来调度对DFG的执行。对于正在被调度的每个DFG,计算结构中的至少一些计算节点和互连被配置成执行在DFG中指定的代码指令,并且向计算结构发送各自执行在DFG中指定的代码指令的多个线程。
根据结合附图进行的对本发明的实施例的以下详细描述,本发明将得到更充分的理解,附图中:
附图简述
图1是根据本发明的实施例示意性地示出粗粒度可重构阵列(CGRA)处理器的框图;
图2是根据本发明的实施例示意性地示出图1的CGRA处理器中的FPU/ALU节点的框图;
图3是根据本发明的实施例示意性地示出图1的CGRA处理器中的LSU节点的框图。
图4是根据本发明的实施例示出指定在各种程序执行状态下要为多个线程调度的下一个数据流图(DFG)的表的图示;
图5是根据本发明的实施例示出下一个DFG表(NDT)的图示;
图6是根据本发明的实施例示意性地示出图1的CGRA处理器中的DFG调度器的框图;以及
图7是根据本发明的实施例示意性地示出用于在图1中的CGRA处理器中进行DFG调度的方法的流程图。
具体实施方式
综述
本文描述的本发明的实施例提供了用于粗粒度可重构阵列(CGRA)计算的改进的方法和设备。示例性的基于CGRA的处理器包括粗粒度计算结构以及配置和控制计算结构的控制器。计算结构包括(i)计算节点的阵列和(ii)可配置地连接计算节点的互连。控制器接收编译后的也被称为软件程序的软件代码,其被表示为数据流图(DFG)。控制器根据DFG配置计算节点和互连,从而配置结构以执行程序。控制器然后向计算结构发送多个线程,计算结构根据DFG以流水线方式执行这些线程。多个线程通常对不同的数据执行由DFG表示的相同代码。(严格地说,不同的线程彼此之间略有不同,因为它们取决于线程号,例如,在指定不同的存储器地址以从该地址获取不同数据方面。然而,在本上下文中,这些线程在本文被视为执行相同的代码。)在CGRA结构上运行多个线程的某些方面在美国专利申请公开2018/0101387中得到解决,上面引用了该专利申请并且其公开内容通过引用并入本文。
然而,在许多实际情况下,软件程序太大,无法以其整体映射到计算结构上。因此,在本发明的一些实施例中,提供给控制器的软件程序被表示为互连的DFG的集合,而不是被表示为单个DFG。每个DFG指定执行程序的相应部分的代码指令。每个DFG具有单个输入以及一个或更多个出口。DFG根据遵循程序的高级流控制的预定义互连拓扑来被互连。该结构通常由编译器提供。(注意,即使计算结构足够大,可以映射整个代码,也可能有其他原因(例如,由于分支)将代码划分为多个DFG。)
在公开的实施例中,控制器包括调度器,该调度器按时间交替来调度各种DFG在结构上的执行。当调度特定DFG时,调度器“将DFG映射到结构上”,即配置结构中的至少一些计算节点和互连以执行DFG中指定的代码指令。调度器向结构发送多个线程以供执行,并且结构根据DFG执行这些线程,通常以从存储器中读取各个线程的初始值来开始。在当前调度的DFG上执行线程期间,结构将各个线程的结果保存到存储器,并且调度器重新配置结构以执行下一个DFG。以这种方式进行调度、重新配置和执行,直到所有线程完成执行软件程序,或者直到控制器出于任何原因决定暂停处理。
在一些实施例中,调度器连续地维护“下一个DFG表”(NDT),该表为每个线程指定线程要在其上执行的下一个DFG。例如,对于有效地选择用于发送到结构的线程的批次,以及对于确定每个NDT的挂起线程(pending thread)的数量,NDT是有用的。例如,通过调度具有最大数量的挂起线程的DFG,后面的信息可以被用作调度标准。还公开了其他示例调度标准。
在一些实施例中,控制器使用相同的计算结构来运行可能与多个不同用户相关联的多个单独的软件程序。如上所述,使用互连DFG的相应结构来表示每个程序。程序之间的交替通常在DFG之间的执行边界处执行,即,当待暂停的程序的线程完成在特定DFG上的执行时。在这些点上,程序的状态(例如,DFG配置、NDT、存储器状态和活值(live value))是完全定义的。
在本上下文中,术语“活值”(LV)指的是线程的临时结果,这些活值在执行期间被保存到存储器中,以便稍后由不同DFG中的同一线程使用。这样的存储器可以以各种方式实现,例如,作为L1高速缓存的一部分或与L1高速缓存分离,作为高速缓存或作为暂存器(scratch pad)等。当在程序之间交替时,控制器通常保存正被暂停的程序的状态,并加载被恢复的程序的状态。
本文描述了它们使用的计算结构、计算节点、调度器以及数据结构的各种实现示例。还解决了信息高速缓存和预取的方面。还描述了结构中的被分配为开始和结束线程执行的启动器和终止器节点的功能。启动器和终止器节点可以在结构的加载存储单元(LSU)计算节点中实现。
系统描述
图1是根据本发明的实施例示意性地示出粗粒度可重构阵列(CGRA)处理器20的框图;处理器20基于可重构计算结构24,该结构24包括被布置成阵列的多个计算节点28。出于简洁的目的,CN 28也被简称为“节点”。在示例实施例中,结构24共有256个CN 28,布置成16×16的阵列,尽管可以使用任何其他合适的CN数量和布置。
使用互连30将结构24中的CN 28彼此连接,用于在CN之间传送数据和控制信息(称为“令牌”)。在本实施例中,每个CN 28包括交换机(switch)(在图1中未见,在下面的图2和图3中示出了示例),其可被配置成将CN与一个或更多个选定的相邻CN连接。在一些实施例中,CN28可以发送和/或接收附加控制信息,例如,配置和/或异常。这样的信息可以通过分离的互连(例如,与互连30分离的控制网络)传送。例如,请参见下面图2和图3中标记为“到/来自控制器”的互连。
处理器20还包括1级(L1)高速缓存36(或者,替代地,多级高速缓存),其连接到外部存储器40和结构24。高速缓存36和外部存储器40被统称为处理器的存储器系统。结构24中的至少一些CN 28被配置成将数据存储在存储器系统中并从存储器系统加载数据。
在一些实施例中,结构24中的所有CN 28在结构上相似。在其它实施例中,结构24包括两种或更多种不同类型的CN。下面的图2和图3示出了被配置成执行数学计算的浮点单元/算术逻辑单元(FPU/ALU)CN以及被配置成执行存储器加载和存储操作的加载存储单元(LSU)CN的示例。在一些实施例中,LSU CN位于沿结构24的周边,以便简化它们与存储器系统的互连。FPU/ALU CN可以位于结构24中任何合适的位置。本文未详细讨论的其他类型的CN,可以包括控制CN,以及执行诸如除法或平方根计算的高复杂度计算的CN。
处理器20还包括控制器32,除其他功能外,控制器32配置结构24以执行期望的计算任务。控制器32通常配置每个CN的功能以及CN之间的互连拓扑。控制器32通常通过控制网络向CN 28发送控制寄存器来配置结构24。
控制器32通常接收由适当的编译器产生的软件代码的编译后的版本。编译后的代码包括作为互连的数据流图(DFG)54的结构50的软件代码表示。每个DFG 54表示代码的相应部分,并且具有单个入口点和一个或更多个出口点。每个DFG都是有向图,其中顶点表示代码指令,并且弧线表示指令之间的数据流。DFG的出口点(例如,有条件的或无条件的分支、函数调用或从函数返回等)包括通向(不同或相同的)DFG的输入或终止程序的指令。
为了执行给定的DFG,控制器32配置选定的CN 28和它们之间的互连,以执行DFG中指定的代码指令和流控制。此操作也称为“将DFG映射到结构上”。
典型的DFG以从存储器系统读出初始值(活值)和可能的数据开始,然后继续执行处理数据并可能存储数据的指令序列,并以存储活值结束。然而,通常,从存储器加载值(活值和数据)和/或将值存储到存储器可以在DFG的任何阶段执行,而不必在开始/结束时执行。在示例实现中,控制器32通过以下操作来配置结构以执行这样的DFG:分配一个或更多个LSU CN以读取初始值,分配适当的CN(例如,FPU/ALU CN)以执行DFG中指定的指令,以及分配一个或更多个LSU CN以存储结果。控制器32还配置一个或更多个CN的交换机,以便根据DFG中指定的流使CN互连。这种配置的示例可以在上述美国专利申请公开2018/0101387中找到。
一旦配置有给定DFG,结构24能够以流水线方式执行多个线程,每个线程对不同数据执行给定DFG的指令。在这样的流水线操作中,给定的CN针对不同的线程在(具有不同的参数的)DFG中执行相同的指令。一旦CN完成对一个线程的指令执行,其就准备对下一个线程执行该指令。通常,不同的线程处理不同的数据,因为为线程加载数据的加载指令指定取决于线程ID的地址。
通常,结构24的大小不足以同时执行整个结构50(即所有DFG)。因此,在一些实施例中,控制器32包括按时间交替来调度对各个DFG 54的执行的DFG调度器44。调度器44使用被称为下一个DFG表(NDT)48的数据结构来调度DFG。下面详细描述调度器44的操作以及用于调度的各种数据结构。
图2是根据本发明的实施例示意性地示出FPU/ALU节点60的框图。节点60的配置可以用于实现图1的CGRA处理器20的结构24中的至少一些CN 28。
FPU/ALU节点60包括计算元件64、交换机68和令牌缓冲器72。交换机68被配置成将节点60连接到结构24中的一个或更多个选定的邻居CN,用于从邻居CN接收输入令牌并将输出令牌发送到邻居CN。输入令牌可以包括例如来自邻居CN的数据和元数据(控制信息),以便在节点60的计算中用作操作数。输出令牌可以包括,例如,提供给邻居CN用于后续处理的节点60的计算结果。输入和输出令牌还可以包括控制信息。
在本示例中,节点60可以连接到结构24中的八个最近的邻居CN 28中的任何一个,表示为CN0…CN7。因此,节点60具有连接到交换机68的八个互连30。替代地,可以使用任何其他合适的互连拓扑。
令牌缓冲器72被配置成存储从邻居CN接收并等待处理的输入令牌,和/或被处理并等待输出到邻居CN的输出令牌。计算元件64包括执行节点60的计算的电路,例如,FPU、ALU或任何其他合适的计算。
考虑其中控制器32配置结构24以执行特定DFG 54的场景。作为该配置的一部分,分配FPU/ALU节点60以执行DFG中的特定代码指令。为了扮演该角色,控制器32配置计算元件64以执行指令中指定的计算,例如加法或乘法。控制器32还配置交换机68以将适当的互连30连接到向代码指令提供输入并消耗代码指令的结果的CN。该交换机还可以被配置成将值传送到其他CN,而不经过计算元件64。
在本示例中,节点60还包括辅助逻辑76和解码器80。辅助逻辑76包括持有由控制器32配置的交换机68和计算元件64的配置参数的配置寄存器。此外,辅助逻辑76可以执行诸如与控制器32的通信、中断处理、计数器管理等功能。
在典型的配置过程中,控制器32向FPU/ALU节点60发送配置辅助逻辑76中的配置寄存器的一个或更多个指令。解码器80对从控制器32接收的指令进行解码,并相应地对配置寄存器进行配置。如下面将要解释的,在一些实施例中,节点60包括用于在DFG之间实现快速切换的双配置寄存器(也称为“影子寄存器”)。
图3是根据本发明的实施例示意性地示出LSU节点84的框图。节点84的配置可以被用于实现图1的CGRA处理器20的结构24中的一些CN28。
LSU节点84被配置成执行加载和存储指令,即,经由高速缓存36从存储器40加载数据,以及经由高速缓存36将数据存储到存储器40。如上所述,LSU节点通常位于沿结构24的周边,以简化它们与存储器系统的互连。
LSU节点84包括交换机88、令牌缓冲器92和解码器98,其在结构和功能上分别类似于FPU/ALU节点60的交换机68、缓冲器72和解码器80。附加地,节点84包括例如用于存储器地址计算的计算元件94。节点84还包括辅助逻辑96,其执行诸如与控制器32的通信、与L1高速缓存36的通信、配置寄存器的存储、中断处理、计数器管理、NDT更新以及启动器和终止器功能(将在下面说明)的功能。
在替代实施例中,启动器和终止器功能可以在单独的CN中实现,而不是在LSU节点84中实现。因此,在本上下文中,术语“启动器”和“终止器”分别指执行启动器和终止器功能的任何CN。启动器和终止器功能可以在专用CN中实现,或者与同一CN中的其他功能组合,例如在LSU节点中。
在一些实施例中,当将给定DFG映射到结构24上时,调度器44可以去激活(例如,断电)不参与执行给定DFG中指定的代码指令的一个或更多个CN 28,以便减少功耗。调度器可以仅去激活CN的部分,例如,仅去激活交换机(例如,交换机68或交换机88)或仅去激活计算元件(例如,元件64或元件94)。
如图1-图3所示,CGRA处理器20、FPU/ALU节点60和LSU节点84及其各种部件的配置是单纯为了概念清晰而描述的示例配置。在可替代的实施例中,可以使用任何其它合适的配置。多线程CGRA处理器的附加方面在上述美国专利申请公开2018/0101387中得到说明。
在各种实施例中,处理器20及其元件可使用诸如在专用集成电路(ASIC)或现场可编程门阵列(FPGA)中的任何合适的硬件来实施。在一些实施例中,处理器20的一些元件,例如控制器32,可以使用用软件编程以执行本文描述的功能的可编程处理器来实现。软件可通过网络以电子形式下载到处理器,例如,或者可替代地或另外,软件可以被提供和/或存储在非暂时性有形介质(诸如,磁存储器、光存储器或电子存储器)上。
DFG调度
在许多实际情况中,要由处理器20执行的整个软件程序太大,无法将其全部映射到结构24上。因此,在一些实施例中,整个程序被划分为多个DFG,并且控制器32在不同时间以合适的交替调度将不同的DFG映射到结构24上。在本文描述的实施例中,尽管不是必须的,但假设结构24每次配置有一个选定的DFG。
此外,处理器20通常需要对不同的数据多次执行软件程序。每个这样的实例在本文被称为线程。结构24能够以流水线方式并发地执行若干线程。在示例实施例中,线程总数被划分为集合(称为“线程的集合”或“线程集合”)。控制器32与启动器一起工作,以经由“线程批次”启动线程。通常,启动器每个周期根据其获得的线程批次创建线程。线程集合的示例大小为16000,一个批次的线程的示例大小为64。替代地,可使用任何其他合适的数字。根据线程在线程批次中的位置和已经处理的批次的数量,为线程集合中的每个线程分配表示为“Flow_ID”的标识符。启动器然后可以根据线程集合和ID计算线程ID(“tid”)。
考虑结构50的示例,在上面图1的左手边。在本示例中,编译器将软件程序划分成被表示为DFG0…DFG9的10个DFG 54。程序的高级流控制由连接DFG输出和输入的箭头表示。DFG0是正被执行的第一个DFG,可能是从某个存储器状态开始的。DFG9是正被执行的最后一个DFG,以另一存储器状态(即各个线程的最终结果)结束。
如在图1中所述,结构50的高级流控制具有从DFG0到DFG9的若干可能的路径。不同的路径是由于例如,执行上的数据依赖差异(例如,条件分支指令)。因此,在实践中,一些线程将遍历一个路径,而其他线程将遍历不同的路径。
换句话说,一些DFG有多个出口,不同的线程可能在不同的出口处离开给定的DFG。例如,DFG0有三个可能的出口,通向DFG1、DFG2和DFG6。在该示例中,对于某些线程,在DFG0之后要执行的下一个DFG是DFG1,对于其他线程,下一个DFG是DFG2,对于还有其他线程,下一个DFG是DFG6。作为另一个示例,DFG3有两个可能的出口,一个通向DFG7,而另一个循环回到DFG3的输入。例如,当DFG3在代码中实现循环迭代时,就会出现这种结构。
在典型的操作流中,控制器32中的DFG调度器44每次一个地调度各个DFG 54以在结构24上执行。通常,当执行特定DFG时,结构24将仅执行线程的部分子集,例如,仅执行(i)遵循遍历当前DFG的流控制路径的线程以及(ii)从先前DFG准备好其初始值的线程。当从一个DFG交替到另一个DFG时,需要保存在前一个DFG上运行的线程的结果(活值),以便它们可以被在后面DFG上运行的(相同的)线程作为初始值读取。
图4是根据本发明的实施例示出指定在各种程序执行状态下要为多个线程调度的结构50中的下一个DFG 54的表的图示。图4的示例假定调度器44按照DFG索引的递增顺序(即,DFG0,然后DFG1,然后DFG2,依此类推)调度DFG。
在图4中对表描绘了十二次,对应于十二个不同的执行阶段。第一阶段(见图的顶部处)是在执行DFG0之前。第二阶段是在DFG0上执行16K线程之后,并且在DFG1上执行线程之前,依此类推。在每个阶段,该表为线程集合中的每个线程(对于{0,1,2,…,214-1}中的每个Flow_ID))指定要执行的下一个DFG的索引。最后一个阶段是在DFG9中的所有线程都被执行之后,在这种情况下没有下一个DFG,所有表条目都被设置为“终止”(T)。
图5是根据本发明的实施例示出下一个DFG表(NDT)48的图示。NDT 48的条目由调度器44在调度对DFG的执行中使用。调度器还随着执行的进行更新NDT。
NDT 48的每一行对应于相应的Flow_ID,即线程的集合中的相应线程。每一列对应于相应的DFG。在给定的行(对应于线程)中,对应于要为该线程执行的下一个DFG的列中的条目被设置为“1”。行中的所有其他条目都被设置为“0”。
NDT结构简化了调度器44的操作。例如,调度器可以通过简单地计数第K列中“1”条目的数量来确定DFG K中要执行的线程的数量是M。(替代地,NDT可以明确地存储需要在每个DFG上执行的线程数量。)对于DFG K,如果该DFG是下一个被调度的,调度器可以通过提取第K列中的“1”条目的行索引来获得将执行的线程的索引。
通常,控制器32持有NDT 48(例如,图5中所示的NDT)而不持有图4的表。在一些实施例中,控制器32可以持有图4的表和NDT 48两者。
图6是根据本发明的实施例示意性地示出DFG调度器44的框图。在本示例中,调度器44包括执行控制逻辑100和配置控制逻辑104。
执行控制逻辑100执行实际调度,即,选择要执行的下一个DFG(或多个DFG)。执行控制逻辑100还与结构24中用作启动器或终止器(可能是LSU节点)的一个或更多个CN通信,例如,用于发送用于执行的线程批次并接收关于已完成执行的线程批次的信息。
配置控制逻辑104根据当前选定的DFG的配置在结构24中配置CN28和它们之间的互连。DFG配置通常指定(i)正在被配置的CN 28的集合,(ii)针对每个CN的配置,以及(iii)CN之间的互连的配置。在一些实施例中,例如,当交换机在CN内部时,互连配置可以被视为CN配置的一部分。
在本示例中,执行控制逻辑100使用上述NDT 48并使用DFG序列表
114选择下一个DFG或多个DFG。DFG序列表114为每个DFG指定准备
在该DFG上执行的线程总数。指针116指向当前在结构24中正被执行的
DFG的条目。
在示例实施例中,执行控制逻辑100识别具有最大数量的就绪线程的DFG,并选择该DFG以接下来执行。在一些情况下,该标准可能导致无进展情况,因此逻辑100可以偶尔偏离它并恢复到不同的标准。
通常,由于程序的高级流控制(例如,图1中的结构50)通常是很重要的,所以各种调度顺序是可能的,并且逻辑100可以使用各种标准来设置DFG的调度顺序。上面描述的标准只是一个非限制性的示例,下面进一步建议了若干替代标准。
在一些实施例中,调度器44包括配置预取器112,其预先从存储器系统预取一个或更多个DFG配置。为此,执行逻辑100不仅可以指示下一个要调度的DFG,而且可以指示接下来要调度的两个或更多个DFG的序列。预取器112根据该序列预取DFG配置,并将DFG配置存储在配置先进先出(FIFO)缓冲器108中。配置控制逻辑104从FIFO 108读取适当的预取DFG配置,并将DFG配置发送到结构24。附加地或替代地,配置控制逻辑104还可以直接从存储器系统读取DFG配置。
在一些实施例中,调度器44在专用高速缓存中持有最频繁使用的DFG配置的小的子集。在一些实施例中,当在芯片上实现诸如处理器20的多个处理器时,该芯片可以持有各种处理器20可访问的较大高速缓存,并持有附加的DFG配置。
在一些实施例中,预取器112在当前DFG的执行已经开始之后立即预取下一个非空DFG(具有准备要执行的线程的下一个DFG)。在一些实施例中,编译器可以指示一个或更多个目标DFG的标识,其可能被高频率地更新并且应该被预取。以低频率(例如,极端情况,罕见的非法值(rare illegal values))更新的目标DFG可以在L2 NDT高速缓存(参见下面关于NDT高速缓存的部分)中更新,并且不被预取。
在一些实施例中,调度器44(通常为逻辑104)将预取的DFG的配置发送到结构24,同时当前DFG仍在被执行。在一个实施例中,结构24的CN 28持有用于存储根据当前DFG和下一个(预取的)DFG的配置的双配置寄存器(也称为“影子寄存器”)。当完成执行当前DFG时,调度器44向CN发送复位信号,CN又根据来自适当的影子寄存器的下一个DFG加载配置。
图6中所示的DFG调度器44的配置是示例配置,其单纯为了概念清晰起见而被描绘。在可选的实施例中,可以使用任何其它合适的配置。例如,图6的调度器44使用一个接口(“数据路径”),用于向结构24提供线程和数据,并使用单独的接口(“控制路径”),用于向结构发送DFG配置。在替代实施例中,线程、数据和DFG配置可以通过单个接口提供。
在一个实施例中,调度器44将一批次的线程作为{Thread_batch_bitmap、Thread_batch_ID、Thread_set_ID)的形式的元组(tuple)发送给启动器,其中Thread_batch_bitmap是指示连续后续的FLOW_ID中的哪些被调度以在当前DFG上执行的位图。例如,调度器44可以发送Thread_batch_bitmap作为64位寄存器,其指定哪些FLOW_ID将在线程的批次中被执行(例如,“1”指示要被执行的线程,而“0”指示不会被执行的线程)。Thread_batch_ID表示Thread_set中的批次数量,以及thread_set_ID指示线程集合的ID。这些参数使启动器能够计算批次中的每个线程的线程ID(tid),即线程集合的数量、该批次线程的数量以及批次内的线程的确切数量。
在一些实施例中,为了确保结构24知道所有要被调度的DFG,并且为了实现有效的DFG预取和调度,调度器44持有以下形式的表:
表1:示例DFT表
在DFG表中,“DFG id”表示DFG的索引,“DFG指针”表示其中DFG存储在存储器系统中的地址(例如,使用类似于IP地址的格式),“要执行的线程数量”表示准备在相关DFG上执行的线程的数量,以及“执行次数”表示在最后一次调度DFG时连续调度DFG的次数。
图7是根据本发明实施例的流程图,其示意性地示出了用于由处理器20的DFG调度器44执行的DFG调度和执行DFG时的线程调度的方法。该方法开始于调度器44(通常为逻辑100)在DFG选择步骤120处选择接下来要调度的DFG。任何合适的调度规则都可以被用于该选择。选定的DFG的索引在下面表示为K。
在配置发送步骤124处,调度器44(通常为逻辑104)将选定的DFG的配置发送到结构24。结构24的各种CN 28接收其各自的配置参数,并相应地进行配置。从该阶段开始,选定的DFG被映射到结构上,并且结构已经准备好执行线程。
在批次选择步骤128处,调度器44(通常为逻辑100)选择一批次线程(通常至多64个线程)以供执行。如上文关于图5解释的,NDT 48中的第K列(对应于所选DFG的列)在对应于针对其下一个DFG为K的线程的行中具有“1”,在其他行中具有“0”。因此,调度器44从其在NDT列K中的条目为“1”的线程中选择该批次线程。换句话说,调度器44提取对应于批次中的线程的FLOW_ID的NDT 48的第K列的部分(可能不是列的连续部分)。调度器44将第K列的该部分作为Thread_batch_bitmap发送到启动器。
在批次发送步骤132处,调度器44(通常为逻辑100)将选定的线程的批次发送到结构24,用于根据选定的DFG来执行。如上所述,线程的批次通常作为{Thread_batch_bitmap,Thread_batch_ID,Thread_set_ID)形式的元组来被发送。替代地,可以使用线程批次的任何其他合适的表示。
在置空步骤(nulling step)136,调度器44(通常为逻辑100)访问NDT 48的列K,并置空(设置为“0”)该列中对应于批次中的线程的条目。
在执行步骤140处,结构24开始根据当前配置的DFG执行线程的批次。
一旦发起批次中的所有线程的执行(但通常在执行完成之前),调度器44(通常为逻辑100)将线程的下一批次发送给启动器。逻辑100可以使用FIFO,用于有效地发送批次。
当在结构中执行线程时,终止器分批次收集完成的线程。一旦在终止器中完成了批次,在批次完成步骤144处,终止器在完成消息中将批次发送回控制器32(或直接更新NDT)。完成消息为批次中的每个线程指示线程将在其中继续执行的下一个DFG的标识。对于给定的线程,线程将在其中继续执行的下一个DFG被称为该线程的“后继DFG”。
在一个实施例中,对于任何给定的DFG,可能的后继DFG的最大数量是2,并且可能的后继DFG的索引对于结构和调度器是已知的。因此,结构24可以通过向调度器44发送两个64位位图来报告每个线程的后继DFG。两个位图中的每个位对应于批次中的相应线程。一个位图对应于一个后继DFG(表示为“DFG A”),并且另一个位图对应于另一个后继DFG(表示为“DFG B”)。如果线程的后继DFG是DFG A,则在第一个位图中将线程的位值设置为“1”,如果不是,则设置为“0”。类似地,如果线程的后继DFG是DFG B,则在第二位图中,将线程的位值设置为“1”,如果不是,则设置为“0”。
在其它实施例中,对于任何给定的DFG,可能的后继DFG的最大数量大于2。在这种情况下,需要更多数量的位来指示每个线程的后继DFG。在一个实施例中,对于任何给定的DFG,可能的后继DFG的最大数量是4,需要两个位来报告每个后继DFG。为了报告一批64个线程的后继DFG,结构24可以例如以连续的时钟周期发送四个64位位图。
现在调度器44(通常为逻辑100)继续用批次中刚刚完成的线程的后继DFG来更新NDT 48。在向量创建步骤148处,调度器44为每个可能的后继DFG创建相应的64位“后继向量”。在对应于第N个后继DFG的第N个后继向量中,调度器将其后继DFG为第N个后继DFG的所有的FLOW_ID的条目设置为1,并且将其他条目设置为“0”。
在NDT更新步骤152处,调度器44(通常为逻辑100,但可能直接通过终止器)使用后继向量更新NDT 48。对于给定的后继向量(其对应于特定后继DFG),调度器44更新对应于该DFG的NDT列。在一个实施例中,调度器44在后继向量和NDT列中的对应条目(在该上下文中的“对应条目”意指对应于已完成的批次中的线程的条目)之间执行按位逻辑或(OR)。以这种方式,后继向量中的“1”值将被转移到NDT,以指示这些线程的新的后继DFG。NDT中现有的“1”值不会被重写。
在第一检查步骤156处,调度器44(通常为逻辑100)与启动器一起检查是否还有剩余的附加线程用于执行当前配置的DFG。如果是,方法循环回到上面的步骤128,用于选择和处理下一批次线程。通常,在将位图发送到终止器时立即与其他阶段并行执行检查(对于用于在当前配置的DFG上执行的剩余线程)。在一些实施例中,也用终止器执行这种类型的检查,以便决定何时所有线程已完成执行(在这种情况下,可以切换到下一个DFG)。
否则,在第二检查步骤160处,调度器44(通常为逻辑100)检查当前配置的DFG是否是最后的DFG。如果不是,则该方法循环回到上面的步骤120,用于选择和处理下一个DFG。如果当前配置的DFG是最后一个DFG,则方法终止。
图7中的流程是示例流程,其单纯出于概念清晰的目的而被描绘。在替代实施例中,任何其他合适的流可以被用于实现所公开的调度技术。
在各种实施例中,在步骤120处,调度器44(通常为逻辑100)可以使用各种调度标准来选择下一个DFG。在一些实施例中,调度器44以循环序列的顺序调度DFG,即使用循环调度。DFG通常没有内部循环。因此,可以通过为每个DFG设置最大生存时间(TTL)来限制循环方案的时间片(time slice),在此之后切换到下一个DFG。
在替代实施例中,调度器44可以使用任何其他合适的调度规则来选择下一个DFG。调度规则的非限制性示例可以包括:选择不包括当前DFG的最小DFG(具有最小指令数量的DFG)、选择具有最大要执行的线程数量的DFG(不包括当前DFG)、或者根据某一合适的预定义顺序选择DFG。例如,可以由编译器或软件代码本身定义顺序。
在某些情况下(例如,参见图1中的DFG3),给定DFG的后继DFG中的一个是同一DFG。例如,该情况发生在如图1的DFG3中的循环中。在一些实施例中,线程在这样的DFG上的执行在一次通过DFG之后将被视为完成(然后调度器可以决定立即再次执行同一DFG)。在其他实施例中,线程在这样的DFG上的执行在完成所有所需的通过DFG之后将被视为完成(直到针对该线程的下一个DFG变成不同的DFG)。
在一些实施例中,当配置结构24以执行特定DFG时,调度器44用将并发运行的DFG的多个副本配置结构。例如,对于比结构小得多的DFG来说,这个特性是有用的。在这些实施例中,DFG副本执行程序的相同部分,但被映射到CN 28的不同子集。特别地,DFG的每个副本都有自己的启动器和终止器节点(下面将进一步解释启动器和终止器功能)。
在一个实施例中,调度器44被配置为在同一周期中发送{Thread_batch_bitmap、Thread_batch_ID、Thread_set_ID}的多个元组。在该实施例中,调度器44还被配置成在同一周期中接收多个完成消息(每个报告针对其相应DFG副本的后继DFG的位图)。这样的位图可能会以无序的方式到达调度器。
因此,调度器44应该支持在同一周期中利用读取和写入两者来访问NDT 48。在一些实施例中,NDT 48提供读取和写入两个端口。通常,使用“读取并重置”策略,其在读取字(word)时重置它们。这种设计可用于避免增加额外的写入端口。
在一个实施例中,调度器44负责初始化表示程序的开始(prologue)(在程序(线程的集合)中执行的第一DFG)的NDT行。
程序状态与多程序操作
如上所述,处理器20中的软件程序包括互连的DFG的结构和线程的集合。在一些实施例中,在下一个DFG开始执行之前,当特定DFG已经完成执行时,程序的状态被完全定义。在这些时间点上,程序的状态完全由以下项来指定:(i)用于线程集合中每个线程的下一个DFG的标识,(ii)由线程集中每个线程使用的变量的活值,以及(iii)存储器状态。控制器32可以在每个DFG的执行完成时将该完全状态(full state)提交给存储器系统。
在其他实施例中,当一定数量的线程已经在特定DFG上完成执行,并且其余的线程没有开始执行时,软件程序的状态被完全定义。该场景通常发生在完成特定DFG时,但也可以在DFG的执行期间由控制器发起(例如,由于来自较高级软件的上下文切换请求)。然后控制器将停止向启动器发送新的线程批次,并等待直到DFG中已经运行的所有线程完成执行。
在一些实施例中,处理器20可以交替地运行多个单独的软件程序(在DFG 54的单独结构50上运行的单独的线程集合)。这种交替被称为“多程序操作”,因为不同的程序可能与不同的用户相关联。在这些实施例中,控制器32执行两个级别的交替。在较高级别,控制器32在DFG 54的两个或更多个结构50之间交替。在较低级别,控制器32在特定程序内调度DFG 54。作为该两级交替的部分,控制器32分开维护和保存每个程序的状态。
当从一个程序切换到另一个时,控制器32通常保存被暂停的程序的状态,并检索被恢复的程序的状态。在一些实施例中,控制器可以使用“急切(eager)”驱逐/获取(eviction/fetching)机制,该机制响应于切换主动地驱逐先前程序的所有状态信息并加载新程序的所有状态信息。在其他实施例中,控制器可以使用“惰性(lazy)”驱逐/获取机制,该机制在需要信息时加载针对新程序的状态信息,并且在必要时(例如,当存储器空间变得有限时)驱逐先前程序的状态信息。
在一个实施例中,当切换程序时,控制器32将旧程序的高速缓存的信息(例如,DFG、NDT、活值和/或存储器状态)从本地存储器驱逐到更高层次存储器。在另一个实施例中,在切换到新的程序之后,如果新的程序的信息要从高层次的存储器转移到本地存储器,则控制器在本地存储器中为新的信息分配空间,并且如果需要,为此目的从本地存储器中驱逐旧的程序的信息。
在一些实施例中,存在从程序(可能是用户)释放存储器的“垃圾处理(garbagedisposal)”过程,对于这些程序(可能是用户)决定不保留它们的活值、NDT和/或DFG。控制器可以从存储器中释放程序,例如,因为程序完成了执行,或者因为控制器(或更高级别的软件)出于任何原因决定终止其执行。
在一些实施例中,L1高速缓存36包括虚拟访问高速缓存,在这种情况下,控制器通常在切换程序时刷新(flush)它。
程序的状态不一定在每个周期都被完成。通常,只有在特定DFG上完成线程批次(或整个线程集合)的执行时,程序的状态才被完成,即完全定义的。在这些时间点,控制器32将状态保存到存储器系统。这些时间点也是允许将结构24从一个DFG切换到另一个DFG的时间。
在各种实施例中,处理器20可以使用各种技术来验证当前程序的状态是否完成。在一些实施例中,处理器20中的电路(例如,调度器44或结构24中的CN 28)对在当前DFG上完成执行的线程的数量进行计数,并以此方式验证一批线程(或整个线程集合)是否完成执行。在其他实施例中,在预先设置的DFG上发起线程的最后批次之后,将“最终令牌”沿着DFG从启动器节点发送到终止器节点。CN不允许最终令牌绕过其他令牌。终止器节点处的最终令牌的到达被用于验证完成了线程的集合的执行。
NDT、DFG和活值高速缓存
在一些实施例中,控制器32仅将部分NDT、DFG配置和/或活变量值本地存储在封闭和快速访问存储器中。将该信息的其余部分存储在更大,但访问速度更慢的更高的存储器层次中。未本地存储的信息可以被压缩。在一个实施例中,在处理结构24中的当前DFG期间执行信息(例如,DFG、NDT、活值和/或其他信息)的获取和/或驱逐。
例如,在一些实际情况中,并发活动的DFG 54的数量大于NDT 48中可在存储器中表示的DFG的数量。因此,在一些实施例中,控制器32将NDT 48管理为高速缓存。通常,处理器32根据thread_batch_ID和DFG_ID计算线程批次的地址。
在实施例中,在执行特定DFG 54之前,调度器44从存储器系统预取指示线程集合中的哪些线程应该被执行(对应于下一个DFG的NDT列)的16K位图。
在一个实施例中,在执行期间,如果正在写入的thread_batch_bitmap(指示当前线程批次中的线程的流ID的位图)存在于NDT L1高速缓存中,则调度器44在NDT中本地更新thread_batch_bitmap并将thread_batch_bitmap写入下一NDT层次(L2高速缓存/DRAM)。如果所讨论的thread_batch_bitmap不存在于NDT L1高速缓存中,则调度器44仅在下一个高速缓存层次中更新thread_batch_bitmap。
控制器32可以使用各种驱逐策略来从NDT L1高速缓存中驱逐thread_batch_bitmap。在一个实施例中,给出的优选是驱逐只包含零的空thread_batch_bitmap。
作为另一示例,在一些实施例中,控制器32将DFG配置管理为高速缓存。在实施例中,控制器32不从高速缓存中驱逐当前DFG及其可能的后继DFG。除此之外,可以使用任何合适的规则(例如,最近最少使用(LRU)规则)来驱逐DFG。
附加地或替代地,控制器32可以使用以下驱逐规则和预取规则中的任何一个:
·驱逐没有准备运行的挂起线程的DFG。
·根据由编译器或由软件代码本身指定的顺序(例如,根据DFG结构50中的DFG 54的高级流控制)驱逐DFG。
·例如,根据DFG表(诸如上面的表1)或DFG序列表114(图6)预取具有等待执行的最大线程数量(tid)的DFG。
·根据由编译器或由软件代码本身指定的顺序(例如,根据DFG结构50中的DFG 54的高级流控制)预取DFG。
启动器和终止器操作
在一些实施例中,结构24中的LSU节点(例如,图3的节点84)中的每一个可以用作启动器或终止器。在其他实施例中,启动器和终止器被实现为专用CN。启动器是开始执行在DFG中的线程的CN。终止器是完成执行DFG中的线程的CN。
启动器通常从调度器44接收线程批次以供执行。然后,启动器为发起的线程计算线程ID(tid),并(一个接一个地)将tid发送到其在结构24中的后继CN 28。在接收到tid时,每个CN 28执行其配置的计算,并根据DFD将结果转发给下一个CN。因此,每个tid作为数据令牌行进通过结构24。
通常,线程批次作为(Thread_batch_id、Thread_batch_bitmap、Thread_set_ID)元组在调度器44和启动器之间进行传送。当线程批次到达启动器时,启动器分析位图以识别其应该发起的线程ID(例如,通过将位图中设置的位的索引添加到Thread_batch_ID)。为了避免停顿,启动器可以使用预取和线程批次的双缓冲(“影子(shadowing)”)。每当接收到线程批次时,启动器都立即从调度器44请求下一个线程批次。
当整个线程集合在当前DFG上完成执行时(或者当调度器出于某种原因决定结束线程集合时,例如,为了执行上下文切换),即当调度器没有剩余的线程批次要发送时,启动器向结构发送“最终令牌”。该令牌不允许绕过任何其他令牌。最终令牌被发送到DFG的所有副本,并由终止器节点使用,用于验证线程集合是否已完成。
在示例实施例中,启动器根据以下伪代码进行操作:
终止器执行离开当前DFG的最终分支指令。在所公开的实施例中,来自DFG的每个出口点被实现为分支指令,为了简洁起见,在本文被称为“出口分支”。出口分支的目标地址是下一个DFG的起始地址。出口分支可以是有条件的或无条件的分支指令。出口分支可以是例如直接的分支指令、间接的分支指令、预测的分支指令或“线程停止(thread halt)”指令。DFG可以包括任何合适数量的出口点,可能是单个出口点。出口分支可以位于DFG中的任何地方,不一定是最后一条指令。
对于实现为直接分支的出口分支,在最初配置终止器节点时(作为配置结构的一部分以执行当前DFG),将后继DFG的标识指示给终止器节点。在运行时,到终止器节点的输入令牌(或多个令牌)或终止器节点本身根据分支条件确定后继DFG。根据针对每个线程的分支条件的结果(采取/未采取)来按线程确定后继DFG。在实施例中,终止器节点持有四个64位位图。当批次的线程完成执行时,终止器节点逐步构造一对64位位图,一个位图用于每个可能的后继DFG(一个位图用于每个可能的分支决定的结果)。
当批次中的所有线程完成执行时,终止器节点持有两个位图。在一个位图中,设置的位指示对其而言后继DFG对应于“采取”结果的线程。在另一位图中,设置的位指示对其而言后继DFG对应于“未采取”结果的线程。
当下一线程的批次开始执行时,终止器节点使用另一对64位位图。该机制使终止器能够在线程批次无序的情况下返回到第一对位图。如果另一线程的批次到达(即,新的地址),终止器更新NDT中最近最少使用的64位位图。
对于实现为间接分支的出口分支,终止器节点通常在运行时使用上述机制计算后继DFG的目标地址。终止器节点计算每个后继DFG的地址并更新相关的64位位图。一旦需要新的64位位图(例如,当当前线程的批次是新的批次时,或者当后继DFG不同时),终止器节点更新NDT中最近最少使用的64位位图。
在一些实施例中,终止器节点可以附加地接收每个线程的相应谓词(predicate),即指定分支是否是DFG的实际离开点的布尔值。终止器可以在输入令牌中接收谓词。由于DFG可能具有若干出口点,在多出口的情况下,每个出口点通常都是谓词。每个线程,只有实际的出口点将接收真谓词,其他出口点将接收假谓词。
在接收到最终令牌时,终止器节点更新NDT中的其所有活动的64位位图(即,用每个已完成线程的后继DFG的标识更新NDT)。一旦已知NDT更新完成,终止器节点通过发送最终令牌通知调度器44完成。该报告机制使调度器能够确保当前DFG的所有副本中的所有终止器都完成了各自线程批次的执行。
在实施例中,调度器44不使用最终令牌,而是计数发送到启动器的线程批次的数量(例如,发送到启动器的位图的数量),并将该数量与由终止器报告的已完成的线程批次的数量(例如,与由终止器报告的位图的数量)进行比较。当发送的批次(例如,位图)的数量等于接收的批次(例如,位图)的数量时,调度器断定当前DFG的执行已经完成。在此阶段,控制器32可以将程序状态视为完成(完全定义),保存该状态,并切换到(相同的程序/用户的或不同的程序/用户的)新的DFG。
在示例实施例中,终止器根据以下伪代码进行操作:
DFG切换注意事项
在上面描述的实施例中,对于结构24中的所有CN 28,同时执行从一个DFG到下一个DFG的切换。尽管实现起来比较简单,但就延迟而言,该解决方案并不是最优的。在替代实施例中,对于不同的CN 28,可以在不同的时间执行从一个DFG到下一个DFG的切换。例如,响应于检测到给定的CN 28已经完成其在执行当前线程集合中的所有线程中的部分,该给定的CN 28可以切换到下一个DFG。这种特定于CN的切换减少了通过发起新的DFG引起的延迟开销。
在本上下文中,术语“切换时间(switch-over time)”指的是根据下一个DFG重新配置CN硬件(例如,计算元件、交换机)的时间。通常预先将下一个DFG的配置设置提供给CN,并被存储在CN的影子配置寄存器中。
在示例实施例中,如上所述,启动器在发起线程集合中的线程的最后批次之后生成最终令牌。CN 28根据由DFG指定的数据流通过结构24将最终令牌从一个传递到另一个,直到到达终止器。在某些情况下,当数据流分成多个路径并随后合并时,给定CN 28将接收多个最终令牌。每个CN知道在到达终止器的途中应该穿过它的最终令牌的数量。因此,每个CN 28能够通过对穿过CN的最终令牌进行计数来验证其是否已经完成其在执行当前线程集合中的所有线程中的部分。
在一些实施例中,给定CN 28检测到其已经转发了最后的最终令牌,并作为响应切换到下一个DFG的配置。附加地,响应于检测到CN已经转发了最后的最终令牌,可以使下一个DFG中不活动的CN断电。这种检测和切换(或去激活)通常独立于任何其他CN。当CN 28以这种方式操作时,到下一个DFG的切换通常将通过结构24逐步发生,其中靠近启动器的CN较早地切换,并且远离启动器的CN较晚地切换。
在这样的实施例中,在所有的CN已经切换之前(即,靠近终止器的一些CN仍忙于执行先前DFG的最后的线程),启动器可以更早地经由结构开始发送下一个DFG的线程。结果,减少了由启动新的DFG引起的延迟。
在一个实施例中,一旦验证最后的最终令牌已经通过,CN将其所有的部件(例如,计算元件和交换机两者)重新配置成下一个DFG的配置。在其他实施例中,仅部分地重新配置CN,例如,仅重新配置计算元件和交换机的部分,而不是其全部。例如,一旦最后的最终令牌到达终止器,仍然同时重新配置剩余的CN部件。
另一个场景是当下一个DFG与当前DFG相同时,在该场景中可以在当前DFG仍被处理的情况下开始处理下一个DFG。例如,当DFG对应于程序循环的一次迭代(或若干次迭代)时,就会出现这种场景。在这种情况下,DFG之间的切换不需要重新配置CN。因此,在一些实施例中,当下一个DFG与当前配置的DFG相同时,允许调度器44在结构已经完成处理与当前DFG相关联的线程之前向结构24发送与下一个DFG相关联的线程。
应当理解,上述实施例是通过示例的方式引用的,并且本发明不限于已经在上文具体示出和描述的内容。相反,本发明的范围包括上文所描述的各种特征的组合及子组合以及本发明的变型和修改,所述变型和修改将在本领域的技术人员阅读上述描述之后被想到并且在现有技术中未被公开。通过引用并入本专利申请中的文件被视为本申请的组成部分,除了任何术语在这些并入的文件中在某种程度上以与本说明书中明确地或隐含地做出的定义冲突的方式被定义之外,应该仅考虑本说明书中的定义。
Claims (34)
1.一种处理器,包括:
计算结构,其包括计算节点的阵列和可配置地连接所述计算节点的互连;以及
控制器,其被配置成:
接收表示为互连的数据流图(DFG)的集合的软件程序,每个DFG指定执行所述软件程序的相应部分的代码指令;
按时间交替来调度所述DFG的执行;以及
对于正在被调度的每个DFG,配置所述计算结构中的至少一些计算节点和互连以执行在所述DFG中指定的所述代码指令,并向所述计算结构发送各自执行在所述DFG中指定的所述代码指令的多个线程。
2.根据权利要求1所述的处理器,其中,所述控制器被配置成选择以下中的一个,以作为下一个DFG:
具有等待执行的最大数量的线程的DFG;
具有最小数量的代码指令的DFG;
按为所述DFG的集合指定的预定义顺序下一个出现的DFG;以及
与当前执行的DFG相同的DFG。
3.根据权利要求1所述的处理器,其中,所述控制器被配置成在所述软件程序和表示为互连DFG的另一集合的至少另一软件程序之间切换。
4.根据权利要求1-3中任一项所述的处理器,其中,对于正在被调度的给定DFG,所述控制器被配置成在连续的批次中向所述计算结构发送所述线程,并且其中,所述计算结构被配置成以流水线方式执行每个批次的线程。
5.根据权利要求4所述的处理器,其中,所述控制器被配置成分配所述计算结构中的第一计算节点以作为接收所述线程的批次并发起所述批次的执行的启动器节点,并被配置成分配所述计算结构中的第二计算节点以作为终止所述批次的执行的终止器节点。
6.根据权利要求4所述的处理器,其中,所述计算结构被配置成在完成一批次线程的执行时保存所述软件程序的状态。
7.根据权利要求1-3中任一项所述的处理器,其中,对于正在被调度的给定DFG,所述控制器被配置成配置所述计算结构中的所述计算节点的多个子集,以并发地执行表示所述软件程序的同一部分的多个相应副本。
8.根据权利要求1-3中任一项所述的处理器,其中,所述控制器被配置成在运行时连续地维护为所述多个线程中的每一个指定相应的下一个DFG的表,并且被配置成基于所述表来调度所述DFG中的线程的执行。
9.根据权利要求8所述的处理器,其中,所述控制器被配置成将所述表存储在第一存储器中,并被配置成将所述表的一部分高速缓存在具有比所述第一存储器更快访问的第二存储器中。
10.根据权利要求1-3中任一项所述的处理器,其中,所述控制器被配置成将所述DFG的集合存储在第一存储器中,并被配置成将所述集合的一部分高速缓存在具有比所述第一存储器更快访问的第二存储器中。
11.根据权利要求10所述的处理器,其中,所述控制器被配置成将所述DFG中的一个或更多个从所述第一存储器预取到所述第二存储器。
12.根据权利要求1-3中任一项所述的处理器,其中,所述控制器被配置成将所述多个线程拆分为线程集合,并被配置成一个接一个地执行所述线程集合。
13.根据权利要求1-3中任一项所述的处理器,其中,对于正在被调度的给定DFG,所述控制器或不参与执行在所述给定DFG中指定的代码指令的计算节点被配置成去激活所述计算节点的至少一部分。
14.根据权利要求1-3中任一项所述的处理器,其中,对于正在被调度的给定DFG,所述控制器被配置成去激活控制一个或更多个互连的交换机的至少一部分,所述一个或更多个互连不参与执行在所述给定DFG中指定的代码指令。
15.根据权利要求1-3中任一项所述的处理器,其中,所述计算结构中的计算节点被配置成响应于验证所述计算节点已经完成处理与当前配置的DFG相关联的所有线程,从所述当前配置的DFG切换到下一个DFG。
16.根据权利要求1-3中任一项所述的处理器,其中,所述控制器被配置成根据下一个DFG,配置所述计算结构,并发地根据当前配置的DFG执行所述代码指令。
17.根据权利要求1-3中任一项所述的处理器,其中,当下一个DFG与当前配置的DFG相同时,所述控制器被配置成在所述计算结构已经完成与所述当前配置的DFG相关联的线程的执行之前,将与所述下一个DFG相关联的一个或更多个线程发送到所述结构。
18.一种计算方法,包括:
在包括计算结构的处理器中,接收表示为互连的数据流图(DFG)的集合的软件程序,所述计算结构包括计算节点的阵列和可配置地连接所述计算节点的互连,每个DFG指定执行所述软件程序的相应部分的代码指令;
按时间交替来调度所述DFG的执行;以及
对于正在被调度的每个DFG,配置所述计算结构中的至少一些计算节点和互连以执行在所述DFG中指定的所述代码指令,并向所述计算结构发送各自执行在所述DFG中指定的所述代码指令的多个线程。
19.根据权利要求18所述的方法,其中,调度所述DFG的执行包括选择以下中的一个,作为下一个DFG:
具有等待执行的最大数量的线程的DFG;
具有最小数量的代码指令的DFG;
按为所述DFG的集合指定的预定义顺序下一个出现的DFG;以及
与当前执行的DFG相同的DFG。
20.根据权利要求18所述的方法,还包括在所述软件程序和表示为互连的DFG的另一集合的至少另一软件程序之间切换。
21.根据权利要求18-20中任一项所述的方法,其中,发送所述线程包括:对于正在被调度的给定DFG,以连续批次的方式将所述线程发送到所述计算结构,以及包括由所述计算结构以流水线方式执行每个批次的所述线程。
22.根据权利要求21所述的方法,其中,发送所述线程包括分配所述计算结构中的第一计算节点以用作接收所述线程的批次并发起所述批次的执行的启动器节点,以及分配所述计算结构中的第二计算节点以用作终止所述批次的执行的终止器节点。
23.根据权利要求21所述的方法,还包括在完成一批次线程的执行时保存所述软件程序的状态。
24.根据权利要求18-20中任一项所述的方法,其中,配置所述计算节点包括:对于正在被调度的给定DFG,在所述计算结构中配置所述计算节点的多个子集以并发地执行表示所述软件程序的同一部分的多个相应副本。
25.根据权利要求18-20中任一项所述的方法,其中,调度所述DFG的执行包括在运行时连续地维护为所述多个线程中的每一个指定相应的下一个DFG的表,以及基于所述表调度所述DFG中的线程的执行。
26.根据权利要求25所述的方法,其中,维护所述表包括将所述表存储在第一存储器中,以及将所述表的一部分高速缓存在具有比所述第一存储器更快访问的第二存储器中。
27.根据权利要求18-20中任一项所述的方法,还包括将所述DFG的集合存储在第一存储器中,以及将所述集合的一部分高速缓存在具有比所述第一存储器更快访问的第二存储器中。
28.根据权利要求27所述的方法,其中,调度所述DFG的执行包括将所述DFG中的一个或更多个从所述第一存储器预取到所述第二存储器。
29.根据权利要求18-20中任一项所述的方法,还包括将所述多个线程拆分为线程集合,并一个接一个地执行所述线程集合。
30.根据权利要求18-20中任一项所述的方法,其中,配置所述计算节点包括,对于正在被调度的给定DFG,去激活不参与执行所述给定DFG中指定的代码指令的计算节点的至少一部分。
31.根据权利要求18-20中任一项所述的方法,其中,配置所述互连包括,对于正在被调度的给定DFG,去激活控制一个或多个互连的交换机的至少一部分,所述一个或多个互连不参与执行在所述给定DFG中指定的代码指令。
32.根据权利要求18-20中任一项所述的方法,其中,配置所述计算节点包括,在所述计算结构中的计算节点中,响应于验证所述计算节点已经完成处理与当前配置的DFG相关联的所有线程,从所述当前配置的DFG切换到下一个DFG。
33.根据权利要求18-20中任一项所述的方法,其中,配置所述计算节点和所述互连包括根据下一个DFG配置所述计算结构,并发地根据当前配置的DFG执行所述代码指令。
34.根据权利要求18-20中任一项所述的方法,其中,发送所述线程包括:当下一个DFG与当前配置的DFG相同时,在所述结构已经完成与所述当前配置的DFG相关联的线程的执行之前,将与所述下一个DFG相关联的一个或更多个线程发送到所述计算结构。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/860,070 US11354157B2 (en) | 2020-04-28 | 2020-04-28 | Handling multiple graphs, contexts and programs in a coarse-grain reconfigurable array processor |
US16/860,070 | 2020-04-28 | ||
PCT/IB2021/052104 WO2021220066A1 (en) | 2020-04-28 | 2021-03-14 | Handling multiple graphs, contexts and programs in a coarse-grain reconfigurable array processor |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115398393A true CN115398393A (zh) | 2022-11-25 |
Family
ID=78222231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180017016.1A Pending CN115398393A (zh) | 2020-04-28 | 2021-03-14 | 在粗粒度可重构阵列处理器中处理多个图、上下文和程序 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11354157B2 (zh) |
EP (1) | EP4143682A4 (zh) |
CN (1) | CN115398393A (zh) |
WO (1) | WO2021220066A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573607A (zh) * | 2023-11-28 | 2024-02-20 | 北京智芯微电子科技有限公司 | 可重构协处理器、芯片、多核信号处理系统和计算方法 |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0548074A1 (en) | 1989-08-21 | 1993-06-30 | Massachusetts Institute Of Technology | Distributed building of service request lists |
US20030115352A1 (en) * | 2001-12-18 | 2003-06-19 | Jeanine Picraux | Sending information using an in-progress transaction |
US7140019B2 (en) * | 2002-06-28 | 2006-11-21 | Motorola, Inc. | Scheduler of program instructions for streaming vector processor having interconnected functional units |
US7475393B2 (en) * | 2003-08-29 | 2009-01-06 | Motorola, Inc. | Method and apparatus for parallel computations with incomplete input operands |
ATE504043T1 (de) | 2005-04-28 | 2011-04-15 | Univ Edinburgh | Umkonfigurierbares anweisungs-zellen-array |
TW200801925A (en) * | 2006-06-23 | 2008-01-01 | Nat Univ Chung Cheng | Method for energy-efficient scheduling optimization for compiler |
WO2008021953A2 (en) | 2006-08-10 | 2008-02-21 | Ab Initio Software Llc | Distributing services in graph-based computations |
US8250556B1 (en) | 2007-02-07 | 2012-08-21 | Tilera Corporation | Distributing parallelism for parallel processing architectures |
US8615770B1 (en) | 2008-08-29 | 2013-12-24 | Nvidia Corporation | System and method for dynamically spawning thread blocks within multi-threaded processing systems |
US10127281B2 (en) * | 2010-12-23 | 2018-11-13 | Sap Se | Dynamic hash table size estimation during database aggregation processing |
US8692832B2 (en) | 2012-01-23 | 2014-04-08 | Microsoft Corporation | Para-virtualized asymmetric GPU processors |
KR101885211B1 (ko) | 2012-01-27 | 2018-08-29 | 삼성전자 주식회사 | Gpu의 자원 할당을 위한 방법 및 장치 |
US9135077B2 (en) | 2012-03-16 | 2015-09-15 | Advanced Micro Devices, Inc. | GPU compute optimization via wavefront reforming |
US9250665B2 (en) | 2012-06-07 | 2016-02-02 | Apple Inc. | GPU with dynamic performance adjustment |
KR101962250B1 (ko) * | 2013-03-05 | 2019-03-26 | 삼성전자주식회사 | 재구성가능 아키텍처를 위한 스케줄러 및 스케줄링 방법 |
US20150268963A1 (en) | 2014-03-23 | 2015-09-24 | Technion Research & Development Foundation Ltd. | Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware |
US10108683B2 (en) * | 2015-04-24 | 2018-10-23 | International Business Machines Corporation | Distributed balanced optimization for an extract, transform, and load (ETL) job |
AU2016306489B2 (en) | 2015-08-11 | 2019-04-18 | Ab Initio Technology Llc | Data processing graph compilation |
US10515093B2 (en) | 2015-11-30 | 2019-12-24 | Tableau Software, Inc. | Systems and methods for interactive visual analysis using a specialized virtual machine |
US10289672B1 (en) | 2015-12-21 | 2019-05-14 | Workday, Inc. | Threading spreadsheet calculations |
US10025566B1 (en) | 2016-10-07 | 2018-07-17 | The Mathworks, Inc. | Scheduling technique to transform dataflow graph into efficient schedule |
US11194551B2 (en) * | 2017-06-07 | 2021-12-07 | Ab Initio Technology Llc | Dataflow graph configuration |
US20190004878A1 (en) | 2017-07-01 | 2019-01-03 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with security, power reduction, and performace features |
US10949328B2 (en) * | 2017-08-19 | 2021-03-16 | Wave Computing, Inc. | Data flow graph computation using exceptions |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10380063B2 (en) | 2017-09-30 | 2019-08-13 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator |
US11307873B2 (en) * | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US11200186B2 (en) * | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
-
2020
- 2020-04-28 US US16/860,070 patent/US11354157B2/en active Active
-
2021
- 2021-03-14 CN CN202180017016.1A patent/CN115398393A/zh active Pending
- 2021-03-14 WO PCT/IB2021/052104 patent/WO2021220066A1/en unknown
- 2021-03-14 EP EP21795944.4A patent/EP4143682A4/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP4143682A4 (en) | 2024-03-13 |
WO2021220066A1 (en) | 2021-11-04 |
US20210334134A1 (en) | 2021-10-28 |
US11354157B2 (en) | 2022-06-07 |
EP4143682A1 (en) | 2023-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3771957B2 (ja) | プロセッサ・アーキテクチャにおける分散制御のための装置および方法 | |
US8667252B2 (en) | Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation | |
US8046563B1 (en) | Virtual architectures in a parallel processing environment | |
EP2783282B1 (en) | A microprocessor accelerated code optimizer and dependency reordering method | |
JP3569014B2 (ja) | マルチコンテキストをサポートするプロセッサおよび処理方法 | |
US7873816B2 (en) | Pre-loading context states by inactive hardware thread in advance of context switch | |
US5941983A (en) | Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues | |
JP3595504B2 (ja) | マルチスレッド式プロセッサにおけるコンピュータ処理方法 | |
CN108829615B (zh) | 具有可编程预取器的处理器 | |
JP3842129B2 (ja) | データ処理装置およびその制御方法 | |
KR100284789B1 (ko) | N-지로 분기를 갖는 슈퍼스칼라 또는 초장 명령어 워드컴퓨터에서 다음 명령어를 선택하는 방법 및 장치 | |
US8205204B2 (en) | Apparatus and method for scheduling threads in multi-threading processors | |
KR100745904B1 (ko) | 동시적 멀티스레드 프로세서에서 파이프라인 길이를변경하기 위한 방법 및 회로 | |
US6687812B1 (en) | Parallel processing apparatus | |
US20220214884A1 (en) | Issuing instructions based on resource conflict constraints in microprocessor | |
US20240103912A1 (en) | Inter-Thread Communication in Multi-Threaded Reconfigurable Coarse-Grain Arrays | |
CN115380272A (zh) | 在单个网格上并发处理多个图的粗粒度可重构阵列处理器 | |
CN115398393A (zh) | 在粗粒度可重构阵列处理器中处理多个图、上下文和程序 | |
US6119220A (en) | Method of and apparatus for supplying multiple instruction strings whose addresses are discontinued by branch instructions | |
WO2007039837A2 (en) | Implied instruction set computing (iisc) / dual instruction set computing (disc) / single instruction set computing (sisc) / recurring multiple instruction set computing (rmisc) based computing machine / apparatus / processor | |
JP4560705B2 (ja) | データ処理装置の制御方法 | |
Biedermann et al. | Virtualizable Architecture for embedded MPSoC |
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 |