CN116802605A - 用于根据触发条件执行指令的电路和方法 - Google Patents

用于根据触发条件执行指令的电路和方法 Download PDF

Info

Publication number
CN116802605A
CN116802605A CN202280012249.7A CN202280012249A CN116802605A CN 116802605 A CN116802605 A CN 116802605A CN 202280012249 A CN202280012249 A CN 202280012249A CN 116802605 A CN116802605 A CN 116802605A
Authority
CN
China
Prior art keywords
program instructions
execution
instruction
trigger
circuit
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
Application number
CN202280012249.7A
Other languages
English (en)
Inventor
姆布·埃约勒
贾科莫·加布雷利
巴拉吉·韦尼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN116802605A publication Critical patent/CN116802605A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17381Two dimensional, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7825Globally asynchronous, locally synchronous, e.g. network on chip
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/82Architectures of general purpose stored program computers data or demand driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

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)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Advance Control (AREA)

Abstract

本发明涉及一种电路,该电路包括处理电路,该处理电路被配置为根据匹配当前触发状态的相应触发条件来执行程序指令,并且响应于程序指令执行来设置下一触发状态;该处理电路包括:指令存储装置,该指令存储装置被配置为选择性地提供一组两个或更多个程序指令以供并行执行;和触发器电路,该触发器电路响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,来控制该指令存储装置以提供该给定的一组程序指令中的程序指令以供执行。

Description

用于根据触发条件执行指令的电路和方法
背景技术
本公开涉及电路和方法。
所谓的“空间架构”可通过展开或展开特定计算来加速应用程序,这些特定计算可主要在“空间”中而非在时间上形成应用程序执行的耗时部分。
通过使用能够同时操作的多个硬件单元在“空间”中展开计算。除了利用由已经散布在芯片上的分散应用程序提供的并发机会之外,空间架构还利用分布式片上存储器,使得每个处理元件与紧邻它的一个或多个存储器块相关联。因此,空间架构可以减轻所谓的冯诺伊曼瓶颈,该瓶颈影响许多传统架构并且潜在地阻碍性能。
本公开涉及此类布置的潜在改善。
发明内容
在一个示例性布置中,提供了一种电路,该电路包括:
处理电路,该处理电路被配置为根据匹配当前触发状态的相应触发条件来执行程序指令,并且响应于程序指令执行来设置下一触发状态;该处理电路包括:
指令存储装置,该指令存储装置被配置为选择性地提供一组两个或更多个程序指令以供并行执行;以及
触发器电路,该触发器电路响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,来控制该指令存储装置以提供该给定的一组程序指令中的程序指令以供执行。
在另一示例性布置中,提供了一种处理阵列,该处理阵列包括:此类电路的阵列;以及数据通信电路,该数据通信电路用于在该阵列的电路之间传送数据。
在另一个示例性布置中,提供了一种方法,该方法包括:
根据匹配当前触发状态的相应触发条件来执行程序指令,并且响应于程序指令的执行来设置下一触发状态;
由指令存储装置提供一组两个或更多个程序指令以供并行执行;以及
响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,控制该指令存储装置以提供该给定的一组程序指令中的程序指令以供执行。
在另一个示例性布置中,提供了一种计算机实现的方法,该方法包括:
根据相应的触发条件生成程序指令以供执行,程序指令的执行设置下一触发条件;
将程序指令划分为多组程序指令,至少一些组包含多于一个程序指令,其中给定组内的程序指令不取决于该给定组中的另一程序指令的结果;以及
为每个组生成输入触发条件和输出触发状态;该输入触发条件是当满足时使得能够执行该组的程序指令的条件,并且该输出触发条件是用于响应于完成该组中的所有程序指令的执行而生成的条件。
在另一个示例性布置中,提供了一种编译器,该编译器包括计算机程序代码,该计算机程序代码在由计算机执行时使该计算机执行上述方法。
本技术的另外的相应方面和特征由所附权利要求限定。
附图说明
将参考如附图所示的本发明的实施方案,仅以举例的方式进一步描述本技术,其中:
图1示意性地示出了示例性处理电路阵列;
图2示意性地示出了计算分块;
图3示意性地示出了存储器分块;
图4示意性地示出了数据流图;
图5示意性地表示存储器占用的示例;
图6至图8示意性地示出了各个电路;
图9示意性地示出了示例性数据处理装置;
图10示意性地表示编译器的操作;
图11和图12是示出相应方法的示意性流程图;并且
图13示意性地表示模拟实施方案。
具体实施方式
示例性处理阵列
参考附图,在图1中示意性地示出了空间架构的示例性实例。
在此示例性布置中,数据处理元件110的二维阵列100经由称为接口分块(IT)的数据传输单元130连接到存储器布置120,诸如高速缓存存储器分级结构或主存储器。
在空间架构的此示例中存在两种数据处理元件:执行大量数据处理操作和算术计算的所谓计算分块(CT)112以及主要负责对本地连接的存储器的数据存取及去往/来自较远程存储器区域和其他处理元件的数据传输的所谓存储器分块(MT)114。
在示例性实施方案中,提供了本地存储器块(图1中未示出,但是下面参考图3进行描述),也称为便笺式存储器(scratchpad),其连接到每个存储器分块(MT)或与每个MT相关联,并且每个MT具有到一个相应计算分块(CT)的直接连接。
每个MT-CT群集表示数据处理元件110,并且此类元件经由交换机140(在一些示例中也称为路由器)连接到片上网络150,该片上网络表示数据通信电路的示例以在阵列100的电路110之间传送数据并且在此示例中用于在MT之间以及在每个MT与接口块(IT)130之间传输数据。然而,其他配置也是可能的,诸如具有在若干MT之间共享的单个便笺式存储器或者具有直接访问多于一个便笺式存储器的MT。CT和MT之间的一一对应在该架构中也不是强制性的,并且可以是一个MT连接到多于一个CT的情况,或者反之亦然。换句话说,处理元件各自经由一组输入和输出通道连接到片上网络,该片上网络包括交换机以及这些交换机之间的数据链路,从而形成如图1所示的二维环面布局。
先进先出(FIFO)缓冲器(在图1中未示出,但在下文中参考图2和图3进行描述)称为“通道”,其用于向CT和MT传送数据,并且将处理后的数据从CT和MT带走。
CT和MT的架构基于所谓的触发指令架构[参见下面引用的参考文献1],该架构已扩展为支持向量处理和更高级的数据传输操作。
触发操作
在一些示例中,每个指令具有一组一个或多个“触发条件”或与其相关联,并且每个指令将仅在那些触发条件有效(也就是说,触发条件与通过执行另一程序指令而生成的触发状态匹配)时被发出或发送到执行单元。实际上,程序指令的执行不仅取决于匹配当前触发状态的相应触发条件,而且其自身可以设置下一触发状态。
触发条件特定于特定电路110,并且可取决于执行结果、通道占用或处理元件的某一其他规定状态。在完成后,每个指令可设置影响触发的一个或多个谓词寄存器,并且因此可随后用于确定其他指令是否准备好执行。值得注意的是,这种类型或架构通常不具有显式程序计数器,也没有专用的分支指令。其主要优点是简化了处理元件的前端电路,避免了由于控制流冲突而产生的流水线气泡,而无需求助于复杂的分支预测机制。
触发指令-示例性格式
一般而言,触发指令具有以下格式:
<operation><destination_operand>,<source_operand1>,<source_operand2>;<predicate_set_operation>:when<trigger_condition>
目的地和源操作数可以是向量寄存器、标量寄存器、谓词或通道。换句话说,所执行的指令可以是标量指令、向量指令(在这种情况下,电路110或它们中的至少一些电路可包括被配置为执行向量处理指令的向量处理电路,每个向量处理指令将相应的处理操作应用于两个或更多个数据元素的相应向量)。
因此,举例来说,可使用以下指令:
add z2,ich2,ich3;set p=1010:when p==1001
其执行分别位于输入通道“ich2”和“ich3”的头部的两个源操作数的加法(“add”),并将结果写入向量寄存器“z2”。当谓词的状态为“1001”时,该指令被触发,并且在完成后,其将谓词共同设置为“1010”,这将使得触发条件与该状态匹配的另一指令做好执行准备。
谓词可以维护在例如执行电路210处的谓词存储器或寄存器212中,并且该谓词存储器或该寄存器能够被触发电路250读取,该触发电路还从队列240接收定义与排队的程序指令相关联的触发条件的信息(这些触发条件又可能是为了通过编译操作填充队列而生成的)。因此,在上面给出的示例中,条件“when p==1001”的检测执行如下:
·队列240向触发电路250提供触发条件“p==1001”(以及适用于其他排队指令的触发条件);
·触发电路250与谓词存储装置212通信;
·触发电路250检测谓词存储装置212存储的谓词何时等于1001;
·作为响应,触发电路向队列240发出控制信号以提示队列发出用于解码和执行的相关联的指令“add z2,ich2,ich3;set p=1010”;
响应于该指令的执行完成,执行电路210将由谓词存储装置212所保存的谓词设置为新值1010。再次遵循上文概述的过程,其中触发电路检测此新谓词值与同另一排队指令相关联的触发条件(由队列240传送)之间的匹配。该过程遵循与在编译程序代码时建立的下一触发条件匹配的触发状态链。
注意,可以在触发电路250处提供谓词存储装置212或者将谓词存储装置作为能够由执行电路210写入并且能够由触发电路250读取的单独的电路项。
对于可以在空间架构内的任何给定位置处执行的计算量,存在多个约束。此类约束可以是数据可以从某些位置传送或移除的速率以及功率或热约束。因此,一些示例性实施方案可用于根据可用网络或数据传输带宽来调整在给定位置处执行的处理量。
本公开的示例性实施方案可以提供额外的配置选项,这些额外的配置选项可以潜在地提供更多的并行机会并且可以潜在地使得更容易地平衡计算与网络或存储器带宽的比率。
示例性计算分块
图2提供了计算分块112的一般示例,如上所述,其可以对标量和/或向量指令进行操作。
一个或多个FIFO元件200用作向执行电路210提供输入的输入通道,并且一个或多个FIFO元件220用作输出通道,如上所述。执行由执行电路210相对于一个或多个处理器寄存器230来执行。
指令队列提供指令存储装置的示例,以提供程序指令以供执行。程序指令是响应于触发电路250而提供的,该触发电路响应于通过执行程序指令(例如,先前执行的程序指令)而生成的触发状态以及与队列240所保存的指令相关联的触发条件,以控制队列240提供程序指令以供执行。由队列240发出的程序指令在被传递给执行电路210之前由解码电路260解码。
示例性存储器分块
图3中的MT 114的一般示意性表示与图2中的CT的一般示意性表示基本相同,但有以下例外:
(a)“存储”块或电路300连接到执行电路;以及
(b)包括到通信电路150的接口的“阵列接口”块或电路310连接到执行电路。
除此以外,存储器分块114的操作对应于以上讨论的计算分块的操作。注意,MT像CT一样使用触发指令,并且尽管执行路径可能(在一些示例中)在MT中相对于在CT中更简单,因为MT不一定执行成批数据处理,但是MT仍然保留足够的功能来执行地址计算、数据置换以及经由阵列接口310在本地存储装置300与阵列的其余部分之间的数据传输。
在电路110的CT 112和MT 114之间的数据项的通信是经由发送数据项的分块的输出通道和接收数据项的分块的输入通道进行的。
数据流图
在下面要讨论的技术中,为了在空间中展开应用程序内的计算,首先确定表示应用程序内操作的数据流图(DFG)可能是有用的。
这种DFG的示例如图4示意性地所示。沿着DFG的顶部表示输入通道(ich n),在DFG的底部表示输出通道(och 0),并且表示了诸如乘法(x)、加法(+)、减法(-)和最大/最小函数(max/min)的计算操作,其中沿着示意性地链接各种操作的线表示操作的输入操作数和输出目的地。
然后可以对该数据流图进行划分,并将其分布在可用的硬件单元上。然而,实际的DFG往往大于可用的空间资源,因此最终发生某种形式的时间分片以便能够将DFG映射到硬件。然而,在空间设计的一些当前示例中,这种时间分片的程度相对于常规架构可能是有限的。
在空间架构内,相对于常规架构观察到的总加速是从指令级并行(ILP)、数据级并行(DLP)和任务级并行(TLP)的混合得出的。任务级并行或建立任务流水线(任务经由数据流连接)可被认为与包含ILP和/或DLP的编排级正交。因此,例如,任务A可以放置在一组处理元件上,而任务B可以放置在另一组上(并且在这两组之间进行连接,使得A产生的数据可以被B消耗),并且这两组处理元件可以同时操作,而每组单独地努力充分利用DFG的其部分中存在的ILP和/或DLP。
向量化(使得功能单元能够同时对各组数据元素进行操作)和平铺(将数据集分成分布在空间结构上的固定块)通常将使得能够提取DLP。然而,即使***如上所述改进了提取DLP和TLP的机会,也可能存在ILP不足,这是当前在触发架构中尚未充分解决的潜在并行性来源。本实施方案提出了一种以能够在每个处理元件的计算强度与可用存储器或网络带宽之间实现潜在更好的折衷或平衡的方式有效地指示处理元件并行地对一组操作进行操作的方式。在本实施方案中的任一者中,处理电路因此可包括向量处理电路,该向量处理电路被配置为并行地执行两个或更多个向量处理指令,每个向量处理指令将相应处理操作应用于两个或更多个数据元素的相应向量。
所提出技术的概述
现在将描述本公开所提出的架构扩展可通过其潜在地提取额外并行性的示例。
该示例涉及已被划分为在多个相应处理元件上运行的多个较小部分的应用程序。假设应用程序或内核的一部分具有图4所示的数据流图。将给出关于如何在触发的处理元件中实现这一点的示例。
注意,从这个角度来看,假设已经执行了向量化和平铺,图4所示的操作可以(在适当的情况下)处理来自输入通道的向量数据,并且可以将向量数据返回到其他处理元件或存储器。
观察图4的DFG,可以注意到多个操作可以并行执行。也就是说,DFG中处于同一“级别”(如图所示的垂直位置)的节点不具有任何互相依赖性,并且可以在没有数据冲突发生的情况下同时执行。
在缺少本公开所提出的技术的情况下,该数据流的一个先前提出的具体实施可以如下:
1mul z1,ich0,ich1;set p=1001:when p==1000
2add z2,ich2,ich3;set p=1010:when p==1001
3mul z3,ich0,ich2;deq ich0,deq ich2;set p=1011:when p==1010
4sub z4,ich1,ich3;deq ich1,deq ich3;set p=1100:when p==1011
5max z5,z1,z2;set p=1101:when p==1100
6min z6,z3,z4;set p=1110:when p==1101
7sub och0,z5,z6;set p=1111:when p==1110
8sub r1,r1,#1;set p=0001:when p==1111
9ne p3,r1,#0;set p=z000:when p==0001
10
这里,“mul”表示乘法运算;“sub”表示减法运算,“ne”表示“不等于”的测试,在这种情况下为不等于立即值零。
第1行到第7行的指令表示的操作对应于图4的DFG中的节点(标记为1到7)。另外,在第3行和第4行,还有通道出列操作(“deq”),用于移除指定通道各自头部的数据项。一旦对相应数据进行了所有相关使用,就可能发生这种情况。
寄存器r1保存在第8行上更新(以立即值1递减)的特殊迭代计数值,并且第9行上的比较指令用于在触发第1行上的重新开始实现DFG的状态转换序列的指令与进入某个其他状态之间进行选择,该其他状态可能指示所有相关值已经得到处理。
在第9行中使用“z”来指示该特定位是根据比较结果在运行时设置的。也就是说,如果r1!=0,则位置3处的位将被设置为1,但是如果r1==0,则位置3处的位将被设置为0。因此,如果比较(ne)成功,则最终谓词结果将是1000,并且如果检查失败,则最终谓词结果将是0000。
本公开所提出的布置可利用其中编程器或编译器指定可并行处理的一个或多个指令的“组”或“束”(出于本说明书的目的,这两个术语被认为是等效的)的布置。在此类布置中,编译或其他操作可涉及根据相应触发条件而生成程序指令以供执行,程序指令的执行设置下一触发条件;将程序指令划分或捆绑为多组程序指令,至少一些组包含多于一个程序指令,其中给定组内的程序指令不取决于该给定组中的另一程序指令的结果;以及为每个组生成输入触发条件和输出触发状态;该输入触发条件是当满足时使得能够执行该组的程序指令的条件,并且输出触发条件是用于响应于完成该组中的所有程序指令的执行而生成的条件。
即,可以定义以下格式来指定一束指令:
*<predicates written upon completion of bundle>:when<input triggerconditions><instruction list>
*//bundle-terminating asterisk
换句话说,不是与单个相应指令的启动相关的触发条件,以及该单个指令响应于其执行而生成触发状态,而是在所提出的布置中,触发电路响应于通过执行指令束而生成的触发状态,以及响应于与给定束相关联的触发条件,以控制队列240提供该指令束以供执行。换句话说,谓词的生成是逐束执行的,并且针对触发条件的谓词测试也是逐束执行的,因此触发条件与束而不是单个指令相关联。
注意,束有可能仅包括一个指令,但在许多情况下,束可包括多于一个指令,并且在任何情况下,本公开的布置允许逐束地进行触发条件测试和触发状态生成。
因此,将该方案应用于上述代码(并且假设所使用的电路能够并行执行多达例如四个指令)可以生成以下程序代码。注意,在该代码中采用软件流水线,并且现在存在用于在时间上对准操作的序言部分(第1行至第10行)。类似的捆绑指令程序也可以通过展开先前的代码并在展开的主体中对操作进行分组来产生,然而,这种展开往往会导致代码“膨胀”(用于描述执行特定的一组任务的程序指令总量的不期望的增长程度的术语),最好用于指令空间不是关键资源的场景。
1*set p=1010:when p==0010
2mul z1,ich0,ich1
3add z2,ich2,ich3
4mul z3,ich0,ich2;deq ich0,deq ich2
5sub z4,ich1,ich3;deq ich1,deq ich3
6*
7*set p=1000:when p==1010
8max z5,z1,z2
9min z6,z3,z4
10*
11
12*set p=1100:when p==1000
13mul z1,ich0,ich1
14add z2,ich2,ich3
15mul z3,ich0,ich2;deq ich0,deq ich2
16sub z4,ich1,ich3;deq ich1,deq ich3
17*
18*set p=1101:when p==1100
19max z5,z1,z2
20min z6,z3,z4
21sub och0,z5,z6
22sub r1,r1,#1
23*
24ne p3,r1,#0;set p=z000:when p==1101
将该代码与图4的DFG进行比较,定义了以下操作束:
·图4中示为1、2、3和4的操作;这些由列表中第1行至第6行所示的束来定义;当p==0010时,该束执行,并且响应于其执行,其设置p=1010;
·图4中示为5、6的操作;这些由列表中第7行至第10行所示的束来定义;当p==1010时,该束执行,并且响应于其执行,其设置p=1000;
如上所述,这两个束在主循环之前形成所谓的序言。在第1行至第6行以及第7行至第10行执行束将提供z5和z6的初步值,即:z5'和z6'。随后,在第12行至第17行以及在第18行至第23行上执行束将产生z5和z6的新值,即z5”和z6”,同时消耗旧值:z5'和z6'(参见第21行上的操作)。然后重复该过程(从第24行回到第12行的循环):即,第21行上的操作总是消耗先前产生的z5和z6的值,而束(第18行至第23行)为未来的迭代产生z5和z6的新值。序言需要在序列开始时获得第一对z5和z6值。
因此,主循环包括以下束:
·图4中示为1、2、3和4的操作;这些由列表中第12行至第17行所示的束来定义;当p==1000时,该束执行,并且响应于其执行,其设置p=1100;
·图4中示为5、6的操作;这些由列表中第7行至第10行所示的束来定义;当p==1100时,该束执行,并且响应于其执行,其设置p=1101;
·上述循环继续操作表示为当p==1101时执行并且设置p=z000的第23行的单指令束。
然后,如果r1!=0,则循环分支回到第12行,即当p=1000时。另一方面,如果r1==0,则检查失败,并且代码将触发具有处理图4中所示的DFG外部的进一步操作的输入谓词0000(在该列表中未示出)的指令/束。
上面展示的捆绑触发方法的副效应是,它可以帮助减小程序必须遍历的活动谓词位的数量或状态空间,从而实现潜在的硬件改进。多个指令可利用单个触发条件,从而潜在地改进指令选择逻辑的可缩放性。
此外,指令束在没有传统重命名操作或依赖性检查或实时操作数可用性跟踪单元的情况下实现并发,这些传统重命名操作或依赖性检查或实时操作数可用性跟踪单元在常规处理器中是常见的并且由于它们引入的额外复杂性而可能导致效率低下。
注意,所有通道出队(或实际上入队)操作推迟,直到束中的所有指令已经完成之后。因此,将不执行第4行、第5行、第15行和第16行上指定的出队操作,直到整个相应的束已经完成之后。换句话说,代码的编译可包括:对于提供用于组的执行的输入数据的一个或多个输入通道,生成一个或多个操作以在执行该组的程序指令之后使输入数据从一个或多个输入通道出队。
下面将描述的示例性电路可以确保指令以真正并发的方式执行,因此直到束的末尾才会看到对中间寄存器变量的任何写入。因此,例如,分别在第19行和第20行对向量寄存器z5和z6的写入将直到束终止之后才会发生,因此将不会被第21行的“sub”操作看到。对束内的相同目的地向量寄存器或通道的多次写入可导致非确定性行为,并且理想情况下应当由编译器检测到。否则,一些实施方案可能产生异常,而一些其他实施方案可能提供可指示此类故障已发生(并且可用于调试目的)的***寄存器。
该束内的所有指令共享相同的触发条件,因此根据机器的当前状态,它们要么全部继续进行,或者均不继续进行。因此,例如,如果输入通道3(ich3)上没有数据,第14行的“add”和第16行的“sub”自然无法执行,但因为它们与第13行的“mul”操作和第15行的另一“mul”操作捆绑在一起,即使它们操作的数据实际上可能可用,这些操作也会停滞。虽然多个通道的读取器的这种间接同步有一些好处,但由于停滞的可能性增加,对于大型束来说,它可能会变得代价高昂。因此,编译器的一些实施方案可操作以从代码中指定的束大小人为地减小束大小,以便在限制停滞频率的同时收集捆绑的一些优点。在一些示例中,束可限于用以执行指令的电路所提供的并行程度,例如在下面给出的一些示例中捆绑最多四个指令。
尽管存在于能够执行捆绑指令的触发微架构中的多个执行流水线或路径可同时操作,但此类流水线可能不是对称的。因此,在一些实施方案中,可操作编译器或某一其他类似工具以验证每一束中的指令的混合得到底层硬件的支持。如果某些执行“槽”或路径将仅接受有限数量的指令,那么指令还可能需要在束内重新排序(重新定位)以匹配可用的硬件。此外,如果不支持操作的某些同时组合,则可能需要由编译器分解该束,或者所触发的指令硬件可以调用排序单元,该排序单元可能能够在运行时对该束内的操作进行时间分片。实际上,在束中的指令数量大于最大支持执行(并行)宽度的情况下,也可能出现这种情况。也可能是这样的情况:即使束宽度与执行宽度匹配,在一些实施方案中,由于寄存器访问限制,束中的指令可能不是全部都能够同时进行,因此一些形式的排序可能是不可避免的。
允许在束中使用状态转换指令,如比较(其写入谓词寄存器),但多次写入同一谓词寄存器可能会导致不确定性行为。另外,用于整个束的谓词集指示将在相关位位置中具有高阻抗指示符(诸如第24行所示的位置),从而允许由该束内的一个或多个比较的结果来设置该位。
换句话说,如果在束中仅存在1个比较,则可以使用类似下面的示例:
1*set p=z101:when p==1111
2sub z1,z2,z3
3mul z7,z6,z8
4ne p3,r1,#0
5sub z0,z1,z6
6*
这里,通常与单个指令相关联的位3中的转换现在与整个束相关联;并且将仅在束完成时更新谓词位“3”。
如果在束内存在更多的比较操作,则应当确保更新不冲突,或者换句话说,更新将优选地应用于不同的谓词位。例如:
1*set p=z10z:when p==1111
2sub z1,z2,z3
3ne p0,r2,#0
4ne p3,r1,#0
5sub z0,z1,z6
6*
值得考虑的一个方面是以下事实:束粒度在整个程序中可能不是恒定的,并且在一些程序中甚至可能以高度不规则的方式变化。通过检查具有上述捆绑触发指令的程序,可以观察到这种不规则性的一些实例,因为程序具有大小为1、2和4的束。因此,在程序中出现的指令存储器中布置束的硬件实现可能会出现效率低下或某些存储器区域利用不足的问题。在这点上,参考图5,其提供了不同大小的束的示意性示例(由第一阴影500表示)以及在每种情况下由第二阴影510表示的对应的未充分利用或浪费的存储器区域。
假设每个触发的指令包含多路状态转换操作,它们不一定需要按顺序放置在指令存储器中,但可以自由重新排列。结果,示例性实施方案提出了图6所示的指令存储器的组织,以实现捆绑指令的潜在更高效的存储。图6示出了支持指令捆绑的空间触发架构中的处理元件的一个示例性实施方案。
图6的布置(以及实际上图7或图8的布置)可表示上文所述的存储器分块的方面(不同于存储装置和阵列接口)和/或计算分块,或换句话说,图1的阵列的一个节点处的电路。编译操作可涉及将一组程序指令路由到此类处理器或电路的阵列中的单个处理器。
即,在图6中,大小相似的束被一起分组在相应的不同宽度指令队列(或更一般地说,指令存储装置)中,其中不同的束大小被放置在单独的存储器模块中,使得它们可以共同地具有比图5所示的实现更高的存储密度。
作为来自触发电路615的信号的指令输出触发器610得到扩展(相对于参考图2描述的那些)以并入“路”号或其他指示,从而指示接下来将被触发的束的大小,从而简化相关束的检索。“路”号还被提供给多路复用器620,使得由指令存储装置600的相关队列提供的程序指令被路由用于解码和执行。
指令存储装置600中的队列的实际大小可取决于所剖析程序中的束大小的混合。路由电路625在例如由编译器提供的信号或数据的控制下操作以便将指令路由到指令存储装置600的适当队列中进行排队,从而将一组程序指令路由到从多个指令队列中选择的指令队列,该指令队列被配置为选择性地提供该组程序指令以供并行执行。注意,捆绑的当前布置和指令存储装置600的队列的提供提供了特定束可包括一个指令的可能性,但也明确地提供了多指令束的可能性。在束包括多于一个指令的情况下,指令存储装置被配置为提供多于一个指令(诸如2、3或4个指令)以供并行执行。注意,在编译器的控制下,一束1个或2个指令可由路由电路625路由到4指令队列,这取决于在该处理级的其他束的存储需求。
并不要求提供队列来保存整个束,但是在示例性布置中,束可以如下所述被编译为不大于由电路提供的最大宽度队列。
队列可以具有一个或多个束的深度,但是在示例性实施方案中,队列具有至少两个束的深度,使得当队列提供束以供执行时,另一个束已经排队并准备成为队列的新头部。
注意,在将与先前解码的指令相对应的位模式存储在前端的存储区域中(然后可以并行访问该存储区域,而不是多次复制指令解码硬件单元)可能更有效的实施方案中,图6所示的多个指令解码单元630可能不存在。另外,在一些实施方案中,可存在两种方法,并且可含有先前解码的束(在编译阶段期间或在对捆绑指令的较早实例进行解码时先验获得)的特殊存储区域可用于在一些实例中通过跳过解码阶段来降低前端的功率要求或流水线深度。
触发电路615用于评估处理元件的当前状态(可能使用来自结果总线的数据和通道占用信息和/或访问谓词存储器(未示出),如以上所述)、确定哪些束的触发条件已得到满足、从指令存储器选择触发的束以及控制多路复用器620以路由所选择的束。
执行是相对于由寄存器堆635和输入通道640保存的值来执行的,这些值由示意性多路复用器650路由到执行电路645。执行结果呈现在结果总线655上,执行结果可从该结果总线路由到输出通道660、返回到寄存器堆635和/或触发电路615。
因此,图6提供了一个示例,其中指令存储装置600包括至少两个指令队列,每个指令队列被配置为提供一组程序指令以供执行,指令队列包括被配置为提供一组多达n个程序指令以供并行执行的第一指令队列和被配置为提供一组多达m个程序指令以供并行执行的第二指令队列,其中m不等于n。例如,在图6的示例中,m和n可以被认为是值1、2和4中的任何一个。
在此示例中,触发电路615响应于通过执行程序指令而生成的触发状态并且响应于与指令存储装置600的至少两个指令队列中的给定指令队列相关联的触发条件,以控制610该给定指令队列提供排队的程序指令以供执行。
该布置还示出了路由电路625,其被配置为将一组程序指令路由到指令队列中的选定指令队列;以及多个执行路径630、645,以并行执行多个(在图6的示例中为四个)程序指令,该数量(在该示例中为四个)大于或等于由指令存储装置600的指令队列中的任一个指令队列并行提供的程序指令的最大数量(在该示例中再次为四个)。在其他实施方案中,例如,该数量可以是7,使得来自每个队列的束可以并行执行。
因此,图6(以及实际上图7或图8)提供了电路的示例,包括:处理电路630、645,其被配置为根据匹配当前触发状态的相应触发条件来执行程序指令,并且响应于程序指令执行来设置下一触发状态;该处理电路包括:指令存储装置600,其被配置为选择性地提供一组两个或更多个程序指令以供并行执行;以及触发器电路615,其响应于通过执行一组程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,来控制该指令存储装置以提供程序指令(例如,给定的一组程序指令中的程序指令)以供执行。
寄存器堆考虑
图6提供了通用或单片寄存器堆635。因此,尽管该布置提供了在图6中由解码级630和执行电路645表示的多个执行路径,但是图6的布置提供了由执行路径中的任一执行路径执行程序指令所共用的一组处理器寄存器(即一组处理器寄存器),用于执行一组程序指令内的程序指令,该组处理器寄存器在程序指令的执行期间是可访问的。
然而,此布置又在实际设计中产生挑战,因为寄存器堆635可具有大量读取和写入端口:例如,在一个实施方案中,12个读取端口和4个写入端口。因为每个执行槽理想地应当能够同时访问多达3个源操作数,并且在退出功能单元和供应转发路径以及寄存器写入电路的后端处的数据路径的带宽需要足够高以避免引入停滞,所以出现了这种可能禁止的成本。存在几种潜在的解决方案。
在一些示例性实施方案中,诸如需要3个源操作数的乘积累加运算“mla”的操作可以被限制在少量流水线(执行路径),并且其他流水线可能仅支持对一个或两个源操作数的寄存器堆访问。此方案可减少总端口计数,但可能潜在地损害灵活性和性能。因此,在该示例中,执行路径中的至少一个执行路径被配置用于执行具有多达第一数量的操作数的程序指令,并且执行路径中的至少另一个执行路径被配置用于执行具有多达第二数量的操作数的程序指令,第一数量和第二数量不同。例如,操作数的第一数量和第二数量可以是2和3。
分区寄存器堆
现在将参考图7描述使用分区寄存器堆的另一实施方案。这里,与图6的配置共同的特征被赋予相同的附图标记,并且将不再详细描述。
图7的布置提供了至少两组处理器寄存器(在图7中示为“Reg Bank n”700,其中n=0、1、2或3),一组用于执行路径中的每一者,用于给定执行路径的该组处理器寄存器在通过该执行路径执行程序指令期间是可访问的;该布置还提供了通信电路710,其用于在该组处理器寄存器之间传送数据。
在此实施方案中,在编译阶段期间,可限制寄存器分配器,使得共享同一槽或执行路径的所有指令在其之间具有寄存器堆(存储体n)的共同部分,但需要显式“寄存器移动”来使用存储体间通信电路710在存储体之间传输信息。在该方案中,先前所示的代码的第12行至第23行可以重写如下:
12*set p=1100:when p==1000
13mul z1_0,ich0,ich1
14add z2_1,ich2,ich3
15mul z3_2,ich0,ich2;deq ich0,deq ich2
16sub z4_3,ich1,ich3;deq ich1,deq ich3
17*
18*set p=1101:when p==1100
19[mov z2_0,z2_1;mov z3_3,z3_2;mov z5_2,z5_0;mov z6_2,z6_3]
20max z5_0,z1_0,z2_0
21sub r1_1,r1_1,#1
22sub och0,z5_2,z6_2
23min z6_3,z3_3,z4_3
24*
可以看出,束中的一束内的指令已经被“重新排序”,以便减少存储体间数据移动操作的数量。在这里使用的寄存器符号中,后缀“_0”、“_1”、“_2”和“_3”标识包含该寄存器的相应寄存器存储体。支持指令捆绑所需的显式移动操作如第19行所示。
在图7中,有四个输入通道640,它们没有像寄存器堆那样被存储。这是因为输入通道通常在数量上相对于主寄存器堆小得多并且是“只读”的,因此这可能是可接受的折衷。另外,发送到4个输出通道的数据永远不会被读回,因此在一些实施方案中可以避免存储。然而,在其他示例中,还可以与寄存器堆相同的方式来对输入通道进行存储。
注意,返回路径720允许将特定执行路径的执行结果写回到与该执行路径相关联的寄存器存储体,而无需使用存储体间通信电路710进行额外的操作。
在使用分区寄存器堆的另一实施方案中,如图8所示,寄存器访问方案的另一示例提供了捆绑触发指令集架构,该架构减少了寄存器堆所需的读取端口的数量,同时允许通过多个槽或执行路径进行并行访问。
再次,与图6或图7相同的特征使用相同的附图标记,并且将不进一步详细描述。
然而,与图7的方案不同,在图8中,不需要显式移动操作来保持槽或执行路径之间的一致性。在此方案中,每个槽具有称为槽寄存器缓冲器(SRB0..3)800的小局部寄存器堆,其保持从主寄存器堆810检索(对所有路径共用)或由该执行路径执行的先前数据处理操作写入的操作数的副本(注意,存在用于由给定执行路径产生的数据的返回路线820)。
存在许多用于管理流入或流出这种结构的信息的可能技术,并且下面阐述了一种方法。通过保持每个SRB 800相对于主寄存器堆810较小并且限制每个具有的读取端口的数量,有可能在保持在合理的功率包络内的同时处理该束的并发机会。
寄存器缓冲器管理单元(RBMU)830负责在主寄存器堆810和每个SRB 800之间移动数据。每当槽试图从其相应的SRB 800读取寄存器值时,其咨询被称为寄存器索引转换表(RITT)840的相应的小局部结构,并且如果找到有效条目,则其使用存储在RITT 840中的对应索引来从SRB 800检索实际值。在一些实施方案中,可使用锁存器来实现RITT 840。采用RITT结构的间接性是为了确保SRB 800可以是紧凑和全关联的,但是同时不会在可能的关键路径中引入大量昂贵的比较器。如果没有找到有效条目,则可以通过直接访问另一SRB800(也就是说,对于另一路径)来获得有效条目。如果其他SRB也不具有有效条目,则从主寄存器堆810获得寄存器读取值。新检索到的值被放置在请求槽的SRB 800中。还在相应的RITT 840中创建条目,其中有效位被设置为真。正如可以预期的,在包括捆绑指令的程序开始时,许多读取值必须直接从主寄存器堆810获得。由于可用于访问主寄存器堆810的读取端口的数量有限,这些访问最初可能引起延迟。然而,随着程序进一步前进并且开始迭代某些经捆绑触发指令,SRB 800可能比主寄存器堆提供更多的访问,从而可能提高并行性。
RBMU 830将对特定寄存器的任何更新广播到具有该寄存器的副本的所有SRB800。这种广播方案是有效的,因为只有一个功能单元被允许写入束内的每个目的地寄存器。将在对应位置处设置“修改”位以确保SRB 800中的相关条目在稍后被逐出的情况下将被写入主寄存器堆。当新值将要被添加到SRB时,此类逐出将由于容量问题而发生,并且为了使过程高效:可以使用访问计数器来执行使用跟踪。使用率低的条目可以被逐出。如果当前在任何SRB中没有与正被写入的寄存器相匹配的条目,则将该值写入主寄存器堆。
在常规处理器中,多级寄存器存储结构的前述描述将是不太可接受的,因为这些结构在遇到推测失败或异常时将引入额外的延迟。仅可通过潜在地耗尽所有SRB来使架构寄存器状态可见,这可能是昂贵和耗时的操作。然而,所提出的结构在本用例中被认为不仅是可接受的,而且是有利的,因为捆绑触发指令架构的主要目的是灵活的多域空间加速。在本用例中,对一般目标的要求少,这些目标反映了适用于常规处理器的目标,诸如丰富的推测、精确的异常和快速的异常进入能力。
在图8中,存在被称为输入通道缓冲器管理单元(ICBMU)850的硬件结构,其工作方式类似于RBMU,并且可以将输入数据从通道传输到称为槽通道缓冲器(SCB0..3)。860的小存储区域。然而,与全关联的SRB不同,每个SCB可以被直接映射,因为输入通道在数量上相对于主寄存器堆小得多。另外,相对于SRB,每个SCB可能需要更少的端口,因为同时读取多达3个通道的指令很少。此外,输入通道是“只读”的,因此ICBMU不需要具有与RBMU一样多的相干功能。其关键目的是收听“出队”和“通道读取”事件,并且每当在束的末尾发生出队操作时,在对应通道头部的新数据被传播到最近从该通道读取的所有槽。不需要逐出,因为SCB是直接映射的结构。
从执行单元到输出通道的信息不必经过任何特殊的管理单元,因为在后端传输的数据和输出通道之间不存在需要同步的关键事件。另外,两个前提即在束内每个通道仅允许一个写入器并且触发的处理元件的功能单元从不从这些通道读回数据,可以进一步简化支持捆绑所需的输出路径的构造。
因此,图8示出了由执行路径中的任何执行路径执行程序指令所共用的一组处理器寄存器810;供每个执行路径存储由处理器寄存器中的一个或多个处理器寄存器保存的数据的副本的缓冲器电路800;以及用于控制在该组处理器寄存器和缓冲器电路之间的数据复制的控制电路830、840。如上所述,在一些示例中,任何执行路径的执行结果可以被直接写回到与该执行路径相关联的缓冲器电路800。
处理阵列
当使用根据本公开示例性实施方案中的任一者的电路实现时,图1的布置提供了处理阵列的示例,该处理阵列包括:此类电路的阵列;以及用于在该阵列的电路之间传送数据的数据通信电路140、150。
编译器示例
现在将参考图9和图10描述示出编译器实施方案的示例性布置。这里,图9示意性地示出了可用于例如根据下文将参考图12所述的方法执行编译器操作以产生如上文所述的捆绑程序代码的数据处理装置900。应当注意,先前描述的电路中的任一者可用于执行编译器操作,但在至少一些示例中,可使用诸如装置900的通用数据处理装置。
装置900包括一个或多个处理元件或中央处理单元(CPU)910、随机存取存储器920、诸如闪存存储器、光盘或磁盘、只读存储器等的非易失性存储装置930(形成可以提供或存储用于执行本文所述的编译器操作的计算机软件的机器可读非暂态存储介质的示例)、诸如显示器、键盘、指向控件等中的一者或多者的图形用户界面940以及诸如网络接口的一个或多个其他接口950,所有这些均通过总线结构960互连。在操作中,从非易失性存储装置930读取用于执行编译器或其他功能的程序指令,并由CPU 910与随机存取存储器920协作执行这些程序指令。
图10示意性地示出编译操作,其中源代码1000由编译操作1010例如使用参考图12所述的过程来编译以生成可执行程序指令1020。
方法概述
通过上文讨论的技术的概述,图11是示出方法(其可例如由上述电路实施)的示意性流程图,该方法包括:
根据匹配当前触发状态的相应触发条件来执行(在步骤1100处)程序指令,并响应于程序指令的执行来设置下一触发状态;
由指令存储装置提供(在步骤1110处)一组两个或更多个程序指令以供并行执行;以及
响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,控制(在步骤1120处)该指令存储装置以提供该给定的一组程序指令中的程序指令以供执行。
通过上述技术的进一步概述,图12是示出计算机实现的方法的示意流程图,该方法包括:
根据相应的触发条件生成(在步骤1200处)程序指令以供执行,程序指令的执行设置下一触发条件;
将程序指令划分(在步骤1210处)为多组程序指令,至少一些组包含多于一个程序指令,其中给定组内的程序指令不取决于该给定组中的另一程序指令的结果;以及
为每个组生成(在步骤1220处)输入触发条件和输出触发状态;该输入触发条件是当满足时使得能够执行该组的程序指令的条件,并且输出触发条件是用于响应于完成该组中的所有程序指令的执行而生成的条件。
在示例性布置中,步骤1200、1210、1220中的每一者均可以由计算机来实现,诸如在计算机软件的控制下操作的图9的装置(计算机软件又可以由非易失性存储装置930存储)。
模拟实施方案
图13示出了可以使用的模拟器具体实施。虽然先前所述的实施方案在用于操作支持所涉及的技术的特定处理硬件的装置和方法方面实现了本发明,但也可以提供根据本文所述的实施方案的指令执行环境,该指令执行环境是通过使用计算机程序来实现的。此类计算机程序通常被称为模拟器,在一定程度上是因为此类计算机程序提供硬件架构的基于软件的具体实施。模拟器计算机程序的种类包括仿真器、虚拟机、模型和二进制转换器,其包括动态二进制转换器。通常,模拟器具体实施可以在支持模拟器程序1310的主机处理器1330上运行,该主机处理器任选地运行主机操作***1320。在一些布置中,在硬件和所提供的指令执行环境和/或在同一主机处理器上提供的多个不同指令执行环境之间可存在多个模拟层。在历史上,需要强大的处理器来提供以合理速度执行的模拟器具体实施,但这种方法在特定情况下可能是合理的,诸如当出于兼容性或重复使用原因而希望运行另一个处理器本地的代码时。例如,模拟器具体实施可向指令执行环境提供主机处理器硬件不支持的附加的功能性,或者提供通常与不同硬件架构相关联的指令执行环境。下面引用的参考文献[2]中给出了模拟的概述。
就先前已参考特定硬件构造或特征描述了实施方案而言,在模拟的实施方案中,等效功能可由合适的软件构造或特征提供。例如,特定电路***可在模拟的实施方案中被实现为计算机程序逻辑。类似地,存储器硬件诸如寄存器或高速缓存存储器可在模拟的实施方案中被实现为软件数据结构。在先前描述的实施方案中参考的硬件元件中的一个或多个硬件元件存在于主机硬件(例如,主机处理器1330)上的布置中,在合适的情况下,一些模拟的实施方案可以利用主机硬件。
模拟器程序1310可以存储在计算机可读存储介质(其可以是非暂态介质)上,并且向目标代码1300(其可以包括应用程序、操作***和管理程序)提供程序接口(指令执行环境),该程序接口与由模拟器程序1310建模的硬件架构的接口相同。因此,目标代码1300的程序指令包括提供处理程序逻辑的指令,该处理程序逻辑被配置为根据匹配当前触发状态的相应触发条件来执行程序指令并且响应于程序指令执行来设置下一触发状态;该处理程序逻辑包括:指令存储程序逻辑,其被配置为选择性地提供一组两个或更多个程序指令以供并行执行;以及触发程序逻辑,其响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,来控制该指令存储程序逻辑以提供程序指令以供上述执行,可以使用模拟器程序1310从指令执行环境内执行该目标代码的程序指令,使得实际上不具有上述装置的硬件特征的主计算机1330可以模拟这些特征。
因此,示例性实施方案可以提供一种虚拟机计算机程序,其包括用于控制主机数据处理装置以提供包括处理程序逻辑的指令执行环境的指令,该处理程序逻辑被配置为根据匹配当前触发状态的相应触发条件来执行程序指令并且响应于程序指令执行来设置下一触发状态;以及处理电路,其包括:指令存储程序逻辑,其被配置为选择性地提供一组两个或更多个程序指令以供并行执行;以及触发程序逻辑,其响应于通过执行程序指令而生成的触发状态以及与给定的一组程序指令相关联的触发条件,来控制指令存储程序逻辑以提供程序指令以供执行。
概述
在本申请中,字词“被配置为...”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可以具有提供所限定的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
虽然本文已结合附图详细描述了本发明技术的示例性实施方案,但应当理解,本发明技术并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明技术的范围和实质的前提下,本领域的技术人员可在其中实现各种变化、增加和修改。例如,在不脱离本发明技术的范围的情况下,从属权利要求的特征可与独立权利要求的特征一起进行各种组合。
参考文献
[1]A.Parashar et al.,“Efficient Spatial Processing Element Controlvia Triggered Instructions,”in IEEE Micro,vol.34,no.3,pp.120-137,May-June2014,doi:10.1109/MM.2014.14.
[2]R.Bedichek,“Some Efficient Architecture Simulation Techniques”,inWinter 1990 USENIX Conference,Pages 53-63.

Claims (18)

1.一种电路,包括:
处理电路,所述处理电路被配置为根据匹配当前触发状态的相应触发条件来执行程序指令,并且响应于程序指令执行来设置下一触发状态;所述处理电路包括:
指令存储装置,所述指令存储装置被配置为选择性地提供一组两个或更多个程序指令以供并行执行;和
触发器电路,所述触发器电路响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,来控制所述指令存储装置以提供所述给定的一组程序指令中的程序指令以供执行。
2.根据权利要求1所述的电路,其中所述指令存储装置包括至少两个指令队列,每个指令队列被配置为提供一组程序指令以供执行,所述指令队列包括第一指令队列和第二指令队列,所述第一指令队列被配置为提供一组多达n个程序指令以供并行执行,所述第二指令队列被配置为提供一组多达m个程序指令以供并行执行,其中m不等于n。
3.根据权利要求2所述的电路,其中所述触发电路响应于通过执行程序指令而生成的触发状态以及响应于与所述至少两个指令队列中的给定指令队列相关联的触发条件,来控制所述给定指令队列以提供排队的程序指令以供执行。
4.根据权利要求2或权利要求3所述的电路,包括路由电路,所述路由电路被配置为将一组程序指令路由到所述指令队列中的所选指令队列。
5.根据权利要求2至4中任一项所述的电路,包括用于并行执行多个程序指令的多个执行路径,所述多个程序指令的数量大于或等于由所述指令队列中的任一者并行提供的程序指令的最大数量。
6.根据权利要求5所述的电路,包括一组程序指令内的程序指令的执行所共用的一组处理器寄存器,所述一组处理器寄存器在所述程序指令的执行期间是可访问的。
7.根据权利要求5所述的电路,包括:
至少两组处理器寄存器,一组用于所述执行路径中的每个执行路径,用于给定执行路径的所述一组处理器寄存器在由所述执行路径执行程序指令期间是可访问的;和
通信电路,所述通信电路用于在所述各组处理器寄存器之间传送数据。
8.根据权利要求5所述的电路,包括:
由所述执行路径中的任何执行路径执行程序指令所共用的一组处理器寄存器;
每个执行路径的缓冲器电路,所述缓冲器电路用于存储由所述处理器寄存器中的一个或多个处理器寄存器保存的数据的副本;和
控制电路,所述控制电路用于控制在所述一组处理器寄存器和所述缓冲器电路之间的数据复制。
9.根据权利要求5至8中任一项所述的电路,其中所述执行路径中的至少一个执行路径被配置用于执行具有多达第一数量的操作数的程序指令,并且所述执行路径中的至少另一个执行路径被配置用于执行具有多达第二数量的操作数的程序指令,所述第一数量和所述第二数量不同。
10.根据前述权利要求中任一项所述的电路,其中所述处理电路包括被配置为并行执行两个或更多个向量处理指令的向量处理电路,每个向量处理指令将相应的处理操作应用于两个或更多个数据元素的相应向量。
11.一种处理阵列,包括:
根据前述权利要求中任一项所述的电路的阵列;和
数据通信电路,所述数据通信电路用于在所述阵列的电路之间传送数据。
12.一种方法,包括:
根据匹配当前触发状态的相应触发条件来执行程序指令,并且响应于程序指令的执行来设置下一触发状态;
由指令存储装置提供一组两个或更多个程序指令以供并行执行;以及
响应于通过执行程序指令而生成的触发状态以及响应于与给定的一组程序指令相关联的触发条件,控制所述指令存储装置以提供所述给定的一组程序指令中的程序指令以供执行。
13.一种计算机实现的方法,所述方法包括:
根据相应的触发条件生成程序指令以供执行,程序指令的执行设置下一触发条件;
将所述程序指令划分为多组程序指令,至少一些组包含多于一个程序指令,其中给定组内的程序指令不取决于所述给定组中的另一程序指令的结果;以及
为每个组生成输入触发条件和输出触发状态;所述输入触发条件是当满足时使得能够执行所述组的所述程序指令的条件,并且所述输出触发条件是用于响应于完成所述组中的所有程序指令的执行而生成的条件。
14.根据权利要求13所述的方法,包括,对于提供用于组的执行的输入数据的一个或多个输入通道,生成一个或多个操作以在执行所述组的所述程序指令之后使所述输入数据从所述一个或多个输入通道出队。
15.根据权利要求13或14所述的方法,包括将一组程序指令路由到处理器阵列的单个处理器。
16.根据权利要求13或权利要求14所述的方法,包括将一组程序指令路由到从多个指令队列中选择的指令队列,所述指令队列被配置为提供所述一组程序指令以供并行执行。
17.一种编译器,所述编译器包括计算机程序代码,所述计算机程序代码在由计算机执行时使所述计算机执行根据权利要求13至16中任一项所述的方法。
18.一种非暂态机器可读存储介质,所述非暂态机器可读存储介质存储根据权利要求17所述的编译器。
CN202280012249.7A 2021-01-28 2022-01-19 用于根据触发条件执行指令的电路和方法 Pending CN116802605A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2101152.3A GB2603151B (en) 2021-01-28 2021-01-28 Circuitry and method
GB2101152.3 2021-01-28
PCT/GB2022/050149 WO2022162344A1 (en) 2021-01-28 2022-01-19 Circuitry and method for instruction execution in dependence upon trigger conditions

Publications (1)

Publication Number Publication Date
CN116802605A true CN116802605A (zh) 2023-09-22

Family

ID=74865259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280012249.7A Pending CN116802605A (zh) 2021-01-28 2022-01-19 用于根据触发条件执行指令的电路和方法

Country Status (6)

Country Link
US (1) US20240220269A1 (zh)
JP (1) JP2024505440A (zh)
KR (1) KR20230132580A (zh)
CN (1) CN116802605A (zh)
GB (1) GB2603151B (zh)
WO (1) WO2022162344A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2625512A (en) * 2022-12-12 2024-06-26 Advanced Risc Mach Ltd Triggered-producer and triggered-consumer instructions

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013101187A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Method for determining instruction order using triggers
US9507594B2 (en) * 2013-07-02 2016-11-29 Intel Corporation Method and system of compiling program code into predicated instructions for execution on a processor without a program counter

Also Published As

Publication number Publication date
GB2603151B (en) 2023-05-24
KR20230132580A (ko) 2023-09-15
JP2024505440A (ja) 2024-02-06
WO2022162344A1 (en) 2022-08-04
US20240220269A1 (en) 2024-07-04
GB2603151A (en) 2022-08-03
GB202101152D0 (en) 2021-03-17

Similar Documents

Publication Publication Date Title
EP2710467B1 (en) Automatic kernel migration for heterogeneous cores
US10430190B2 (en) Systems and methods for selectively controlling multithreaded execution of executable code segments
US5517628A (en) Computer with instructions that use an address field to select among multiple condition code registers
US20230359509A1 (en) Programming Flow for Multi-Processor System
US11816560B2 (en) Performance estimation-based resource allocation for reconfigurable architectures
JPH11249897A (ja) Nウェイ分岐を有するスーパースカラまたは超長命令語コンピュータにおける次の命令を選択する方法および装置
US20210081691A1 (en) Efficient Execution of Operation Unit Graphs on Reconfigurable Architectures Based on User Specification
US20230376292A1 (en) Compile time logic for detecting and resolving memory layout conflicts
Selig The cerebras software development kit: A technical overview
US7761691B2 (en) Method for allocating registers using simulated annealing controlled instruction scheduling
CN116802605A (zh) 用于根据触发条件执行指令的电路和方法
US20090133022A1 (en) Multiprocessing apparatus, system and method
CN116774914A (zh) 分布式共享存储器
CN116775265A (zh) 协作组阵列
US20240069770A1 (en) Multiple contexts for a memory unit in a reconfigurable data processor
US11675572B2 (en) Sharing data structures
US20240020264A1 (en) Estimating a Scaled Cost of Implementing an Operation Unit Graph on a Reconfigurable Processor
US20230315411A1 (en) Operation Fusion in Nested Meta-pipeline Loops
US20240054099A1 (en) Cluster-Based Placement and Routing of Memory Units and Compute Units in a Reconfigurable Computing Grid
US20240036871A1 (en) Placement Method Based On A Sorted Operation Unit Graph For An Iterative Placement And Routing On A Reconfigurable Processor
Ilvonen PATC Course: Introduction to GPU Programming@ CSC
SRIDHARAN Hierarchical Design of Control in Custom Built Heterogeneous Multi-Core Architectures

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