当前位置: 首页 > 专利查询>微软公司专利>正文

异步运行时编译制造技术

技术编号:2822791 阅读:223 留言:0更新日期:2012-04-11 18:40
提供了异步运行时(JIT)编译技术。运行在第二处理器上的异步代码翻译线程可以由同步线程调用或者自调用以便在用户执行之前运行并且预翻译代码。存在具有竞争管理结构的已翻译代码高速缓存,其中同步和异步线程两者都存放了已翻译代码以便传送到代码执行线程。

【技术实现步骤摘要】
【国外来华专利技术】异步运行时编译版权告示和许可本专利文献的公开内容的一部分可能包含受版权保护的材料。版权所有者不 反对任何人对在(美国)专利商标局文件或记录中所出现的本专利文献或专利公开的复制,但无论如何都保留所有版权。以下告示应用于本文C叩yrightO)2005, Microsoft Corp。背景在典型的仿真器/运行时(just-in-time, JIT)编译器中,代码执行和同步代 码翻译线程一般位于同一个处理器或处理器核上。当用户导航该程序时,该代码 执行线程将试图在已翻译的代码高速缓存中找到所请求的功能。当这些功能存在 时,该线程将全速执行它们并且用户会感到极少或没有延迟。然而,如果这些功 能不存在,则代码执行线程将对同步代码翻译线程作出一阻塞请求并且等待直到 该线程报告该功能已经被翻译。这些情况下,在已发生来代表仿真/JIT编译的程 序执行中,用户会感到短暂的"抖动"。在用户需要平滑且逼真的操作以及诸如 计算机游戏玩家所期望的那些视觉效果的程序中,这是非常有问题的。基于这点考虑,需要一种提供程序模块的平滑且即时执行的仿真器/JIT编译器。概述提供本概述一般用简化的形式介绍以下将在详细描述中进一步描述的一些 概念。本概述并不旨在确定所要求保护的主题的关键特征或必要特征,也不旨在 用于帮助确定所要求保护的主题的范围。考虑到本领域中的上述不足,提供了异步JIT编译。对于几个实施例,该异 步JIT编译部分地通过检测计算机程序的将来执行可能所需的至少一个计算机程 序代码模块,并且随后对检测到的程序代码模块进行翻译以便执行,同时执行该计算机程序的至少一个其它先前已翻译的程序代码模块来实现。例如,这可以通 过由同步代码翻译线程调用异步代码翻译线程以便在计算机程序的用户执行之 前运行并且预翻译用于所述预翻译的检测到的程序代码来完成。异步线程可以自 由地继续翻译,然后在代码高速缓存内存储预期将来用户可能需要的已发现的第 二个功能。这种协作增加了用户请求的下一个功能已经被翻译的可能性。在理想 的环境中,这种方法允许整个程序在用户行使其更复杂的特征之前被良好地转 换,从而减少感知到的"抖动"并提高平均性能。 本专利技术其它的优点和特征将在以下描述。附图简述参考附图将进一步描述阻塞本地感测阻挡物,其中附图说明图1是示出根据使用一个处理器的同步运行时(JIT)编译的进程的示例性实 现的时间图2是示出根据使用两个处理器的异步运行时(JIT)编译的进程的示例性实 现的时间图3是示出根据异步运行时(JIT)编译的进程的示例性实现的流程图4示出了适用于实现图1到图3的运行时编译进程的示例性计算设备的框图5示出了其中可实现许多计算机化进程以执行图1到图3的运行时编译进 程的示例性联网计算环境;详细描述在以下的描述和附图中阐明了某些具体细节以便提供对本专利技术的各实施例 的全面理解。经常与计算和软件技术相关联的某些众所周知的细节未在以下公开 内容中阐明以免不必要地混淆本专利技术的各实施例。此外,相关领域的普通技术人 员会明白,没有以下所述的一个或多个细节也可以实施本专利技术的其它实施例。最 后,尽管参考以下公开内容中的步骤和序列来描述各方法,但是这样的描述用于 提供本专利技术实施例的清除实现,而不应该将各步骤和步骤序列认为是实施本专利技术 所必需的。参考图1和图2,所示的是示出根据使用一个处理器的同步运行时(JIT)编6译(图1)和使用两个处理器的异步运行时编译(图2)的进程的示例性实现。 如图所示,利用使用两个处理器的异步运行时编译的系统的组件的示例包括以 下1. 响应于用户输入并代表用户执行已翻译代码的代码执行线程101。2. 可由代码执行线程101在代码翻译线程101需要首次103翻译一功能 时调用的同步代码翻译线程102。在退化的情况下,代码执行线程101和同步线 程102运行于同一个处理器或处理器核104上。3. 可由同步线程102调用或者可自调用以便在用户执行之前运行并且预 翻译代码117的异步代码翻译线程105。4. 具有竞争管理结构的已翻译代码高速缓存(未示出),其中同步102 线程和异步105线程存放了已翻译代码以便传送到代码执行线程101,且引入了 运行于另一处理器或处理器核106上的第二、异步代码翻译线程105。接着另外参考图3,所示的是示出根据异步运行时(JIT)编译的进程的示例 性实现的流程图。当用户导航该程序时,判断用户动作是否需要还未准备好执行 (即,还未被翻译或编译)的功能107。如果用户动作需要己经准备好执行的功 能,则该功能正常执行108。如果用户动作需要还未准备好执行的功能,则代码 执行线程101将试图在已翻译代码高速缓存内找到所请求的功能。当那些功能存 在110时,线程将全速执行它们并且用户将感到极少或没有延迟。然而,如果那 些功能不存在,则代码执行线程对同步代码翻译线程102作出阻塞请求111,并 且等待直到线程报告该功能己经被翻译112。在这些情况下,在已发生来代表仿 真/JIT编译的程序执行中,用户会感到短暂的"抖动"。这一确定通过引入运行于另一个处理器或处理器核106上的第二、异步代码 翻译线程105来解决。当同步翻译线程102处理功能时,其检测113代码中对目 前还不是用户所需的其它功能的调用的存在。在标识到这一调用之后,同步翻译 线程102将该功能的入口点传递114给异步翻译线程105。为了解除代码执行线 程101的阻塞,同步线程102尽可能快地返回112,并且继续执行先前存储在代 码高速缓存内的已翻译功能。然而,异步线程105自由地继续翻译115,并且随 后在代码高速缓存116内存储预期用户将来可能需要所发现的第二个功能。这种 协作增加了用户所请求的下一个功能己经被翻译的可能性。在理想的环境中,这 种方法允许整个程序在用户行使其更复杂的特征之前就被良好地翻译,从而减少感知的"抖动"并提高平均性能。该进程通过运行于异步线程105上的、能主动地发现和处理程序二进制代码 中未翻译的代码的逻辑来进一步优化。在实践中,并非所有的功能都可通过以下分支树来发现;特别地,无法通过这种方式找到"虚拟"功能。例如, 一个实现 包括解析二进制代码本身并标识看来像是代码功能的文件分段的逻辑。当找到这 种分段时,它们立刻被放入异步翻译线程105的翻译队列中。作为该方法的能力 的真实世界演示,诸如Halo 2⑧等超过90%的复杂游戏可以在游戏开始的一分钟 内被定位和编译。接着参考图4,所示是表示适用于实现以上所述的进程的示例性计算设备的 框图。例如,执行用于异步JIT编译的进程和方法的计算机可执行指令可以驻留 在如图4所示的计算环境中和/或在其中执行。计算系统环境220只是合适的计算 环境的一个示例,且并不旨在对本专利技术的使用范围和功能提出任何限制。计算环 境220也不应该被解释为对示例性操作环境220内示出的任意一个组件或组件组 合具有任何依赖性或要求。例如,计算机游戏控制台也可以包括诸如以下所述用于实现以上所述的进程的那些项目。本专利技术的各方面可用众多其它通用或专用计算系统环境或配置来操作。适用 于本专利技术的众所周知的计算系统、环境和/或配置的示例包括,但不限于,个人计 算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于本文档来自技高网...

【技术保护点】
一种用于翻译计算机程序代码的方法,包括:    检测计算机程序的将来执行可能需要的至少一个计算机程序代码模块;以及    在翻译所检测到的程序代码模块以便执行的同时执行所述计算机程序的至少一个其它先前已翻译的程序代码模块。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:V谭
申请(专利权)人:微软公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1