CN105408859B - 用于指令调度的方法和系统 - Google Patents

用于指令调度的方法和系统 Download PDF

Info

Publication number
CN105408859B
CN105408859B CN201480042512.2A CN201480042512A CN105408859B CN 105408859 B CN105408859 B CN 105408859B CN 201480042512 A CN201480042512 A CN 201480042512A CN 105408859 B CN105408859 B CN 105408859B
Authority
CN
China
Prior art keywords
instruction
flag register
dependence
mode
access
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.)
Expired - Fee Related
Application number
CN201480042512.2A
Other languages
English (en)
Other versions
CN105408859A (zh
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.)
Kaiwei International Co
Marvell International Ltd
Marvell Asia Pte Ltd
Original Assignee
Mawier International Trade Co 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 Mawier International Trade Co Ltd filed Critical Mawier International Trade Co Ltd
Publication of CN105408859A publication Critical patent/CN105408859A/zh
Application granted granted Critical
Publication of CN105408859B publication Critical patent/CN105408859B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4435Detection or removal of dead or redundant code
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags

Abstract

本公开内容的方面提供了用于指令调度的方法。该方法包括:接收指令的序列,标识指令的基于冗余标志寄存器的依赖性,以及在不受基于冗余标志寄存器的依赖性的限制的情况下,对指令进行重新排序。

Description

用于指令调度的方法和系统
相关申请的交叉引用
本公开内容要求2013年9月12日提交的美国临时申请第61/876,914号“Methodand System of Mark Friendly Instruction Scheduling for Virtual Machine”的权益,其全部内容通过引用合并于此。
背景技术
本文所提供的背景技术描述出于一般性地呈现本公开内容的上下文的目的。至于在本背景技术部分中所描述的工作以及在提交时可能无法被视为现有技术的描述方面,当前署名的发明人的工作既未明确也未隐含地被认可作为相对于本公开内容的现有技术。
通常,诸如Dalvik等的Java虚拟机将频繁使用的Java字节代码编译成本机代码以改善运行时间性能。在示例中,Java虚拟机包括即时编译器,该即时编译器用Java字节代码逐一编译指令,而不需要改变指令的顺序。
发明内容
本公开内容的方面提供一种用于指令调度的方法。该方法包括:接收指令的序列,标识指令的基于冗余标志寄存器的依赖性,以及在不受基于冗余标志寄存器的依赖性的限制的情况下,对指令进行重新排序。
为了标识基于冗余标志寄存器的依赖性,在实施例中,该方法包括基于针对标志寄存器访问的预先确定的模式来标识基于冗余标志寄存器的依赖性。在示例中,该方法包括标识标志寄存器的两个或更多个连续的读取标志寄存器访问。在另一示例中,该方法包括标识三个或更多个连续的写入标志寄存器访问。
在实施例中,改方法包括:接收指令的序列以用于编译;以及输出已经被重新排序的已编译代码。在另一实施例中,该方法包括:接收指令的序列以用于执行;以及根据重新排序的指令来控制该执行。
在实施例中,为了在不受所述基于冗余标志寄存器的依赖性的限制的情况下对指令进行重新排序,该方法包括:构造具有顶点和顶点之间的边的有向图。顶点对应于指令,并且边被延迟标记并且对应于数据依赖性和非冗余标志依赖性。然后,该方法包括根据关键的延迟取向模型对有向图进行拓扑分类以减小执行延迟。
本公开内容的方面提供一种非瞬态计算机可读介质,其存储用于引起处理器执行用于指令调度的操作的程序指令。操作包括:接收指令的序列;标识指令的基于冗余标志寄存器的依赖性;以及在不受基于冗余标志寄存器的依赖性的限制的情况下,对指令进行重新排序。
本公开内容的方面提供一种包括处理器和存储器的装置。处理器被配置为执行指令。存储器被配置为存储用于引起处理器执行以下操作的指令:接收指令的序列;标识序列中的指令的基于冗余标志寄存器的依赖性;以及在不受基于冗余标志寄存器的依赖性关系的限制的情况下,对指令进行重新排序。
附图说明
参考附图详细描述了被提供作为示例的本公开内容的各种实施例,其中相似的参考标记指代相似的元素,并且其中:
图1示出了根据本公开内容的实施例的系统示例100的框图;
图2示出了给出根据本公开内容的实施例的过程示例200的流程图;
图3示出了根据本公开内容的实施例的用于标识冗余标志寄存器依赖性的伪代码的示例;
图4示出Java字节代码460的示例;以及
图5-7示出根据本公开内容的实施例的对应于Java字节代码460的本机代码580、680和780的示例。
具体实施方式
图1示出了根据本公开内容的实施例的系统示例100的框图。系统100包括硬件部件(诸如处理模块110、存储器模块120等)以及软件部件(诸如在存储器模块120中所存储的各种代码指令)。硬件部件根据软件部件进行操作以执行各种任务。系统100被配置为执行标志友好型指令调度以对指令重新排序以用于执行。例如,系统100标识指令中不必要的冗余标志寄存器依赖性,并且在指令调度期间忽略冗余标志寄存器依赖性以扩展调度范围,增加调度灵活性并且改善调度性能。
根据本公开内容的一个方面,可以用硬件和软件来执行标志友好型指令调度。在示例中,用硬件来实现标志友好型指令调度,诸如用于中央处理单元(CPU)中的无序执行控制的控制电路等。在另一示例中,用各种编译软件来实现标志友好型指令调度,诸如静态编译软件、动态编译软件等。在图1的示例中,在用于动态编译的即时(JIT)编译器135中实现标志友好型指令调度。
具体地,在图1的示例中,系统100可以是任意合适的系统,诸如台式计算机、膝上型计算机、平板计算机、智能电话等。系统100可以包括其他合适的部件(未示出),诸如显示器、触摸屏、麦克风、通信部件等。在实施例中,系统100包括集成各种电路(诸如单个IC芯片上的处理模块110、存储器模块120等)的单个集成电路(IC)芯片。在另一实施例中,系统100包括适当地耦合在一起的多个IC芯片,诸如处理器芯片、存储器芯片等。
处理模块110包括一个或多个处理器,诸如中央处理器(CPU)111等,以执行用于执行各种任务的各种代码指令。代码指令可以是能够直接由CPU 111来执行的低级代码,诸如机器代码(本机代码),或者代码指令可以是能够被转换成机器代码并且然后执行的高级代码,诸如Java语言、C语言等的代码。
可以使用任意合适的架构来实现CPU 111,诸如x86、ARM等。在示例中,当CPU 111具有x86架构时,CPU 111能够执行特定于x86架构的x86指令集中的机器代码。在另一示例中,当CPU 111具有ARM架构时,CPU 111能够执行特定于ARM架构的ARM指令集中的机器代码。
根据本公开内容的一个方面,CPU 111包括可以并行操作的多个处理电路。在图1的示例中,CPU 111包括整数处理电路112(诸如算法逻辑单元(ALU)等)和浮点(FP)处理电路113(诸如浮点乘法器等)。因此,在示例中,当整数操作和浮点操作不具有依赖性关系时,整数操作和浮点操作可以分别由整数处理电路112和FP处理电路113并行执行。在实施例中,CPU 111被配置为使用管线架构来支持指令管线,并且可以对指令进行重新排序以改善并行性并且减小延迟。
根据本公开内容的一方面,CPU 111出于各种目的包括各种寄存器114,诸如数据寄存器、基址寄存器、堆栈指针寄存器、标志寄存器等。每个指令对寄存器和/或存储器模块120中的数据执行特定的任务,诸如加载、跳跃、算术操作、逻辑操作等。具体地,在图1的示例中,标志寄存器117是包含CPU 111的当前状态的用于CPU111的状态寄存器。例如,标志寄存器包括被设置或清除为指令的CPU执行的效果(诸如算术和位处理操作等)的零标志、进位标志、符号标志、溢出标志等。另外,指令的CPU执行也依赖于标志寄存器中所存储的状态信息。
存储器模块120包括提供针对各种存储需要的存储器空间的一个或多个存储介质。在示例中,存储器模块120存储要由处理模块110执行的代码指令并且存储要由处理模块110处理的数据。在另一示例中,存储器模块120包括被分配用于系统存储的存储器空间,并且包括被分配用于用户存储的存储器空间。
存储介质包括但不限于硬盘驱动器、光盘、固态驱动器、只读存储器(ROM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存存储器等。
根据本公开内容的一个方面,存储器模块120存储各种计算机程序,诸如系统程序、用户应用程序等。每个计算机程序包括要被执行以执行任务的代码指令。
在图1的示例中,存储器模块120中的存储器空间130被分配用于存储适合用于系统100的Java软件程序。Java软件程序安装在系统100中以提供Java运行时间环境(JRE),使得Java字节代码能够被执行在系统100中。在示例中,执行Java软件程序以开始系统100中的Java虚拟机以用于执行Java字节代码。在示例中,系统100为Android系统,并且存储器空间130存储针对Android系统的Dalvik软件程序。
在实施例中,用Java语言生成用户应用程序的源代码。编译源代码以生成用于用户应用的Java字节代码。Java字节代码可由各种Java虚拟机执行。在图1的示例中,存储器空间150被分配用于存储用于用户应用的Java字节代码。为了执行Java字节代码,系统100开始Java虚拟机。在示例中,CPU 111在存储空间130处执行Java软件以开始Java虚拟机。Java虚拟机提供用于Java字节代码的Java运行时间环境。在示例中,在Java字节代码执行之后,终止Java虚拟机。
根据本公开内容的一个方面,Java虚拟机使用解释和即时(JIT)编译以用于Java字节代码执行。在示例中,Java虚拟机按照与较不频繁地执行的轨迹不同的方式来检测频繁地执行的轨迹,诸如路径、循环等。Java虚拟机跟踪针对轨迹的大量执行。当针对跟踪的执行数目小于阈值(例如二)时,Java虚拟机通过解释来执行跟踪;而当用于跟踪的执行数目等于或大于阈值时,JIT编译器135将Java字节代码的轨迹编译成本机代码的轨迹,并且将本机代码的轨迹高速缓存在存储器模块120中。通常,频繁地执行循环中的指令,并且JIT编译器135将循环中的指令编译成本机代码,并且高速缓存本机代码。
在图1的示例中,存储器空间170被分配作为用于高速缓存编译后的本机代码的JIT高速缓存。然后,为了跟踪的进一步执行,Java虚拟机执行存储器空间170处所存储的经高速缓存的本机代码。
根据本公开内容的一个方面,JIT编译器135包括被指令调度器140,指令调度器140被配置为对指令进行重新排序以改善平行性并且减小延迟。在图1的示例中,Java字节代码中的指令160的序列包括在指令160的关键的延迟路径上的两个指令164和165以及诸如指令161等其他指令。例如,指令164为浮点乘法指令,指令165为使用来自指令164的乘法结果的浮点加法指令,指令161为整数操作。指令165需要等待来自指令164的结果,并且指令164为耗时指令,并且可能占用例如多个时钟周期。在示例中,虽然指令161在指令164之前,然而指令164不具有对指令161的数据依赖性。
在实施例中,用低层中间表示来实现指令调度器140。指令调度器140使得Java字节代码中的指令160被编译成本机代码中的已重新排序指令180。在图1的示例中,指令164被转换成指令184,指令165被转换成指令185,指令161被转换成指令181。另外,指令181在指令184与指令185之间移动。因此,在示例中,可以分别由FP处理电路113和整数处理电路112并行于隐藏指令184与指令185之间的延迟来执行指令184和指令181。由Java虚拟机以减小的延迟来执行重新排序的指令180。
根据本公开内容的一个方面,指令调度器140被配置为确定指令之间的依赖性关系,并且根据依赖性关系(例如没有违反依赖性关系)来对指令重新排序。在实施例中,指令调度器140确定指令之间的数据依赖性和标志寄存器依赖性二者。
在实施例中,考虑三种类型的数据依赖性。存在先写后读(RAW)类型、先读后写(WAR)类型和先写后写(WAW)类型。当第一指令向存储器(例如向变量、寄存器等分配的存储地址)中写入时,第一指令稍后被第二指令读取,第一和第二指令具有RAW类型数据依赖性。当第一指令读取存储器(例如向变量、寄存器等分配的存储地址)时,第一指令稍后被第二指令写入,第一和第二指令具有WAR类型数据依赖性。当两个指令向相同的存储器(例如向变量、寄存器等分配的存储地址)写入时,两个指令具有WAW类型数据依赖性。当两个指令具有数据依赖性关系时,需要维持两个指令的顺序。
根据本公开内容的一个方面,指令调度器140标识指令之间非必要的冗余标志寄存器依赖性,并且在不受冗余标志寄存器依赖性的限制的情况下对指令进行重新排序。在实施例中,诸如基于ARM架构的Thumb指令集等特定指令集严重地设置/清除标志寄存器,并且产生不必要的标志寄存器依赖性。不必要的标志寄存器依赖性能够缩小调度空间,并且损害调度效率。
根据本公开内容的一个方面,当指令设置/清除标志寄存器时,指令为写入标志寄存器以定义标志寄存器中的标志的“def”指令,而当指令使用标志寄存器中的信息时,指令为读取标志寄存器以使用标志寄存器中的标志的“use”指令。在实施例中,指令调度器140标识连续的“def”指令以及连续的“use”指令以标识冗余标志寄存器依赖性。例如,当指令调度器140标识三个或更多个连续的“def”指令时,除了上一个“def”指令,连续的“def”指令的标志寄存器依赖性是冗余的。在另一示例中,当指令调度器140标识两个或更多个连续的“user”指令时,连续的“use”指令的标志寄存器依赖性是冗余的。
在示例中,九个指令的序列具有下面的标志寄存器依赖性:“def,def,def,use,def,def,use,use,def”。在本示例中,前三个指令为连续的“def”指令,并且前两个指令的标志寄存器依赖性是冗余的并且是不必要的。当前两个指令不具有数据依赖性关系时,前两个指令可以交换顺序而不影响执行正确性。
另外,在示例中,第七个和第八个指令形成连续的“use”指令,并且第七和第八指令的标志寄存器依赖性是冗余的。当第七和第八指令不具有数据依赖性关系时,这两个指令可以交换器顺序而不影响执行正确性。
根据本公开内容的一个方面,指令调度器140构造考虑数据依赖性和标志寄存器依赖性二者的依赖性图。依赖性图是其中每个顶点表示指令的有向图。从依赖性图中的第一顶点到第二顶点的边表示由第二顶点表示的第二指令与由第一顶点表示的第一指令的依赖性关系。在示例中,用依赖性的延迟来标记边。例如,依赖性的延迟是在管线能够继续第二指令之前处理第一指令需要经过的时钟周期的数目。在示例中,根据ARM架构指令定时模型(诸如Cortex-A9指令定时模型、Cortex-A7指令定时模型等)来确定时钟周期的数目。
另外,指令调度器140根据依赖性图对指令进行重新排序。在实施例中,指令调度器140使用拓扑分类算法来对依赖性图分进行类,并且记录指令以实现执行正确性并且实现减小的执行延迟。例如,当两个顶点通过有向边被连接时,拓扑分类算法维持由两个顶点表示的两个指令的顺序。另外,当有向边具有相对较大的延迟时,拓扑分类算法对指令重新排序以在由两个顶点表示的两个指令之间移动可移动的指令以隐藏延迟。应当注意,当忽略冗余标志寄存器依赖性时,更多可移动指令可用于隐藏相对较大的延迟。
应当注意,存储器模块120可以具有被分配用于其他合适的模块的存储器空间。在示例中,存储器模块120中的存储器空间(未示出)被分配用于存储针对内核的程序。内核是将用户应用程序对接到系统100的硬件组件的操作系统的一部分。例如,内核管理来自软件部件(诸如用户应用程序等)的输入/输出请求,并且将其转换成用于硬件部件(诸如处理模块110、存储器模块120等)的数据处理指令。
图2示出了给出根据本公开内容的实施例的处理示例200的流程图。在示例中,将Java语言的应用程序转换成Java字节代码,并且将Java字节代码存储在图1的示例中的存储器模块120的存储器空间150中。在实施例中,为了执行Java字节代码,CPU 111执行存储器空间130处所存储的Java软件程序以开始Java虚拟机。Java虚拟机提供用于执行Java字节代码的Java运行时间环境。在示例中,Java虚拟机使用JIT编译器135将频繁使用的指令块(诸如Java字节代码中的循环等)编译成本机代码,并且Java虚拟机执行编译后的本机代码以改善性能。在示例中,CPU 111执行指令调度器140以根据过程200来执行标志友好型指令调度。过程在S201处开始并且继续进行到S210。
在S210处,接收指令的序列。在图1的示例中,Java虚拟机接收指令160的序列(诸如针对热循环等的指令)用于执行。
在S220处,确定指令的数据依赖性。在示例中,指令调度器140引起CPU 111基于数据依赖性(诸如RAW、WAW或WAR类型的数据依赖性)来构造依赖性图。在实施例中,依赖性图是其中每个顶点表示指令的有向图。从依赖性图中的第一顶点到第二顶点的边表示由第二顶点表示的第二指令于由第一顶点表示的第一指令的数据依赖性关系。在示例中,用依赖性的延迟来标记边。例如,依赖性的延迟是在管线能够继续第二指令之前处理第一指令需要经过的时钟周期的数目。在示例中,基于指令集和处理模块110中的处理电路的架构来确定依赖性的延迟。
在S230处,确定指令的标志依赖性。在图1的示例中,指令调度器140引起CPU 111基于非冗余标志寄存器依赖性来另外构造依赖性图。在实施例中,指令调度器140标识冗余标志寄存器依赖性,并且忽略冗余标志寄存器依赖性以用于构造依赖性图中的边。图3示出伪代码示例,其能够由指令调度器140用于标识冗余标志寄存器依赖性,并且在不受冗余标志寄存器依赖性的限制的情况下构造依赖性图中的边。
在S240处,根据延迟取向模型来对指令重新排序。在图1的示例中,指令调度器140引起CPU 111对依赖性图执行拓扑分类以对指令进行重新排序。当两个顶点之间存在边时,由两个边表示的指令不能交换顺序。因为冗余标志寄存器依赖性被标识并且没有用于构造依赖性图中的边,所以拓扑结构分类不受冗余标志寄存器依赖性的限制。因此,指令调度器140在对指令进行重新排序以隐藏延迟方面具有更大的灵活性。在图1的示例中,JIT编译器135生成已编译的指令180,其被重新排序以隐藏延迟。已编译的指令180存储在JIT缓存中以用于CPU 111执行。然后,处理继续进行到S299并且终止。
应当注意,可以使用任意合适的算法来构建依赖性图。在实施例中,诸如JIT编译器135等动态编译器构造针对在动态编译期间频繁使用的轨迹的依赖性图。因为编译时间对于动态编译器是至关重要的,所以必须以相对较低的复杂性来构造依赖性图。
在示例中,对于N个指令的序列(N为正整数),使用复杂度为O(N2)的算法来构造依赖性图。具体地,算法在依赖性图中初始化对应于N个指令(I1、I2,……,IN)的N个顶点。然后,算法扫描每对指令(IX,IY)(X和Y为满足1<=X<Y<=N的正整数),并且确定这一对指令是否具有数据依赖性和/或非冗余标志寄存器依赖性。当这一对指令具有数据依赖性和/或非冗余标志寄存器依赖性时,在对应于这两个指令的两个顶点之间构造边。
在另一示例中,算法构造由于数据依赖性而产生的第一边,并且然后构造由于非冗余标志寄存器依赖性而产生的第二边。为了构造由于非冗余标志寄存器依赖性而产生的第二边,对于每个指令IX,算法例如按照以下顺序:(IX,IX+1)、(IX,IX+2)、……、(IX,IN)依次检查以IX开始的指令对。
具体地,对于每个开始指令IX,算法将NEED_CHECK_FLAG初始化为真,将MARK2初始化为假,并且将MARK1初始化为假。然后,算法按照以下顺序依次检查以IX开始的每个指令对:(IX,IX+1)、(IX,IX+2)、……、(IX,IN),以构造由于非冗余标志寄存器依赖性而产生的边。
图3示出了根据本公开内容的实施例的用于检查构造由于非冗余标志寄存器依赖性而产生的边的指令对的伪代码的示例。伪代码可以分别用于依次检查(IX,IX+1)、(IX,IX+2)、……、(IX,IN),以构造由于非冗余标志寄存器依赖性而产生的边。
在图3的示例中,伪代码检查被预先确定为冗余标志寄存器依赖性或者非冗余标志寄存器依赖性的模式。例如,伪代码检查被预先确定为非冗余标志寄存器依赖性的模式“use,def”。当两个指令具有模式“use,def”时,在对应于两个指令的依赖性图中的两个顶点之间构造边,如图3中的310所示。
在另一示例中,伪代码检查被预先确定为非冗余标志寄存器依赖性的模式“def,use”。当两个指令具有模式“def,use”时,在对应于两个指令的依赖性图中的两个顶点之间构造边,如图3中的330所示。
在另一示例中,伪代码检查被预先确定为冗余标志寄存器依赖性的连续的“use”的模式(诸如“use,use”)。当两个指令具有模式“use,use”时,不需要在对应于两个指令的依赖性图中的两个顶点之间构造边,如图3中的320所示。
在另一示例中,伪代码检查三个或更多个连续的“def”的模式。除了上一指令,其他指令具有冗余标志寄存器依赖性。例如,对于模式“def,def,def”,前两个“def”指令被预先确定为冗余标志寄存器依赖性,并且在对应于前两个“def”指令的顶点之间不构造边,如图3中的340所示。
图4-7示出了根据本公开内容的实施例的Java字节代码转换的示例。
图4示出Java字节代码460的示例。Java字节代码460是需要频繁执行的热循环。在Java字节代码460中,指令461和462为整数操作,指令464和465为浮点操作。
图5示出了对应于Java字节代码460的本机代码580的示例。Java字节代码460被转换成Thumb指令集的本机代码580而没有指令调度。例如,指令461被转换成指令581,指令462被转换成指令582,指令464被转换成指令584,指令465被转换成指令585。指令581、582、584和585与指令461、462、464和465具有相同的顺序。应当注意,对于Thumb指令集合,诸如“adds”等的指令频繁地设置/清除标志寄存器。应当注意,“vmuld”指令(在07处)为需要占用相对较大数目的时钟周期来执行的浮点乘法。还应当注意,“vadd”指令(在08处)对“vmuld”指令具有数据依赖性。因此,“vmuld”指令与“vadd”指令之间的依赖性关系的延迟相对较大。在图5的示例中,“vmuld”指令和“vadd”指令在关键的延迟路径上。
图6示出了对应于Java字节代码460的本机代码680的示例。利用由于冗余标志寄存器依赖性而受到限制的指令调度,Java字节代码460被转换成Thumb指令集的本机代码680。在示例中,本机代码580被重新排序,而没有忽略冗余标志寄存器依赖性。在示例中,Thumb指令集中的大量指令(诸如指令“adds”)更新标志寄存器并且因此具有标志寄存器依赖性。由于具有标志寄存器依赖性的大量指令,调度范围受到限制。在图6的示例中,没有访问标志寄存器的“vldr”指令能够在“vmuld”指令与“vadd”指令之间移动以隐藏两个指令之间的部分延迟。
图7示出了对应于Java字节代码460的本机代码780的示例。利用不受冗余标志寄存器依赖性限制的指令调度,Java字节代码460被转换成本机代码780。在示例中,利用忽略的冗余标志寄存器依赖性来重新排序本机代码580。在示例中,从行01到行11的指令是“def”指令或者非标志寄存器访问指令。因此,从行01到行11的指令的标志寄存器依赖性是冗余的,并且可以在指令调度期间忽略冗余标志寄存器依赖性,以改善调度灵活性。因此,当指令不具有数据依赖性时,可以切换指令的顺序。在图7的示例中,指令781与指令782和指令784不具有数据依赖性,并且因此可以在指令784之后,将指令781进行移动以隐藏“vmuld”指令与“vadd”指令之间的延迟。因此,本机代码780比本机代码580和本机代码680具有较少的总执行延迟。
虽然已经结合被提出作为示例的本公开内容的具体实施例描述了本公开内容的方面,然而可以对示例做出替选、修改和变型。因此,本文中阐述的实施例意在说明而非限制。可以在不偏离下面给出的权利要求的范围的情况下做出各种变化。

Claims (17)

1.一种用于指令调度的方法,包括:
接收指令的序列;
标识指令之间的数据依赖性;
基于指令的依赖性来标识冗余标志寄存器读和/或写访问的模式;以及
通过以下各项来基于数据依赖性对所述指令进行重新排序并且忽略所标识的冗余标志寄存器访问依赖性以减小执行延迟:
构造具有顶点和所述顶点之间的边的有向图,所述顶点对应于所述指令,并且所述边被延迟标记并且对应于数据依赖性和非冗余标志依赖性;以及
根据关键的延迟取向模型来对所述有向图进行拓扑分类以减小所述执行延迟。
2.根据权利要求1所述的方法,其中基于指令的依赖性来标识冗余标志寄存器读和/或写访问的模式还包括:
基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式。
3.根据权利要求2所述的方法,其中基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式还包括:
标识两个或更多个连续的读取标志寄存器访问。
4.根据权利要求2所述的方法,其中基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式还包括:
标识三个或更多个连续的写入标志寄存器访问。
5.根据权利要求1所述的方法,其中:
接收所述指令的序列以用于编译;以及
输出对应于重新排序的所述指令的已编译代码。
6.根据权利要求1所述的方法,其中:
接收所述指令的序列以用于执行;以及
根据重新排序的所述指令来控制所述执行。
7.一种存储程序命令的非瞬态计算机可读介质,所述程序命令用于引起处理器执行用于指令调度的操作,所述操作包括:
接收指令的序列;
标识指令之间的数据依赖性;
基于指令的依赖性来标识冗余标志寄存器读和/或写访问的模式;以及
通过以下各项来基于数据依赖性对所述指令进行重新排序并且忽略所标识的冗余标志寄存器访问依赖性以减小执行延迟:
构造具有顶点和所述顶点之间的边的有向图,所述顶点对应于所述指令,并且所述边被延迟标记并且对应于数据依赖性和非冗余标志依赖性;以及
根据关键的延迟取向模型来对所述有向图进行拓扑分类以减小执行延迟。
8.根据权利要求7所述的非瞬态计算机可读介质,其中基于指令的依赖性来标识冗余标志寄存器读和/或写访问的模式的操作还包括:
基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式。
9.根据权利要求8所述的非瞬态计算机可读介质,其中基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式的操作还包括:
标识两个或更多个连续的读取标志寄存器访问。
10.根据权利要求8所述的非瞬态计算机可读介质,其中基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式的操作还包括:
标识三个或更多个连续的写入标志寄存器访问。
11.根据权利要求7所述的非瞬态计算机可读介质,其中所述操作包括:
接收所述指令的序列以用于编译;以及
输出对应于重新排序的所述指令的已编译代码。
12.根据权利要求7所述的非瞬态计算机可读介质,其中所述操作包括:
接收所述指令的序列以用于执行;以及
根据重新排序的所述指令来控制所述执行。
13.一种用于指令调度的装置,包括:
处理器,所述处理器被配置为执行程序命令;以及
存储器,所述存储器被配置为存储用于引起所述处理器执行以下操作的程序命令:
接收指令的序列;
标识指令之间的数据依赖性;
基于指令的依赖性来标识冗余标志寄存器读和/或写访问的模式;以及
通过以下各项来基于数据依赖性对所述指令进行重新排序,并且忽略所标识的冗余标志寄存器访问依赖性以减小执行延迟:
构造具有顶点和所述顶点之间的边的有向图,所述顶点对应于所述指令,并且所述边被延迟标记并且对应于数据依赖性和非冗余标志依赖性;以及
根据关键的延迟取向模型来对所述有向图进行拓扑分类以减小执行延迟。
14.根据权利要求13所述的装置,其中基于指令的依赖性来标识冗余标志寄存器读和/或写访问的模式还包括:
基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式。
15.根据权利要求14所述的装置,其中基于针对标志寄存器访问的预先确定的模式来标识基于依赖性的冗余标志寄存器读和/或写访问的所述模式还包括:
标识两个或更多个连续的读取标志寄存器访问;或者
标识三个或更多个连续的写入标志寄存器访问。
16.根据权利要求13所述的装置,其中所述存储器被配置为存储用于引起所述处理器执行以下操作的程序命令:
接收所述指令的序列以用于编译;以及
生成对应于重新排序的所述指令的已编译代码。
17.根据权利要求13所述的装置,其中所述存储器被配置为存储用于引起所述处理器执行以下操作的程序命令:
接收所述指令的序列以用于执行;以及
根据重新排序的所述指令来执行所述指令。
CN201480042512.2A 2013-09-12 2014-09-04 用于指令调度的方法和系统 Expired - Fee Related CN105408859B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361876914P 2013-09-12 2013-09-12
US61/876,914 2013-09-12
PCT/IB2014/002630 WO2015036867A2 (en) 2013-09-12 2014-09-04 Method and system for instruction scheduling

Publications (2)

Publication Number Publication Date
CN105408859A CN105408859A (zh) 2016-03-16
CN105408859B true CN105408859B (zh) 2019-01-01

Family

ID=52462943

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480042512.2A Expired - Fee Related CN105408859B (zh) 2013-09-12 2014-09-04 用于指令调度的方法和系统

Country Status (4)

Country Link
US (1) US9304749B2 (zh)
EP (1) EP3044675A2 (zh)
CN (1) CN105408859B (zh)
WO (1) WO2015036867A2 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US10459704B2 (en) * 2015-02-10 2019-10-29 The Trustees Of Columbia University In The City Of New York Code relatives detection
US10152452B2 (en) * 2015-05-29 2018-12-11 Intel Corporation Source operand read suppression for graphics processors
EP3226134B1 (en) * 2016-04-01 2021-02-24 Alcatel Lucent A method and system for scaling resources, and a computer program product
US10885985B2 (en) * 2016-12-30 2021-01-05 Western Digital Technologies, Inc. Processor in non-volatile storage memory
CN109992307B (zh) * 2017-12-29 2020-05-05 上海寒武纪信息科技有限公司 指令列表调度方法、装置、计算机设备及存储介质
JP7074777B2 (ja) 2017-11-20 2022-05-24 シャンハイ カンブリコン インフォメーション テクノロジー カンパニー リミテッド タスク並列処理方法、装置、システム、記憶媒体およびコンピュータ機器
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US11099870B1 (en) * 2018-07-25 2021-08-24 Amazon Technologies, Inc. Reducing execution times in an on-demand network code execution system using saved machine states
CN109272109B (zh) * 2018-10-30 2020-07-17 北京地平线机器人技术研发有限公司 神经网络模型的指令调度方法及装置
US11943093B1 (en) 2018-11-20 2024-03-26 Amazon Technologies, Inc. Network connection recovery after virtual machine transition in an on-demand network code execution system
US10929160B1 (en) * 2018-12-12 2021-02-23 The Mathworks, Inc. Composite-trace just-in-time compilation
US11861386B1 (en) 2019-03-22 2024-01-02 Amazon Technologies, Inc. Application gateways in an on-demand network code execution system
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
CN115269016A (zh) * 2022-09-27 2022-11-01 之江实验室 一种用于图计算的指令执行方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845103A (en) * 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US5922066A (en) * 1997-02-24 1999-07-13 Samsung Electronics Co., Ltd. Multifunction data aligner in wide data width processor
CN101027636A (zh) * 2004-09-30 2007-08-29 英特尔公司 连续流程处理器流水线
CN102356377A (zh) * 2009-04-20 2012-02-15 甲骨文股份有限公司 用于解决有害孪生问题的方法和结构

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3707727B2 (ja) * 2000-10-30 2005-10-19 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
WO2004036463A1 (ja) * 2002-10-15 2004-04-29 Renesas Technology Corp. コンパイラ及び論理回路の設計方法
US8010957B2 (en) * 2006-08-01 2011-08-30 International Business Machines Corporation Compiler for eliminating redundant read-modify-write code sequences in non-vectorizable code
US9424015B2 (en) * 2011-02-08 2016-08-23 Oracle International Corporation System and method for optimizing software transactional memory operations using static caching of memory objects

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5922066A (en) * 1997-02-24 1999-07-13 Samsung Electronics Co., Ltd. Multifunction data aligner in wide data width processor
US5845103A (en) * 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
CN101027636A (zh) * 2004-09-30 2007-08-29 英特尔公司 连续流程处理器流水线
CN102356377A (zh) * 2009-04-20 2012-02-15 甲骨文股份有限公司 用于解决有害孪生问题的方法和结构

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
寄存器重命名;匿名;《https://en.wikipedia.org/w/index.php?title=Register_renaming&diff=570804203&oldid=566854621》;20130830;全文

Also Published As

Publication number Publication date
WO2015036867A3 (en) 2015-07-23
CN105408859A (zh) 2016-03-16
US20150074675A1 (en) 2015-03-12
EP3044675A2 (en) 2016-07-20
US9304749B2 (en) 2016-04-05
WO2015036867A2 (en) 2015-03-19

Similar Documents

Publication Publication Date Title
CN105408859B (zh) 用于指令调度的方法和系统
US8341568B2 (en) Systems and methods for logic verification
Schoeberl et al. Towards a time-predictable dual-issue microprocessor: The Patmos approach
Balasubramanian et al. Enabling GPGPU low-level hardware explorations with MIAOW: An open-source RTL implementation of a GPGPU
Nurmi Processor design: system-on-chip computing for ASICs and FPGAs
Cong et al. Instruction set extension with shadow registers for configurable processors
CN108604107A (zh) 用于基于指令类型调整最大时钟频率的处理器、方法和系统
WO2012145154A2 (en) Methods and systems for mapping a function pointer to the device code
Anjam et al. A multiported register file with register renaming for configurable softcore VLIW processors
Bates et al. Exploiting tightly-coupled cores
Kadayif et al. Compiler-directed high-level energy estimation and optimization
Wehmeyer et al. Fast, Efficient and Predictable Memory Accesses
Ji et al. Dynamic and adaptive SPM management for a multi-task environment
Son et al. Exposing disk layout to compiler for reducing energy consumption of parallel disk based systems
Sabeghi et al. Toward a runtime system for reconfigurable computers: A virtualization approach
Bazzaz et al. High-performance predictable NVM-based instruction memory for real-time embedded systems
Goel et al. Shared-port register file architecture for low-energy VLIW processors
Cong et al. Architecture and compilation for data bandwidth improvement in configurable embedded processors
Raghavan et al. Distributed loop controller for multithreading in unithreaded ILP architectures
Gu et al. Case study of gate-level logic simulation on an extremely fine-grained chip multiprocessor
Fang et al. FastLanes: An FPGA accelerated GPU microarchitecture simulator
Pallister Exploring the fundamental differences between compiler optimisations for energy and for performance
Ou et al. CTA: A Critical Task Aware Scheduling Mechanism for Dataflow Architecture
Noyé et al. ICM3: Design and evaluation of an Inference Crunching Machine
US7424596B2 (en) Code interpretation using stack state information

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200519

Address after: Singapore City

Patentee after: Marvell Asia Pte. Ltd.

Address before: Ford street, Grand Cayman, Cayman Islands

Patentee before: Kaiwei international Co.

Effective date of registration: 20200519

Address after: Ford street, Grand Cayman, Cayman Islands

Patentee after: Kaiwei international Co.

Address before: Hamilton, Bermuda

Patentee before: Marvell International Ltd.

Effective date of registration: 20200519

Address after: Hamilton, Bermuda

Patentee after: Marvell International Ltd.

Address before: Babado J San Mega Le

Patentee before: MARVELL WORLD TRADE Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190101

Termination date: 20190904