CN101238438B - 用以提高仿真器性能的虚拟代码的选择性预编译方法和系统 - Google Patents

用以提高仿真器性能的虚拟代码的选择性预编译方法和系统 Download PDF

Info

Publication number
CN101238438B
CN101238438B CN2006800246645A CN200680024664A CN101238438B CN 101238438 B CN101238438 B CN 101238438B CN 2006800246645 A CN2006800246645 A CN 2006800246645A CN 200680024664 A CN200680024664 A CN 200680024664A CN 101238438 B CN101238438 B CN 101238438B
Authority
CN
China
Prior art keywords
function
code
subroutine
complexity
virtual code
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
CN2006800246645A
Other languages
English (en)
Other versions
CN101238438A (zh
Inventor
V·谭
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.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of CN101238438A publication Critical patent/CN101238438A/zh
Application granted granted Critical
Publication of CN101238438B publication Critical patent/CN101238438B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Abstract

一种方法和计算机系统对仿真二进制码执行预引导扫描以检测高于预定复杂度阈值的函数。然后,可在启动过程期间预编译检测到的函数。预引导扫描还可检测低于第二预定复杂度阈值的函数。检测到的函数可被内联放置在代码主体中;然后,可在运行时执行及时翻译。

Description

用以提高仿真器性能的虚拟代码的选择性预编译方法和系统 
发明领域
本发明一般涉及软件仿真领域,尤其涉及虚拟代码的选择性预编译和内联。 
背景技术
当诸如视频游戏的软件应用程序被编译时,它通常被转换成虚拟代码,诸如提供对应用程序的描述以及该应用程序如何来运行的指令的中间仿真二进制码。软件仿真器在应用程序被执行之前的某个时刻对软件应用程序的中间二进制码执行二进制翻译。二进制翻译指将中间二进制码转换成专用于将执行该代码的处理器类型的机器可执行二进制码的过程。然后,可执行二进制码准备好由针对其已进行格式化的处理器来执行。 
一种这样的二进制翻译方法称为“及时(just-in-time)”(“JIT”)二进制翻译,由其名字所暗示,它是恰好在代码被执行之前进行的软件代码的二进制翻译。结果,可在各种处理器和计算平台上使用特定中间二进制码,因为成功运行代码所需进行的处理器专用改变不会发生直至恰好在执行之前。JIT翻译还提供了相对快速的加载和引导时间,因为在启动期间不进行二进制翻译。 
遗憾的是,在运行时,JIT翻译可对代码的执行产生不利影响。例如,针对代码内的大多数平均复杂的图形函数,典型的游戏系统可能在运行时执行JIT翻译而不对代码的执行产生不利影响(即,不影响图形渲染)。然而,如果遇到特别复杂的图形函数—诸如涉及大段人工智能(“AI”)的图形函数—则可能不存在足以可用于执行函数翻译和代码执行的处理器资源。因此,在回放期间,用户可能注意到代码执行中如明显的“闪烁”或“结巴(stutter)”的瞬间暂停。随着程序设计员坚持不懈地为图形逼真度而努力,这些延迟变得越来越令人不快。 
另一种翻译方法涉及软件预编译器的使用。预编译器对表示执行之前的软件应用程序代码的整个静态中间二进制码执行二进制翻译。通常在启动过程期间软件被加载时(在“加载时间”)进行翻译。虽然预编译器的使用提供了运行时较快速、无中断的执行,但是当预编译器执行二进制翻译时的初始加载时间被延长。因而, 用户可能体验过度长的系统引导时间,因此,通常不对较大的程序使用预编译器。 
在运行时存在与执行机器可执行二进制码中的相对较简单的函数相关的另一问题。例如,许多函数涉及从代码主体到子例程的调用。对子例程的调用以及从该子例程的返回(称为“上下文切换”)需要处理时间。对于大多数函数,上下文切换所需的处理时间与执行函数本身所需的处理时间相比可被忽略。然而,如果函数非常小,则上下文切换所需的处理时间可能在函数所需的总执行时间中占据相当大的百分比。结果,这种函数作为子例程的执行的效率比如果简单地在代码的主体内执行该函数要低。此低效率由于被上下文切换占据了过多的处理时间的,可对JIT翻译以及代码执行的性能产生不利影响。虽然执行这样的函数作为子例程可能是低效率的,但是这种函数通常充当软件开发者的便利手段。因而,简单地创建所有这些函数均位于其主体中的代码并非所期望的。 
因此,需要一种克服了上述缺点和缺陷的机制。本发明满足了这种需要。 
发明内容
鉴于上述缺点和缺陷,提供了一种方法和计算机可读介质,它们对仿真二进制码执行预引导扫描以检测高于预定复杂度阈值的函数。然后,在启动过程期间,预编译检测到的函数。预引导扫描还可检测低于第二预定复杂度阈值的函数。可将检测到的函数与代码主体内联放置。然后,可在运行时执行及时翻译,其中预编译函数可被直接执行而无需进一步翻译,并且可执行移入内联的任何函数而无需上下文切换。 
根据本发明的第一方面,提供了一种用以提高仿真器性能的虚拟代码的选择性预编译方法,包括:扫描具有至少一个函数的虚拟代码;在所述扫描之后判定所述至少一个函数是否具有超出第一预定阈值的复杂度;如果所述至少一个函数具有超出所述第一预定阈值的复杂度,则预编译所述函数;以及对所述虚拟代码执行及时翻译。 
根据本发明的第二方面,所述复杂度级别对应于代码行的预定数目。 
根据本发明的第三方面,所述预编译步骤延长虚拟代码启动周期一持续时间,并且其中所述第一预定阈值基于所述持续时间。 
根据本发明的第四方面,所述虚拟代码具有主体和至少一个子例程,并且还包括:如果所述至少一个函数不具有超出所述第一预定阈值的复杂度:判定所述至少一个子例程具有小于第二预定阈值的复杂度;以及将所述至少一个子例程放置在 所述虚拟代码的所述主体中。 
根据本发明的第五方面,所述至少一个子例程具有代码行,以及其中所述主体具有对应于所述子例程的函数调用,并且其中所述放置步骤包括从所述至少一个子例程拷贝所述代码行并使用所述代码行替代所述虚拟代码的所述主体中的所述函数调用。 
根据本发明的第六方面,所述虚拟代码还包括多个子例程,并且其中仅当所述子例程的数量小于第三预定阈值时,才执行所述放置步骤。 
根据本发明的第七方面,所述虚拟代码实现图形渲染软件。 
根据本发明的第八方面,一种用以提高仿真器性能的虚拟代码的选择性预编译方法,包括:对软件应用程序的仿真二进制码执行预引导扫描;对所述二进制码内具有超出第一预定阈值的的复杂度的第一函数进行标识;对所述二进制码内需要上下文切换来执行并具有小于第二预定阈值的复杂度的第二函数进行标识;预编译所述第一函数;将所述第二函数内联放置在所述仿真二进制码的主体中;以及对所述仿真二进制码执行及时翻译。 
根据本发明的第九方面,所述及时翻译生成适于由预定处理器执行的第二二进制码。 
根据本发明的第十方面,还包括执行所述经翻译的二进制码。 
根据本发明的第十一方面,所述及时翻译在所述软件应用程序的运行时执行。 
根据本发明的第十二方面,所述软件应用程序是游戏软件。 
根据本发明的第十三方面,所述第一和第二函数与图形渲染相关。 
根据本发明的第十四方面,一种用以提高仿真器性能的虚拟代码的选择性预编译系统,所述系统包括:用于扫描具有至少一个函数的虚拟代码的装置;用于在所述扫描之后判定所述至少一个函数是否具有超出第一预定阈值的复杂度的装置;用于如果所述至少一个函数具有超出所述第一预定阈值的复杂度,则预编译所述函数的装置;以及用于对所述虚拟代码执行及时翻译的装置。 
根据本发明的第十五方面,所述用于预编译的装置延长虚拟代码启动周期一持续时间,并且其中所述第一预定复杂度阈值基于所述持续时间。 
根据本发明的第十六方面,所述虚拟代码具有主体和至少一个子例程,并且还包括:用于如果所述至少一个函数不具有超出所述第一预定阈值的复杂度,则判定所述至少一个子例程具有小于第二预定复杂度阈值的复杂度的装置;以及将所述至少一个子例程放置在所述虚拟代码的所述主体中的装置。 
根据本发明的第十七方面,所述至少一个子例程具有代码行,以及其中所述主体具有对应于所述子例程的函数调用,并且其中所述用于放置的装置从所述至少一个子例程拷贝所述代码行并使用所述代码行替代所述虚拟代码的所述主体中的所述函数调用。 
附图说明
图1是其中可实现本发明的方面的示例计算环境; 
图2是示出了根据本发明的实施例的示例方法的流程图; 
图3是示出了根据本发明的实施例的示例代码流程的框图;以及 
图4A-B是示出了根据本发明的实施例的代码流程的示例更改的框图。 
具体实施方式
按照以满足法规要求的特征来描述本发明的主题。然而,描述本身并非旨在限制本专利的范围。相反,发明人构想所要求保护的主题还可以其它方式来体现,以包括连同其它现有或将来技术的不同步骤或类似于本文献中所述的要素。此外,尽管这里可使用术语“步骤”来意味着所用方法的不同方面,但是该术语不应当被解释为隐含本文所公开的各种步骤之中或之间的任何特定次序,除非或除明确描述了各个步骤的次序之外。 
示例计算环境 
图1示出了其中可实现本发明的合适计算系统环境100的一个示例。计算系统环境100仅作为合适的计算环境的一个示例,而非旨在对本发明的使用范围或功能提出任何限制。计算环境100也不应当被解释为对示例性操作环境100中所示组件的任一个或组合具有任何依赖或要求。 
本发明可与许多其它通用或专用计算系统环境或配置一起运行。可适合用于本发明的众所周知的计算系统、环境和/或配置的示例包括但不限于:个人计算机、服务器计算机、手持型或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费者电子产品、网络PC、小型机、大型计算机、包括上述系统或设备的任意种类的分布式计算环境等。 
可在由计算机执行的诸如程序模块的计算机可执行指令的通用环境中描述本发明。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、 对象、组件、数据结构等。也可在其中通过经由通信网络链接的远程处理设备执行任务的分布式计算环境中实践本发明。在分布式计算环境中,程序模块和其它数据可位于包括存储器存储设备的本地或远程计算机存储介质中。 
参看图1,用于实现本发明的示例性系统包括计算机110形式的通用计算设备。计算机110的组件可包括但不限于:处理单元120;系统存储器130;以及将包括系统存储器在内的各种系统元件耦合到处理单元120的系统总线121。系统总线121可以是若干类型总线结构中的任意一种,包括存储器总线或存储器控制器、外围总线以及使用各种总线体系结构中的任一种的局域总线。作为示例而非限制,这些架构包括工业标准结构(ISA)总线、微通道结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线、以及也称为附夹板(Mezzanine)总线的外设部件互连(PCI)总线。 
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110访问的任何可用介质,包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任意方法和技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于:RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储器或其它磁存储设备、或者可被用来存储所需信息并可由计算机110访问的任意其它介质。通信介质通常以诸如载波或其它传送机制的已调制数据信号的方式体现计算机可读指令、数据结构、程序模块或者其它数据,并且包括任意信息传输介质。术语“已调制数据信号”是指以在信号中编码信息的方式设置或改变其特性中的一个或多个的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接的有线介质、以及诸如声波、RF、红外线和其它无线介质的无线介质。以上任一种组合应当也可被包括在计算机可读介质的范围内。 
系统存储器130包括诸如只读存储器(ROM)131和随机存取存储器(RAM)132的易失性和/或非易失性存储器形式的计算机存储介质。包含有助于诸如在启动期间在计算机110内的元件之间传递信息的基本例程的基本输入/输出系统(BIOS)133通常被存储在ROM 131中。RAM 132通常包含可由处理单元120立即访问和/或当前正操作的数据和/或程序模块。作为示例而非限制,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。 
计算机110也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1示出了对不可移动的非易失性磁性介质读写的硬盘驱动器140、对可移动的非易失性磁盘152读写的磁盘驱动器151、以及对诸如CD ROM或其它光学介质的可移动的非易失性光盘156读写的光盘驱动器155。可被用在示例性操作环境中的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于:磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器141通常经由诸如接口140的不可移动存储器接口连接到系统总线121,而磁盘驱动器151和光盘驱动器155通常经由诸如接口150的可移动存储器接口连接到系统总线121。 
以上讨论并在图1中示出的驱动器以及与它们相关联的计算机存储介质为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146以及程序数据147。注意:这些组件可与操作系统134、应用程序135、其它程序模块136和程序数据137相同或不同。这里,操作系统144、应用程序145、其它程序模块146和程序数据147被赋予不同附图标记,以便说明至少它们是不同的副本。用户可通过诸如键盘162和通常指的是鼠标、跟踪球或触摸板的定点设备161向计算机20输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些和其它输入设备常常经由耦合于系统总线的用户输入接口160连接到处理单元120,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)的其它接口和总线结构连接。监视器191或其它类型的显示设备也经由诸如视频接口190的接口连接到系统总线121。除监视器之外,计算机还可包括诸如扬声器197和打印机196的其它外围输出设备,它们可经由输出外围接口190连接。 
计算机110可工作在使用到诸如远程计算机180的一个或多个远程计算机的逻辑连接的网络化环境中。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公共网络节点,并且通常包括以上就计算机110所描述的组件中的许多或所有组件,尽管图1仅示出了存储器存储设备181。图1中所示的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其它网络。这些网络环境在办公室、企业范围计算机网络、内联网和因特网中是普遍的。 
当用在LAN网络环境中时,计算机110经由网络接口或适配器170连接到LAN 171。当用在WAN网络环境中时,计算机110通常包括调制解调器172或在 诸如因特网的WAN 173上建立通信的其它装置。或为内置式或为外置式的调制解调器172可经由用户输入接口160或其它适当的机制连接到系统总线121。在网络化环境中,关于计算机110所述的程序模块或其一部分可被存储在远程存储器存储设备中。作为示例而非限制,图1将远程应用程序185示为驻留在存储器设备181上。应当理解,所示网络连接仅是示例性的,并且也可使用在计算机之间建立通信链接的其它装置。 
示例实施例 
在以下的讨论中,认为关于代码仿真和二进制翻译的细节对于本领域技术人员是公知的。因此,为了清晰和说明的目的,这里很大程度上略去了这些细节。另外,这里使用涉及游戏软件上下文中的图形渲染的示例实施例仅为了说明的目的,而非旨在将本发明限于任何这种实施例。 
本发明的实施例选择性地组合JIT翻译和预编译技术以在软件应用程序的代码执行期间避免暂停。可对这种代码的仿真二进制码执行预引导扫描,以检测该二进制码内的复杂函数。在软件的引导过程期间,实施例预编译检测到的复杂函数。在运行时,JIT翻译技术用于二进制码的其它部分,而可直接执行经预编译的函数而无需进一步的翻译。另外,在此预引导扫描期间,实施例可检测极简单函数,并选择性地将它们重新定位到代码的主体(在这里称为“内联”的过程)。在运行时,可避免将否则执行函数所必需的上下文切换。 
对实施例的预引导扫描可增加执行初始引导过程所需的时间量。然而,由于可选择性地实施预编译和内联操作,所以引导时间的增加可被控制成保持在可接受的限度内。因而,可改进代码执行以在不用过分延长应用的引导时间的情况下避免显著的暂停。 
现在参看图2,它示出了实施例的示例方法200。在步骤201,例如扫描诸如视频游戏的中间二进制码的仿真代码。可使用任何类型的扫描机制。例如,在2005年5月12日提交的、题为“Function-Level Just-in-Time Translation Engine withMultiple Pass Optimization(具有多遍优化的函数级及时时翻译引擎)的共同转让的美国申请No.11/128,699描述了这样一种扫描方法,该申请通过引用全部结合于此。扫描可涉及例如根据对于本领域技术人员而言应知的相对指令移置技术来在整个仿真代码流中移动指令指针等。当扫描在整个仿真代码中进行时,确定函数边界以确立仿真代码内的每个函数的复杂度。这里所用的术语“复杂度”指编译和/或执 行函数所需的处理时间或资源的任何量度。例如,可根据函数大小(例如,代码行的数量等)、处理难度等来测量复杂度。对涉及通过函数指针或绝对寻址的另一形式来引用的函数的实例,可使用对这些函数的二进制专用引用来使以下的步骤211的预编译能够进行。 
在完成步骤201的扫描之后,在步骤203,就是否检测到一个或多个复杂函数作出判定。如上所述,什么构成“复杂”函数可基于任何准则。另外,可选择预定阈值,从而仅超出该阈值的函数被判定为复杂。如上所述,预定阈值可按照代码行作出。因而,如果函数包含比阈值代码行数目多的代码行,则函数被判定为复杂。阈值可基于任何数量的因素来预先确定。例如,以下将讨论的步骤205的预编译可增加应用程序的总启动时间。开发员等可能希望将由于这些预编译而导致的启动时间的增加保持在某一限度内。因而,例如可选择阈值以便可在该时间限度内预编译尽可能多的被判定为复杂的函数。 
如果步骤203的判定结果为没有函数是复杂的,则方法200可前进到任选步骤207。如果步骤203的判定结果为一个或多个函数是复杂的,则在步骤205编译这些复杂函数——这在此处被称为“预编译”,因为此编译发生在执行代码之前(以及在任何JIT翻译之前)。根据实施例,一旦已根据步骤205对函数进行预编译,则它即准备好被执行而无需进一步进行处理。 
在任选步骤207,就是否检测到一个或多个“简单”函数作出判定。与复杂函数的情形一样,什么构成简单函数可基于任何准则。例如,简单函数可被定义为代码行数目比阈值数目小的子例程。例如,可基于与执行子例程所需的处理时间相比的上下文切换所需的处理时间来选择阈值。还可考虑附加的因素,包括专用程序应用因素。 
例如,特定的子例程的代码行数目可能小于阈值数目,但可能在整个应用程序代码中出现众多次。函数的内联可涉及本质上将该函数内的代码行拷贝到代码的主体来替代相应的函数调用。因而,在执行期间,函数代码可被内联编译或执行而无需与该代码所起源的子例程来回上下文切换。这样的拷贝由于所复制的数据而可增加应用程序的总大小。结果,在应用程序中出现众多次的子例程可需要进行如此多的复制,以致因内联函数所获得的处理好处可能由于增加的存储需求、内联大量函数所需的过多的处理时间等而抵销。结果,这些函数可能不被判定为简单,即使它们根据阈值是合格的。 
在任选步骤207,如果一个或多个函数被确定为简单,则在任选步骤209,函 数被与应用程序代码的主体内联放置。如上所述,内联放置代码可能需要从子例程等拷贝代码并使用该子例程代码来替代在主体中的相应的函数调用。图4A-B示出了将在以下讨论的内联放置函数的效果的图示。如果步骤207的判定是在任选步骤207没有函数被判定为简单,则方法200直接前进到步骤211。 
在步骤211,仿真代码的JIT翻译通过运行时引擎等连同代码的执行一起进行。如上所述,因为复杂函数已在步骤205被预编译,这些函数不需要在步骤211翻译,并且可被直接执行。另外,对在步骤209被内联放置的任何函数,无需执行上下文切换。 
如上所述,用于判定函数是复杂还是简单的(由此该函数分别应当被预编译还是内联放置)阈值和因素可基于各种因素,包括但不限于应用程序的所期望的引导时间。因而,应当理解,实施例允许开发员等来确定由此预编译和/或内联导致的运行时好处与引导时间的相应增加之间的可接受的折衷。 
图3表示根据实施例的示例代码流程。函数310a-d表示应用程序的虚拟代码的主体300内的函数。在运行时期间,函数310a使用JIT翻译进程320a来翻译。代码流程由从函数310a通向JIT翻译进程320a的箭头A来表示,接着,一旦JIT翻译进程320完成,箭头B指示随后执行函数310a。然后,仿真二进制码经由箭头C前进到函数310b。函数310b还按箭头A表示由进程320b进行JIT翻译,并且按箭头B表示来执行。然而,一旦二进制到达预编译函数310c,则无需JIT翻译,因为已根据例如图2的步骤205进行了翻译的预编译函数310c准备好被执行。这些对于预编译函数310d也是成立的。因而,可了解到图3提供了根据实施例可能发生的经更改的JIT翻译进程的图示。 
图4A-B根据如上结合以上连同图2的任选步骤209一起讨论的代码的内联的示例代码流程。参看图4A,函数410a-b位于应用程序的主体400内。如箭头A所示,从函数410a-b分别调用函数子例程420a-b,并且如箭头B所示,子例程420a-b的结果返回到函数410a-b。如可从图4A中了解到,子例程420b被指定为“简单”,这指示例如其代码行数目小于阈值数目,与以上结合图2的步骤207所述的一样。主体400内从函数410a到410b的代码流程由箭头C来表示。 
现在参看图4B,函数410a和子例程420a与以上结合图4A所讨论的一样。然而,可见,函数410b不包含对子例程420b的调用。相反,函数410b前进到已被放置在代码的主体400中的子例程420b。因而,为子例程420b避免了由箭头A和B指示的调用和返回。子例程420’表示由于其代码已被拷贝到代码的主体400 而未被使用的原始子例程420b所占据的存储器。 
虽然已结合各个附图的实施例描述了本发明,但是应当理解,可使用其它类似实施例,而且可对所述实施例作出更改和附加以执行本发明的相同功能而不与之背离。因此,本发明不应当限于任何单个实施例,而相反应当根据所附权利要求的广度和范围来解释。 

Claims (17)

1.一种用以提高仿真器性能的虚拟代码的选择性预编译方法,包括:
扫描具有至少一个函数的虚拟代码;
在所述扫描之后判定所述至少一个函数是否具有超出第一预定阈值的复杂度;
如果所述至少一个函数具有超出所述第一预定阈值的复杂度,则预编译所述函数;以及
对所述虚拟代码执行及时翻译。
2.如权利要求1所述的方法,其特征在于,所述复杂度级别对应于代码行的预定数目。
3.如权利要求1所述的方法,其特征在于,所述预编译步骤延长虚拟代码启动周期一持续时间,并且其中所述第一预定阈值基于所述持续时间。
4.如权利要求1所述的方法,其特征在于,所述虚拟代码具有主体和至少一个子例程,并且还包括:
如果所述至少一个函数不具有超出所述第一预定阈值的复杂度:
判定所述至少一个子例程具有小于第二预定阈值的复杂度;以及
将所述至少一个子例程放置在所述虚拟代码的所述主体中。
5.如权利要求4所述的方法,其特征在于,所述至少一个子例程具有代码行,以及其中所述主体具有对应于所述子例程的函数调用,并且其中所述放置步骤包括从所述至少一个子例程拷贝所述代码行并使用所述代码行替代所述虚拟代码的所述主体中的所述函数调用。
6.如权利要求5所述的方法,其特征在于,所述虚拟代码还包括多个子例程,并且其中仅当所述子例程的数量小于第三预定阈值时,才执行所述放置步骤。
7.如权利要求1所述的方法,其特征在于,所述虚拟代码实现图形渲染软件。
8.一种用以提高仿真器性能的虚拟代码的选择性预编译方法,包括:
对软件应用程序的仿真二进制码执行预引导扫描;
对所述二进制码内具有超出第一预定阈值的的复杂度的第一函数进行标识;
对所述二进制码内需要上下文切换来执行并具有小于第二预定阈值的复杂度的第二函数进行标识;
预编译所述第一函数;
将所述第二函数内联放置在所述仿真二进制码的主体中;以及
对所述仿真二进制码执行及时翻译。
9.如权利要求8所述的方法,其特征在于,所述及时翻译生成适于由预定处理器执行的第二二进制码。
10.如权利要求9所述的方法,其特征在于,还包括执行所述经翻译的二进制码。
11.如权利要求8所述的方法,其特征在于,所述及时翻译在所述软件应用程序的运行时执行。
12.如权利要求8所述的方法,其特征在于,所述软件应用程序是游戏软件。
13.如权利要求8所述的方法,其特征在于,所述第一和第二函数与图形渲染相关。
14.一种用以提高仿真器性能的虚拟代码的选择性预编译系统,所述系统包括:
用于扫描具有至少一个函数的虚拟代码的装置;
用于在所述扫描之后判定所述至少一个函数是否具有超出第一预定阈值的复杂度的装置;
用于如果所述至少一个函数具有超出所述第一预定阈值的复杂度,则预编译所述函数的装置;以及
用于对所述虚拟代码执行及时翻译的装置。
15.如权利要求14所述的系统,其特征在于,所述用于预编译的装置延长虚拟代码启动周期一持续时间,并且其中所述第一预定复杂度阈值基于所述持续时间。
16.如权利要求14所述的系统,其特征在于,所述虚拟代码具有主体和至少一个子例程,并且还包括:
用于如果所述至少一个函数不具有超出所述第一预定阈值的复杂度,则判定所述至少一个子例程具有小于第二预定复杂度阈值的复杂度的装置;以及
将所述至少一个子例程放置在所述虚拟代码的所述主体中的装置。
17.如权利要求16所述的系统,其特征在于,所述至少一个子例程具有代码行,以及其中所述主体具有对应于所述子例程的函数调用,并且其中所述用于放置的装置从所述至少一个子例程拷贝所述代码行并使用所述代码行替代所述虚拟代码的所述主体中的所述函数调用。
CN2006800246645A 2005-07-08 2006-06-30 用以提高仿真器性能的虚拟代码的选择性预编译方法和系统 Expired - Fee Related CN101238438B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/177,130 2005-07-08
US11/177,130 US7389500B2 (en) 2005-07-08 2005-07-08 Selective pre-compilation of virtual code to enhance boot time emulator performance
PCT/US2006/026081 WO2007008506A2 (en) 2005-07-08 2006-06-30 Selective pre-compilation of virtual code to enhance emulator performance

Publications (2)

Publication Number Publication Date
CN101238438A CN101238438A (zh) 2008-08-06
CN101238438B true CN101238438B (zh) 2010-12-08

Family

ID=37619700

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800246645A Expired - Fee Related CN101238438B (zh) 2005-07-08 2006-06-30 用以提高仿真器性能的虚拟代码的选择性预编译方法和系统

Country Status (6)

Country Link
US (1) US7389500B2 (zh)
EP (1) EP1902364A4 (zh)
JP (1) JP4294084B2 (zh)
KR (1) KR20080023728A (zh)
CN (1) CN101238438B (zh)
WO (1) WO2007008506A2 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8157654B2 (en) * 2000-11-28 2012-04-17 Nintendo Co., Ltd. Hand-held video game platform emulation
US7987457B2 (en) * 2007-06-25 2011-07-26 Microsoft Corporation Targeted patching for native generation images
US8875114B2 (en) * 2007-09-21 2014-10-28 International Business Machines Corporation Employing identifiers provided by an operating system of a processing environment to optimize the processing environment
KR100964581B1 (ko) * 2008-08-20 2010-06-21 주식회사 컴퍼니원헌드레드 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템
US9239732B2 (en) * 2011-02-16 2016-01-19 Microsoft Technology Licensing Llc Unrolling aggregation operations in asynchronous programming code having multiple levels in hierarchy
US9075913B2 (en) * 2012-02-27 2015-07-07 Qualcomm Incorporated Validation of applications for graphics processing unit
CN104205049B (zh) * 2012-03-22 2018-05-11 英特尔公司 混合模拟和内核函数处理系统和方法
US9378001B2 (en) 2014-05-02 2016-06-28 Microsoft Technology Licensing, Llc Matching program sections through feature extraction
JP2018028777A (ja) * 2016-08-17 2018-02-22 Necプラットフォームズ株式会社 エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム
CN109426503B (zh) * 2017-07-21 2022-05-31 华为技术有限公司 提供仿真激励的方法及装置
US10671758B2 (en) * 2017-08-30 2020-06-02 Micro Focus Llc Redacting core dumps by identifying modifiable parameters
US20190220294A1 (en) * 2018-01-17 2019-07-18 International Business Machines Corporation Using lightweight jit compilation for short-lived jvms on parallel distributing computing framework
US11720340B2 (en) * 2019-07-30 2023-08-08 Hewlett-Packard Development Company, L.P. Hash map of executable control blocks

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5097407A (en) * 1986-08-08 1992-03-17 Integrated Inference Machines Artificial intelligence processor
US6607445B1 (en) * 1998-04-27 2003-08-19 Sega Enterprises, Ltd. Game execution method and equipment using player data
US6637025B1 (en) * 1998-12-03 2003-10-21 International Business Machines Corporation Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file
US6338160B1 (en) * 1998-12-08 2002-01-08 Nazomi Communications, Inc. Constant pool reference resolution method
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US7225436B1 (en) * 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6774885B1 (en) * 1999-01-20 2004-08-10 Motek B.V. System for dynamic registration, evaluation, and correction of functional human behavior
US6842894B1 (en) * 1999-04-05 2005-01-11 Gateway, Inc. Dynamic Compiling
US6354940B1 (en) * 1999-04-30 2002-03-12 Square Co., Ltd. Game apparatus, game fight processing method, and computer readable storage medium storage program therefor
JP3191241B2 (ja) * 1999-07-14 2001-07-23 株式会社スクウェア コンピュータ読み取り可能な記録媒体、ゲーム制御方法およびゲーム装置
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US7225456B2 (en) * 2001-04-23 2007-05-29 Sony Corporation Gateway screen for interactive television
US6704926B1 (en) * 2000-09-28 2004-03-09 International Business Machines Corporation Bimodal Java just-in-time complier
JP2002169696A (ja) * 2000-12-04 2002-06-14 Mitsubishi Electric Corp データ処理装置
WO2003015034A1 (en) * 2001-08-10 2003-02-20 Stephen John Regelous A method of rendering an image and a method of animating a graphics character
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
GB0220282D0 (en) * 2002-08-31 2002-10-09 Ibm Improved just in time compilation of java software methods
US7090576B2 (en) * 2003-06-30 2006-08-15 Microsoft Corporation Personalized behavior of computer controlled avatars in a virtual reality environment

Also Published As

Publication number Publication date
WO2007008506A3 (en) 2007-08-23
JP4294084B2 (ja) 2009-07-08
WO2007008506A2 (en) 2007-01-18
US20070011666A1 (en) 2007-01-11
US7389500B2 (en) 2008-06-17
EP1902364A2 (en) 2008-03-26
KR20080023728A (ko) 2008-03-14
JP2009501368A (ja) 2009-01-15
CN101238438A (zh) 2008-08-06
EP1902364A4 (en) 2009-01-21

Similar Documents

Publication Publication Date Title
CN101238438B (zh) 用以提高仿真器性能的虚拟代码的选择性预编译方法和系统
US5715387A (en) Method and system for loading and confirming correct operation of an application program in a target system
CN102402462B (zh) 用于对启用gpu的虚拟机进行负载平衡的技术
CN100397337C (zh) 用集成硬件装置实现计算机间通信的系统和方法
US7721080B2 (en) Management of option ROM
US20030131148A1 (en) Cross-platform software development with a software development peripheral
US11914997B2 (en) Method and system for executing new instructions
US11803383B2 (en) Method and system for executing new instructions
CN106445630A (zh) Android模拟器及实现Android模拟器的方法
US20220206809A1 (en) Method and system for executing new instructions
CN102567047B (zh) 快速计算机启动
JP2010518471A (ja) 処理環境での命令実行の制御
CN102446111A (zh) 快速计算机启动
CN102736954B (zh) 通过禁用应用来解决系统退化
US20090193244A1 (en) Computer System and Legacy Boot Method for the Computer System
CN114721719A (zh) 一种在集群中容器化部署异构应用的方法和系统
CN110727473A (zh) 资源控制方法及装置、系统、存储介质和电子设备
US7114153B2 (en) Method and apparatus for continuation-passing in a virtual machine
CN111625290B (zh) 一种Android平台下布局文件预加载方法、装置及电子设备
US10620980B2 (en) Techniques for native runtime of hypertext markup language graphics content
JP5235900B2 (ja) 命令実行を容易にするためのバッファの使用
CN110465093B (zh) 一种基于Unity的包体冗余资源分析方法及其装置
JP4932904B2 (ja) インタープリトおよびトランスレートされたインストラクションの両方に関わるエミュレーションにおけるクロック管理の問題を解決するための方法と装置
CN109408193B (zh) 虚拟机实现方法、装置及计算机设备
US8856750B2 (en) Task-based evaluation of user interfaces

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20101208

Termination date: 20130630