CN106716363B - 使用转换后备缓冲器来实现指令集不可知的运行时架构 - Google Patents
使用转换后备缓冲器来实现指令集不可知的运行时架构 Download PDFInfo
- Publication number
- CN106716363B CN106716363B CN201580051976.4A CN201580051976A CN106716363B CN 106716363 B CN106716363 B CN 106716363B CN 201580051976 A CN201580051976 A CN 201580051976A CN 106716363 B CN106716363 B CN 106716363B
- Authority
- CN
- China
- Prior art keywords
- guest
- native
- translation
- instruction
- buffer
- 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
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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
-
- 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
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
用于不可知的运行时架构的***。该***包括***仿真/虚拟化转换器、应用代码转换器以及转换器,其中***仿真/虚拟化转换器和应用代码转换器实现***仿真过程。***转换器实现用于执行来自访客镜像的代码的***和应用转换过程,其中***转换器或***仿真器访问包括多个访客分支指令的多个访客指令,并且将多个访客指令组装到访客指令块中。***转换器还将访客指令块变换为对应的本机转换块、将本机转换块存储到本机高速缓存中、以及将访客指令块到对应的本机转换块的映射存储在转换后备缓冲器中。在对访客指令的后续请求后,索引转换后备缓冲器以确定命中是否发生,其中映射指示访客指令在本机高速缓存中具有对应的被转换的本机指令,并且响应于命中转发经变换的本机指令以供执行。
Description
本申请要求共同待审并且共同转让的由Mohammad A.Abdallah于2014年7月25日提交的名称为“A RUNTIME ARCHITECTURE FOR EFFICIENTLY OPTIMIZING AND EXECUTINGGUEST CODE AND CONVERTING TO NATIVE CODE(用于高效地优化和执行访客代码并将其转换为本机代码的运行时架构)”的美国临时专利申请序列号62/029383的权益,该申请通过引用整体结合于此。
发明领域
本发明总地涉及数字计算机***,更具体地涉及用于选择包括指令序列的指令的***和方法。
发明背景
处理器被要求处理多个从属的或完全独立的任务。这些处理器的内部状态通常由在程序执行的每个特定瞬间可能保存不同的值的寄存器组成。在程序执行的每个瞬间,内部状态镜像被称为处理器的架构状态。
当将代码执行切换到运行另一功能(例如,另一线程、进程或程序)时,则必须保存机器/处理器的状态,使得新功能可以利用内部寄存器来建立新功能的新状态。当终止新功能时,则可以丢弃其状态,并且将恢复先前上下文的状态并且执行恢复。这种切换进程被称为上下文切换,并且通常包括10个或数百个循环,尤其在采用大量寄存器(例如,64、128、256)和/或乱序执行的现代架构中。
在知晓线程的硬件架构中,硬件支持用于有限数量的硬件支持的线程的多个上下文状态是常见的。在这种情形下,硬件为每个支持的线程复制所有架构状态元素。这消除了当执行新线程时对上下文切换的需要。然而,这仍然有许多缺点,即为在硬件中支持的每个附加的线程复制所有架构状态元素(即,寄存器)的面积、功率、以及复杂性。此外,如果软件线程的数量超过被明确地支持的硬件线程的数量,则仍然必须执行上下文切换。
随着在要求大量线程的细粒度的基础上需要并行性,这变得常见。具有复制上下文状态硬件存储的硬件知晓线程的架构无助于非线程的软件代码,并且只为线程软件减少上下文切换的数量。然而,这些线程通常为粗粒度的并行性构建,并且导致启动和同步的繁重的软件开销,使得细粒度的并行性(例如功能调用和循环并行执行)不具有高效的线程启动/自动生成。描述的此类开销伴随着此类代码使用最新编译器的自动并行化或用于非显示地/容易地并行的/线程化软件代码的用户并行化技术的困难。
发明概述
在一个实施例中,本发明实现为用于不可知的运行时架构的***。该***包括***仿真/虚拟化转换器、应用代码转换器以及转换器,其中***仿真/虚拟化转换器和应用代码转换器实现***仿真过程。***转换器实现用于执行来自访客镜像的代码的***和应用转换过程,其中***转换器或***仿真器访问包括多个访客分支指令的多个访客指令,并且将多个访客指令组装到访客指令块中。***转换器还将访客指令块变换为对应的本机转换块、将本机转换块存储到本机高速缓存中、以及将访客指令块到对应的本机转换块的映射存储在转换后备缓冲器中。在对访客指令的后续请求后,索引转换后备缓冲器以确定命中是否发生,其中映射指示访客指令在本机高速缓存中具有对应的被转换的本机指令,并且响应于命中转发经变换的本机指令以供执行。
以上是概述并且因此必然地包括对细节的简化、概括和省略;因此,本领域技术人员将理解概述仅是说明性的并且无论如何不旨在是限制性的。仅由权利要求书定义的本发明的其他方面、创造性特征、以及优势将在以下陈述的非限制性的详细描述中变得显而易见。
附图说明
本发明作为示例而非限制在所附附图中示出,在附图中,相似的附图标记指代相似的元件。
图1示出根据本发明的一个实施例的架构不可知的运行时***的概览示图。
图2示出根据本发明的一个实施例的描绘了硬件加速的转换/JIT层的示图。
图3示出根据本发明的一个实施例的硬件加速的运行时转换/JIT层的更详细的示图。
图4示出根据本发明的一个实施例的描绘了用于实现***仿真和***转换的组件的示图。
图5示出根据本发明的一个实施例的描绘了访客标志架构仿真的示图。
图6示出根据本发明的一个实施例的统一寄存器组的示图。
图7示出根据本发明的一个实施例的统一阴影寄存器组和支持推测架构状态和瞬态架构状态的流水线架构1300的示图。
图8示出根据本发明的一个实施例的描绘了运行提前批处理/转换进程的示图。
图9示出根据本发明的一个实施例的示出其中将访客指令块和它们的对应的本机转换块存储在高速缓存内的方式的示例性硬件加速的转换***的图示。
图10示出根据本发明的一个实施例的硬件加速的转换***的更详细的示例。
图11示出根据本发明的一个实施例的包括双范围使用的第二使用模型的示图。
图12示出根据本发明的一个实施例的包括不需要保存和在从瞬态上下文返回后不需要恢复先前上下文的瞬态上下文切换的第三使用模型的示图。
图13示出根据本发明的一个实施例的描绘了其中指令序列中的异常是由于需要对后续代码的变换的情形的示图。
图14示出根据本发明的一个实施例的包括不需要保存和在从瞬态上下文返回后不需要恢复先前上下文的瞬态上下文切换的第四使用模型的示图。
图15示出根据本发明的一个实施例的示出了优化的在分支之前调度指令的示图。
图16示出根据本发明的一个实施例的示出了优化的在存储之前调度加载的示图。
图17示出根据本发明的一个实施例的存储过滤算法的示图。
图18示出根据本发明的一个实施例的在组成按顺序从存储器读取的加载的存储器一致性模型中的具有乱序加载的信号标实现的示图。
图19示出根据本发明的一个实施例的通过JIT优化的重排序过程的示图。
图20示出根据本发明的一个实施例的通过JIT优化的重排序过程的示图。
图21示出根据本发明的一个实施例的通过JIT优化的重排序过程的示图。
图22示出根据本发明的一个实施例的示出通过JIT优化在存储之前被重排序的加载的示图。
图23示出根据本发明的一个实施例的加载和存储指令分割的第一示图。
图24示出根据本发明的一个实施例的示出其中在存储器内存储CLB功能结合代码高速缓存和访客指令到本机指令的映射的方式的示例性流程图。
图25示出根据本发明的一个实施例的运行提前运行时访客指令转换/解码过程的示图。
图26示出根据本发明的一个实施例的描绘了具有访客指令序列的转换表和具有本机指令映射的本机映射表的示图。
发明详细描述
虽然结合一个实施例描述了本发明,发明不旨在被限制为本文中所陈述的特定形式。相反,旨在覆盖如所附权利要求书定义的可被合理地包括在发明的范围内的此类替代方案、修改以及等效方案。
在以下详细描述中,陈述了诸如特定方法顺序、结构、元素和连接的多个具体细节。然而将理解不需要利用这些和其他具体细节以实践本发明的实施例。在其他情形下,省略了公知的结构、元素或连接,或者没有以具体细节描述它们,以便避免不必要地模糊该描述。
本说明书中对“一个实施例”或“一实施例”的引用意味着结合该实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。出现在说明书中的多个位置的短语“在一个实施例中”不必须全部指示同一实施例,也不是与其他实施例相互排斥的单独的或替代的实施例。此外,描述了一些实施例可以呈现的并且其他实施例可以不呈现的各种特征。类似地,描述了对于一些实施例可以是要求的并且对于其他实施例可以不是要求的各种要求。
接下来的详细描述中的一些部分是按照对计算机存储器内的数据位的操作的程序、步骤、逻辑块、处理和其他符号表示而给出的。这些描述和表示是数据处理领域内技术人员使用的最有效地将其工作本质传达给本领域内其它技术人员的手段。流程、计算机执行步骤、逻辑块、过程等等在本文中被一般地构思成达到所要求结果的自洽步骤或指令序列。这些步骤需要对物理量进行物理操控。通常但非必须,这些量采用计算机可读存储介质的电信号或磁信号的形式,并且在计算机***中能被存储、传输、组合、比较、以及以其他方式操控。主要出于常见用途的考虑,将这些信号称为位、值、要素、符号、字符、项、数字等被证明是方便的。
然而,应当记住,所有这些和类似的术语用于与适当的物理量关联,并且仅仅是应用于这些量的方便的标记。除非具体说明否则,如从以下讨论所显而易见的,应意识到,贯穿本发明使用诸如“处理”、“访问”、“写”、“存储”、“复制”等术语的讨论指的是计算机***或类似的电子计算设备的动作和过程,它们将计算机***寄存器和存储器和其他计算机可读介质内表示为物理(电子)量的数据处理和/或变换成计算机***存储器、寄存器或其他这种信息存储、传输或显示设备内类似地表示为物理量的其他数据。
本发明的实施例针对通用不可知的运行时***的实现方式。如本文中所使用的,本发明的实施例还被称为“VISC ISA不可知的运行时架构”。以下详细描述的图1至30示出进程和***使用的用于实现通用不可知的运行时***的机制。
本发明的实施例针对利用软件工业中的趋势的优势,即新的***软件愈发朝向运行时编译、优化和执行的趋势。更传统的更旧的软件***适于静态编译。
本发明的实施例有利地针对运行时操纵的新的***软件。例如,最初流行的是Java虚拟机运行时实现方式。但是这些实现方式具有慢于本机执行四到五倍之间的劣势。最近,实现方式已经更朝向Java虚拟机实现方式加上本机代码封装(例如,慢于两到三倍之间)。更近地,实现方式已经朝向Chrome和低级虚拟机运行时实现方式(例如,比本机慢两倍)。
本发明的实施例将实现具有扩展运行时支持并且将使用扩展运行时支持的架构。本发明的实施例将具有高效地执行访客代码(例如,包括运行时访客代码)的能力。本发明的实施例能高效地将访客/运行时指令转换为本机指令。本发明的实施例将能高效地将被转换的访客/运行时代码映射到本机代码。此外,本发明的实施例将能高效地在运行时优化访客代码或本机代码。
这些能力使本发明的实施例能非常适于架构不可知的运行时***的时代。本发明的实施例将完整地便携有运行传统应用代码的能力,并且这种代码可以被优化为如在其他架构上运行的两倍快或比两倍更快。
图1示出根据本发明的一个实施例的架构不可知的运行时***的概览示图。图1示出虚拟机运行时JIT(例如,及时编译器)。虚拟机运行时JIT包括所示的如Java的字节代码、低级内部表示代码和虚拟机JIT。虚拟机JIT处理低级内部表示代码和如Java的字节代码。虚拟机JIT的输出是所示的ISA特定代码。
Java代码是独立于机器的。编程者可以写一个程序,并且该程序应在许多不同的机器上运行。java虚拟机是ISA特定的,每个机器架构具有其自己的机器专用虚拟机。虚拟机的输出是在运行时动态地生成的ISA特定代码。
图1还示出紧密耦合到处理器的硬件加速的转换/JIT层。运行时JIT/转换层允许处理器使用被预处理的java字节代码,被预处理的java字节代码不需要被虚拟机JIT处理,从而显著地加速代码性能。运行时JIT/转换层还允许处理器使用java字节代码的低级内部表示(例如,示出在虚拟机运行时JIT内),低级内部表示不需要被虚拟机/JIT处理。
图1还示出了由产生静态二进制执行代码的离线编译器(例如,x86、ARM等等)处理的C++代码(例如,等等)。C++是一种独立于机器的编程语言。编译器是机器专用的(例如,x86、ARM等等)。使用机器专用编译器离线编译程序,从而生成机器专用的静态二进制代码。
图1示出常规处理器上的常规操作***怎样执行ISA特定代码,同时还示出能怎样有利地经由硬件加速的转换/JIT层和处理器来处理便携代码(例如,来自低级内部表示)、被预处理的如Java的字节代码(例如,来自虚拟机运行时JIT)和静态二进制可执行代码(例如,来自编译器)。
应当注意,硬件加速的转换/JIT层是用于实现本发明的实施例的优势的主机制。以下示图示出操作硬件加速的转换/JIT层的方式。
图2示出根据本发明的一个实施例的描绘了硬件加速的转换/JIT层的示图。图2示图示出虚拟机/高级运行时/加载时间JIT怎样产生虚拟机高级指令表示、低级虚拟机指令表示以及访客代码应用指令。这些都馈送到用于运行时/加载时间访客/虚拟机指令表示到本机指令表示的映射的进程。这进而被传递到所示的硬件加速的转换/JIT层,其中其被运行时本机指令表示到指令组装组件处理,并且然后被传递到用于代码高速缓存分配和元数据创建的由硬件/软件进行的动态的基于序列的块构建/映射组件。在图2图示中,硬件加速的转换/JIT层被示为耦合到具有序列高速缓存以存储被动态地转换的序列的处理器。图2示图还示出运行时本机指令序列形成组件可以怎样直接地处理本机代码,运行时本机指令序列形成组件将产生的输出发送到用于代码高速缓存分配和元数据创建的由硬件/软件进行的动态的基于序列的块构建/映射组件。
图3示出根据本发明的一个实施例的硬件加速的运行时转换/JIT层的更详细的示图。图3示出硬件加速的运行时转换/JIT层怎样包括促进***仿真和***转换的硬件组件。这些组件,诸如分散式标志支持、CLB/CLBV等等,包括支持***仿真和***转换工作的定制的硬件。它们使得运行时软件执行以常规处理器的五倍或更多倍运行。以下讨论***仿真和***转换。
图4示出根据本发明的一个实施例的描绘了用于实现***仿真和***转换的组件的示图。图4还示出具有应用代码和OS/***特定代码的镜像。
本发明的实施例使用***仿真和***转换以便于执行应用代码和OS/***特定代码。通过使用***仿真,机器仿真/虚拟化与硬件支持的架构不同的访客***架构(包括***和应用代码)。仿真由***仿真/虚拟化转换器(例如,其处理***代码)和应用代码转换器(例如,其处理应用代码)提供。应当注意,应用代码转换器示为描绘有裸金属组件。
通过使用***转换,机器将具有访客架构和硬件支持的架构之间的类似的***架构特性的代码进行转换,但架构的非***部分是不同的(即,应用指令)。***转换器示为包括访客应用转换器组件和裸金属组件。***转换器还示为潜在地实现多次优化过程。应当注意,通过提及术语***转换和仿真,本文中随后的描述指的是可以使用图4上所示的***仿真路径或***转换路径的过程。
以下图5到26图示用于实现***仿真和***转换以支持通用不可知的运行时***/VISC ISA不可知的运行时架构的各种进程和***。伴随以下示图中的进程和***,硬件/软件加速被提供给运行时代码,其进而提供提高的架构性能。这种硬件加速包括对分布式标志的支持、CLB、CLBV、硬件访客转换表等等。
图5示出根据本发明的一个实施例的描绘了访客标志架构仿真的示图。图5的左手侧示出具有五个标志的集中式标志寄存器。图5的右手侧示出具有分布式标志寄存器的分布式标志架构,其中标志分布在寄存器本身中。
在架构仿真(例如,***仿真或转换)期间,分布式标志架构有必要仿真集中式访客标志架构的行为。还可以通过使用不同于与数据寄存器相关联的标志字段的多个独立的标志寄存器来实现分布式标志架构。例如,数据寄存器可以被实现为R0到R15,而独立的标志寄存器可以被实现为F0到F15。该情形中的这些标志寄存器不直接与数据寄存器相关联。
图6示出根据本发明的一个实施例的统一寄存器组1201的示图。如图5所描绘的,统一寄存器组1201包括两个部分1202-1203和条目选择器1205。统一寄存器组1201实现对架构推测的支持以用于硬件状态更新。
统一寄存器组1201使能对优化的阴影寄存器和提交的寄存器状态管理进程的实现。该进程支持用于硬件状态更新的架构推测。在该进程下,本发明的实施例可以支持阴影寄存器功能和提交的寄存器功能而不要求任何寄存器存储器之间的交叉复制。例如,在一个实施例中,统一寄存器组1201的功能大部分由条目选择器1205提供。在图5的实施例中,每个寄存器组条目由两组寄存器R&R’组成,R&R’分别来自部分1和部分2。在任意给定的时间,从每个条目读取的寄存器是来自部分1的R或来自部分2的R’。基于条目选择器1205为每个条目存储的x&y位的值,对于寄存器的每个条目存在4个不同的组合。
图7示出根据本发明的一个实施例的统一阴影寄存器组和支持推测架构状态和瞬态架构状态的流水线架构1300的示图。
图7的实施例描绘包括架构1300的组件,架构1300支持包括架构推测状态的指令和结果并且支持包括瞬态状态的指令和结果。如本文中所使用的,提交的架构状态包括可以被在处理器上执行的程序访问(例如,读和写)的可见的寄存器和可见的存储器。相反,推测的架构状态包括未被提交并且因此不是全局可见的寄存器和/或存储器。
在一个实施例中,存在由架构1300实现的四个使用模型。第一使用模型包括用于硬件状态更新的架构推测。
第二使用模型包括双范围使用。该使用模型应用到取出2个线程到处理器中,其中一个线程在推测状态中执行,而另一线程在非推测状态中执行。在该使用模型中,两个范围被取出到机器中,并且同时存在于机器中。
第三使用模型包括JIT(及时)变换或对指令从一种形式到另一种形式的编译。在该使用模型中,经由软件(例如,JIT)完成对架构状态的重排序。第三使用模型可以应用到例如访客到本机指令变换、虚拟机到本机指令变换、或将本机微指令重新映射/变换到更优化的本机微指令。
第四使用模型包括不需要保存和在从瞬态上下文返回后不需要恢复先前上下文的瞬态上下文切换。该使用模型应用到可以由于多种原因发生的上下文切换。一个此类原因可以是例如经由异常处理上下文对异常的精确处理。
重新参考图7,架构1300包括用于实现上文所述的四种使用模型的多个组件。统一阴影寄存器组1301包括:第一部分,提交的寄存器组1302;第二部分,阴影寄存器组1303;以及第三部分,最新指示符数组1304。包括推测引退存储器缓冲器1342和最新指示符数组1340。架构1300包括乱序架构,因此架构1300进一步包括重排序缓冲器和引退窗口1332。重排序和引退窗口1332进一步包括机器引退指针1331、就绪位数组1334和每指令最新指示符(例如指示符1333)。
根据本发明的一个实施例进一步详细地描述第一使用模型,用于硬件状态更新的架构推测。如上所述,架构1300包括乱序架构。架构1300的硬件能够提交乱序指令结果(例如,乱序加载、乱序存储和乱序寄存器更新)。架构1300利用统一阴影寄存器组来支持提交的寄存器和阴影寄存器之间的推测执行。此外,架构1300利用推测加载存储缓冲器1320和推测引退存储器缓冲器1342来支持推测执行。
架构1300将使用这些组件结合重排序缓冲器和引退窗口1332来允许其状态正确地引退到提交的寄存器1302和到可见存储器1350,即使机器以乱序方式将那些状态内部地引退到了统一阴影寄存器组和引退存储器缓冲器。例如,架构将使用统一阴影寄存器组1301和推测存储器1342基于异常发生或不发生来实现回滚和提交事件。该功能使寄存器状态能乱序地引退到统一阴影寄存器组1301并且使推测引退存储器缓冲器1342能乱序地引退到可见存储器1350。随着推测执行继续和乱序指令执行继续,如果没有误预测分支并且没有异常发生,则机器引退指针1331继续直到触发提交事件。提交事件通过使其提交点前进而使得统一阴影寄存器组提交其内容,并且使得推测引退存储器缓冲器根据机器引退指针1331将其内容提交到存储器1350。
例如,考虑重排序缓冲器和引退窗口1332内示出的指令1-7,就绪位数组1334在准备好执行的指令旁边示出“X”并且在未准备好执行的指令旁边示出“/”。因此,允许指令1、2、4和6乱序地继续。随后,如果异常发生,例如指令6分支被误预测,则可以回滚指令6之后发生的指令。替代地,如果没有异常发生,可以通过相应地移动机器引退指针1331来提交所有指令1-7。
最新指示符数组1341、最新指示符数组1304和最新指示符1333用于允许乱序运行。例如,即使指令2在指令5之前加载寄存器R4,一旦指令5准备好发生,来自指令2的加载将被忽略。最新加载将根据最新指示符覆盖更早的加载。
在重排序缓冲器和引退窗口1332内发生分支预测或异常的事件中,触发回滚事件。如上所述,在回滚的事件中,统一阴影寄存器组1301将回滚到其上一提交的点,并且推测引退存储器缓冲器1342将被转储清除。
图8示出根据本发明的一个实施例的描绘了运行提前批处理/转换过程的示图。该图图示出其中访客代码经历转换过程并且被变换到本机代码的方式。该本机代码进而填充本机代码高速缓存,其进一步用于填充CLB。该图示出访客代码怎样跳转到先前未被转换的地址(例如,5000)。转换过程然后将该访客代码改变到所示的对应的本机代码(例如,包括访客分支8000和访客分支6000)。访客分支被转换到代码高速缓存中的本机分支(例如,本机分支g8000和本机分支g6000)。机器知晓用于本机分支的程序计数器将与用于访客分支的程序计数器不同。这通过本机代码高速缓存中的记号(例如,X、Y和Z)示出。随着这些变换完成,将所得的变换存储在CLB中以供未来使用。该功能极大地加速访客代码到本机代码的变换。
图9示出根据本发明的一个实施例的示出其中将访客指令块和它们的对应的本机转换块存储在高速缓存内的方式的示例性硬件加速的转换***500的图示。如图9所示,转换后备缓冲器506用于缓存访客和本机块之间的地址映射;使得通过到处理器508的低等待时间可用性来访问最频繁遇到的本机转换块。
图9示图示出其中将最频繁遇到的本机转换块维持在高速低等待时间高速缓存即转换后备缓冲器506内的方式。图9中描绘的组件实现硬件加速的转换处理以实现高得多的水平的性能。
访客取出逻辑单元502起到从***存储器501取出访客指令的基于硬件的访客指令取出单元的作用。给定应用的访客指令驻留在***存储器501内。程序启动之后,基于硬件的访客取出逻辑单元502开始将访客指令预取到访客取出缓冲器503中。访客取出缓冲器507累积访客指令并且将它们组装到访客指令块中。通过使用转换表504将这些访客指令块转换到对应的本机转换块。将经过转换的本机指令累积在本机转换缓冲器505内,直到本机转换块是完整的。然后将本机转换块传送到本机高速缓存507并且将映射存储在转换后备缓冲器506中。本机高速缓存507然后用于将本机指令馈送到处理器508以供执行。在一个实施例中,访客取出逻辑单元502实现的功能由访客取出逻辑状态机产生。
随着该过程继续,转换后备缓冲器506由访客块到本机块的地址映射填充。转换后备缓冲器506使用一种或多种算法(例如,近期最少使用的,等等)来确保将更频繁遇到的块映射保持在缓冲器内,而将极少遇到的块映射从缓冲器驱逐。以这种方式,将热本机转换块映射存储在转换后备缓冲器506内。此外,应当注意,本机块内的很好地预测的远访客分支不需要将新映射***到CLB中,因为它们的目标块被拼合在单个被映射的本机块内,因此为CLB结构保留小的容量效率。此外,在一个实施例中,CLB被构造成只存储结尾访客到本机地址的映射。该方面还保留CLB的小的容量效率。
访客取出逻辑502依赖于转换后备缓冲器506来确定是否已经将来自访客指令块的地址转换到本机转换块。如上所述,本发明的实施例为转换处理提供硬件加速。因此,在从***存储器501取出访客地址用于新转换之前,访客取出逻辑502将依赖于转换后备缓冲器506来确定预先存在的本机转换块映射。
在一个实施例中,通过访客地址范围或通过单独访客地址来索引转换后备缓冲器。访客地址范围是已经被转换到本机转换块的访客指令块的地址的范围。经由本机转换块映射的对应的访客指令块的对应的访客地址范围来索引转换后备缓冲器存储的本机转换块映射。因此,访客取出逻辑可以将访客地址与访客地址范围或被转换的块的单独的访客地址比较,它们的映射被保持在转换后备缓冲器506中以确定预先存在的本机转换块是否驻留在存储在本机高速缓存507中的或图6的代码高速缓存中的内容内。如果预先存在的本机转换块是在本机高速缓存中或代码高速缓存中,则将对应的本机转换指令从这些高速缓存直接转发到处理器。
以此方式,热访客指令块(例如,被频繁地执行的访客指令块)具有维持在高速低等待时间转换后备缓冲器506内的它们的对应的热本机转换块映射。随着块被触及,合适的替换策略确保热块映射保持在转换后备缓冲器内。因此,访客取出逻辑502可以快速地标识先前是否已经转换了被请求的访客地址,并且可以将先前被转换的本机指令直接转发到本机高速缓存507以供处理器508执行。这些方面节省了大量循环,因为到***存储器的行程可以耗费40到50个循环或更多循环。这些属性(例如,CLB、访客分支序列预测、访客&本机分支缓冲器、先前的本机缓存)允许本发明的实施例的硬件加速功能实现访客应用的应用性能达到可比的本机应用的应用性能的80%到100%内。
在一个实施例中,独立于来自处理器508的访客指令请求,访客取出逻辑502连续地预取访客指令用于转换。可以将本机转换块累积在***存储器501中的转换缓冲器“代码高速缓存”内以用于那些较不频繁使用的块。转换后备缓冲器506还保持最频繁使用的映射。因此,如果被请求的访客地址不映射到转换后备缓冲器中的访客地址,则访客取出逻辑可以检查***存储器501以确定访客地址是否对应于其中存储的本机转换块。
在一个实施例中,转换后备缓冲器506实现为高速缓存并且利用高速缓存一致性协议来维持与存储在更高级高速缓存和***存储器501中的大得多的转换缓冲器的一致性。还将存储在转换后备缓冲器506内的本机指令映射写回到更高级高速缓存和***存储器501。到***存储器的写回维持一致性。因此,高速缓存管理协议可以用于确保将热本机转换块映射存储在转换后备缓冲器506内并且将冷本机转换映射块存储在***存储器501中。因此,大得多的形式的转换缓冲器506驻留在***存储器501中。
应当注意,在一个实施例中,示例性硬件加速的转换***500可以用于实现多个不同的虚拟存储方案。例如,其中将访客指令块和它们对应的本机转换块存储在高速缓存内的方式可以用于支持虚拟存储方案。类似地,用于缓存访客和本机块之间的地址映射的转换后备缓冲器506可以用于支持虚拟存储方案(例如,对虚拟存储器到物理存储器映射的管理)。
在一个实施例中,图9架构实现使用可以接收多个不同的指令架构作为输入的灵活的转换过程的虚拟指令集处理器/计算机。在这种虚拟指令集处理器中,将处理器的前端实现为使得其可以是软件控制的,同时利用硬件加速的转换处理的优势来传递高得多的水平的性能。使用这种实现方式,可以处理和转换不同的访客架构,同时每个访客架构接收硬件加速的益处以享有高得多的水平的性能。示例访客架构包括Java或JavaScript、x86、MIPS、SPARC等等。在一个实施例中,“访客架构”可以是本机指令(例如,来自本机应用/宏操作)并且转换过程产生优化本机指令(例如,优化的本机指令/微操作)。软件控制的前端可以为在处理器上执行的应用提供大程度的灵活性。如上所述,硬件加速可以实现近本机硬件速度以供访客应用的访客指令的执行。
图10示出根据本发明的一个实施例的硬件加速的转换***600的更详细的示例。***600与如上所述的***500以基本相同的方式执行。然而,***600示出描述示例性硬件加速过程的功能的附加细节。
***存储器601包括数据结构,数据结构包括访客代码602、转换后备缓冲器603、优化器代码604、转换器代码605以及本机代码高速缓存606。***600还示出共享硬件高速缓存607,其中访客指令和本机指令可以是交织的和共享的。访客硬件高速缓存610捕捉来自共享硬件高速缓存607的那些最频繁触及的访客指令。
访客取出逻辑620从访客代码602中预取访客指令。访客取出逻辑620与TLB 609对接,TLB 609起到将虚拟访客地址变换到对应的物理访客地址的转换后备缓冲器的作用。TLB 609可以将命中直接转发到访客硬件高速缓存610。将访客取出逻辑620取出的访客指令存储在访客取出缓冲器611中。
转换表612和613包括替换字段和控制字段,并且起到用于将接收自访客取出缓冲器611的访客指令变换到本机指令的多级转换表的作用。
复用器614和615将被转换的本机指令传送到本机转换缓冲器616。本机转换缓冲器616累积被转换的本机指令以组装本机转换块。然后将这些本机转换块传送到本机硬件高速缓存600并且将映射保持在转换后备缓冲器630中。
转换后备缓冲器630包括数据结构,该数据结构用于被转换的块进入点地址631、本机地址632、被转换的地址范围633、代码高速缓存和转换后备缓冲器管理位634以及动态分支偏移位635。访客分支地址631和本机地址632包括指示哪些对应的本机转换块驻留在被转换的块范围633内的访客地址范围。高速缓存管理协议和替换策略确保热本机转换块映射驻留在转换后备缓冲器630内而冷本机转换块映射驻留在***存储器601中的转换后备缓冲器数据结构603内。
如***500,***600试图确保热块映射驻留在高速低等待时间转换后备缓冲器630内。因此,当取出逻辑640或访客取出逻辑620试图取出访客地址时,在一个实施例中,取出逻辑640可以首先检查访客地址以确定对应的本机转换块是否驻留在代码高速缓存606内。这允许确定被请求的访客地址是否具有代码高速缓存606中的对应的本机转换块。如果被请求的访客地址不驻留在缓冲器603或608、或缓冲器630内,则从访客代码602中取出访客地址和多个后续访客指令,并且经由转换表612和613实现转换过程。以此方式,本发明的实施例可以实现运行提前访客取出和解码、表查找以及指令字段组装。
图11示出根据本发明的一个实施例的包括双范围使用的第二使用模型的示图1400。如上所述,该使用模型应用到取出2个线程到处理器中,其中一个线程在推测状态中执行,而另一线程在非推测状态中执行。在该使用模型中,两个范围被取出到机器中并且同时存在于机器中。
如图1400所示,已经将2个范围/跟踪1401和1402取出到机器中。在该示例中,范围/跟踪1401是当前的非推测范围/跟踪。范围/跟踪1402是新的推测范围/跟踪。架构1300使推测和临时状态允许2个线程使用这些状态以供执行。一个线程(例如,1401)在非推测范围中执行,而另一线程(例如,1402)使用推测范围。两个范围都可以被取出到机器中并且同时存在,每个范围不同地设定其相应的模式。第一个是非推测的,而另一个是推测的。因此,第一个在CR/CM模式中执行,而另一个在SR/SM模式中执行。在CR/CM模式中,对提交的寄存器进行读和写,并且存储器写去往存储器。在SR/SM模式中,寄存器写继续到SSSR,并且寄存器读来自最新的写,同时存储器写入引退存储器缓冲器(SMB)。
一个示例将是被排序的当前范围(例如,1401)和推测的下一范围(例如,1402)。当依赖性将是重要的时,两个范围都可以在机器中执行,因为下一范围在当前范围之后取出。例如,在范围1401中,在“将SSSR提交到CR”处,寄存器和存储器直到该点是在CR模式中,而代码在CR/CM模式中执行。在范围1402中,代码在SR和SM模式中执行,并且如果异常发生可以回滚。以此方式,两个范围在机器中同时执行,但是每个范围在不同的模式中执行,并且相应地读和写寄存器。
图12示出根据本发明的一个实施例的包括不需要保存和在从瞬态上下文返回后不需要恢复先前上下文的瞬态上下文切换的第三使用模型的示图。如上所述,该使用模型应用到可以由于多种原因发生的上下文切换。一个此类原因可以是例如经由异常处理上下文对异常的精确处理。
当机器正执行被变换的代码并且其遇到上下文切换(例如,被变换的代码内部的异常或如果需要变换后续代码)时,第三使用模型发生。在当前范围中(例如,在异常之前),SSSR和SMB还未将它们的推测状态提交到访客架构状态。当前状态正在SR/SM模式中运行。当异常发生,机器切换到异常处理程序(例如,转换器)以精确地处理异常。***回滚,其使得寄存器状态回滚到CR,并且转储清除SMB。转换器代码将在SR/CM模式中运行。在转换器代码的执行期间,SMB正将其内容引退到存储器而无需等待提交事件。将寄存器写入到SSSR而无需更新CR。随后,当完成转换器并且在切换回执行被转换的代码之前,其回滚SSSR(例如,将SSSR回滚到CR)。在该过程期间,最后提交的寄存器状态在CR中。
这在示图1500中示出,其中先前范围/跟踪1501已经从SSSR提交到CR中。当前范围/跟踪1502是推测的。寄存器和存储器以及该范围是推测的,并且执行在SR/SM模式下发生。在该示例中,异常在范围1502中发生,并且需要按变换之前的原始顺序重新执行代码。在该点处,回滚SSSR并且转储清除SMB。然后JIT代码1503执行。JIT代码将SSSR回滚到范围1501的末尾并且转储清除SMB。JIT的执行在SC/CM模式下。当完成JIT时,将SSSR回滚到CR,并且当前范围/跟踪1504然后在CR/CM模式中按原始变换顺序重新执行。以此方式,按准确的当前顺序精确地处理异常。
图13示出根据本发明的一个实施例的描绘了其中指令序列中的异常是由于需要对后续代码的变换的情形的示图1600。如示图1600所示,先前范围/跟踪1601以到未被变换的目的地的远跳转结束。在跳转到远跳转目的地之前,将SSSR提交到CR。JIT代码1602然后执行以变换在远跳转目的地的访客指令(例如,以建立新的本机指令的跟踪)。JIT的执行在SR/CM模式下。在JIT执行结束时,将寄存器状态从SSSR回滚到CR,并且被JIT变换了的新范围/跟踪1603开始执行。新范围/跟踪在SR/SM模式中从先前范围/跟踪1601的上一提交的点继续执行。
图14示出根据本发明的一个实施例的包括不需要保存和在从瞬态上下文返回后不需要恢复先前上下文的瞬态上下文切换的第四使用模型的示图1700。如上所述,该使用模型应用到可以由于多种原因发生的上下文切换。一个此类原因可以是例如经由异常处理上下文处理输入或输出。
示图1700示出其中在CR/CM模式下执行的先前范围/跟踪1701以功能F1的调用结束的情形。将直到该点的寄存器状态从SSSR提交到CR。功能F1范围/跟踪1702然后开始在SR/CM模式下推测地执行。功能F1然后以返回到主范围/跟踪1703结束。在该点处,将寄存器状态从SSSR回滚到CR。主范围/跟踪1703恢复在CR/CM模式中执行。
图15示出根据本发明的一个实施例的示出了优化的在分支之前调度指令的示图。如图15所示,在传统及时编译器示例旁边描绘了硬件优化的示例。图15的左手侧示出原始未优化的代码,包括未使用分支偏移,“分支C到L1”。图15的中间栏示出传统及时编译器优化,其中将寄存器重命名并且在分支之前移动指令。在该示例中,及时编译器***补偿代码以解释其中分支偏移决定是错误的(例如,其中与未被使用相反,分支实际上被使用了)那些情况。相反,图15的右栏示出硬件展开的优化。在该情形中,将寄存器重命名并且在分支之前移动指令。然而,应当注意,未***补偿代码。硬件保持对是分支偏移决定是真或假的跟踪。在被错误地预测的分支的情形下,硬件自动回滚到其状态以执行正确的指令序列。硬件优化器解决方案能够避免对补偿代码的使用,因为在其中分支被误预测的这些情形下,硬件跳转到存储器中的原始代码并且执行来自此处的正确序列,同时转储清除被误预测的指令序列。
图16示出根据本发明的一个实施例的示出了优化的在存储之前调度加载的示图。如图16所示,在传统及时编译器示例旁边描绘了硬件优化的示例。图16的左手侧示出原始未优化的代码,包括存储,“R3<-LD[R5]”。图16的中间栏示出传统及时编译器优化,其中将寄存器重命名并且移动加载使其在存储之前。在该示例中,及时编译器***补偿代码以解释其中加载指令的地址对存储指令的地址设定别名(例如,其中使加载在存储之前的移动是不合适的)的那些情况。相反,图16的右栏示出硬件展开的优化。在该情形中,将寄存器重命名并且也移动加载使其在存储之前。然而,应当注意,未***补偿代码。在其中移动加载使其在存储之前是错误的情形中,硬件自动地回滚到其状态以执行正确的指令序列。硬件优化器解决方案能够避免对补偿代码的使用,因为在其中地址别名-检查分支被误预测的这些情形下,硬件跳转到存储器中的原始代码并且执行来自此处的正确序列,同时转储清除被误预测的指令序列。在该情形下,序列假定没有重命名。应当注意,在一个实施例中,图16中图示的功能可以由指令调度和优化器组件实现。类似地,应当注意,在一个实施例中,图16中图示的功能可以由软件优化器实现。
此外,对于动态展开的序列,应当注意指令可以通过使用重命名来经过先前路径预测的分支(例如,动态构建的分支)。在非动态预测的分支的情形中,对指令的移动应当考虑分支的范围。可以将循环展开到要求的程度,并且可以跨整个序列应用优化。例如,这可以通过重命名跨分支移动的指令的目的地寄存器来实现。该特征的一个益处是不需要补偿代码或对分支的范围的广泛分析的事实。该特征因此极大地加速和简化优化过程。
图17示出根据本发明的一个实施例的存储过滤算法的示图。图17实施例的目标是过滤存储以防止所有存储必须针对加载队列中的所有条目进行检查。
存储监听用于地址匹配的高速缓存以维持一致性。如果线程/核X加载来自高速缓存行的读,则其标记其从中加载了数据的高速缓存行的部分。在另一线程/核Y存储监听高速缓存之后,如果任何此类存储与该高速缓存行部分重叠,则为该线程/核X的加载引起误预测。
用于过滤这些监听的一个解决方案是跟踪加载队列条目的引用。在该情形中,存储不需要监听加载队列。如果存储与访问掩码具有匹配,则获得自引用***的该加载队列条目将使得该加载条目误预测。
在另一解决方案(其中不存在引用***)中,如果存储与访问掩码具有匹配,则该存储地址将监视加载队列条目并且将使得匹配的加载条目误预测。
在两种解决方案中,一旦从高速缓存行读取加载,其设定相应的访问掩码位。当该加载引退时,其重置该位。
图18示出根据本发明的一个实施例的在组成按顺序从存储器读取的加载的存储器一致性模型中的具有乱序加载的信号标(semaphore)实现的示图。如本文中所使用的,术语信号标指代为多个线程/核到公共资源提供访问控制的数据构造。
在图18实施例中,访问掩码用于控制多个线程/核对存储器资源的访问。访问掩码通过跟踪高速缓存行的哪些字具有待决加载而起作用。当访问高速缓存行的字时乱序加载设定掩码位,并且当该加载引退时清除掩码位。如果当掩码位被设定时来自另一线程/核的存储写入该字,则其将通知对应于该加载(例如,经由***)的加载队列条目成为误预测的/转储清除的或与其从属指令一起重试的。访问掩码还跟踪线程/核。
以此方式,访问掩码确保存储器一致性规则被正确地实现。存储器一致性规则规定存储按顺序更新存储器以及加载按顺序从存储器读取以便于该信号标跨两个核/线程工作。因此,核1和核2执行的代码将被正确地执行,其中它们都访问存储器位置“标志”和“数据”。
图19示出根据本发明的一个实施例的通过JIT优化的重排序过程的示图。图19描绘存储器一致性排序(例如,加载排序之前的加载)。加载不能在将要到相同地址的其他加载之前分派。例如,加载将检查来自相同线程的后续加载的相同地址。
在一个实施例中,检查所有后续加载以找出地址匹配。为了使该解决方案起作用,加载C检查在引退之后直到原始加载C位置的点停留在存储队列(例如,或其扩展)中的需要。加载检查扩展尺寸可以由在被重排序的加载(例如,加载C)可以跳转到其之前的加载的数量上设置限制来确定。应当注意,该解决方案只在部分存储排序存储器一致性模型(例如,ARM一致性模型)下起作用。
图20示出根据本发明的一个实施例的通过JIT优化的重排序过程的示图。加载不能在将要到相同地址的其他加载之前分派。例如,加载将检查来自相同线程的后续加载的相同地址。图20示出其他线程存储怎样针对整个加载队列和监视器扩展进行检查。监视器由原始加载设置,并且由跟随原始加载位置的后续指令清除。应当注意,该解决方案在全部和部分存储排序存储器一致性模型(例如,X86和ARM一致性模型)下均起作用。
图21示出根据本发明的一个实施例的通过JIT优化的重排序过程的示图。加载不能在将要到相同地址的其他加载之前分派。本发明的一个实施例实现加载引退扩展。在该实施例中,其他线程存储针对整个加载/存储队列(例如,和扩展)进行检查。
在实现该解决方案中,在引退之后直到原始加载C位置的点,引退的所有加载需要停留在加载队列(例如,或其扩展)中。当来自其他线程的存储到来时(线程0),其将CAM匹配整个加载队列(例如,包括扩展)。扩展尺寸可以由在被重排序的加载(加载C)可以跳转到其之前(例如,通过使用8个条目扩展)的加载的数量上设置限制来确定。应当注意,该解决方案在全部和部分存储排序存储器一致性模型(例如,X86和ARM一致性模型)下均起作用。
图22示出根据本发明的一个实施例的示出通过JIT优化在存储之前被重排序的加载的示图。图22利用相同线程内的存储到加载的转发排序(例如,从存储到加载的数据依赖性)。
在存储之前不能通过JIT将到在相同线程内的该存储的相同地址的加载重排序。在一个实施例中,在引退之后直到原始加载C位置的点,引退的所有加载需要停留在加载队列(和/或其扩展)中。每个被重排序的加载将包括偏移,偏移将按机器顺序(例如,IP)指示该加载相对于跟随的存储的初始位置。
一个示例实现方式将包括偏移指示符中的初始指令位置。当来自相同线程的存储到来时,其将CAM匹配寻找指示该存储将转发到被匹配的加载的匹配的整个加载队列(包括扩展)。应当注意,在存储在加载C之前被分派的情形中,该存储将保留存储队列中的条目,并且当加载之后被分派时,加载将针对存储的地址CAM匹配,并且加载将使用其IP以确定结束将数据从存储中的任意存储转发到该加载的机器顺序。扩展尺寸可以通过在被重排序的加载(加载C)可以跳转到其之前(例如,通过使用8个条目扩展)的加载的数量上设置限制来确定。
另一解决方案将在原始加载的位置中设置检查存储指令。当检查存储指令分派时,其针对加载队列检查地址匹配。类似地,当加载分派时,它们针对存储指令占用的存储队列条目来检查地址匹配。
图23示出根据本发明的一个实施例的加载和存储指令分割的第一示图。本发明的一个特征是加载被分成两个宏指令的事实,第一宏指令进行地址计算并且取出到临时位置(加载存储队列),并且第二宏指令是将存储器地址内容(数据)加载到寄存器或ALU目的地中。应当注意,尽管在将加载和存储指令分成两个相应的宏指令并且将它们重新排序的上下文中描述发明的实施例,可以通过在微代码上下文内将加载和存储指令分成两个相应的微指令并且将它们重新排序来实现相同的方法和***。
该功能对于存储是相同的。存储也被分成两个宏指令。第一指令是存储地址和取出,第二指令是对在该地址的数据的存储。对存储和两个指令的分割遵循与下文所述的加载相同的规则。
将加载分成两个指令允许运行时优化器在给定的指令序列内早得多地调度地址计算和取出指令。这通过将数据预取到与高速缓存层级分开的临时缓冲器中而允许更容易的从存储器未命中恢复。使用临时缓冲器以保证在LA/SA和LD/SD之间的一对一对应上的被预取的数据的可用性。如果在加载地址和加载数据之间的窗口中的先前存储中存在重命名(例如,如果从先前存储中检测到了转发情形),或者如果地址计算中存在任何错误问题(例如,页面错误),则对应的加载数据指令可以重新发出。此外,将加载分成两个指令还可以包括将信息复制到两个指令中。这种信息可以是地址信息、源信息、其他附加标识符等等。该复制允许在LA/SA不存在的情况下对两个指令的LD/SD的独立的分派。
加载地址和取出指令可以从实际的机器引退窗口引退而无需在加载数据上等待以返回,从而允许机器甚至在对该地址(例如,段落开头指示的加载地址)的高速缓存未命中的情形下取得进展。例如,在对该地址(例如,地址X)的高速缓存未命中之后,机器可能可以停止数百循环以等待数据从存储器层级中取出。通过从实际的机器引退窗口引退加载地址和取出指令而无需在加载数据上等待以返回,机器仍然可以取得进展。
应当注意,对指令的分割实现本发明的实施例的关键优势为更早地重排序LA/SA指令并且更远离LD/SD,指令序列实现对加载和存储的更早的分派和执行。
图24示出根据本发明的一个实施例的示出其中在存储器内存储CLB功能结合代码高速缓存和访客指令到本机指令的映射的方式的示例性流程图。
如上所述,CLB用于存储具有存储在代码高速缓存存储器内的对应的被转换的本机地址的访客地址的映射(例如,访客到本机地址的映射)。在一个实施例中,索引CLB的一部分访客地址。访客地址被划分为索引、标签和偏移(例如,区块(chunk)尺寸)。该访客地址包括用于标识对应于索引的CLB条目中的匹配的标签。如果在标签上存在命中,则对应的条目将存储指示在代码高速缓存存储器806中的何处可以发现对应的被转换的本机指令区块(例如,被转换的本机指令的对应的块)的指针。
应当注意,本文中所使用的术语“区块”指示被转换的本机指令块的对应的存储器尺寸。例如,取决于被转换的本机指令块的不同尺寸,区块可以在尺寸上不同。
对于代码高速缓存存储器806,在一个实施例中,代码高速缓存被分配到一组固定尺寸的区块中(例如,对每种区块类型具有不同的尺寸)。可以将代码高速缓存逻辑上划分为***存储器中的组和路以及所有较低级硬件高速缓存(例如,本机硬件高速缓存608、共享硬件高速缓存607)。CLB可以使用访客地址来索引和作标签比较代码高速缓存区块的路标签。
图24描绘CLB硬件高速缓存804将访客地址标签存储在2路中,描绘为路x和路y。应当注意,在一个实施例中,可以通过将指针存储到结构化的路中的本机代码区块(例如,从访客到本机地址的映射)来完成使用CLB结构的访客地址到本机地址的映射。每路与标签相关联。CLB被访客地址802(包括标签)索引。在CLB中的命中上,返回对应于标签的指针。该指针用于索引代码高速缓存存储器。这在图24中由行“代码区块的本机地址=片段的数量+F(指针)”示出,其表示代码区块的本机地址是指针和片段数量的函数的事实。在本实施例中,片段指示存储器中的点的基础,其中指针范围被虚拟地映射(例如,允许将指针数组映射到物理存储器中的任意区域中)。
替代地,在一个实施例中,可以经由第二种方法索引代码高速缓存存储器,如图24中行“代码区块的本机地址=片段的数量+索引*(区块尺寸)+路的数量*(区块尺寸)”所示。在这种实施例中,代码高速缓存被组织为使得其路结构匹配CLB路结构,从而在CLB的路和代码高速缓存区块的路之间存在1:1映射。当在特定的CLB路中存在命中时,然后代码高速缓存的对应的路中的对应的代码区块具有本机代码。
仍然参考图24,如果CLB的索引未命中,可以为命中检查存储器的更高层级(例如,L1高速缓存、L2高速缓存等等)。如果在这些更高的高速缓存级别中没有命中,则检查***存储器801中的地址。在一个实施例中,访客索引指向包括例如64个区块的条目。读出64个区块中的每一个的标签并且将其与访客标签比较以确定是否有命中。在图24中由虚线框805示出该过程。如果在与***存储器中的标签比较后没有命中,则在存储器的任何层级级别不存在转换,并且必须转换访客指令。
应当注意,本发明的实施例管理以类似高速缓存的方式存储访客到本机指令映射的存储器的层级级别中的每一个。这内在地来自于基于高速缓存的存储器(例如,CLB硬件高速缓存、本机高速缓存、L1和L2高速缓存等等)。然而,CLB还包括“代码高速缓存+CLB管理位”,“代码高速缓存+CLB管理位”用于实现近期最少使用的(LRU)替换管理策略以用于***存储器801内的访客到本机指令映射。在一个实施例中,CLB管理位(例如,LRU位)是软件管理的。以此方式,存储器的所有层级级别用于存储最近使用的、最频繁遇到的访客到本机指令映射。相应地,这导致存储器的所有层级级别类似地存储最频繁遇到的被转换的本机指令。
图24还示出存储在CLB中的动态分支偏移位和/或分支历史位。该动态分支位用于跟踪在组装访客指令序列中使用的分支预测的行为。该位用于跟踪哪些分支预测是最常被正确地预测的以及哪些分支预测是最常被错误地预测的。CLB还存储被转换的块范围的数据。该数据使该过程能使代码高速缓存存储器中的其中对应的访客指令已经被修改(例如,如在自身修改代码中)的被转换的块范围无效。
图25示出根据本发明的一个实施例的运行提前运行时访客指令转换/解码过程的示图。图25示出显示了当需要对访客代码转换/解码时,目的是避免从主存储器携带访客代码(例如,其将是成本高的行程)的示图。图25示出预取过程,其中从指令序列中的访客分支的目标预取访客代码。例如,指令序列包括访客分支X、Y和Z。这引起在地址X、Y和Z处的访客代码的预取指令的发出。
图26示出根据本发明的一个实施例的描绘了具有访客指令序列的转换表和具有本机指令映射的本机映射表的示图。在一个实施例中,存储器结构/表可以实现为类似于低级低等待时间高速缓存的高速缓存。
在一个实施例中,最频繁遇到的访客指令和它们的映射被存储在低级高速缓存结构,低级高速缓存结构允许运行时快速地访问该结构以为访客指令获得等效的本机指令。映射表将为查找到的访客指令格式提供等效的指令格式。并且使用一些在该映射表中的存储为控制字段的控制值以快速地允许将访客指令中的某些字段替换为本机指令中的等效的字段。此处的想法是在低级(例如,高速缓存)只存储最频繁遇到的访客指令以允许快速的转换,而其他非频繁的访客指令可以花费更长的时间来转换。
现在讨论根据本发明的实施例的术语CLB/CLBV/CLT。在一个实施例中,CLB是被维持为存储器结构的转换后备缓冲器,当遇到本机访客分支时其被查找,同时执行本机代码以获得映射到访客分支的目的地的代码的地址。在一个实施例中,CLBV是CLB的受害高速缓存镜像。随着条目被从CLB驱逐,它们被缓存到常规L1/L2高速缓存结构中。当CLB遇到未命中时,其将通过硬件访问自动地查找L1/L2以搜索未命中的目标。在一个实施例中,当在CLB或CLBV中未发现未命中的目标时使用CLT,触发软件处理程序以在主存储器中的CLT表中查找条目。
现在讨论根据本发明的实施例的CLB计数器。在一个实施例中,CLB计数器是在转换时刻设定的值,并且存储在关于被转换的指令序列/跟踪的元数据旁边。每次执行指令序列/跟踪时,该计数器减1并且用作对热的触发器。该值存储在所有CLB级别(例如,CLB、CLBV、CLT)。当其达到阈值,其触发JIT编译器以优化指令序列/跟踪。该值由硬件维持和管理。在一个实施例中,指令序列/跟踪可以具有CLB计数器和软件计数器的混合。
现在讨论根据本发明的一个实施例的后台线程。在一个实施例中,一旦触发热,则启动硬件后台线程,其用作对软件不可见的后台硬件任务并且具有其自己的硬件资源,通常是最小资源(例如,小的寄存器组和***状态)。其继续作为在低优先级上存储执行资源的后台线程执行并且当执行资源可用时继续执行。其具有硬件线程ID,并且对于软件不可见,但是由低级硬件管理***管理。
现在讨论根据本发明的一个实施例的JIT分析和运行时模拟/动态检查。JIT可以在时间间隔上开始分析/模拟/扫描指令序列/跟踪。其可以通过例如使用分支分析来维持与优化相关的某些值。分支分析使用分支分析硬件指令和代码检测通过实现具有分支的语义的指令来为指令序列/跟踪内的分支发现分支预测值/偏移,使得其开始从特定地址取出指令并且将该指令传递通过机器前端和查找硬件分支预测器而不执行该指令。然后JIT累积该硬件分支预测计数器的值以创建比硬件所提供的更大的计数器。这允许JIT分析分支偏移。
恒定分析指代分析以检测不改变的值并且使用该信息来优化代码。
由于通过动态地检查加载和存储之间的地址重命名有时可能检查到该存储到加载转发不发生,因此使用检查加载存储重命名。
在一个实施例中,JIT可以编制代码或使用特殊指令,例如分支分析指令、或检查加载指令、或检查存储指令。
出于解释的目的,以上描述指示不旨在穷举或限制本发明的特定实施例。与以上教导一致的许多修改和变型是可能的。选择和描述实施例以最好地解释发明的原理和其实践应用,以使本领域其他技术人员能最好地利用该发明以及该发明的可能适于他们的特定使用的具有各种修改的各种实施例。
Claims (20)
1.一种用于不可知的运行时架构的***,包括:
***仿真/虚拟化转换器;
应用代码转换器;以及
转换器,其中***仿真/虚拟化转换器和应用代码转换器实现***仿真过程,并且其中所述转换器实现用于执行来自访客镜像的代码的***和应用转换过程,其中所述转换器:
访问多个访客指令,包括多个访客分支指令;
将所述多个访客指令组装到访客指令块中;
将所述访客指令块变换为对应的本机转换块;
将所述本机转换块存储到本机高速缓存中;
将所述访客指令块到对应的本机转换块的映射存储在转换后备缓冲器CLB中,其中所述CLB包括多个级别;
在对访客指令的后续请求之后,索引所述转换后备缓冲器以确定命中是否发生了,其中所述映射指示所述访客指令在所述本机高速缓存中具有对应的被转换的本机指令;
响应于所述命中,转发所述被转换的本机指令以供执行;
在每次执行之后,更新在所述CLB的每个级别中的用于所述访客指令块或所述本机转换块的计数器;以及
在所述计数器达到阈值之后,由编译器优化所述访客指令块或所述本机转换块。
2.如权利要求1所述的***,其特征在于,硬件取出逻辑组件独立于处理器取出所述多个访客指令。
3.如权利要求1所述的***,其特征在于,所述转换后备缓冲器包括高速缓存,所述高速缓存使用替换策略以维持其中存储的最频繁遇到的访客指令块到对应的本机转换块的映射。
4.如权利要求1所述的***,其特征在于,转换缓冲器被维持在***存储器内,并且高速缓存一致性被维持在所述转换后备缓冲器和所述转换缓冲器之间。
5.如权利要求4所述的***,其特征在于,所述转换缓冲器大于所述转换后备缓冲器,并且写回策略用于维持所述转换缓冲器和所述转换后备缓冲器之间的一致性。
6.如权利要求1所述的***,其特征在于,所述CLB的第一级实现为耦合到处理器的流水线的高速低等待时间高速缓存存储器,其中所述CLB的第二级是受害高速缓存,并且其中所述CLB的第三级在主存储器中。
7.一种具有不可知的运行时架构的微处理器,包括:
***仿真/虚拟化转换器;
应用代码转换器;以及
转换器,其中***仿真/虚拟化转换器和应用代码转换器实现***仿真过程,并且其中所述转换器实现用于执行来自访客镜像的代码的***和应用转换过程,其中所述转换器:
访问多个访客指令,包括多个访客分支指令;
将所述多个访客指令组装到访客指令块中;
将所述访客指令块变换为对应的本机转换块;
将所述本机转换块存储到本机高速缓存中;
将所述访客指令块到对应的本机转换块的映射存储在转换后备缓冲器CLB中,其中所述CLB包括多个级别;
在对访客指令的后续请求之后,索引所述转换后备缓冲器以确定命中是否发生了,其中所述映射指示所述访客指令在所述本机高速缓存中具有对应的被转换的本机指令;
响应于所述命中,转发所述被转换的本机指令以供执行;
在每次执行之后,更新在所述CLB的每个级别中的用于所述访客指令块或所述本机转换块的计数器;以及
在所述计数器达到阈值之后,由编译器优化所述访客指令块或所述本机转换块。
8.如权利要求7所述的微处理器,其特征在于,硬件取出逻辑组件独立于所述处理器取出所述多个访客指令。
9.如权利要求7所述的微处理器,其特征在于,所述转换后备缓冲器包括高速缓存,所述高速缓存使用替换策略以维持其中存储的最频繁遇到的映射。
10.如权利要求7所述的微处理器,其特征在于,转换缓冲器被维持在***存储器内,并且高速缓存一致性被维持在所述转换后备缓冲器和所述转换缓冲器之间。
11.如权利要求10所述的微处理器,其特征在于,所述转换缓冲器大于所述转换后备缓冲器,并且写回策略用于维持所述转换缓冲器和所述转换后备缓冲器之间的一致性。
12.如权利要求7所述的微处理器,其特征在于,所述CLB的第一级实现为耦合到所述处理器的流水线的高速低等待时间高速缓存存储器,其中所述CLB的第二级是受害高速缓存,并且其中所述CLB的第三级在主存储器中。
13.一种实现变换指令的方法的微处理器,所述微处理器包括:
***仿真/虚拟化转换器;
应用代码转换器;以及
转换器,其中***仿真/虚拟化转换器和应用代码转换器实现***仿真过程,并且其中所述转换器实现用于执行来自访客镜像的代码的***和应用转换过程,其中所述转换器:
访问多个访客指令,包括多个访客分支指令;
将所述多个访客指令组装到访客指令块中;
将所述访客指令块变换为对应的本机转换块;
将所述本机转换块存储到本机高速缓存中;
将所述访客指令块到对应的本机转换块的映射存储在转换后备缓冲器CLB中,其中所述CLB包括多个级别;
在对访客指令的后续请求之后,索引所述转换后备缓冲器以确定命中是否发生了,其中所述映射指示所述访客指令在所述本机高速缓存中具有对应的被转换的本机指令;
响应于所述命中,转发所述被转换的本机指令以供执行;
在每次执行之后,更新在所述CLB的每个级别中的用于所述访客指令块或所述本机转换块的计数器;以及
在所述计数器达到阈值之后,由编译器优化所述访客指令块或所述本机转换块。
14.如权利要求13所述的微处理器,其特征在于,硬件取出逻辑组件独立于所述处理器取出所述多个访客指令。
15.如权利要求13所述的微处理器,其特征在于,所述转换后备缓冲器包括高速缓存,所述高速缓存使用替换策略以维持其中存储的最频繁遇到的本机转换块。
16.如权利要求13所述的微处理器,其特征在于,转换缓冲器被维持在***存储器内,并且高速缓存一致性被维持在所述转换后备缓冲器和所述转换缓冲器之间。
17.如权利要求16所述的微处理器,其特征在于,所述转换缓冲器大于所述转换后备缓冲器,并且写回策略用于维持所述转换缓冲器和所述转换后备缓冲器之间的一致性。
18.如权利要求13所述的微处理器,其特征在于,所述CLB的第一级实现为耦合到所述处理器的流水线的高速低等待时间高速缓存存储器,其中所述CLB的第二级是受害高速缓存,并且其中所述CLB的第三级在主存储器中。
19.如权利要求13所述的微处理器,其特征在于,所述多个访客指令包括Java、JavaScript、x86、MIPS或SPARC。
20.如权利要求19所述的微处理器,其特征在于,所述微处理器虚拟指令集处理器能利用包括Java、JavaScript、x86、MIPS或SPARC的访客指令中的一个来运行,并且随后能利用包括Java、JavaScript、x86、MIPS或SPARC的访客指令中的不同的一个来运行。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462029383P | 2014-07-25 | 2014-07-25 | |
US62/029,383 | 2014-07-25 | ||
PCT/US2015/041851 WO2016014867A1 (en) | 2014-07-25 | 2015-07-23 | Using a conversion look aside buffer to implement an instruction set agnostic runtime architecture |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106716363A CN106716363A (zh) | 2017-05-24 |
CN106716363B true CN106716363B (zh) | 2021-04-09 |
Family
ID=55163806
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580051976.4A Expired - Fee Related CN106716363B (zh) | 2014-07-25 | 2015-07-23 | 使用转换后备缓冲器来实现指令集不可知的运行时架构 |
CN201580051864.9A Active CN107077368B (zh) | 2014-07-25 | 2015-07-23 | 用于指令集不可知的运行时架构的*** |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580051864.9A Active CN107077368B (zh) | 2014-07-25 | 2015-07-23 | 用于指令集不可知的运行时架构的*** |
Country Status (6)
Country | Link |
---|---|
US (2) | US9823939B2 (zh) |
EP (2) | EP3172665A4 (zh) |
JP (2) | JP2017527019A (zh) |
KR (2) | KR101882255B1 (zh) |
CN (2) | CN106716363B (zh) |
WO (2) | WO2016014866A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9733909B2 (en) | 2014-07-25 | 2017-08-15 | Intel Corporation | System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address |
US20160026484A1 (en) * | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | System converter that executes a just in time optimizer for executing code from a guest image |
US10353680B2 (en) * | 2014-07-25 | 2019-07-16 | Intel Corporation | System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence |
WO2016014866A1 (en) | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | System for an instruction set agnostic runtime architecture |
US11281481B2 (en) | 2014-07-25 | 2022-03-22 | Intel Corporation | Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture |
US9951261B2 (en) | 2015-03-10 | 2018-04-24 | Baker Hughes, A Ge Company, Llc | Cement spacer system for wellbores, methods of making, and methods of use |
JP6358323B2 (ja) * | 2016-12-28 | 2018-07-18 | 日本電気株式会社 | 情報処理装置、情報処理方法、およびプログラム |
US10402112B1 (en) * | 2018-02-14 | 2019-09-03 | Alibaba Group Holding Limited | Method and system for chunk-wide data organization and placement with real-time calculation |
US10929160B1 (en) * | 2018-12-12 | 2021-02-23 | The Mathworks, Inc. | Composite-trace just-in-time compilation |
US20210081575A1 (en) * | 2019-09-12 | 2021-03-18 | Microsoft Technology Licensing, Llc | Hybrid mitigation of speculation based attacks based on program behavior |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
CN101968746A (zh) * | 2010-09-02 | 2011-02-09 | 北京航空航天大学 | 一种内核虚拟机组织架构模式的实现方法 |
CN103620547A (zh) * | 2011-01-27 | 2014-03-05 | 索夫特机械公司 | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 |
Family Cites Families (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4456954A (en) | 1981-06-15 | 1984-06-26 | International Business Machines Corporation | Virtual machine system with guest architecture emulation using hardware TLB's for plural level address translations |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
AU6701594A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding sequences of guest instructions for a host computer |
US5517651A (en) | 1993-12-29 | 1996-05-14 | Intel Corporation | Method and apparatus for loading a segment register in a microprocessor capable of operating in multiple modes |
US5742802A (en) * | 1996-02-16 | 1998-04-21 | International Business Machines Corporation | Method and system for efficiently mapping guest instruction in an emulation assist unit |
US6139199A (en) | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
US7620955B1 (en) * | 2001-06-08 | 2009-11-17 | Vmware, Inc. | High-performance virtual machine networking |
US7203932B1 (en) | 2002-12-30 | 2007-04-10 | Transmeta Corporation | Method and system for using idiom recognition during a software translation process |
US6981128B2 (en) | 2003-04-24 | 2005-12-27 | International Business Machines Corporation | Atomic quad word storage in a simultaneous multithreaded system |
US7069389B2 (en) * | 2003-11-26 | 2006-06-27 | Microsoft Corporation | Lazy flushing of translation lookaside buffers |
US20050149915A1 (en) * | 2003-12-29 | 2005-07-07 | Intel Corporation | Methods and apparatus for optimizing a program undergoing dynamic binary translation using profile information |
US7216220B2 (en) | 2004-07-14 | 2007-05-08 | Stexar Corp. | Microprocessor with customer code store |
US20060026371A1 (en) | 2004-07-30 | 2006-02-02 | Chrysos George Z | Method and apparatus for implementing memory order models with order vectors |
US7302527B2 (en) * | 2004-11-12 | 2007-11-27 | International Business Machines Corporation | Systems and methods for executing load instructions that avoid order violations |
US7734895B1 (en) | 2005-04-28 | 2010-06-08 | Massachusetts Institute Of Technology | Configuring sets of processor cores for processing instructions |
US7450131B2 (en) | 2005-09-30 | 2008-11-11 | Intel Corporation | Memory layout for re-ordering instructions using pointers |
US7913236B2 (en) | 2006-09-29 | 2011-03-22 | Intel Corporation | Method and apparatus for performing dynamic optimization for software transactional memory |
EP2523101B1 (en) | 2006-11-14 | 2014-06-04 | Soft Machines, Inc. | Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes |
US8078827B2 (en) * | 2007-07-05 | 2011-12-13 | International Business Machines Corporation | Method and apparatus for caching of page translations for virtual machines |
US8453128B2 (en) * | 2007-09-28 | 2013-05-28 | Oracle America, Inc. | Method and system for implementing a just-in-time compiler |
US8959277B2 (en) * | 2008-12-12 | 2015-02-17 | Oracle America, Inc. | Facilitating gated stores without data bypass |
US8667476B1 (en) | 2009-01-20 | 2014-03-04 | Adaptmicrosys LLC | Instruction grouping and ungrouping apparatus and method for an adaptive microprocessor system |
US8335911B2 (en) | 2009-05-21 | 2012-12-18 | Oracle America, Inc. | Dynamic allocation of resources in a threaded, heterogeneous processor |
US8949106B2 (en) | 2009-09-18 | 2015-02-03 | International Business Machines Corporation | Just in time compiler in spatially aware emulation of a guest computer instruction set |
US8364461B2 (en) * | 2009-11-09 | 2013-01-29 | International Business Machines Corporation | Reusing invalidated traces in a system emulator |
US8595471B2 (en) | 2010-01-22 | 2013-11-26 | Via Technologies, Inc. | Executing repeat load string instruction with guaranteed prefetch microcode to prefetch into cache for loading up to the last value in architectural register |
US9658890B2 (en) | 2010-10-08 | 2017-05-23 | Microsoft Technology Licensing, Llc | Runtime agnostic representation of user code for execution with selected execution runtime |
WO2012103245A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines Inc. | Guest instruction block with near branching and far branching sequence construction to native instruction block |
WO2012103359A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
WO2012103367A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
WO2012103373A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Variable caching structure for managing physical storage |
WO2012103253A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
US8673689B2 (en) | 2011-01-28 | 2014-03-18 | Marvell World Trade Ltd. | Single layer BGA substrate process |
US8756589B2 (en) | 2011-06-14 | 2014-06-17 | Microsoft Corporation | Selectable dual-mode JIT compiler for SIMD instructions |
CN108427574B (zh) | 2011-11-22 | 2022-06-07 | 英特尔公司 | 微处理器加速的代码优化器 |
CN104040490B (zh) | 2011-11-22 | 2017-12-15 | 英特尔公司 | 用于多引擎微处理器的加速的代码优化器 |
US9558092B2 (en) * | 2011-12-12 | 2017-01-31 | Microsoft Technology Licensing, Llc | Runtime-agnostic management of applications |
US9280347B2 (en) * | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
WO2013162548A1 (en) | 2012-04-25 | 2013-10-31 | Empire Technology Development, Llc | Certification for flexible resource demand applications |
EP2862068B1 (en) | 2012-06-15 | 2022-07-06 | Intel Corporation | Reordered speculative instruction sequences with a disambiguation-free out of order load store queue |
US9141361B2 (en) | 2012-09-30 | 2015-09-22 | Intel Corporation | Method and apparatus for performance efficient ISA virtualization using dynamic partial binary translation |
US8856769B2 (en) | 2012-10-23 | 2014-10-07 | Yong-Kyu Jung | Adaptive instruction prefetching and fetching memory system apparatus and method for microprocessor system |
US9569342B2 (en) | 2012-12-20 | 2017-02-14 | Microsoft Technology Licensing, Llc | Test strategy for profile-guided code execution optimizers |
JP2016534431A (ja) | 2013-10-25 | 2016-11-04 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated | ロード/記憶ユニット及びデータキャッシュの順序付け及びバンド幅の向上 |
US9183018B2 (en) * | 2013-12-30 | 2015-11-10 | Andrew T Jennings | Dynamic on/off just-in-time compilation in a dynamic translator using instruction code translation |
US9201635B2 (en) | 2013-12-30 | 2015-12-01 | Unisys Corporation | Just-in-time dynamic translation for translation, compilation, and execution of non-native instructions |
US9213563B2 (en) * | 2013-12-30 | 2015-12-15 | Unisys Corporation | Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation |
US9524178B2 (en) * | 2013-12-30 | 2016-12-20 | Unisys Corporation | Defining an instruction path to be compiled by a just-in-time (JIT) compiler |
US9703948B2 (en) | 2014-03-28 | 2017-07-11 | Intel Corporation | Return-target restrictive return from procedure instructions, processors, methods, and systems |
US9483295B2 (en) * | 2014-03-31 | 2016-11-01 | International Business Machines Corporation | Transparent dynamic code optimization |
WO2016014866A1 (en) | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | System for an instruction set agnostic runtime architecture |
US20160026486A1 (en) | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | An allocation and issue stage for reordering a microinstruction sequence into an optimized microinstruction sequence to implement an instruction set agnostic runtime architecture |
US10353680B2 (en) * | 2014-07-25 | 2019-07-16 | Intel Corporation | System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence |
US20160026484A1 (en) * | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | System converter that executes a just in time optimizer for executing code from a guest image |
US9733909B2 (en) * | 2014-07-25 | 2017-08-15 | Intel Corporation | System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address |
US11281481B2 (en) * | 2014-07-25 | 2022-03-22 | Intel Corporation | Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture |
-
2015
- 2015-07-23 WO PCT/US2015/041850 patent/WO2016014866A1/en active Application Filing
- 2015-07-23 JP JP2017504000A patent/JP2017527019A/ja active Pending
- 2015-07-23 US US14/807,271 patent/US9823939B2/en active Active
- 2015-07-23 CN CN201580051976.4A patent/CN106716363B/zh not_active Expired - Fee Related
- 2015-07-23 JP JP2017504010A patent/JP6690813B2/ja not_active Expired - Fee Related
- 2015-07-23 EP EP15825210.6A patent/EP3172665A4/en not_active Withdrawn
- 2015-07-23 KR KR1020177003197A patent/KR101882255B1/ko active IP Right Grant
- 2015-07-23 US US14/807,313 patent/US20160026487A1/en not_active Abandoned
- 2015-07-23 EP EP15825498.7A patent/EP3172667A4/en not_active Withdrawn
- 2015-07-23 WO PCT/US2015/041851 patent/WO2016014867A1/en active Application Filing
- 2015-07-23 CN CN201580051864.9A patent/CN107077368B/zh active Active
- 2015-07-23 KR KR1020177003199A patent/KR101882429B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
CN101968746A (zh) * | 2010-09-02 | 2011-02-09 | 北京航空航天大学 | 一种内核虚拟机组织架构模式的实现方法 |
CN103620547A (zh) * | 2011-01-27 | 2014-03-05 | 索夫特机械公司 | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 |
Also Published As
Publication number | Publication date |
---|---|
KR101882429B1 (ko) | 2018-07-27 |
JP2017527890A (ja) | 2017-09-21 |
WO2016014867A1 (en) | 2016-01-28 |
US20160026487A1 (en) | 2016-01-28 |
EP3172665A1 (en) | 2017-05-31 |
KR101882255B1 (ko) | 2018-07-26 |
WO2016014867A9 (en) | 2016-09-09 |
US20160026483A1 (en) | 2016-01-28 |
JP2017527019A (ja) | 2017-09-14 |
EP3172665A4 (en) | 2018-03-28 |
KR20170026620A (ko) | 2017-03-08 |
CN107077368A (zh) | 2017-08-18 |
EP3172667A1 (en) | 2017-05-31 |
JP6690813B2 (ja) | 2020-04-28 |
CN107077368B (zh) | 2020-09-29 |
CN106716363A (zh) | 2017-05-24 |
KR20170024110A (ko) | 2017-03-06 |
WO2016014866A1 (en) | 2016-01-28 |
EP3172667A4 (en) | 2018-03-21 |
US9823939B2 (en) | 2017-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106716362B (zh) | 用于将微指令序列重排序为优化的微指令序列以实现指令集不可知的运行时架构的分配和发出级 | |
CN106796528B (zh) | 用于选择包括指令序列的指令的***和方法 | |
US11281481B2 (en) | Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture | |
CN106716363B (zh) | 使用转换后备缓冲器来实现指令集不可知的运行时架构 | |
CN107077371B (zh) | 用于不可知的运行时架构的***、微处理器和计算机*** | |
CN107077370B (zh) | 执行及时优化器用于执行来自访客镜像的代码的***转换器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
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: 20210409 |