CN114730262A - 用于功能单元分配的方法和装置 - Google Patents
用于功能单元分配的方法和装置 Download PDFInfo
- Publication number
- CN114730262A CN114730262A CN202080081145.2A CN202080081145A CN114730262A CN 114730262 A CN114730262 A CN 114730262A CN 202080081145 A CN202080081145 A CN 202080081145A CN 114730262 A CN114730262 A CN 114730262A
- Authority
- CN
- China
- Prior art keywords
- functional unit
- instructions
- instruction
- currently scheduled
- determining
- 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
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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- 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/30098—Register arrangements
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
提供了一种用于为当前调度的指令确定最佳功能单元的方法、装置和网络节点。各实施例将所述功能单元分配问题划分为单独的评估,并随后调和由对所述最佳功能单元的不同结论引起的任何冲突。所述最佳功能单元的所述单独评估涉及所述最佳功能单元在指令捆绑方面的评估,以及所述最佳功能单元在延迟方面的评估。为了在指令捆绑方面选择所述最佳功能单元,在考虑可用队列中指令的优先级的同时,考虑最大化指令捆绑的大小的因素。为了在延迟方面选择所述最佳功能单元,主要考虑指令节点的最重要后续指令。
Description
相关申请案交叉引用
本申请要求于2019年11月22日递交的申请号为16/692,844、发明名称为“用于功能单元分配的方法和装置(Method and Apparatus for Functional Unit Assignment)”的美国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本发明涉及编译器优化,例如计算机指令调度,尤其涉及用于功能单元分配的方法和装置。
背景技术
在计算机指令调度中,至少可以向两个或三个不同的功能单元发出数字信号处理器(digital signal processor,DSP)芯片等芯片上的一些指令。众所周知,功能单元可以定义可执行操作和计算的处理单元的一部分。在这种情况下,将用一种语言(例如高级编程语言)编写的计算机代码翻译成另一种语言(例如汇编语言、目标代码或机器代码)的编译器负责在多个候选功能单元中选择应向其分配指令的功能单元。在这种情况下,将用一种语言(例如高级编程语言)编写的计算机代码翻译成另一种语言(例如汇编语言、目标代码或机器代码)的编译器负责在多个候选功能单元中选择应向其分配指令(或应向其发送指令)的功能单元。
功能单元选择通常是指令延迟(例如,一个指令的数据可用于另一个指令所需的周期数)和指令级并行性(例如,可以在计算机程序中同时执行的指令数的度量)之间的权衡。向同一功能单元发出的指令不能并行,而向不同功能单元发出的指令可以并行。另外,如果作为指令发出目标的功能单元发生变化,则某个指令与该指令的先前指令或后续指令之间的延迟可能会发生变化。
一种用于功能单元选择或分配的已知方式称为集群分配。图1示出了两个集群DSP。集群DSP是将寄存器文件划分为两个或多个子集的DSP,即寄存器文件100和寄存器文件102。如图1所示,每个功能单元(functional unit,FU)104……117只能访问所有寄存器文件的一个子集。集群可以定义为寄存器文件以及与之直接连接的所有功能单元。例如,在图1中,寄存器文件100以及与之直接连接的功能单元104、105、106、107可以视为第一个集群110。同样地,寄存器文件102以及与之直接连接的功能单元114、115、116、117可以视为第二个集群112。
在集群分配中,当另一个指令(即第二个指令)需要一个指令(即第一个指令)的输出才能继续执行第二个指令时(例如,当两个指令之间存在数据依赖关系时),可以向两个不同的集群或同一集群发出这两个指令。当向不同集群发出这两个指令时,第一个指令的输出必须复制到另一个集群(例如,作为第二个指令的发出目标的集群)中的其中一个寄存器中,以便执行第二个指令。这将增加第一个指令和第二个指令的执行之间的延迟。为了改善延迟,可以向同一集群提供第一个指令和第二个指令,但是并非始终需要向同一集群发出多个指令。例如,如果向同一集群发出太多指令,则可能会有指令在队列中一直等待,直到有功能单元可用于执行这些指令,即使其它集群中的功能单元可用(例如,处于空闲状态)也如此。
有人已尝试解决集群分配问题,例如V.S.Lapinski、M.F.Jacome和G.A.DeVeciana在“高性能嵌入式VLIW处理器的集群分配(Cluster Assignment for HighPerformance Embedded VLIW Processors),《美国计算机协会电子***自动化设计会报》(ACM Transaction on Design Automation of Electronic Systems),第3期第7卷,2002年7月,第430至454页”中提出的方法,以及R.Leupers在“集群VLIW DSP的指令调度(Instruction Scheduling for Clustered VLIW DSPs),《并行架构与编译技术国际会议汇刊(Proceedings of International Conference on Parallel Architectures andCompilation Techniques)》,2000年”中提出的方法。
Lapinski提出的方法基于集群分配期间的延迟影响通常具有对称性质这一事实。换言之,这假设将指令从一个集群移动到另一集群与沿相反方向移动指令所用的指令周期数相同。然而,当假设的对称性质不存在时,Lapinski的方法不能解决集群分配问题。
Leupers提出的方法可以认为是复杂的,并且需要大量的编译时间。例如,Leupers的方法先经历集群分配阶段(例如,使用模拟退火算法的方法),然后经历指令调度阶段。在过程中重复这两个阶段,直到达到固定点(例如,预定义点)。该重复的两阶段过程可能需要严格的实施工作以及大量的编译时间。
因此,需要不受限于现有技术的一个或多个限制的用于功能单元分配的方法和装置。
提供该背景信息以揭示申请人认为可能与本发明相关的信息。没有必要承认也不应该解释任何前述信息构成与本发明对比的现有技术。
发明内容
本发明实施例的目的在于提供一种用于为一个或多个当前调度的指令确定最佳功能单元的方法和装置。各实施例将所述功能单元分配问题划分为单独的评估,并随后调和由对所述最佳功能单元的不同结论引起的任何冲突。所述最佳功能单元的所述单独评估涉及所述最佳功能单元在指令捆绑方面的评估,以及所述最佳功能单元在延迟方面的评估。为了在指令捆绑方面选择所述最佳功能单元,在考虑可用队列中指令的优先级的同时,考虑最大化指令捆绑的大小的因素。为了在延迟方面选择所述最佳功能单元,主要考虑指令节点的最重要后续指令。
根据本发明实施例,提供了一种用于为一个或多个当前调度的指令确定最佳功能单元的方法。所述方法包括:基于可用队列中的一个或多个附加指令的优先级确定第一候选功能单元,所述可用队列包括一个或多个指令,所述一个或多个指令将与所述一个或多个当前调度的指令进行捆绑。所述方法还包括:基于所述一个或多个当前调度的指令与所述当前调度的指令的最重要后续指令之间的延迟确定第二候选功能单元;从所述第一候选功能单元和所述第二候选功能单元中选择所述最佳功能单元。
根据一些实施例,所述方法还包括:向所述最佳功能单元发送所述一个或多个当前调度的指令。
根据本发明实施例,提供了一种用于为一个或多个当前调度的指令确定最佳功能单元的装置。所述装置包括:处理器;存储器,在其上存储机器可执行指令。当所述机器可执行指令由所述处理器执行时,使得所述装置:基于可用队列中的一个或多个附加指令的优先级确定第一候选功能单元,所述可用队列包括一个或多个指令,所述一个或多个指令将与所述一个或多个当前调度的指令进行捆绑。当所述机器可执行指令由所述处理器执行时,还使得所述装置:基于所述一个或多个当前调度的指令与所述当前调度的指令的最重要后续指令之间的延迟确定第二候选功能单元;从所述第一候选功能单元和所述第二候选功能单元中选择所述最佳功能单元。
根据一些实施例,当所述机器可执行指令由所述处理器执行时,还使得所述装置:向所述最佳功能单元发送所述一个或多个当前调度的指令。
根据本发明实施例,提供了一种用于为一个或多个当前调度的指令确定最佳功能单元的网络节点。所述网络节点包括:处理器;存储器,在其上存储机器可执行指令。当所述机器可执行指令由所述处理器执行时,使得所述网络节点:基于可用队列中的一个或多个附加指令的优先级确定第一候选功能单元,所述可用队列包括一个或多个指令,所述一个或多个指令将与所述一个或多个当前调度的指令进行捆绑。当所述机器可执行指令由所述处理器执行时,还使得所述网络节点:基于所述一个或多个当前调度的指令与所述当前调度的指令的最重要后续指令之间的延迟确定第二候选功能单元;从所述第一候选功能单元和所述第二候选功能单元中选择所述最佳功能单元。
在一些实施例中,当所述机器可执行指令由所述处理器执行时,还使得所述网络节点:向所述最佳功能单元发送所述一个或多个当前调度的指令。
上文结合本发明的各个方面描述了本发明实施例,这些实施例可以基于这些方面实现。本领域技术人员可以理解,本发明实施例可以结合描述它们的方面来实现,但也可以与该方面的其它实施例一起实现。当本发明实施例相互排斥或互不兼容时,这对于本领域技术人员来说是显而易见的。一些实施例可以结合一个方面进行描述,但也可以适用于其它方面,这对本领域技术人员来说是显而易见的。
附图说明
结合附图,通过以下详细描述,本发明的其它特征和优点是显而易见的,在附图中:
图1示出了现有技术提供的集群配置;
图2A至图2D示出了各实施例提供的用于向功能单元分配指令的示例性场景;
图3以流程图示出了各实施例提供的在指令捆绑方面选择期望功能单元的过程;
图4以流程图示出了各实施例提供的在延迟方面选择期望功能单元的过程;
图5以流程图示出了各实施例提供的在为指令捆绑选择的期望功能单元与在为延迟选择的期望功能单元不同时解决冲突的过程;
图6以示意图示出了各实施例提供的电子设备。
需要说明的是,在所有附图中,相同的特征由相同的附图标记标识。
具体实施方式
本文中使用的术语“指令”是指计算机指令或包含由计算机处理器执行的步骤的单个操作。
除非另有定义,否则本文所用的所有技术和/或科学术语都具有与本发明普通技术人员公知的含义相同的含义。
在计算机科学或计算机工程领域,指令调度是优化编译器以提高计算机程序在机器上的性能同时产生等效输出而不改变计算机源代码含义的一种方法。为了提高性能,可以向两个或三个不同的功能单元发出芯片(例如数字信号处理器(digital signalprocessor,DSP)芯片)上的一些指令,这些功能单元可以定义可执行操作或计算的处理单元的一部分。在这种情况下,编译器负责在多个候选功能单元中选择应向其分配指令的功能单元。
如上所述,一种用于功能单元选择或分配的已知方式称为集群分配。众所周知,集群分配问题可以包括具有不对称性质的情况。在这种情况下,可能没有功能单元和寄存器文件的集群,所有功能单元都可以访问所有寄存器文件。然而,从一个指令转发到另一个指令的结果在不同功能单元之间可能有很大的不同。图2A至图2D示出了各实施例提供的用于向功能单元分配指令的示例性场景。例如,考虑两个功能单元之间的周期停顿的不对称性。参考图2A,在第一种情况下,可以向功能单元230发出指令210,并向功能单元240发出指令220。可以先向功能单元230发出指令210,然后稍后可以向功能单元240发出指令220,因为指令220对指令210具有数据依赖关系。在这种分配场景中,指令210的执行和指令220的执行之间可能有五(5)次周期停顿。在另一种情况下,如图2B所示,可以向功能单元240发出指令210,并向功能单元230发出指令220。尽管这两个指令之间仍然存在数据依赖关系(例如,指令220对指令210具有数据依赖关系),但指令210的执行和指令220的执行之间可能没有周期停顿。在这种场景中,可以理解的是,为了在最短的时间范围内执行这两个指令,可能需要图2B中提供的指令分配。
负责选择功能单元的编译器具有功能单元分配问题的变化,例如上面说明的示例。与指令级并行性相比,当前可用的方案可能会优先考虑延迟(例如,一个指令的数据可用于另一个指令所需的周期数),并使用一种启发式方法来避免错误的指令捆绑。此类方案可以提供低指令级并行性。
然而,集群分配场景还存在其它变化,它们需要方案做出更微妙的决策。例如,可能存在这样的集群分配场景的变化:与图2A和图2B所示的情况基本等同,只是在两个指令之间的周期停顿次数方面存在细微的差异。图2C和图2D示出了集群分配场景的这种变化。如图2C所示,当从FU 230向FU 240传输指令的数据结果时,FU 230和FU 240之间仅存在单(1)次周期停顿,而不是五(5)次周期停顿。图2D示出了假设这两个指令之间存在数据依赖关系(例如,指令220对指令210具有数据依赖关系),但指令210的执行和指令220的执行之间没有周期停顿的情况。图2D基本上等同于图2B。在这种情况下,由于存在不对称性,集群分配中当前可用的方案或当前可用的技术可能不适用。另外,当前可用的简单地避免错误指令捆绑的粗略启发式方法可能不适用,因为偏袒一个方面(例如,指令延迟)而不是另一个方面(例如,指令级并行性)可能是不可接受的。通过简单地偏袒指令延迟(例如,一个指令的数据可用于另一个指令所需的周期数),另一方面(例如,指令级并行性)可能会受到与指令延迟增加相同程度的负面影响。因此,在这种情况下,应充分考虑指令延迟和指令级并行性,以便至少部分地改进功能单元分配的整体性能。
还应注意的是,编译器优化还需要考虑其它问题(例如,阶段排序),特别是在选择应向其分配指令的最佳功能单元时。例如,如果在指令调度之前确定了最佳功能单元,两个指令之间的指令延迟可能会增加,但代价可能是错误指令捆绑和无效指令级并行性。在这种情况下,可以通过指令调度将两个关联的指令彼此远离放置,从而由于功能单元之间的传输延迟而使为最佳功能单元分配所做的努力至少部分无效。另一方面,如果在指令调度之后确定了最佳功能单元,则可以在指令调度之后调整两个指令之间的延迟,从而降低指令调度过程不准确的影响。
根据各实施例,提供了用于为一个或多个当前调度的指令确定最佳功能单元的方法和装置。所述最佳功能单元可以指所有可用的功能单元中从性能增强角度可以为其分配当前调度的指令的最有利功能单元。所述最佳功能单元可以是也可以不是所有条件下可能的最佳功能单元选择。可以同时使用启发式方法与寄存器分配(register allocation,RA)后指令调度(例如,在寄存器分配之后)来解决与最佳功能单元分配相关的问题。对于所述当前调度的指令,在一些实施例中,所述一个或多个当前调度的指令是超长指令字(verylong instruction word,VLIW)。VLIW指的是一种指令集架构,用于将计算机指令分解为可由处理器并行执行的基本操作。
各实施例可以实现为RA后指令调度器。因此,用于确定最佳功能单元分配的所述方法可以作为RA后指令调度的一部分实现。这使得各实施例可以拥有关于代码的准确信息,例如执行了寄存器分配的扩展伪指令。该实现方式还可以重用现有的数据结构和代码,例如可用队列。
当作为RA后指令调度的一部分实现时,可以依赖RA后节点排序来进行指令节点排序。通过调查可用队列,RA后节点排序可以提供关于可能在当前指令捆绑包(例如,组合为捆绑包的一组指令)中打包的候选指令的信息。如果仅探索关键路径上的指令、由于数据依赖关系而需要按顺序执行的最长系列操作或指令,则可能无法获得此类信息。如果依赖于不同的节点排序(即,与RA后节点排序不同的节点排序),则所述信息还可能不准确。RA后节点排序还可以消除或缓解阶段排序问题,其中,使用不准确信息的早期阶段可能会被后期阶段宣告无效。
已经实现一种调度方法,作为集群架构的指令调度器的扩展,例如Ozer、Banerjia和Conte(E.Ozer、S.Banerjia、T.M.Conte,“统一分配和调度:集群寄存器文件微架构调度的新方法(Unified assign and schedule:A new approach to scheduling forclustered register file microarchitectures)”,《第31届年度微架构国际学术会议汇刊(Proc.31th Annu.Int.Symp.Microarchitecture)》,第308至314页,1998年11月)提出的方法,该方法定义了统一分配和调度(unified-assign-and-schedule,UAS),UAS合并了集群分配阶段和指令调度阶段。然而,没有考虑每个指令节点的最重要后续指令及其可移动性。也没有讨论解决因对功能单元分配的不同建议引起的冲突需要考虑的因素(例如,最重要后续指令的可移动性以及可以与当前调度的指令捆绑的指令的移动性)。
在指令调度中,可能需要一种称为可用队列的数据结构。可用队列可以包括所有可进行调度的指令的列表,可用队列中的指令节点可以是已经调度依赖关系且结果可用于后续指令的节点。根据各实施例,提供了一种利用这种数据结构更好地预测决策影响的方法和装置。
各实施例提供了一种考虑可用队列中具有最高优先级的指令的方法。需要注意的是,优先级可以表示被视为比其它指令更重要或在其它指令之前执行。例如,具有最高优先级的指令可以是最重要、最关键的指令或最先执行的指令。根据实施例,所述方法的三个阶段包括:(i)在所有功能单元的选择中,在指令捆绑方面选择最佳功能单元;(ii)在所有功能单元的选择中,在延迟方面选择最佳功能单元;(iii)如果从阶段(i)和阶段(ii)获得的所选功能单元不同或矛盾,则解决冲突。
确定三阶段(启发式)方法的挑战与应用于该方法的复杂程度相关联。例如,如果该方法配置得过于简单,则在阶段(i)和阶段(ii)中选择的功能单元之间可能会产生太多冲突(例如,在阶段(i)选择的功能单元与在阶段(ii)选择的功能单元不同)。或者,如果该方法配置得过于复杂,则实现这种方法所需的工作量可能会过大,因此可能需要大量的编译时间。
如上所述,可以将该方法配置为从可用队列中识别最高优先级节点(例如,具有最高优先级的指令节点)。从可用队列中识别或确定具有最高优先级的节点时,还可以调查是否存在一个或多个备选指令节点。可以考虑这些备选指令节点中的每一个各自对延迟和指令捆绑的影响。可以基于此考虑选择最合适的指令节点。
从可用队列中选择最高优先级指令节点后,就可以执行资源危险检查。如果没有资源危险(例如,两个或多个指令同时不需要相同的资源),则可以调度所识别的最高优先级指令节点。或者,如果最高优先级指令节点存在资源危险,则可以识别并检查另一个指令节点(例如,具有第二高优先级的节点),以确定是否存在与其相关联的资源危险。可以重复该评估,直到识别并调度合适的指令节点。指令节点被调度后,就可以更新可用队列、挂起队列和周期等数据结构。
如上所定义,用于为一个或多个当前调度的指令确定最佳功能单元的所述方法可以具有三个阶段:(i)在所有功能单元的选择中,在指令捆绑方面选择最佳功能单元;(ii)在所有功能单元的选择中,在延迟方面选择最佳功能单元;(iii)如果从阶段(i)和阶段(ii)获得的所选功能单元彼此不同或相互矛盾,则解决冲突。下面将进一步详细描述这些阶段中的每一个。
根据各实施例,所述方法可以应用于有序处理器,其中。编译器可以确定作为指令发出目标的功能单元。通常,这代表数字信号处理器(digital signal processor,DSP)的特征。在各种实施例中,所述方法的总体框架可以用于具有较小修改的其它架构。根据计算***架构特征,可能需要对启发式方法进行调整。
图3以流程图示出了各实施例提供的在指令捆绑方面在功能单元的选择中选择最佳功能单元的过程。图3示出了用于确定最佳功能单元的方法的阶段(i)。对于该阶段(即,在指令捆绑方面确定最佳功能单元时),假设在RA后调度期间存在可用队列,并且可用队列包含可进行调度的指令的排序列表。
根据各实施例,可以为能够分配给当前调度的指令的每个潜在功能单元估计可以与当前调度的指令捆绑的指令的数量。需要注意的是,可以将多个指令组合为一个捆绑包。捆绑的指令可以并行执行。指令捆绑包中的指令不能有冲突的依赖关系。为了获得可以与当前调度的指令捆绑的符合条件的指令的适当列表,可以考虑可用队列中的所有指令。在一些实施例中,还可以考虑可用队列中的至少一些后续指令,因为一些计算***的架构在某些条件下可以支持捆绑反依赖和/或数据依赖等等。
根据各实施例,对于每个潜在功能单元,可以检查可用队列中的所有指令中的每一个,以便创建可以与当前调度的指令捆绑的所有符合条件的指令的列表。只要被检查的指令可以与当前调度的指令捆绑,就可以单独地(例如,一个接一个地)执行指令的检查。在一些实施例中,如果被检查的指令不能与当前调度的指令捆绑,则可以检查可用队列中的其它指令,以查看它们是否可以与当前调度的指令捆绑。根据一些实施例,在此检查或评估过程中,一次只能检查可用队列中的一个指令及其后续指令。在一些实施例中,可以存储关于哪些指令可以与当前调度的指令捆绑的信息,以节省编译时间。在一些实施例中,检查可以考虑在将当前指令重新分配给不同的功能单元时指令可以与当前调度的指令捆绑的情况。
根据各实施例,用于找出最佳功能单元的所述方法不仅仅关注可以与当前调度的指令捆绑的指令的数量。在识别最佳功能单元的过程中,可以考虑包括优先级在内的一个或多个其它因素。
根据各实施例,当被检查的指令不能与当前调度的指令捆绑时,可以停止检查。换言之,对于每个功能单元,可以在识别不能与当前调度的指令捆绑的第一个指令时,确定可以与当前调度的指令捆绑的指令的数量。
如上所述,当被检查的指令不能与当前调度的指令捆绑时,可以停止检查。在这方面要考虑两种情况。第一种情况是:只有一个指令可以与当前调度的指令额外捆绑,并且该指令在关键路径上。另一种情况是:有多个指令可以与当前调度的指令捆绑,但这些指令具有较大的移动性。根据各实施例,指令(即,指令节点)的可移动性可以指示指令可以移动的容易程度。根据各实施例,如在其它地方进一步定义的,可以基于关键路径的长度、指令节点的深度和指令节点的高度等一个或多个因素来确定指令的可移动性。根据各实施例,在这两种情况中,在第一种情况下识别的指令是优选的。换言之,可以认为指令的优先级比可以捆绑的指令的数量更重要。因此,在各种实施例中,可用队列按优先级排序。在可用队列按优先级排序时,可以在识别不能与当前调度的指令捆绑的第一个指令时停止对捆绑指令的检查。可以注意到的是,不需要检查其它指令(即,不能捆绑的第一个指令之后的指令),因为其它指令具有较低的优先级。
根据各实施例,阶段(i)的输出是为了改进指令捆绑所期望的建议功能单元。具体地,在完成上述步骤后,将为每个可用的功能单元估计可以与当前调度的指令捆绑的指令的数量。阶段(i)给出的建议功能单元将是估计具有最大数量的可以与当前调度的指令捆绑的指令的功能单元。如果估计所有可用的功能单元具有相同数量的可以与当前调度的指令捆绑的指令(即,功能单元之间没有差异),则在阶段(i)将没有建议功能单元,并且阶段(i)的输出将为空。
下面将结合图3进一步描述找出允许最大数量连续指令的最佳功能单元的步骤(即,阶段(i))。如图3所示,步骤310包括估计可以与当前调度的指令捆绑或可能执行的指令的数量。将检查可用队列中的所有指令,以确定这些指令中的一个或多个是否可以与当前调度的指令捆绑。可用队列中的指令可以按优先级顺序排列。此外,还可以考虑可用队列中的指令的后续指令。根据各实施例,可以考虑或不考虑后续指令,这取决于计算***的架构,因为计算***的架构在某些条件下可以支持或不支持捆绑反依赖和/或数据依赖。
在步骤310中,可以单独检查可用队列中的每个指令及其后续指令,以确定该指令是否可以与当前调度的指令捆绑。根据一些实施例,在此检查过程中,一次只能检查可用队列中的一个指令及其后续指令。
根据各实施例,结合一次可分配给指令的功能单元之一估计可以与当前调度的指令捆绑的指令的数量。因此,在步骤320中,针对当前调度的指令的功能单元分配选择中的每一个重复执行步骤310。
当针对所有功能单元分配选择估计可以与当前调度的指令捆绑的指令的数量时,将在步骤330中确定最佳功能单元,使得最佳功能单元允许最大数量的指令(例如,连续指令)与当前调度的指令捆绑。如果没有这样的功能单元分配选择,或者所有可能的功能单元分配选择允许相同数量的指令与当前调度的指令捆绑,则阶段(i)将返回“空”,例如不选择功能单元。
图4以流程图示出了各实施例提供的在延迟方面在功能单元的所有选择中选择最佳功能单元的过程。图4示出了用于确定最佳功能单元的方法的阶段(ii)。
根据各实施例,可以检查可分配给当前调度的指令的所有可能功能单元,以确定在延迟方面而言的最佳功能单元。在各种实施例中,可以基于当前调度的指令与其后续指令之间的延迟来确定在延迟方面而言的最佳功能单元。在当前调度的指令有多个后续指令时,可以仅考虑最重要的后续指令。根据各实施例,最重要的后续指令可以是具有最低或最小可移动性的后续指令。指令(即,指令节点)的可移动性是基于关键路径的长度、指令节点的深度和指令节点的高度等一个或多个因素确定的。根据一些实施例,可移动性可以按如下公式确定:
可移动性=
关键路径的长度–指令节点的深度–指令节点的高度
按如上公式定义指令节点的可移动性时,关键路径上的每个指令节点的可移动性将为零,而其它指令节点(例如不在关键路径上的指令节点)的可移动性为一(1)或更大。
根据各实施例,可以不考虑当前调度的指令的任何先前指令,以确定在延迟方面而言的最佳功能单元。由于最佳功能单元将在RA后调度期间确定且先前指令已调度,因此无法为先前指令执行任何调度任务。此外,在RA后调度期间确定最佳功能单元的好处将大于因未微调用于最佳功能单元的方法而造成的损失。
根据各实施例,在此阶段(即,阶段(ii))确定的最佳功能单元将是最小化当前调度的指令与其最重要后续指令之间的延迟的功能单元。
下面将结合图4进一步描述在延迟方面找出最佳功能单元的步骤(即,阶段(ii))。步骤410包括找出当前调度的指令的后续指令。当前调度的指令可以有一个后续指令或多个后续指令。在步骤420中,可以估计每个后续指令的可移动性。在一些实施例中,可以基于一个或多个因素在步骤420中确定每个后续指令的可移动性,例如关键路径的长度、指令节点的深度和指令节点的高度(例如,可移动性=关键路径的长度–指令节点的深度–指令节点的高度)。
在估计当前调度的指令的每个后续指令的可移动性后,可以在步骤430中找出当前调度的指令的最重要后续指令。最重要后续指令可以是具有最低或最小可移动性的后续指令。
根据各实施例,一次基于一个功能单元确定当前调度的指令的最重要后续指令。因此,针对当前调度的指令的功能单元分配选择中的每一个重复执行步骤410至步骤430(步骤440)。
为所有功能单元分配选择找到当前调度的指令的最重要后续指令后,将在步骤450中确定最佳功能单元,使得最佳功能单元最小化最重要后续指令(例如,具有最低可移动性的后续指令)与当前调度的指令之间的延迟。如果没有这样的功能单元分配选择,或者最重要后续指令(例如,具有最低可移动性的后续指令)与当前调度的指令之间的延迟对于所有功能单元分配选择是相同的,则阶段(ii)将返回“空”,例如不选择功能单元。
图5以流程图示出了各实施例提供的在为指令捆绑选择的最佳功能单元与在为延迟选择的最佳功能单元不同时解决冲突的过程。图5示出了用于确定最佳功能单元的方法的阶段(iii)。
根据各实施例,将基于早期阶段(即,阶段(i)和阶段(ii))给出的建议功能单元确定最佳功能单元。如果阶段(i)和阶段(ii)确定的最佳功能单元相同,则该功能单元将是当前调度的指令的最佳功能单元。如果在阶段(i)确定的最佳功能单元与在阶段(ii)确定的最佳功能单元不同,则可以选择这些建议功能单元中的一个。
例如,在可以与当前调度的指令捆绑的指令中,可以选择一个或多个指令,使得它们:在分配在指令捆绑方面而言的最佳功能单元(即,在阶段(i)确定的最佳功能单元)时,可以与当前调度的指令捆绑;而在分配在延迟方面而言的最佳功能单元(即,在阶段(ii)确定的最佳功能单元)时,不可以与当前调度的指令捆绑。在这种情况下,可以为这些选择的指令中的每一个确定可移动性。在确定每个指令的可移动性后,将具有最低可移动性的指令与当前调度的指令的最重要后续指令的可移动性进行比较。基于可移动性比较,将基于最低可移动性确定要分配给当前调度的指令的最佳功能单元。
下面将结合图5进一步描述确定最佳功能单元的最终步骤(即,阶段(iii))。在步骤510中,可以检索为指令捆绑选择的最佳功能单元;在步骤520中,可以检索为延迟选择的最佳功能单元。在步骤530中,可以确定为指令捆绑选择的最佳功能单元与为延迟选择的最佳功能单元之间是否存在冲突。如果为指令捆绑选择的最佳功能单元与为延迟选择的最佳功能单元相同(即,没有冲突),则该选定的功能单元是当前调度的指令的最佳功能单元。在这种情况下,在步骤535中,可以将确定的最佳功能单元分配给当前调度的指令,并将当前调度的指令或包含在当前调度的指令中的一个或多个操作(例如,包含在VLIW中的操作)发送给确定的最佳功能单元。
如果为指令捆绑选择的最佳功能单元与为延迟选择的最佳功能单元不同(即,存在冲突),则在步骤540中,评估在阶段(ii)识别的当前调度的指令的最重要后续指令是否比在阶段(i)识别的要与当前调度的指令一起执行的附加指令更有价值。在各种实施例中,可以基于在阶段(ii)识别的最重要后续指令的可移动性以及在阶段(i)识别的最重要指令的可移动性来确定这一点,其中,如果分配了为延迟选择的最佳功能单元,则所述最重要指令不能与当前调度的指令捆绑。在步骤550中,如果当前调度的指令的最重要后续指令比要与当前调度的指令一起执行的附加指令更有价值,则为延迟选择的最佳功能单元将确定为最佳功能单元并分配给当前调度的指令。进一步地,在步骤550中,将当前调度的指令或包含在当前调度的指令中的一个或多个操作(例如,包含在VLIW中的操作)发送给确定的最佳功能单元。相反,如果要与当前调度的指令一起执行的附加指令比当前调度的指令的最重要后续指令更有价值,则在步骤560中,为指令捆绑选择的最佳功能单元将确定为最佳功能单元并分配给当前调度的指令。进一步地,在步骤560中,将当前调度的指令或包含在当前调度的指令中的一个或多个操作(例如,包含在VLIW中的操作)发送给确定的最佳功能单元。
图6为不同实施例提供的可以执行本文显式或隐式描述的上述方法和功能的任意或全部操作的电子设备600的示意图。例如,计算设备可以配置为电子设备600。进一步地,执行数字信号处理的网络元件可以配置为电子设备600。
如图所示,所述设备包括处理器610、存储器620、非瞬时性大容量存储设备630、I/O接口640、网络接口650和收发器660,所有这些元件通过双向总线670通信耦合。根据某些实施例,可以利用所述元件中的任意或所有元件,或仅利用所述元件的子集。进一步地,设备600可以包含某些元件的多个实例,例如多个处理器(例如,诸如CPU之类的通用微处理器和/或诸如数字信号处理器之类的专用微处理器或者容易理解的其它处理单元或设备)、存储器或收发器。此外,硬件设备的元件可以在没有所述双向总线的情况下直接耦合至其它元件。附加地或替代地,除处理器和存储器之外,还可以采用集成电路等其它电子器件来执行所需的逻辑操作。
存储器620可以包括任何类型的非瞬时性存储器,例如静态随机存取存储器(static random access memory,SRAM)、动态随机存取存储器(dynamic random accessmemory,DRAM)、同步DRAM(synchronous DRAM,SDRAM)、只读存储器(read-only memory,ROM)或其任意组合等。容量存储设备630可以包括任何类型的非瞬时性存储设备,例如固态驱动器、硬盘驱动器、磁盘驱动器、光盘驱动器、USB驱动器或用于存储数据和机器可执行程序代码的任何计算机程序产品。根据某些实施例,存储器620或大容量存储设备630可以在其上记录可由处理器610执行的语句和指令,用于执行上述任意方法操作。
应当理解的是,尽管为了说明的目的在本文中描述了本技术的具体实施例,但是可以在不脱离本技术范围的情况下进行各种修改。因此,说明书和附图仅被视为所附权利要求书限定的对本发明的说明,并且设想说明书和附图覆盖落入本发明范围内的任何和全部修改、变化、组合或等同物。具体地,提供计算机程序产品或程序元件或者程序存储设备或存储器设备(例如磁线、磁带、磁盘或光线、光带、光盘)用于存储机器可读的信号、用于根据本技术的方法控制计算机的操作和/或根据本技术的***构造其部分或全部组件均属于本技术的范围。
与本文中所描述的方法相关联的动作可以实现为单个计算机程序产品中的编码指令。换言之,所述计算机程序产品是一种计算机可读介质,当所述计算机程序产品被加载到存储器中并在无线通信设备的微处理器上执行时,在所述计算机可读介质上记录软件代码以执行所述方法。
与本文中所描述的动作相关联的动作可以实现为多个计算机程序产品中的编码指令。例如,可以使用一个计算设备执行所述方法的第一部分,可以使用另一个计算设备、服务器等执行所述方法的第二部分。在这种情况下,每个计算机程序产品是一种计算机可读介质,当所述计算机程序产品被加载到存储器中并在计算设备的微处理器上执行时,在所述计算机可读介质上记录软件代码以执行所述方法的适当部分。
此外,可以在个人计算机、服务器、PDA等任何计算设备上,并且根据从C++、Java等任何编程语言生成的一个或多个程序单元、模块或对象或所述一个或多个程序单元、模块或对象的一部分来执行所述方法的每个操作。此外,可以由专用硬件或为此目的设计的电路模块来执行每个操作或实现每个所述操作的文件或对象等。
显而易见的是,本发明的上述实施例是示例性的,并且可以多种方式变化。此类当前或未来变化不应被视为背离本发明的精神和范围,并且对于本领域技术人员来说显而易见的是,所有此类修改都旨在包含在所附权利要求书的范围内。
Claims (20)
1.一种用于为一个或多个当前调度的指令确定最佳功能单元的方法,其特征在于,所述方法包括:
基于可用队列中的一个或多个附加指令的优先级确定第一候选功能单元,所述可用队列包括一个或多个指令,所述一个或多个指令将与所述一个或多个当前调度的指令进行捆绑;
基于所述一个或多个当前调度的指令与所述当前调度的指令的最重要后续指令之间的延迟确定第二候选功能单元;
从所述第一候选功能单元和所述第二候选功能单元中选择所述最佳功能单元。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
向所述最佳功能单元发送所述一个或多个当前调度的指令。
3.根据权利要求1至2中任一项所述的方法,其特征在于,所述第一候选功能单元还基于允许与所述一个或多个当前调度的指令捆绑的所述附加指令的数量来选择。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述一个或多个附加指令按优先级顺序排列。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述最重要后续指令是所述一个或多个当前调度的指令的具有最小可移动性的后续指令。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述第一候选功能单元等同于所述第二候选功能单元。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述最佳功能单元基于所述一个或多个附加指令的可移动性与所述最重要后续指令的可移动性的比较来选择。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述最佳功能单元在寄存器分配后的调度期间确定。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述一个或多个当前调度的指令是超长指令字。
10.一种用于为一个或多个当前调度的指令确定最佳功能单元的装置,其特征在于,所述装置包括:
处理器;
存储器,在其上存储机器可执行指令,当所述机器可执行指令由所述处理器执行时,将所述装置配置用于:
基于可用队列中的一个或多个附加指令的优先级确定第一候选功能单元,所述可用队列包括一个或多个指令,所述一个或多个指令将与所述一个或多个当前调度的指令进行捆绑;
基于所述一个或多个当前调度的指令与所述当前调度的指令的最重要后续指令之间的延迟确定第二候选功能单元;
从所述第一候选功能单元和所述第二候选功能单元中选择所述最佳功能单元。
11.根据权利要求10所述的装置,其特征在于,当所述指令由所述处理器执行时,还将所述装置配置用于:
向所述最佳功能单元发送所述一个或多个当前调度的指令。
12.根据权利要求10至11中任一项所述的装置,其特征在于,所述第一候选功能单元还基于允许与所述一个或多个当前调度的指令捆绑的所述附加指令的数量来选择。
13.根据权利要求10至12中任一项所述的装置,其特征在于,所述一个或多个附加指令按优先级顺序排列。
14.根据权利要求10至13中任一项所述的装置,其特征在于,所述最重要后续指令是所述一个或多个当前调度的指令的具有最小可移动性的后续指令。
15.根据权利要求10至14中任一项所述的装置,其特征在于,所述第一候选功能单元等同于所述第二候选功能单元。
16.根据权利要求10至15中任一项所述的装置,其特征在于,所述最佳功能单元基于所述一个或多个附加指令的可移动性与所述最重要后续指令的可移动性的比较来选择。
17.根据权利要求10至16中任一项所述的装置,其特征在于,所述最佳功能单元在寄存器分配后的调度期间确定。
18.根据权利要求10至17中任一项所述的装置,其特征在于,所述一个或多个当前调度的指令是超长指令字。
19.一种用于为一个或多个当前调度的指令确定最佳功能单元的网络节点,其特征在于,所述网络节点包括:
网络接口,用于从连接到计算网络的组件接收数据并向所述组件发送数据;
处理器;
存储器,在其上存储机器可执行指令,当所述机器可执行指令由所述处理器执行时,将所述网络节点配置用于:
基于可用队列中的一个或多个附加指令的优先级确定第一候选功能单元,所述可用队列包括一个或多个指令,所述一个或多个指令将与所述一个或多个当前调度的指令进行捆绑;
基于所述一个或多个当前调度的指令与所述当前调度的指令的最重要后续指令之间的延迟确定第二候选功能单元;
从所述第一候选功能单元和所述第二候选功能单元中选择所述最佳功能单元;
向所述最佳功能单元发送所述一个或多个当前调度的指令。
20.根据权利要求19所述的网络节点,其特征在于,当所述指令由所述处理器执行时,还将所述网络节点配置用于:
向所述最佳功能单元发送所述一个或多个当前调度的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/692,844 | 2019-11-22 | ||
US16/692,844 US20210157638A1 (en) | 2019-11-22 | 2019-11-22 | Method and apparatus for functional unit assignment |
PCT/CN2020/080567 WO2021098105A1 (en) | 2019-11-22 | 2020-03-23 | Method and apparatus for functional unit assignment |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114730262A true CN114730262A (zh) | 2022-07-08 |
Family
ID=75971377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080081145.2A Pending CN114730262A (zh) | 2019-11-22 | 2020-03-23 | 用于功能单元分配的方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20210157638A1 (zh) |
CN (1) | CN114730262A (zh) |
WO (1) | WO2021098105A1 (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2839590B2 (ja) * | 1989-11-10 | 1998-12-16 | 株式会社東芝 | 命令割り当て装置及び命令割り当て方法 |
US7761691B2 (en) * | 2005-10-27 | 2010-07-20 | National Tsing Hua University | Method for allocating registers using simulated annealing controlled instruction scheduling |
CN101470600B (zh) * | 2007-12-27 | 2011-08-24 | 华为技术有限公司 | 一种超长指令字处理的方法和装置 |
CN101770357B (zh) * | 2008-12-31 | 2014-10-22 | 世意法(北京)半导体研发有限责任公司 | 减少处理器中的指令冲突 |
US10318293B2 (en) * | 2013-07-09 | 2019-06-11 | Texas Instruments Incorporated | Predication methods for vector processors |
GB2510655B (en) * | 2013-07-31 | 2015-02-25 | Imagination Tech Ltd | Prioritizing instructions based on type |
KR102204282B1 (ko) * | 2013-11-25 | 2021-01-18 | 삼성전자주식회사 | 다수의 기능 유닛을 가지는 프로세서를 위한 루프 스케쥴링 방법 |
-
2019
- 2019-11-22 US US16/692,844 patent/US20210157638A1/en not_active Abandoned
-
2020
- 2020-03-23 CN CN202080081145.2A patent/CN114730262A/zh active Pending
- 2020-03-23 WO PCT/CN2020/080567 patent/WO2021098105A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US20210157638A1 (en) | 2021-05-27 |
WO2021098105A1 (en) | 2021-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5733860B2 (ja) | 依存問題の効率的並列計算 | |
US8732714B2 (en) | Method for reorganizing tasks for optimization of resources | |
US8997071B2 (en) | Optimized division of work among processors in a heterogeneous processing system | |
JP2011527788A5 (zh) | ||
US20080216062A1 (en) | Method for Configuring a Dependency Graph for Dynamic By-Pass Instruction Scheduling | |
JP2019049843A (ja) | 実行ノード選定プログラム、実行ノード選定方法及び情報処理装置 | |
WO2010116431A1 (ja) | キャッシュ制御装置及びキャッシュ制御方法 | |
US20140281407A1 (en) | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture | |
US8510529B2 (en) | Method for generating program and method for operating system | |
KR102205899B1 (ko) | 메모리의 뱅크 충돌을 방지하기 위한 방법 및 장치 | |
JP2007188523A (ja) | タスク実行方法およびマルチプロセッサシステム | |
JPH0816871B2 (ja) | プログラム翻訳装置およびプログラム翻訳方法 | |
WO2024109312A1 (zh) | 任务调度执行方法、任务调度执行指令的生成方法及装置 | |
CN108027736B (zh) | 使用通过对物理寄存器预分配的乱序重命名的运行时代码并行化 | |
TWI743698B (zh) | 解譯執行位元組碼指令流的方法及裝置 | |
JP2016192152A (ja) | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 | |
JP2005129001A (ja) | プログラム実行装置、マイクロプロセッサ及びプログラム実行方法 | |
US20060107267A1 (en) | Instruction scheduling method | |
CN114730262A (zh) | 用于功能单元分配的方法和装置 | |
JP5983623B2 (ja) | タスク配置装置及びタスク配置方法 | |
US20120017070A1 (en) | Compile system, compile method, and storage medium storing compile program | |
JP2021039666A (ja) | コア割当装置及びコア割当方法 | |
KR102512704B1 (ko) | 매트릭스 연산 방법 및 그 장치 | |
US11513841B2 (en) | Method and system for scheduling tasks in a computing system | |
CN117149398A (zh) | 一种内存分配的方法和装置 |
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 |