CN111324948A - 模拟方法及模拟系统 - Google Patents
模拟方法及模拟系统 Download PDFInfo
- Publication number
- CN111324948A CN111324948A CN202010084241.4A CN202010084241A CN111324948A CN 111324948 A CN111324948 A CN 111324948A CN 202010084241 A CN202010084241 A CN 202010084241A CN 111324948 A CN111324948 A CN 111324948A
- Authority
- CN
- China
- Prior art keywords
- speculative
- branch
- instruction
- model
- processor
- 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.)
- Granted
Links
- 238000004088 simulation Methods 0.000 title claims abstract description 166
- 238000000034 method Methods 0.000 title claims abstract description 48
- 230000004044 response Effects 0.000 claims abstract description 21
- 230000015654 memory Effects 0.000 claims description 59
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 8
- 230000000694 effects Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000004445 quantitative analysis Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/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/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- 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
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
-
- 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
- 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/461—Saving or restoring of program or task context
-
- 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
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- 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/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- 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/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- 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/30181—Instruction operation extension or modification
- G06F9/30196—Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- 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
- 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
- G06F9/45554—Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
-
- 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
- G06F9/45558—Hypervisor-specific management and integration aspects
Abstract
本发明提出一种模拟方法及模拟系统。模拟系统可分为基于JIT仿真引擎的执行模型和处理器模型,其中处理器模型模拟目标处理器产生关联于第一分支指令的多个第一分支预测信息;执行模型从处理器模型接收第一取指开始消息,其中第一取指开始消息包括第一取指地址;执行模型调用即时仿真引擎控制物理机依据第一取指地址取指并执行第一分支指令;执行模型从即时仿真引擎取得第一分支指令的多个第一分支指令信息,并将多个第一分支指令信息提供给处理器模型;以及响应于判定多个第一分支预测信息未完全匹配于多个第一分支指令信息,执行模型记录物理机的第一处理器状态,并强制即时仿真引擎依据多个第一分支预测信息执行第一投机操作。
Description
技术领域
本发明涉及一种中央处理器(CPU)的建模技术,且特别涉及一种基于即时(just-in-time,JIT)仿真引擎的模拟方法及模拟系统。
背景技术
在现在CPU设计中,采用投机执行的方法提高指令执行效率是非常重要的技术手段。典型代表就是对分支指令的预测。CPU通过收集分支指令的跳转历史,对未来需要执行的分支指令的方向和目标地址进行预测。如果预测正确,则可以显著提高CPU的指令吞吐率。通过对投机执行行为的建模和仿真,可以优化CPU架构中投机出现的次数以及投机执行对CPU性能的影响,为CPU的硬件设计提供参考。
除了算法设计和硬件设计,软件设计对于优化CPU的投机性能也是非常重要的。符合预测算法规律的分支指令分布能够取得非常可观的预测效率。
对于软件进行性能分析和调优的过程中,静态分析方法并不能获得最佳的分析结果。在硬件上直接执行软件,由于受到硬件平台提供的调试手段(如性能计数器)的限制,很难做到精确的定量化分析。采用模拟执行的仿真动态分析,可以更容易发现软件中的实际性能瓶颈。
JIT仿真引擎是一种非常有效的CPU建模仿真技术,而且二次开发代价相对较小。其主要特点在于,通过对需要运行的应用程序的汇编进行插桩和转换,将需要运行的应用程序转化为一段可以直接在物理机上运行并且可以获得应用程序运行环境的代码,直接在物理机上运行。JIT仿真引擎获得指令执行前后的状态并非来自JIT仿真引擎自行维护的虚拟环境,而是来自于处理器运行的实际环境。
JIT仿真引擎不需要庞大的指令译码和执行单元,而是由物理机代为进行,仿真速度很快。同时,基于JIT仿真引擎开发仿真器,可以很好的进行模块划分。每个模块开发完成后,都可以在JIT仿真引擎的支持下运行完整的应用程序,很好地避免了一次性开发任务量过大的问题。
但是JIT仿真引擎的缺陷在于,JIT仿真引擎屏蔽了CPU内部的实现细节而只能对外输出CPU的架构态信息,包括寄存器和内存等。因此,JIT仿真引擎需要与CPU模型配合使用,由JIT仿真引擎提供指令执行的结果;由CPU模型提供CPU运行的内部细节。不过,JIT仿真引擎执行的指令都会对应用程序执行环境进行修改而且无法撤销。这样就限制了JIT仿真引擎对于投机执行的建模能力。当前流行的基于JIT仿真引擎的仿真器都不能支持投机执行而只能执行正确指令流上的指令。较为准确的仿真器可以通过增加惩罚的方式,将投机执行对于指令延迟和吞吐率的影响体现出来,但是不能反映出投机执行对于CPU内部状态的影响,比如分支预测表和缓存。
发明内容
本发明是针对一种模拟方法,适于包括执行模型及处理器模型的模拟系统。该模拟方法包括:由所述处理器模型模拟目标处理器产生关联于第一分支指令的多个第一分支预测信息;由所述执行模型从所述处理器模型接收第一取指开始消息,其中所述第一取指开始消息包括第一取指地址;由所述执行模型调用即时仿真引擎控制物理机依据所述第一取指地址取指并执行所述第一分支指令;由所述执行模型从所述即时仿真引擎取得所述第一分支指令的多个第一分支指令信息,并将所述多个第一分支指令信息提供给所述处理器模型;以及响应于判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,由所述执行模型记录所述物理机的第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息执行第一投机操作。
本发明是针对一种模拟系统,其包括执行模型及处理器模型。所述处理器模型模拟目标处理器产生关联于第一分支指令的多个第一分支预测信息。所述执行模型从所述处理器模型接收第一取指开始消息,其中所述第一取指开始消息包括第一取指地址。所述执行模型调用即时仿真引擎控制物理机依据所述第一取指地址取指并执行所述第一分支指令。所述执行模型从所述即时仿真引擎取得所述第一分支指令的多个第一分支指令信息,并将所述多个第一分支指令信息提供给所述处理器模型。响应于判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,所述执行模型记录所述物理机的第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息执行第一投机操作。
本发明提出的基于JIT的模拟方法及模拟系统,具备对投机执行的建模和仿真能力。通过本发明提出的模拟方法及模拟系统,基于JIT仿真引擎的仿真器也能模拟投机过程。概略而言,在投机开始后,JIT仿真引擎能够执行投机操作路径上的指令并且获得投机指令之后会对架构态环境的影响。在投机结束后,JIT仿真引擎能够将架构态环境调整为投机开始前的状态,并且开始执行正确路径上的指令。
附图说明
包含附图以便进一步理解本发明,且附图并入本说明书中并构成本说明书的一部分。附图说明本发明的实施例,并与描述一起用于解释本发明的原理。
图1是依据本发明的一实施例图示的系统架构图。
图2是依据本发明的一实施例图示的模拟方法的流程图。
图3是依据本发明的一实施例图示的投机堆栈的示意图。
图4是依据本发明的一实施例图示的模拟系统的交互示意图。
图5是依据本发明的一实施例图示的执行模型的状态切换示意图。
图6是依据图5图示的执行模型的状态切换时序图。
具体实施方式
为了使得JIT仿真引擎具备对投机执行的建模和仿真能力,本发明提出了一种基于JIT的模拟方法及模拟系统,并可支持投机执行。通过本发明提出的模拟方法及模拟系统,基于JIT仿真引擎的仿真器也能模拟投机过程。概略而言,在投机开始后,JIT仿真引擎能够执行投机操作路径上的指令并且获得投机指令之后会对架构态环境的影响。在投机结束后,JIT仿真引擎能够将架构态环境调整为投机开始前的状态,并且开始执行正确路径上的指令。
请参照图1,其是依据本发明的一实施例图示的系统架构图。如图1所示,本发明的系统100包括模拟系统10、JIT仿真引擎13及物理机14,其中模拟系统10包括执行模型11及处理器模型12。在本发明的实施例中,执行模型11及处理器模型12例如是两个线程,其中执行模型11可用于调用JIT仿真引擎13,进而由运行有特定应用程序的JIT仿真引擎13控制物理机14(其例如是一台包括处理器(例如CPU)的计算机装置)执行指令,并获得指令对处理器架构态的影响(例如寄存器及/或内存被修改的情形等)。处理器模型12则可用于模拟目标处理器(例如CPU)的内部运行方式,进而实现例如分支预测、以模拟流水线121执行指令、及控制执行指令流等的功能。值得注意的是,目标处理器可以是任何特定架构和模型的处理器,例如其架构可以是X86架构和ARM架构等,且可以模拟任何处理器,包括但不限于:需要优化自身硬件设计的目标处理器,或者需要针对其已有硬件设计优化软件的目标处理器(例如对该目标处理器上运行的软件进行性能分析和调优)。
从执行模型11的角度来看,可以认为JIT仿真引擎13是一个由执行模型11独占的处理器。并且,虽然JIT仿真引擎13、执行模型11和处理器模型12都在物理机14上运行,但是JIT仿真引擎13隐藏了物理机14的实际状态,只向执行模型11提供由JIT仿真引擎13上运行的特定应用程序引起的CPU状态。此外,在本发明的实施例中,在仿真运行结束后,JIT仿真引擎13可提供特定应用程序运行的结果。处理器模型12可提供与处理器结构有关的结果,例如执行指令数、分支预测正确率、投机次数等,但不限于此。
在本发明的实施例中,执行模型11及处理器模型12可经配置以协同执行本发明提出的模拟方法,详述如下。
请参照图2,其是依据本发明的一实施例图示的模拟方法的流程图。本实施例的方法可由图1的执行模型11及处理器模型12执行,以下即搭配图1所示的内容说明图2各步骤的细节。
首先,在步骤S200中,处理器模型12模拟目标处理器产生关联于第一分支指令的多个第一分支预测信息。在不同的实施例中,若第一分支指令属于跳转(jump)、呼叫(call)、返回(return)及条件跳转(conditional jump)的其中之一,则可被视为属于分支指令,但可不限于此。在一实施例中,上述第一分支预测结果可包括第一分支指令预测地址、第一分支预测方向及第一分支预测目标地址、预测的分支指令长度等,但可不限于此。其中“第一分支指令预测地址”是指例如jump这种分支指令其本身的地址,“第一分支预测方向”为处理器模型12中的分支预测模块预测该第一分支指令的跳转方向为分支发生(taken)或者分支不发生(not-taken),“第一分支预测目标地址”为处理器模型12中的分支预测模块预测该第一分支指令欲跳转过去的目标地址。
在一实施例中,对于物理机14中的处理器以及模拟目标处理器的处理器模型12而言,均在一个CPU周期中可从内存中取出大小为16字节的指令数据,而这些指令数据可统称为一个取指单元(fetch unit)。因此,在步骤S200中,处理器模型12还可预先对一个取指单元(以下称为第一取指单元)执行模拟的分支预测功能而产生第一取指单元中属于分支指令的各指令的分支预测结果(例如包括前述第一分支预测信息),但本发明可不限于此。
之后,在步骤S210中,执行模型11可从处理器模型12接收第一取指开始消息,其中所述第一取指开始消息可包括第一取指地址。在不同的实施例中,所述第一取指开始消息还可包括仿真时间。对应步骤S200的一实施例,该第一取指地址为第一取指单元的起始取指地址。
之后,在步骤S220中,执行模型11可调用JIT仿真引擎13控制物理机14依据所述第一取指地址取指(fetch)并执行该第一分支指令。在本发明的实施例中,物理机14取指并执行第一分支指令的细节可参照现有CPU取指及执行指令的方式,故其细节于此不再赘述。
接着,在步骤S240中,执行模型11可从JIT仿真引擎13取得所述第一分支指令的多个第一分支指令信息,并将所述多个第一分支指令信息提供给处理器模型12。在一实施例中,在JIT仿真引擎13执行所述第一分支指令之后,执行模型11可取得JIT仿真引擎13执行上述第一分支指令的相关第一分支指令信息。在不同的实施例中,上述第一分支指令信息可包括静态指令信息及动态指令信息(例如操作数值等),其中静态指令信息可包括关联于第一分支指令的第一分支指令地址、第一分支方向及所述第一分支目标地址,但不限于此。
在一实施例中,上述第一分支指令地址、第一分支方向及所述第一分支目标地址可理解为在取指并执行第一分支指令时所取得的实际正确的分支指令地址、分支方向及分支目标地址。相较之下,第一分支预测信息中的第一分支指令预测地址(即,分支指令本身的地址)、第一分支预测方向(例如分支发生(taken)或分支不发生(not taken))及第一分支预测目标地址(即,分支指令欲跳转过去的地址)则可理解为由处理器模型12模拟而得的预测结果。在一实施例中,若某个分支未被处理器模型12预测,即代表处理器模型12预测此指令为分支不发生(not taken),即该第一分支指令并不发生地址跳转而是执行接续于该第一分支指令的指令。
在一实施例中,处理器模型12可判断前述第一分支预测信息是否完全匹配于前述第一分支指令信息。具体而言,处理器模型12可判断所述第一分支指令预测地址、所述第一分支预测方向及所述第一分支预测目标地址是否未完全分别匹配于所述第一分支指令地址、所述第一分支方向及所述第一分支目标地址。简言之,处理器模型12可将自身对于第一分支指令的相关分支预测结果与JIT仿真引擎13所提供的第一分支指令的正确执行结果比对,并视比对的结果而决定是否强制JIT仿真引擎13执行投机操作。
在一实施例中,若所述第一分支指令预测地址、所述第一分支预测方向及所述第一分支预测目标地址完全分别匹配于所述第一分支指令地址、所述第一分支方向及所述第一分支目标地址,即代表处理器模型12的预测正确,故执行模型11可继续控制JIT仿真引擎13取得并执行接续于所述第一分支指令的指令。在本实施例中,该接续指令可理解为在正常指令流上次于第一分支指令的指令,但可不限于此。为便于说明,此时的执行模型11可理解为切换为在正常操作路径(即,非投机操作路径)中的继续取指状态(下称第一继续取指状态)。另外,在一实施例中,若处理器模型12对第一取指单元中的各分支指令的预测皆正确,则执行模型11可维持在正常操作路径中的继续取指状态,直至第一取指单元的各指令皆已被取得并模拟过。在此情况下,执行模型11可从正常操作路径中的继续取指状态(即,第一继续取指状态)切换为正常操作路径中的等待取指状态(下称第一等待取指状态)。
另一方面,若所述第一分支指令预测地址、所述第一分支预测方向及所述第一分支预测目标地址未完全分别匹配于所述第一分支指令地址、所述第一分支方向及所述第一分支目标地址,即代表处理器模型12的预测错误。在此情况下,本发明可通过以下机制强制JIT仿真引擎13执行投机操作,以取得可用于对投机操作进行建模所需的信息。
具体而言,在步骤S250中,响应于判定前述第一分支预测信息未完全匹配于前述第一分支指令信息,处理器模型12可发送第一投机开始消息至执行模型11。
之后,在步骤S260中,执行模型11可根据第一投机开始消息而记录物理机14的第一处理器状态,并强制JIT仿真引擎13依据前述第一分支预测信息执行第一投机操作。
值得注意的是,本发明并不局限于前述步骤S250和S260的做法来判定是否执行投机操作,在另一实施例中,也可由执行模型11来执行第一分支指令的相关分支预测信息与JIT仿真引擎13所提供的第一分支指令的正确执行结果比对。在该实施例中,处理器模型12可在之前的步骤S210将其预测的第一分支预测信息随同第一取指开始消息一起发送给执行模型11供其比对。在这种实施例中,第一投机开始消息就不是必要的,执行模型11在判定前述第一分支预测信息未完全匹配于前述第一分支指令信息时,记录物理机14的第一处理器状态,并强制JIT仿真引擎13依据前述第一分支预测信息执行第一投机操作。
如图1所示,执行模型11可包括投机堆栈111,其例如是一先进后出(first-in-last-out)堆栈,并可用于记录物理机14的第一处理器状态。在一实施例中,所述第一处理器状态可由JIT仿真引擎13提供,并包括物理机14的处理器的第一当下寄存器状态及第一内存快照。在此情况下,执行模型11可在投机堆栈111中新增关联于所述第一投机操作的第一投机单元,其中所述第一投机单元记录所述第一投机操作的第一开始投机时间、所述第一分支指令的第一分支指令地址、所述第一当下寄存器状态及所述第一内存快照。简言之,以上操作可理解为在强制JIT引擎13执行第一投机操作之前,先行将物理机14的处理器当下的运行现场记录为第一投机单元。如此一来,在第一投机操作结束之后,执行模型11还可基于第一投机单元将物理机14的处理器恢复为执行第一投机操作之前的状态。
在一些实施例中,在执行第一投机操作进入投机操作路径以执行投机操作路径上的指令流后,处理器模型12可据以输出关联于目标处理器的相关模拟投机执行结果。在其他实施例中,处理器模型12也可在特定应用程序结束之后,将执行期间出现的各个投机操作的相关模拟投机执行结果(例如执行指令数、分支预测正确率、投机次数等)输出,以供相关人员参考,但本发明可不限于此。在一些实施例中,上述模拟投机执行结果可由处理器模型12基于各个投机操作路径上的分支预测表/缓存等状态信息而统计,并可由处理器模型12以文件的形式保存。本发明一方面通过JIT仿真引擎13获得指令对处理器架构态的影响(例如寄存器及/或内存被修改的情形等),另一方面通过处理器模型12模拟目标处理器的内部运行方式,以输出与目标处理器结构有关的结果,尤其是模拟投机执行结果,以反映出投机执行对目标处理器内部状态的影响。
此外,若在进入投机操作路径执行第一投机指令流的过程中又出现了需进行其他投机操作(以下简称为第二投机操作)的情形,则执行模型11还可将执行第二投机操作之前的物理机14的处理器当下的运行现场另记录为第二投机单元,并将此第二投机单元添加至第一投机单元之后。如此一来,在第二投机操作结束之后,执行模型11还可基于第二投机单元将物理机14的处理器恢复为执行第二投机操作之前的状态。相关细节将在之后另辅以图式说明。
在一实施例中,在记录第一处理器状态之后,执行模型11例如可强制JIT仿真引擎13依据第一分支指令预测地址、第一分支预测方向及第一分支预测目标地址执行第一投机操作以进入投机操作路径执行第一投机指令流。具体而言,在启动投机后,若第一分支预测方向为分支不发生(not-taken),执行模型11可从正常操作路径中的继续取指状态(即,第一继续取指状态)切换为投机操作路径中的继续取指状态(下称第二继续取指状态),即执行模型11还可判定继续取指。为便于说明,此时的执行模型11可理解为从在正常操作路径中的继续取指状态(即,第一继续取指状态)切换为在投机操作中的继续取指状态(即,第二继续取指状态)。
在启动投机后,若第一分支预测方向为分支发生(taken),则执行模型11还可判定停止取指(亦即不再从第一取指单元取得接续的下一个指令),并发送第一取指结束消息至处理器模型12。此时,执行模型11可从正常操作路径中的继续取指状态(即,第一继续取指状态)切换为投机操作路径中的等待取指状态(下称第二等待取指状态)。当在投机操作路径上开始取指时,执行模型11可从投机操作路径中的等待取指状态(即,第二等待取指状态)切换为投机操作路径中的继续取指状态(即,第二继续取指状态)。取指结束时,执行模型11则又从投机操作路径中的继续取指状态(即,第二继续取指状态)返回投机操作路径中的等待取指状态(即,第二等待取指状态)。
如前所述,若在进入第一投机操作执行指令流的过程中又出现了第二分支指令,由于本发明的执行模型11此时已经进入投机状态,因此无论第二分支指令是否发生投机,执行模型11的状态跳转都是相同的,仅需区分第二分支指令是分支发生(taken)还是分支不发生(not-taken)这两种情况。如果第二分支指令是分支发生(taken),执行模型11可从投机操作路径中的继续取指状态(即,第二继续取指状态)切换为投机操作路径中的等待取指状态(下称第二等待取指状态)。如果第二分支指令是分支不发生(not-taken),执行模型11保留在该投机操作路径中的继续取指状态(即,第二继续取指状态)。关于第一投机操作中嵌套第二投机操作的具体实施方式,后面会详述。
在一实施例中,在处理器模型12通过第一投机开始消息要求执行模型11强制JIT仿真引擎13执行第一投机操作之后,处理器模型12可判断是否结束第一投机操作。举例而言,处理器模型12可判断所述第一分支指令是否已在处理器模型12上的模拟流水线121完成执行。若是,则处理器模型12可判定需结束所述第一投机操作,并刷新模拟流水线121,以消除第一分支指令对于处理器模型12的影响。再举例而言,处理器模型12在其模拟流水线121的译码阶段(stage)完成时就知道第一分支指令的投机是错误的(比如对于绝对跳转指令,根据其译码得到的分支目标地址即可得知其预测的跳转是否为投机),则处理器模型12在此时便可判定需结束所述第一投机操作。
在此情况下,响应于处理器模型12判定需结束第一投机操作,处理器模型12可发送第一投机结束消息至执行模型11,以控制执行模型11结束第一投机操作。相应地,执行模型11可根据第一投机结束消息而将物理机14恢复为第一处理器状态,并控制JIT仿真引擎13取得并执行接续于第一分支指令的指令。
在一实施例中,来自处理器模型12的第一投机结束消息可包括第一投机操作的第一开始投机时间、以及所述第一分支指令的第一分支指令地址。因此,在执行模型11收到第一投机结束消息之后,即可依据其中的第一开始投机时间及第一分支指令地址在投机堆栈111中找到对应于第一投机操作的第一投机单元(其记录有在第一投机操作开始前的物理机114的处理器的第一当下寄存器状态及第一内存快照)。
之后,执行模型11可依据所述第一当下寄存器状态恢复物理机14的处理器的寄存器状态。并且,执行模型11还可抛弃第一投机单元以及排序在第一投机单元之后的其他投机单元(若有的话),以消除第一投机操作对内存的影响。据此,执行模型11即可将物理机14的处理器恢复为执行第一投机操作之前的状态,并继续在正确的指令流上运行。
以下详述第一投机操作中嵌套第二投机操作的一实施方式:在第二继续取指状态下,执行模型11可利用JIT仿真引擎13控制物理机14取指并执行第二分支指令。在本实施例中,所述第二分支指令可以是在第一取指单元中的另一个分支指令,则本发明的模拟系统10可基于第二分支指令执行相似于图2步骤S240之后的操作,但可不限于此。第二分支指令也可以是在另一取指单元(例如第二取指单元)中的分支指令,则本发明的模拟系统10可基于第二分支指令执行相似于图2步骤S210之后的操作。
具体而言,如先前所提及的,处理器模型12可预先产生第一取指单元中属于分支指令的各指令的分支预测信息,如果第二分支指令与第一分支指令均属于第一取指单元,则这里的分支预测信息亦可包括第二分支指令的相关分支预测信息(下称第二分支预测信息)。相似于第一分支预测信息,关联于第二分支指令的第二分支预测信息亦可包括第二分支指令预测地址、第二分支预测方向及第二分支预测目标地址。
在一实施例中,执行模型11可从JIT仿真引擎13取得所述第二分支指令的多个第二分支指令信息,并将所述多个第二分支指令信息提供给所述处理器模型12。相似于关联于第一分支指令的第一分支指令信息,上述第二分支指令信息亦可包括静态指令信息及动态指令信息(例如操作数值等),其中静态指令信息可包括关联于第二分支指令的第二分支指令地址、第二分支方向及所述第二分支目标地址。
在一实施例中,上述第二分支指令地址、第二分支方向及所述第二分支目标地址可理解为在取指并执行第二分支指令时所取得的正确分支指令地址、分支方向及分支目标地址。相较之下,第二分支预测结果中的第二分支指令预测地址、第二分支预测方向及第二分支预测目标地址则可理解为由处理器模型12模拟目标处理器的分支预测器而得的预测结果。
在一实施例中,处理器模型12可判断前述第二分支预测信息是否完全匹配于前述第二分支指令信息。具体而言,处理器模型12可判断所述第二分支指令预测地址、所述第二分支预测方向及所述第二分支预测目标地址是否完全分别匹配于所述第二分支指令地址、所述第二分支方向及所述第二分支目标地址。简言之,处理器模型12可将自身对于第二分支指令的相关分支预测信息与JIT仿真引擎13所提供的第二指令的正确执行信息比对,并视比对的结果而决定是否强制JIT仿真引擎13在第一投机操作中执行另外的投机操作(例如先前提及的第二投机操作)。
在一实施例中,若所述第二分支指令预测地址、所述第二分支预测方向及所述第二分支预测目标地址分别完全匹配于所述第二分支指令地址、所述第二分支方向及所述第二分支目标地址,即代表处理器模型12的预测正确,故执行模型11可继续控制JIT仿真引擎13取指并执行接续于所述第二指令的指令。
另一方面,若所述第二分支指令预测地址、所述第二分支预测方向及所述第二分支预测目标地址未分别完全匹配于所述第二分支指令地址、所述第二分支方向及所述第二分支目标地址,即代表处理器模型12的预测错误。在此情况下,本发明可通过以下机制强制JIT仿真引擎13执行第二投机操作,以取得可用于对投机操作进行建模所需的信息。
具体而言,在判定所述多个第二分支预测信息未完全匹配于所述多个第二分支指令信息之后,处理器模型12可发送第二投机开始消息至执行模型11。接着,执行模型11可根据所述第二投机开始消息而记录物理机14的处理器的第二处理器状态,并强制JIT仿真引擎13依据所述多个第二分支预测信息执行第二投机操作。
在一实施例中,上述第二处理器状态可由JIT仿真引擎13提供,并可包括物理机14的处理器的第二当下寄存器状态及第二内存快照。在本实施例中,第二投机操作可理解为在第一投机操作的过程中另外发生的投机操作。在此情况下,投机堆栈111中应已记录有对应于第一投机操作的第一投机单元。因此,执行模型11可在投机堆栈111中新增关联于所述第二投机操作的第二投机单元,其中所述第二投机单元记录所述第二投机操作的第二开始投机时间、所述第二分支指令的第二分支指令地址、所述第二当下寄存器状态及所述第二内存快照。并且,在本实施例中,所述第二内存快照相较于所述第一内存快照还记录有自发生所述第一投机操作之后被修改的内存页。
在一实施例中,在第二投机操作的过程中,执行模型11可依情况而在投机操作中的继续取指状态(即,第二继续取指状态)及投机操作中的等待取指状态(即,第二等待取指状态)之间切换,但可不限于此。举例而言,在执行模型11处于第二继续取指状态的情况下,若所考虑的取指单元已结束,或是遇到分支发生的情形,则执行模型11可切换为第二等待取指状态。举另一例而言,在执行模型11处于第二等待取指状态的情况下,若执行模型11从处理器模型12收到取指开始消息,则执行模型11可切换为继续取指状态,但本发明可不限于此。
之后,响应于处理器模型12判定需结束所述第二投机操作(例如第二分支指令已在模拟流水线121上完成执行或者第二分支指令在模拟流水线121上完成了译码),处理器模型12可发送第二投机结束消息至执行模型11,以控制执行模型11控制JIT仿真引擎13结束所述第二投机操作。在本实施例中,此处操作可理解为从第二投机操作的路径返回至第一投机操作的路径,以继续执行第一投机操作。
相似于第一投机结束消息,所述第二投机结束消息可包括对应于第二投机操作的第二开始投机时间及第二指令地址,以供执行模型11在投机堆栈111中据此找出对应于第二投机操作的第二投机单元。
之后,执行模型11可根据所述第二投机结束消息而将物理机14恢复为所述第二处理器状态,并控制JIT仿真引擎13取得并执行接续于所述第二指令的指令。并且,由于仍处于第一投机操作的过程中,此时的执行模型11可理解为维持在投机操作路径中的继续取指状态(即,第二继续取指状态)。
在一实施例中,执行模型11可依据所述第二开始投机时间及所述第二分支指令地址从投机堆栈111找出对应于第二投机操作的第二投机单元,并依据第二投机单元记录的第二当下寄存器状态恢复物理机14的处理器的寄存器状态,并抛弃所述第二投机单元以及排序在所述第二投机单元之后的其他投机单元以消除第二投机操作对内存的影响。
请参照图3,其是依据本发明的一实施例图示的投机堆栈的示意图。在本实施例中,投机堆栈111例如可记录有投机单元310、320及330,其分别可对应于不同的投机操作。为便于理解,以下假设投机单元310、320即为先前实施例中提及的第一、第二投机单元。另外,投机单元330则可假设为对应于在第二投机操作进入投机操作路径执行第二投机指令流的过程中另外发生的投机操作(下称第三投机操作),但可不限于此。换言之,第一、第二及第三投机操作可理解为分别对应于图3所示的投机#1、投机#2及投机#3,但本发明可不限于此。
在上述假设下,可知投机单元310中的指令地址311、投机开始时间312、寄存器状态313及内存快照314可分别理解为第一投机操作的第一开始投机时间、第一分支指令的第一分支指令地址、第一当下寄存器状态及第一内存快照,但本发明可不限于此。基于此,本领域技术人员应可相应理解投机单元320、330中各元件的意义,在此不再赘述。
在本实施例中,在执行模型11强制JIT仿真引擎13执行第一投机操作之前,执行模型11可将第一投机操作的第一开始投机时间、第一分支指令的第一分支指令地址、第一当下寄存器状态及第一内存快照记录为投机单元310。
概略而言,当特定应用程序在正常指令流上运行时,投机堆栈111为空。在此情况下,对于物理机14的处理器内存的访存操作不需要重定向,而可以直接对其进行操作。然而,当JIT仿真引擎13被强制执行投机操作时,投机堆栈111的栈顶投机单元(例如投机单元330)中的寄存器状态保存的是发生这次投机(例如第三投机操作)时的寄存器状态,不能被修改。在投机操作中,对寄存器的访问仍然对物理寄存器进行。然而,对于物理机14的处理器内存的访问则需重定向到栈顶投机单元的内存快照中。简言之,投机单元中的内存快照可理解为当下的虚拟内存。
在此情况下,内存快照并不需要备份完整的物理内存,而是只需要备份自第一层投机以来被修改过的页。如果需要访问的页已经保存在内存快照中,则访存操作可直接对内存快照进行读写。另一方面,如果需要访问的页还不在内存快照中,首先在内存快照中添加这个页并将其从物理内存拷贝到内存快照,再由访存操作对内存快照进行读写。
在本发明的实施例中,当JIT仿真引擎13被强制执行第一投机操作时,执行模型11可在投机堆栈111的栈顶增加一个投机单元310。若在第一投机操作的过程中再次被强制执行第二投机操作时,执行模型11可再在投机堆栈111的栈顶增加另一个投机单元320。
在图3的情境中,由于第一投机操作可视为是第一层投机操作,故内存快照314可初始化为空。之后,假设在第一投机操作的过程中,指令访问了页1及页2,则执行模型11可在内存快照314中添加页1及页2,再对页1及页2进行读写。
在一实施例中,在JIT仿真引擎13被强制执行第二投机操作之前,执行模型11可依先前教示在投机堆栈111的栈顶新增投机单元320,其中执行模型11可将投机单元310的内存快照314复制至投机单元320的内存快照324中。假设在第二投机操作的过程中,指令访问了页3及页4,则执行模型11可在内存快照324中添加页3及页4,再对页3及页4进行读写。
相似地,在一实施例中,在JIT仿真引擎13被强制执行第三投机操作之前,执行模型11可依先前教示在投机堆栈111的栈顶新增投机单元330,其中执行模型11可将投机单元320的内存快照324复制至投机单元330的内存快照334中。假设在第三投机操作的过程中,指令访问了页1及页5,则执行模型11可在内存快照334中添加页5,再对页1及页5进行读写。
在一实施例中,当结束投机操作时,执行模型11可根据处理器模型12提供的结束投机消息检索到堆栈中的一个投机单元。具体而言,处理器模型12提供的结束投机消息包括引起投机的分支指令地址及开始投机时间,如果其与堆栈中某个投机单元记录的分支指令地址及开始投机时间匹配,则该投机单元为“结束投机的单元”。之后,执行模型11可将物理机14的处理器的寄存器状态恢复为结束投机的单元中保存的寄存器状态,从而撤回投机操作中所执行的指令对于寄存器的影响。并且,执行模型12可将结束投机的单元以及其上的所有投机单元都抛弃。在此情况下,栈顶的投机单元即改变为结束投机的单元的前一个投机单元。此外,由于投机操作中所执行的指令对于内存的影响都发生在内存快照上,所以抛弃投机单元就形同于抛弃投机操作中所执行的指令对内存的影响。
举例而言,假设被结束的投机操作为第二投机操作,则执行模型11可依据投机单元320恢复寄存器状态,并将投机单元320及其上的投机单元330抛弃,进而抛弃第二投机操作中所执行的指令对内存的影响。在此情况下,栈顶的投机单元即改变为投机单元310,但本发明可不限于此。
在一实施例中,若结束投机的单元是投机堆栈111中的第一个投机单元(例如投机单元310),则投机堆栈111可被清空。亦即,第一、第二、第三投机操作中所执行的指令对内存的影响将相应地被抛弃。
在一些实施例中,若处理器模型12预测了某条指令,但此条指令并不存在,则称这条预测的分支指令为假分支指令。在此情况下,处理器模型12可在第一取指单元中的最后一条指令上标记假分支,并发出投机开始消息。相应地,执行模型11可在所述第一分支预测目标地址等待下一个取指开始消息。此外,在执行模型11根据假分支指令而在投机堆栈11中新增的投机单元中,执行模型11可在此投机单元的指令地址中记录第一取指单元中最后一条指令的地址,但本发明可不限于此。
在一些实施例中,在第一投机操作的过程中,若执行模型11依先前教示的情况(例如第一分支预测方向为分支不发生)而判定继续取指(即,执行模型11维持/进入投机操作路径中的继续取指状态),则执行模型11可检查第一取指单元中各指令的指令信息是否皆已传递给处理器模型12。若是,即代表第一取指单元的各指令皆已被模拟过,且相关的指令信息已回传处理器模型12,故执行模型11可发送第一取指结束消息至处理器模型12,并从投机操作路径中的继续取指状态(即,第二继续取指状态)切换为投机操作路径中的等待取指状态(即,第二等待取指状态),以等待下一个取指开始消息。
在一些实施例中,在结束第一投机操作之后,若投机堆栈111为空,则执行模型11可从投机操作路径中的等待取指状态(即,第二等待取指状态)切换为正常操作路径中的等待取指状态(即,第一等待取指状态)。
大致上而言,本发明模拟系统10的操作可简示为图4内容。请参照图4,其是依据本发明的一实施例图示的模拟系统的交互示意图。如图4所示,处理器模型12可模拟目标处理器执行分支预测,以对一个取指单元中各分支指令进行分支预测并产生各自的分支预测信息,并接着模拟目标处理器的取指行为。此时,处理器模型12可发送取指开始消息410至执行模型11。之后,执行模型12可将各分支指令的指令信息420(例如,正确执行结果)回传至处理器模型12,以供处理器模型12判断是否要求执行模型11强制JIT仿真引擎13强制执行投机操作。在本实施例中,假设处理器模型12的预测错误,则处理器模型12可发送投机开始消息430至执行模型11。如前所述,在其它实施例中,也可以由执行模型11判断是否强制JIT仿真引擎13强制执行投机操作,在这种实施例中,投机开始消息430就不是必要的,而是处理器模型12将其预测所产生的分支预测信息随同取指开始消息410一起发送给执行模型11供其比较以判断是否执行投机操作。
之后,在执行模型11判定停止取指(该取指单元结束或遇到分支发生(taken)的情形)时,执行模型11可发送取指结束消息440至处理器模型12。之后,处理器模型12可依情况而在模拟流水线121的译码阶段或完成阶段判定需结束投机操作,并相应地发出投机结束消450及刷新模拟流水线121。相关细节可参照先前实施例中的说明,于此不再赘述。
请参照图5,其是依据本发明的一实施例图示的执行模型的状态切换示意图。在本实施例中,执行模型11的控制状态机可如图5所示的包括6个状态,其中状态A、状态B(即,第一等待取指状态)、状态C(即,第一继续取指状态)出现在正常操作路径上。另外,状态D(即,第二等待取指状态)、状态E(即,第二继续取指状态)、状态F(即,等待投机结束)出现于投机操作路径上。状态之间的转换可由执行模型11的控制程序实现。控制程序在每条指令执行之前进行。
首先,在一实施例中,在特定应用程序被启用时,执行模型11可默认处于状态A,以考虑特定应用程序的第一分支指令。在此情况下,执行模型11可向处理器模型12传递特定应用程序的起点,并接着切换为状态B。之后,执行模型11可视情况而在状态B至状态F之间切换。
由于执行模型11是代替处理器模型12的模拟流水线121中的取指及执行的工作,在一实施例中,执行模型11的上述控制程序可包含两个阶段(即,其代码分为2部分),分别可理解为完成上一条指令的取指,以及等待当前指令的取指。在一实施例中,在控制程序的第一个阶段中,执行模型11可从JIT仿真引擎13获得前一条指令执行的结果,并与保存在执行模型11中的前一条指令的静态信息一起作为指令信息(例如图4的指令信息420)传递给处理器模型12。在控制程序的第二个阶段中,执行模型11执行状态切换:如果前一条指令属于分支指令,那么执行模型11会在状态C等待处理器模型12告知是否进行投机以及是否在当前取指单元继续取指。
具体而言,处理器模型12会比较JIT仿真引擎13提供的分支方向和分支目标地址与处理器模型12预测的分支方向和分支目标地址是否一致。如果JIT仿真引擎13的结果与分支预测结果一致(即分支预测正确),则处理器模型12不启动投机。并且,如果分支方向为分支发生(taken),则停止取指(即,从状态C切换为状态B),反之若分支方向为分支不发生(not-taken),则继续取指(即,维持状态C)。
另一方面,如果JIT仿真引擎13的结果与分支预测结果不一致(即分支预测错误),则处理器模型12可启动投机。在此情况下,如果预测方向为分支发生(taken),则停止取指(即,从状态C切换为状态D),反之,若分支方向为分支不发生(not-taken),则继续取指(即,从状态C切换为状态E)。在本实施例中,如果执行模型11已经处于投机操作路径上,不论是否再次发生投机,执行模型11都会一直处于投机操作路径上,直至处理器模型12发送投机结束消息450。此外,如果在投机操作路径上再次遇到的分支(即前述第二分支指令)的方向为分支发生(taken),则执行模型11可停止取指(即,从状态E切换为状态D)。
在将前一条指令的指令消息传递给处理器模型12之后,执行模型11还会检查当前考虑的取指单元中的指令的相关指令消息是否已经都被传递给处理器模型12。如果取指单元已经传递完成,则执行模型11可进入第二等待取指状态(例如,从状态C切换为状态B,或从状态E切换为状态D)。概括而言,图4的取指结束消息440可能是执行模型11由状态C切换到状态B,或是由状态C切换到状态D,亦或是由状态E切换到状态D时发出,包括当前取指单元的取指结束,或者分支发生(taken)而停止取指这两种情形。
在控制程序的第二个阶段中,如果控制状态机进入等待取指的状态时(例如,状态B和D),程序会停留在第二个阶段等待来自处理器模型12的信息。如果处理器模型12传递取指开始消息,则重新进入继续取指状态(例如,从状态B切换为状态C,或从状态D切换为状态E)。
在一实施例中,如果处理器模型12传递投机结束消息450而且执行模型11已将投机堆栈111清空,则执行模型11可重新回到正常操作路径上的第一等待取指状态(即,从状态D切换为状态B)。如果处理器模型12传递投机结束消息450,但是执行模型11尚未将投机堆栈111清空(即,仍然有尚未结束执行的投机指令在模拟流水线121上),则执行模型11可停留在第二等待取指状态(即,状态D)。
此外,由于JIT仿真引擎13不能追踪系统调用等需要特权模式的子程序,所以系统调用对于系统的影响不能撤销。因此,如果在投机操作路径上遇到了系统调用,执行模型11应该阻塞指令执行,直到处理器模型12告知执行模型11投机结束(即,从状态E切换为状态F,再由状态F切换至状态B或状态D)。
此外,投机操作中的指令有可能超越可执行指令的范围。如果在可执行指令的范围之外强制执行,可能遇到错误的指令编码,使得JIT仿真引擎13崩溃。因此,如果在投机操作路径上遇到越出可执行指令范围的情况,执行模型11也要阻塞执行,直到处理器模型12告知执行模型11投机结束(即,从状态E切换为状态F,再由状态F切换至状态B或状态D)。
请参照图6,其是依据图5图示的执行模型的状态切换时序图。在本实施例中,执行模型11在执行该时序图时,对应地,处理器模型12正在模拟执行一个取指单元的“取指”,但本发明可不限于此。
由图6可看出,在时间点610考虑特定应用程序的第一条指令时,执行模型11可执行图5的状态切换的控制程序,由状态A切换至状态B。之后,执行模型11可再从状态B切换为状态C,以继续取指。接着,执行模型11可控制JIT仿真引擎13执行第一条指令(即,由JIT仿真引擎13控制物理机14执行第一条指令)。
在时间点620考虑特定应用程序的第二条指令时,执行模型11可执行控制程序:先在控制程序的第一个阶段中取得并传送第一条指令的指令信息420给处理器模型12;然后在控制程序的第二个阶段执行状态切换:举例而言,假设第一条指令为一个取指单元的最后一条指令或者第一条指令为分支发生(taken),则执行模型11在时间点620从状态C切换为状态B,之后假设收到下一个取指开始消息,则再从状态B切换为状态C。再举例而言,假设第一条指令并非一个取指单元的最后一条指令且分支不发生(not-taken),则继续停留在状态C。接着,执行模型11可控制JIT仿真引擎13执行第二条指令。
在时间点630考虑特定应用程序的第三条指令时,执行模型11可执行控制程序:先在控制程序的第一个阶段中取得并传送第二条指令的指令信息420给处理器模型12;然后在控制程序的第二个阶段执行状态切换:举例而言,假设第二条指令为分支指令,并且分支预测错误(即开始投机操作)且分支不发生(not-taken),则执行模型11在时间点630从状态C切换为状态E;之后,执行模型111维持状态E(或可理解为由状态E切换为同样的状态E)。接着,执行模型11可控制JIT仿真引擎13执行第三条指令。
综上所述,本发明提出了一种模拟方法及模拟系统,其可搭配基于JIT仿真引擎实现。本发明的模拟系统可分为基于JIT仿真引擎的执行模型和处理器模型两部分,其中执行模型可调用JIT仿真引擎执行指令,并且获得指令对处理器的架构态的影响。另外,处理器模型则可模拟目标处理器内部的运行过程,并且判断是否开始和结束投机。执行模型和处理器模型之间可通过特定的协议进行交互。在投机开始后,本发明的模拟方法能够保存投机开始时的应用程序运行现场,并将投机指令对于内存的影响重定向到内存快照上。在投机结束后,本发明的模拟方法还能够将应用程序运行现场恢复为投机开始前的状态,并且撤销投机指令对于内存的影响。通过本发明提出的方法,JIT仿真引擎也可以对投机执行进行准确建模和仿真。如此一来,相关的处理器硬件设计人员可基于投机执行的相关结果来优化处理器架构中投机出现的记录以及投机执行对处理器性能的影响。
此外,本发明提出的模拟方法及模拟系统亦有助于相关软件设计人员优化软件的效能。具体来说,假设有某处理器厂商向某个进行软件开发的客户贩售某处理器A,则此处理器厂商可将本发明的模拟系统(其包括执行模型及模拟处理器A行为的处理器模型)以例如软件开发工具包(SDK或其他类似形式)作为附属品一并提供给上述客户。由此,所述客户即可在以JIT仿真引擎运行所开发软件之后,基于处理器模型所提供的模拟投机结果进一步优化其所开发的软件。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。
Claims (30)
1.一种模拟方法,适于包括执行模型及处理器模型的模拟系统,其特征在于,包括:
由所述处理器模型模拟目标处理器产生关联于第一分支指令的多个第一分支预测信息;
由所述执行模型从所述处理器模型接收第一取指开始消息,其中所述第一取指开始消息包括第一取指地址;
由所述执行模型调用即时仿真引擎控制物理机依据所述第一取指地址取指并执行所述第一分支指令;
由所述执行模型从所述即时仿真引擎取得所述第一分支指令的多个第一分支指令信息,并将所述多个第一分支指令信息提供给所述处理器模型;以及
响应于判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,由所述执行模型记录所述物理机的第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息执行第一投机操作。
2.根据权利要求1所述的模拟方法,其特征在于,所述模拟方法还包括:
响应于所述处理器模型判定需结束所述第一投机操作,由所述处理器模型发送第一投机结束消息至所述执行模型,以控制所述执行模型结束所述第一投机操作;以及
由所述执行模型根据所述第一投机结束消息而将所述物理机恢复为所述第一处理器状态,并控制所述即时仿真引擎取得并执行接续于所述第一分支指令的指令。
3.根据权利要求2所述的模拟方法,其特征在于,所述模拟方法还包括:
由所述处理器模型判断所述第一分支指令是否已在所述处理器模型上的模拟流水线完成执行;以及
响应于判定所述第一分支指令已在所述处理器模型上的所述模拟流水线完成执行,所述处理器模型判定需结束所述第一投机操作,并刷新所述模拟流水线。
4.根据权利要求1所述的模拟方法,其特征在于,其中响应于判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,由所述执行模型记录所述物理机的所述第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息而执行所述第一投机操作的步骤包括:
当判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,由所述处理器模型发送第一投机开始消息至所述执行模型;以及
由所述执行模型根据所述第一投机开始消息而记录所述物理机的所述第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息执行所述第一投机操作。
5.根据权利要求1所述的模拟方法,其特征在于,所述模拟方法还包括:
由所述处理器模型依据所述第一取指地址取指第一取指单元,其中所述第一取指单元包括多个指令,其中所述第一分支指令属于所述多个指令之一;以及
由所述处理器模型模拟所述目标处理器而产生关联于所述多个指令各自的分支预测信息。
6.根据权利要求1所述的模拟方法,其特征在于,所述模拟方法还包括:
响应于判定所述多个第一分支预测信息完全匹配于所述多个第一分支指令信息,由所述执行模型控制所述即时仿真引擎取指并执行接续于所述第一分支指令的指令。
7.根据权利要求1所述的模拟方法,其特征在于,其中所述执行模型包括投机堆栈,所述第一处理器状态由所述即时仿真引擎提供,并包括所述物理机的处理器的第一当下寄存器状态及第一内存快照,且由所述执行模型记录所述物理机的所述第一处理器状态的步骤包括:
由所述执行模型在所述投机堆栈中新增关联于所述第一投机操作的第一投机单元,其中所述第一投机单元记录所述第一投机操作的第一开始投机时间、所述第一分支指令的第一分支指令地址、所述第一当下寄存器状态及所述第一内存快照。
8.根据权利要求7所述的模拟方法,其特征在于,所述模拟方法还包括:
由所述处理器模型发送第一投机结束消息至所述执行模型,以控制所述执行模型结束所述第一投机操作,其中所述第一投机结束消息包括所述第一开始投机时间及所述第一分支指令地址;
由所述执行模型依据所述第一开始投机时间及所述第一分支指令地址从所述投机堆栈找出对应于所述第一投机操作的所述第一投机单元;
由所述执行模型依据所述第一当下寄存器状态恢复所述处理器的寄存器状态;以及
由所述执行模型抛弃所述第一投机单元以及排序在所述第一投机单元之后的其他投机单元。
9.根据权利要求1所述的模拟方法,其特征在于,其中所述多个第一分支预测信息包括第一分支指令预测地址、第一分支预测方向及第一分支预测目标地址,且所述多个第一分支指令信息包括第一分支指令地址、第一分支方向及第一分支目标地址。
10.根据权利要求9所述的模拟方法,其特征在于,响应于判定所述第一分支指令预测地址、所述第一分支预测方向及所述第一分支预测目标地址未完全分别匹配于所述第一分支指令地址、所述第一分支方向及所述第一分支目标地址,由所述处理器模型判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息。
11.根据权利要求9所述的模拟方法,其特征在于,其中强制所述即时仿真引擎依据所述多个第一分支预测信息执行所述第一投机操作的步骤包括:
由所述执行模型强制所述即时仿真引擎依据所述第一分支指令预测地址跳转至所述第一分支预测目标地址;
响应于所述第一分支预测方向为分支发生,由所述执行模型判定停止取指,并发送第一取指结束消息至所述处理器模型;以及
响应于所述第一分支预测方向为分支不发生,由所述执行模型判定继续取指。
12.根据权利要求9所述的模拟方法,其特征在于,所述模拟方法还包括:
由所述执行模型还调用所述即时仿真引擎控制所述物理机依据第二取指地址取指并执行第二分支指令;
由所述执行模型从所述即时仿真引擎取得所述第二分支指令的多个第二分支指令信息,并将所述多个第二分支指令信息提供给所述处理器模型;
响应于判定多个第二分支预测信息未完全匹配于所述多个第二分支指令信息,由所述执行模型记录所述物理机的第二处理器状态,并强制所述即时仿真引擎依据所述多个第二分支预测信息而执行第二投机操作;
响应于所述处理器模型判定需结束所述第二投机操作,由所述处理器模型发送第二投机结束消息至所述执行模型,以控制所述执行模型结束所述第二投机操作;以及
由所述执行模型根据所述第二投机结束消息而将所述物理机恢复为所述第二处理器状态,并控制所述即时仿真引擎取得并执行接续于所述第二分支指令的指令。
13.根据权利要求12所述的模拟方法,其特征在于,其中所述执行模型包括投机堆栈,所述投机堆栈记录有关联于所述第一投机操作的第一投机单元,所述第一投机单元记录有所述第一投机操作的第一开始投机时间、所述第一分支指令的第一分支指令地址、第一当下寄存器状态及第一内存快照,所述第二处理器状态由所述即时仿真引擎提供,并包括所述物理机的处理器的第二当下寄存器状态及第二内存快照,且由所述执行模型记录所述物理机的所述第二处理器状态的步骤包括:
由所述执行模型在所述投机堆栈中新增关联于所述第二投机操作的第二投机单元,其中所述第二投机单元记录所述第二投机操作的第二开始投机时间、所述第二分支指令的第二分支指令地址、所述第二当下寄存器状态及所述第二内存快照,其中所述第二内存快照相较于所述第一内存快照还记录有自发生所述第一投机操作之后被修改的内存页。
14.根据权利要求13所述的模拟方法,其特征在于,其中所述第二投机结束消息包括所述第二开始投机时间及所述第二分支指令地址,且由所述执行模型根据所述第二投机结束消息而将所述物理机恢复为所述第二处理器状态的步骤包括:
由所述执行模型依据所述第二开始投机时间及所述第二分支指令地址从所述投机堆栈找出对应于所述第二投机操作的所述第二投机单元;以及
由所述执行模型依据所述第二当下寄存器状态恢复所述处理器的寄存器状态,并抛弃所述第二投机单元以及排序在所述第二投机单元之后的其他投机单元。
15.根据权利要求9所述的模拟方法,其特征在于,其中若所述第一分支指令为假分支指令,所述模拟方法还包括:
由所述执行模型将所述第一取指地址对应的第一取指单元中各指令的指令信息发送至所述处理器模型;
由所述处理器模型在所述第一取指单元中的最后一条指令上标记假分支,并发出投机开始消息;以及
由所述执行模型在所述第一分支预测目标地址等待下一个取指开始消息。
16.根据权利要求1所述的模拟方法,其特征在于,所述模拟方法还包括:
由所述执行模型检查所述第一取指地址对应的第一取指单元中各指令的指令信息是否皆已传递给所述处理器模型;以及
响应于判定所述第一取指单元中各所述指令的所述指令信息皆已传递给所述处理器模型,由所述执行模型发送第一取指结束消息至所述处理器模型,并等待下一个取指开始消息。
17.根据权利要求1所述的模拟方法,其特征在于,所述模拟方法还包括:
由所述处理器模型基于所述第一投机操作输出关联于所述目标处理器的模拟投机执行结果。
18.一种模拟系统,其特征在于,包括:
执行模型;以及
处理器模型,其中:
所述处理器模型模拟目标处理器产生关联于第一分支指令的多个第一分支预测信息;
所述执行模型从所述处理器模型接收第一取指开始消息,其中所述第一取指开始消息包括第一取指地址;
所述执行模型调用即时仿真引擎控制物理机依据所述第一取指地址取指并执行所述第一分支指令;
所述执行模型从所述即时仿真引擎取得所述第一分支指令的多个第一分支指令信息,并将所述多个第一分支指令信息提供给所述处理器模型;以及
响应于判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,所述执行模型记录所述物理机的第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息执行第一投机操作。
19.根据权利要求18所述的模拟系统,其特征在于,其中:
响应于所述处理器模型判定需结束所述第一投机操作,所述处理器模型发送第一投机结束消息至所述执行模型,以控制所述执行模型结束所述第一投机操作;以及
所述执行模型根据所述第一投机结束消息而将所述物理机恢复为所述第一处理器状态,并控制所述即时仿真引擎取得并执行接续于所述第一分支指令的指令。
20.根据权利要求19所述的模拟系统,其特征在于,其中:
所述处理器模型判断所述第一分支指令是否已在所述处理器模型上的模拟流水线完成执行;以及
响应于判定所述第一分支指令已在所述处理器模型上的所述模拟流水线完成执行,所述处理器模型判定需结束所述第一投机操作,并刷新所述模拟流水线。
21.根据权利要求18所述的模拟系统,其特征在于,其中:
当判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息,所述处理器模型发送第一投机开始消息至所述执行模型;以及
所述执行模型根据所述第一投机开始消息而记录所述物理机的所述第一处理器状态,并强制所述即时仿真引擎依据所述多个第一分支预测信息执行所述第一投机操作。
22.根据权利要求18所述的模拟系统,其特征在于,其中:
所述处理器模型依据所述第一取指地址取指第一取指单元,其中所述第一取指单元包括多个指令,其中所述第一分支指令属于所述多个指令之一;以及
所述处理器模型模拟所述目标处理器而产生关联于所述多个指令各自的分支预测结果。
23.根据权利要求18所述的模拟系统,其特征在于,其中:
响应于判定所述多个第一分支预测信息完全匹配于所述多个第一分支指令信息,所述执行模型控制所述即时仿真引擎取指并执行接续于所述第一分支指令的指令。
24.根据权利要求18所述的模拟系统,其特征在于,其中所述执行模型包括投机堆栈,所述第一处理器状态由所述即时仿真引擎提供,并包括所述物理机的处理器的第一当下寄存器状态及第一内存快照,其中:
所述执行模型在所述投机堆栈中新增关联于所述第一投机操作的第一投机单元,其中所述第一投机单元记录所述第一投机操作的第一开始投机时间、所述第一分支指令的第一分支指令地址、所述第一当下寄存器状态及所述第一内存快照。
25.根据权利要求24所述的模拟系统,其特征在于,其中所述处理器模型发送第一投机结束消息至所述执行模型,以控制所述执行模型结束所述第一投机操作,所述第一投机结束消息包括所述第一开始投机时间及所述第一分支指令地址,其中:
所述执行模型依据所述第一开始投机时间及所述第一分支指令地址从所述投机堆栈找出对应于所述第一投机操作的所述第一投机单元;
所述执行模型依据所述第一当下寄存器状态恢复所述处理器的寄存器状态;以及
所述执行模型抛弃所述第一投机单元以及排序在所述第一投机单元之后的其他投机单元。
26.根据权利要求18所述的模拟系统,其特征在于,其中所述多个第一分支预测信息包括第一分支指令预测地址、第一分支预测方向及第一分支预测目标地址,且所述多个第一分支指令信息包括第一分支指令地址、第一分支方向及第一分支目标地址。
27.根据权利要求26所述的模拟系统,其特征在于,响应于判定所述第一分支指令预测地址、所述第一分支预测方向及所述第一分支预测目标地址未完全分别匹配于所述第一分支指令地址、所述第一分支方向及所述第一分支目标地址,所述处理器模型判定所述多个第一分支预测信息未完全匹配于所述多个第一分支指令信息。
28.根据权利要求26所述的模拟系统,其特征在于,其中:
所述执行模型强制所述即时仿真引擎依据所述第一分支指令预测地址跳转至所述第一分支预测目标地址;
响应于所述第一分支预测方向为分支发生,所述执行模型判定停止取指,并发送第一取指结束消息至所述处理器模型;以及
响应于所述第一分支预测方向为分支不发生,所述执行模型判定继续取指。
29.根据权利要求18所述的模拟系统,其特征在于,其中:
所述执行模型检查所述第一取指地址对应的第一取指单元中各指令的指令信息是否皆已传递给所述处理器模型;以及
响应于判定所述第一取指单元中各所述指令的所述指令信息皆已传递给所述处理器模型,所述执行模型发送第一取指结束消息至所述处理器模型,并等待下一个取指开始消息。
30.根据权利要求18所述的模拟系统,其特征在于,所述处理器模型基于所述第一投机操作输出关联于所述目标处理器的模拟投机执行结果。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010084241.4A CN111324948B (zh) | 2020-02-10 | 2020-02-10 | 模拟方法及模拟系统 |
US17/079,530 US11442757B2 (en) | 2020-02-10 | 2020-10-26 | Simulation method and simulation system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010084241.4A CN111324948B (zh) | 2020-02-10 | 2020-02-10 | 模拟方法及模拟系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111324948A true CN111324948A (zh) | 2020-06-23 |
CN111324948B CN111324948B (zh) | 2023-04-25 |
Family
ID=71172668
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010084241.4A Active CN111324948B (zh) | 2020-02-10 | 2020-02-10 | 模拟方法及模拟系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11442757B2 (zh) |
CN (1) | CN111324948B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115421862B (zh) * | 2022-09-14 | 2023-09-26 | 北京计算机技术及应用研究所 | 一种51单片机处理器指令集虚拟化仿真方法 |
Citations (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5634103A (en) * | 1995-11-09 | 1997-05-27 | International Business Machines Corporation | Method and system for minimizing branch misprediction penalties within a processor |
JP2001142747A (ja) * | 1999-11-17 | 2001-05-25 | Nec Corp | プロセッサ性能データ収集装置及び該装置を利用した最適化方法 |
US20010051861A1 (en) * | 2000-06-09 | 2001-12-13 | Fujitsu Limited | Method and apparatus for simulation, and a computer product |
US20080177527A1 (en) * | 2007-01-17 | 2008-07-24 | Nec Electronics Corporation | Simulation system, simulation method and simulation program |
US20100057427A1 (en) * | 2008-09-04 | 2010-03-04 | Anthony Dean Walker | Simulated processor execution using branch override |
CN102360282A (zh) * | 2011-09-26 | 2012-02-22 | 杭州中天微系统有限公司 | 快速处置分支指令预测错误的流水线处理器装置 |
CN102841857A (zh) * | 2012-07-25 | 2012-12-26 | 龙芯中科技术有限公司 | 缓存预测执行的处理器与装置及方法 |
US8352229B1 (en) * | 2009-01-26 | 2013-01-08 | Xilinx, Inc. | Reloadable just-in-time compilation simulation engine for high level modeling systems |
CN103049307A (zh) * | 2011-10-12 | 2013-04-17 | 富士通株式会社 | 仿真设备和仿真方法 |
CN103154890A (zh) * | 2010-10-12 | 2013-06-12 | 富士通株式会社 | 模拟装置、方法以及程序 |
CN103699427A (zh) * | 2013-12-13 | 2014-04-02 | 华为技术有限公司 | 一种基于jit仿真器的中断检测方法及系统 |
CN105094949A (zh) * | 2015-08-06 | 2015-11-25 | 复旦大学 | 一种基于指令计算模型与反馈补偿的模拟方法与系统 |
US20170123797A1 (en) * | 2015-11-01 | 2017-05-04 | Centipede Semi Ltd. | Hardware-based run-time mitigation of conditional branches |
CN107688468A (zh) * | 2016-12-23 | 2018-02-13 | 北京国睿中数科技股份有限公司 | 推测执行处理器中分支指令与分支预测功能的验证方法 |
CN107783817A (zh) * | 2016-08-31 | 2018-03-09 | 杭州华为数字技术有限公司 | 处理器的模拟方法、功能模拟器、性能模拟器和模拟系统 |
CN108028733A (zh) * | 2015-09-23 | 2018-05-11 | 高通股份有限公司 | 用于点对点互连以增大测试覆盖的自错误注入技术 |
WO2018149495A1 (en) * | 2017-02-16 | 2018-08-23 | Huawei Technologies Co., Ltd. | A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model |
CN109032879A (zh) * | 2017-06-09 | 2018-12-18 | 展讯通信(上海)有限公司 | 多核处理器访存数据检测验证系统及方法 |
CN110069285A (zh) * | 2019-04-30 | 2019-07-30 | 海光信息技术有限公司 | 一种检测分支预测的方法及处理器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7065633B1 (en) * | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
-
2020
- 2020-02-10 CN CN202010084241.4A patent/CN111324948B/zh active Active
- 2020-10-26 US US17/079,530 patent/US11442757B2/en active Active
Patent Citations (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5634103A (en) * | 1995-11-09 | 1997-05-27 | International Business Machines Corporation | Method and system for minimizing branch misprediction penalties within a processor |
JP2001142747A (ja) * | 1999-11-17 | 2001-05-25 | Nec Corp | プロセッサ性能データ収集装置及び該装置を利用した最適化方法 |
US20010051861A1 (en) * | 2000-06-09 | 2001-12-13 | Fujitsu Limited | Method and apparatus for simulation, and a computer product |
US20080177527A1 (en) * | 2007-01-17 | 2008-07-24 | Nec Electronics Corporation | Simulation system, simulation method and simulation program |
US20100057427A1 (en) * | 2008-09-04 | 2010-03-04 | Anthony Dean Walker | Simulated processor execution using branch override |
CN102144232A (zh) * | 2008-09-04 | 2011-08-03 | 爱立信电话股份有限公司 | 使用分支取代的仿真处理器执行 |
US8352229B1 (en) * | 2009-01-26 | 2013-01-08 | Xilinx, Inc. | Reloadable just-in-time compilation simulation engine for high level modeling systems |
CN103154890A (zh) * | 2010-10-12 | 2013-06-12 | 富士通株式会社 | 模拟装置、方法以及程序 |
CN102360282A (zh) * | 2011-09-26 | 2012-02-22 | 杭州中天微系统有限公司 | 快速处置分支指令预测错误的流水线处理器装置 |
CN103049307A (zh) * | 2011-10-12 | 2013-04-17 | 富士通株式会社 | 仿真设备和仿真方法 |
CN102841857A (zh) * | 2012-07-25 | 2012-12-26 | 龙芯中科技术有限公司 | 缓存预测执行的处理器与装置及方法 |
CN103699427A (zh) * | 2013-12-13 | 2014-04-02 | 华为技术有限公司 | 一种基于jit仿真器的中断检测方法及系统 |
CN105094949A (zh) * | 2015-08-06 | 2015-11-25 | 复旦大学 | 一种基于指令计算模型与反馈补偿的模拟方法与系统 |
CN108028733A (zh) * | 2015-09-23 | 2018-05-11 | 高通股份有限公司 | 用于点对点互连以增大测试覆盖的自错误注入技术 |
US20170123797A1 (en) * | 2015-11-01 | 2017-05-04 | Centipede Semi Ltd. | Hardware-based run-time mitigation of conditional branches |
CN107783817A (zh) * | 2016-08-31 | 2018-03-09 | 杭州华为数字技术有限公司 | 处理器的模拟方法、功能模拟器、性能模拟器和模拟系统 |
CN107688468A (zh) * | 2016-12-23 | 2018-02-13 | 北京国睿中数科技股份有限公司 | 推测执行处理器中分支指令与分支预测功能的验证方法 |
WO2018149495A1 (en) * | 2017-02-16 | 2018-08-23 | Huawei Technologies Co., Ltd. | A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model |
CN109690536A (zh) * | 2017-02-16 | 2019-04-26 | 华为技术有限公司 | 将多核指令踪迹从虚拟平台仿真器取到性能模拟模型的方法和系统 |
CN109032879A (zh) * | 2017-06-09 | 2018-12-18 | 展讯通信(上海)有限公司 | 多核处理器访存数据检测验证系统及方法 |
CN110069285A (zh) * | 2019-04-30 | 2019-07-30 | 海光信息技术有限公司 | 一种检测分支预测的方法及处理器 |
Also Published As
Publication number | Publication date |
---|---|
US11442757B2 (en) | 2022-09-13 |
CN111324948B (zh) | 2023-04-25 |
US20210247991A1 (en) | 2021-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6164841A (en) | Method, apparatus, and product for dynamic software code translation system | |
US11604643B2 (en) | System for executing new instructions and method for executing new instructions | |
US8855994B2 (en) | Method to simulate a digital system | |
US11803387B2 (en) | System for executing new instructions and method for executing new instructions | |
US11803383B2 (en) | Method and system for executing new instructions | |
US11914997B2 (en) | Method and system for executing new instructions | |
US11669328B2 (en) | Method and system for converting instructions | |
US11625247B2 (en) | System for executing new instructions and method for executing new instructions | |
US20040221273A1 (en) | Method and apparatus for performing incremental validation of program code conversion | |
US20120089820A1 (en) | Hybrid mechanism for more efficient emulation and method therefor | |
US20070006158A1 (en) | Instruction execution device, debugging method, debugging device, and debugging program | |
GB2249414A (en) | Predicting the performance of a computer system | |
CN111324948B (zh) | 模拟方法及模拟系统 | |
CN114610388A (zh) | 一种指令跳转方法、处理器及电子设备 | |
US7882336B2 (en) | Employing a buffer to facilitate instruction execution | |
JPH1049373A (ja) | パイプライン・デジタル・プロセッサにおいて多重で高精度の事象を操作する方法と装置 | |
JP2010140233A (ja) | エミュレーションシステム及びエミュレーション方法 | |
US11789736B2 (en) | Method and system for executing new instructions | |
Wedig et al. | The reduction of branch instruction execution overhead using structured control flow | |
Davies et al. | Mable: A technique for efficient machine simulation | |
Swierzy et al. | TEEM: A CPU Emulator for Teaching Transient Execution Attacks | |
Dung et al. | Function-level profiling for embedded software with QEMU | |
JP2001222447A (ja) | 実動作環境下のデバッグ方法及びデバッグ対象装置 | |
Ouyang et al. | Checkercore: Enhancing an fpga soft core to capture worst-case execution times | |
US20150127318A1 (en) | Apparatus and method for simulating an operation of an out-of-order processor |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |