用于动态语言中的内联高速缓存的硬件加速的制作方法

文档序号:11142215阅读:231来源:国知局
用于动态语言中的内联高速缓存的硬件加速的制造方法与工艺

本申请要求享有于2014年1月23日递交的、名称为“Hardware Acceleration For Inline Caches In Dynamic Languages”的美国临时申请No.61/930,808的优先权,在此以引用方式将该申请的全部内容并入本文。



背景技术:

动态编程语言(例如,JavaScript、Python和Ruby)通常用于在运行时执行共同行为,其中其它语言会在编译代码时执行共同行为。动态编程语言增加了软件程序的灵活性,经常由于额外的运行时编译而使执行变慢。内联高速缓存是频繁用于通过根据共同行为的共同模板生成“快速代码”来减小动态语言的代码执行开销的技术。然而,内联高速缓存通过存储额外的内联高速缓存的代码和常数值,增加了程序的存储器使用。特别是对于移动设备来说,存储器是受约束的资源。



技术实现要素:

各个方面集中于用于增加计算设备上的动态语言软件的处理速度的方法和装置。一个方面方法可以包括:由处理器初始化针对动态软件操作的第一实例的第一内联高速缓存;将所述第一内联高速缓存存储在被配置为提供用于存储和取回所述第一内联高速缓存的快速存取的存储器中;在协处理器中接收所述动态软件操作的第二实例;由所述协处理器确定所述动态软件操作的所述第一实例与所述动态软件操作的所述第二实例是否相同;响应于确定所述动态软件操作的所述第一实例与所述动态软件操作的所述第二实例相同,由所述协处理器使用来自所述存储器的所述第一内联高速缓存来执行所述动态软件操作的所述第二实例;以及由所述协处理器将执行所述动态软件操作的所述第二实例的结果返回给所述处理器。

在一个方面中,确定所述动态软件操作的所述第一实例与所述动态软 件操作的所述第二实例是否相同可以包括:将与所述动态软件操作的所述第一实例相关的第一对象实现和与所述动态软件操作的所述第二实例相关的第二对象实现进行比较;以及确定所述第一对象实现与所述第二对象实现是否相同。

一个方面方法还可以包括:响应于确定所述动态软件操作的所述第一实例与所述动态软件操作的所述第二实例不同,初始化针对所述动态软件操作的所述第二实例的、包括所述第一内联高速缓存的第二内联高速缓存,所述第二内联高速缓存被配置为替换所初始化的第一内联高速缓存;将所述第二内联高速缓存存储在被配置为提供用于存储和取回所述第二内联高速缓存的快速存取的所述存储器中;以及响应于确定所述动态软件操作的所述第一实例与所述动态软件操作的所述第二实例不同,由所述协处理器使用来自所述存储器的所述第二内联高速缓存来执行所述动态软件操作的所述第二实例。

一个方面方法还可以包括:确定针对所述动态软件操作的所述第一实例是否存在所述第一内联高速缓存,其中,由所述处理器初始化针对所述动态软件操作的所述第一实例的所述第一内联高速缓存可以包括:响应于确定不存在针对所述动态软件操作的所述第一实例的所述第一内联高速缓存,由所述处理器初始化针对所述动态软件操作的所述第一实例的所述第一内联高速缓存。

在一个方面中,由所述处理器初始化针对所述动态软件操作的所述第一实例的所述第一内联高速缓存可以包括:遍历针对所述动态软件操作的对象实现,直到识别与所述动态软件操作的所述第一实例相关的所述对象实现的数据为止;执行所述动态软件操作的所述第一实例的所述动态软件操作;以及返回所述动态软件操作的所述第一实例的结果。

在一个方面中,由所述协处理器将执行所述动态软件操作的所述第二实例的所述结果返回给所述处理器可以包括:将所述结果直接返回给所述处理器。

在一个方面方法中,由所述协处理器将执行所述动态软件操作的所述第二实例的所述结果返回可以包括:将所述结果通过所述处理器和所述协处理器可存取的数据高速缓存间接返回给所述处理器。

在一个方面中,将所述第一内联高速缓存存储在被配置为提供用于存储和取回所述第一内联高速缓存的快速存取的所述存储器中可以包括:在设置在连接到处理器管线的内联高速缓存管线上的所述存储器处从设置在所述处理器管线上的所述处理器接收所述第一内联高速缓存,在所述协处理器处接收所述动态软件操作的所述第二实例可以包括:在设置在连接到所述处理器管线的所述内联高速缓存管线上的所述协处理器处从设置在所述处理器管线上的所述处理器接收所述动态软件操作的所述第二实例,以及由所述协处理器将执行所述动态软件操作的所述第二实例的所述结果返回可以包括:将执行所述动态软件操作的所述第二实例的所述结果从设置在所述内联高速缓存管线上的所述协处理器发送给设置在连接到所述内联高速缓存管线的所述处理器管线上的所述处理器。

一个方面方法可以包括:由编译器生成针对所述协处理器的可执行操作;以及指示所述处理器以使得所述协处理器执行所生成的可执行操作以执行操作,所述操作可以包括:由处理器初始化针对所述动态软件操作的所述第一实例的所述第一内联高速缓存;将所述第一内联高速缓存存储在被配置为提供用于存储和取回所述第一内联高速缓存的快速存取的所述存储器中;在协处理器中接收所述动态软件操作的所述第二实例;确定所述动态软件操作的所述第一实例与所述动态软件操作的所述第二实例是否相同;响应于确定所述动态软件操作的所述第一实例与所述动态软件操作的所述第二实例相同,由所述协处理器使用来自所述存储器的所述第一内联高速缓存来执行所述动态软件操作的所述第二实例;以及由所述协处理器将执行所述动态软件操作的所述第二实例的所述结果返回。

一个方面包括一种计算设备,所述计算设备具有彼此通信地连接的处理器、存储器和协处理器,并且所述处理器和所述协处理器被配置有处理器可执行指令以执行上面所描述的方面方法中的一个或多个方面方法的操作。

一个方面包括一种其上存储有处理器可执行软件指令的非暂时性处理器可读介质,所述处理器可执行软件指令使得处理器和协处理器执行上面所描述的方面方法中的一个或多个方面方法的操作。

一个方面包括一种计算设备,所述计算设备具有用于执行上面所描述 的方面方法中的一个或多个方面方法的功能的单元。

附图说明

附图(其被并入本文并构成本说明书的一部分)示出了本发明的示例性方面,并且与上面给出的一般性描述以及下面给出的具体描述一起用于说明本发明的特征。

图1是示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备的组件框图,其中该计算设备具有附接到处理器管线的内联高速缓存硬件加速器和内联高速缓存存储器。

图2是示出了根据另一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备的组件框图,其中该计算设备具有附接到处理器管线的内联高速缓存硬件加速器和内联高速缓存存储器。

图3是示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备的组件框图,其中该计算设备具有附接到处理器管线的协处理器和内联高速缓存存储器。

图4是示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备的组件框图,其中该计算设备具有附接到处理器管线的协处理器和内联高速缓存存储器。

图5是示出了根据另一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备的组件框图,其中该计算设备具有附接到处理器管线的功能单元和内联高速缓存存储器。

图6是示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备的组件框图,其中该计算设备具有附接到处理器管线的内联高速缓存存储器。

图7是示出了用于使用动态语言中的内联高速缓存的硬件加速来利用内联高速缓存代码和常数初始化的方面方法的过程流程图。

图8是示出了用于由处理器使用针对动态语言中的内联高速缓存的内联高速缓存代码和常数的方面方法的过程流程图。

图9是示出了用于由功能单元使用针对动态语言中的内联高速缓存的内联高速缓存代码和常数的方面方法的过程流程图。

图10是示出了适合于与各个方面一起使用的示例性移动计算设备的组件框图。

图11是示出了适合于与各个方面一起使用的示例性计算设备的组件框图。

图12是示出了适合于与各个方面一起使用的示例性服务器设备的组件框图。

具体实施方式

将参考附图来详细描述各个方面。只要有可能,贯穿附图将使用相同的附图标记来指代相同或相似的部件。对特定例子和实现方式的引用是出于说明的目的,并非旨在限制本发明或权利要求书的范围。

本文中使用词语“示例性”表示“用作例子、实例或说明”。本文中描述为“示例性”的任何实现方式不一定解释为比其它实现方式优选或有利。

术语“计算设备”在本文中可互换使用,以指代以下各项中的任何一个或全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理(PDA)、膝上型计算机、平板计算机、平板手机、智能本、超极本、掌上计算机、无线电子邮件接收机、多媒体互联网使能蜂窝电话、无线游戏控制器、台式计算机、服务器、以及包括存储器和可编程处理器的类似的个人或商用电子设备。

术语“片上系统”(SoC)和“集成电路”(IC)在本文中可互换使用,以指代一组互连的电子电路,通常(但不唯一地)包括一个或多个硬件内核、存储器单元和通信接口。硬件内核可以包括各种不同类型的处理器,例如通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU)、加速处理单元(APU)、辅助处理器、单核处理器以及多核处理器。硬件内核还可以包含其它硬件和硬件组合,例如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、其它可编程逻辑器件、分立门控逻辑器件、晶体管逻辑器件、性能监控硬件、看门狗(watchdog)硬件以及时间基准。集成电路可以被配置为使得集成电路的组件驻留在单片半导体材料(例如,硅)上。这种配置还可以被称为IC组件在单芯片上。

内联高速缓存是用于加速对诸如JavaScript、PHP、Python和Ruby之 类的语言的动态编译的技术。编译器(例如,静态编译器、运行时编译器或者动态编译器)可以识别呈现共同行为的字节码模式,并且可以使用代码模板来生成可执行代码。所生成的代码可以利用一些对象信息来参数化并存储在内联高速缓存中。编译器可以设置保护以检查对象是否与所生成的代码匹配,从内联高速缓存中取回代码并调用代码。内联高速缓存代码可以缓解对重复生成相同序列的需求。

然而,内联高速缓存带来了一组不同的性能问题。在常规的计算设备(或计算系统)中,内联高速缓存项目仍然由处理器执行并存储在存储器中。此外,当相同的内联高速缓存项目在使用恰当的参数时可以提供正确的结果时,共同任务中的许多共同任务会针对各个对象生成内联高速缓存项目。因此,内联高速缓存技术会使处理器、存储器和/或管线杂乱并用尽计算和功率资源。

各个方面包括用于增加计算设备上的动态语言软件的处理速度的方法、设备和非暂时性处理器可读存储介质。用于动态语言中的内联高速缓存的硬件加速可以使用专用资源来管理用于共同任务的内联高速缓存项目,并且解除计算设备的常规组件(例如,应用处理器、管线和存储器)的负担。具体而言,内联高速缓存硬件加速器可以包括至少某种专用存储器和某种专用处理。专用存储器可以实现为单独的存储器、实现为数据高速缓存的一部分、或者实现为系统存储器的一部分。专用处理可以实现为对现有处理器执行管线的扩展、实现为处理器功能单元、实现为通过现有协处理器接口与内核处理器进行通信的协处理器、或者实现为通过专有接口与处理器进行通信的单独单元。用于动态语言中的内联高速缓存的硬件加速可以与共同的内联高速缓存一起实现,使得某些任务专用于硬件加速,而其它任务(可能不那么共同的任务)可以继续由计算设备的常规组件来管理。

用于动态语言中的内联高速缓存的硬件加速的组件可以是单独的但连接到计算设备的常规组件。例如,计算设备可以包含用于在各个其它组件(例如,处理器和数据高速缓存)之间发送信号的处理器管线。用于动态语言中的内联高速缓存的硬件加速的组件可以通过内联高速缓存管线彼此连接并连接到处理器管线,其中内联高速缓存管线可以允许用于动态语言 中的内联高速缓存的硬件加速的组件彼此发送信号并向计算设备的常规组件发送信号。这种布置可以允许用于动态语言中的内联高速缓存的硬件加速在不阻碍常规组件的操作的情况下进行操作,直到与常规组件的通信是必需的为止。用于动态语言中的内联高速缓存的硬件加速的组件可以经由所连接的管线来直接地与常规组件中的某些常规组件进行通信,或者通过其它常规组件来间接地与常规组件中的某些常规组件进行通信。

图1示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备,其中该计算设备具有附接到处理器管线的内联高速缓存硬件加速器和内联高速缓存存储器。计算设备可以包括处理器10,寄存器或存储器12(例如,累加器,或者用于存储堆栈或寄存器堆),数据高速缓存14,内联高速缓存硬件加速器16,内联高速缓存存储器18,处理器管线20a、20b、20c,以及内联高速缓存管线22a、22b。处理器10可以是如上面所描述的各种不同类型的处理器中的一个或多个处理器。处理器10可以被配置为执行来自软件程序的经编译的和/或经解释的可执行操作。在一个方面中,软件程序可以以动态编程语言编写,并且可执行操作可以在运行时编译或解释。处理器10还可以被配置为执行指令集以管理计算设备的其它组件并与这些组件交互,以便执行动态编程语言软件程序的部分。

存储器12可以被配置为存储计算设备的各种状态的状态值。存储在存储器12中的状态值可由处理器10存取以用于读和写操作。数据高速缓存14可以被配置为存储与由处理器10执行的可执行操作相关的数据。存储在数据高速缓存14中的数据可以输入到处理器10以执行可执行操作,或者由于所执行的操作而由处理器10输出并存储用于稍后使用或用于由计算设备的其它组件存取。处理器10、存储器12和数据高速缓存14可以通过处理器管线20a、20b、20c彼此连接。处理器管线20a、20b、20c可以被配置为:在连接到管线的组件之间发送表示可执行操作、计算设备状态、以及软件程序数据的信号。

内联高速缓存硬件加速器16可以被配置为增加处理来自动态编程语言软件程序的可执行操作(或者“动态软件操作”)的速度。下面进一步详细讨论对内联高速缓存硬件加速器16的配置。内联高速缓存存储器18可以被配置为提供用于存储和取回数据的快速存取,并且可以被配置为至少初 始地存储与由处理器10执行的动态软件操作的实例相关联的常数值。常数值可以与用于执行动态软件操作的对象的特定实例相关联,使得常数值可以被重新调用,以用于将来执行动态软件操作的对象的相同实例。在一个方面中,动态软件操作可以包括一个操作或一组操作,并且因此对单个操作或多个操作的引用并非旨在围绕可执行操作的数量来限制权利要求的范围,除非权利要求中明确地记载。

内联高速缓存存储器18可以专用于该特定目的,并且因此可以是相对小并快速的存储器,这是因为存储常数可能不需要许多空间,并且提供对内联高速缓存存储器18的快速存取以用于读和写操作可以有助于增加动态软件操作的处理速度。对内联高速缓存存储器18的存取可以受限于内联高速缓存硬件加速器16。在一个方面中,内联高速缓存存储器18可以被包括为内联高速缓存硬件加速器16的一部分。内联高速缓存管线22a、22b可以将内联高速缓存硬件加速器16和内联高速缓存存储器18连接到处理器10、存储器12和数据高速缓存14。内联高速缓存管线22a、22b可以直接连接到计算设备的其它组件,或者可以连接到处理器管线20a、20b、20c。内联高速缓存管线22a、22b可以被配置为发送表示以下各项的信号:用于执行动态软件操作的数据、计算设备状态和/或从执行动态软件得到的数据(包括存储在内联高速缓存存储器18上的常数值)。

图2示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备,其中该计算设备具有附接到处理器管线的内联高速缓存硬件加速器和内联高速缓存存储器。与图1中所示出的计算设备类似,该计算设备可以包括处理器10,寄存器或存储器12,数据高速缓存14,内联高速缓存硬件加速器16,内联高速缓存存储器18,处理器管线20a、20b、20c,以及内联高速缓存管线22a、22b。在一个方面中,内联高速缓存存储器18可以与内联高速缓存硬件加速器16分离。在各个方面中,内联高速缓存存储器18可以是独立的存储器、集成到高速缓存层级中的存储器、或者计算设备的系统存储器的一部分。计算设备还可以包括内联高速缓存管线22c,其被进一步配置为连接内联高速缓存硬件加速器16和内联高速缓存存储器18。内联高速缓存存储器18可由内联高速缓存硬件加速器16存取,并且可由其它组件(例如,处理器10)通过内联高速缓存硬件加速器16存取。

图3示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备,其中该计算设备具有附接到处理器管线的协处理器和内联高速缓存存储器。与图1中所示出的计算设备类似,该计算设备可以包括处理器10,寄存器或存储器12,数据高速缓存14,内联高速缓存存储器18,处理器管线20a、20b、20c,以及内联高速缓存管线22a、22b。在一个方面中,内联高速缓存硬件加速器可以是被配置为执行动态软件操作的协处理器30。类似于处理器10,协处理器30可以是如上面所描述的各种不同类型的处理器中的一个或多个处理器。在一个方面中,协处理器30可以是被编程为执行一个或多个动态软件操作的可编程逻辑器件。在一个方面中,可编程协处理器30可以被重新编程为执行不同的动态软件操作。在另一个方面中,计算设备可以包括多个协处理器30,其中每个协处理器被配置为执行特定的动态软件操作。动态软件操作可以是常规的可执行操作,并且基于计算设备的常规动态软件操作,可以提供一个或多个协处理器30以包括在计算设备中。在一个方面中,内联高速缓存存储器18可以被包括为协处理器30的一部分和/或专用于协处理器30。在另一个方面中,内联高速缓存存储器18可以是跨越多个协处理器30共享的一个或多个内联高速缓存存储器18。在一个方面中,协处理器30可以实现为处理器管线20a、20b、20c的功能扩展,并且被配置有指令以对内联高速缓存存储器18进行初始化、执行存储在内联高速缓存存储器18中的代码、以及针对存在用于动态软件操作的第一实例的代码来查询内联高速缓存存储器18。在一个方面中,协处理器30可以实现为使用标准协处理器接口与处理器10进行通信的独立单元。这种通信可以包括:传输初始值,发起计算,以及传输输出值。在另一个方面中,协处理器30可以实现为使用增强的接口与处理器10进行通信的独立单元,从而允许处理器10向协处理器30提供更多的信息(例如,对象映射)。

如下面进一步详细描述的,处理器10可以将与动态软件操作的实例相关的数据传递给协处理器30。协处理器30可以确定是否存在与动态软件操作的实例相关的任何内联高速缓存数据。当协处理器30确定动态软件操作的实例还未初始化(即,动态软件操作是“未初始化的”)或者该实例是动态软件操作的第一实例时,协处理器30可以向处理器10发送信号,指示 协处理器30不能够对动态软件操作的实例进行处理。协处理器30可以通过将存储在内联高速缓存存储器18中的数据与从处理器10接收到的数据进行比较,来确定动态软件操作的实例是未初始化的。当内联高速缓存存储器18中不存在针对动态软件操作的实例的数据时,协处理器30可以确定该实例是未初始化的。处理器10可以对动态软件操作的实例进行初始化,并将实例的结果作为常数值存储到内联高速缓存存储器18。

当内联高速缓存存储器18中存在针对动态软件操作的实例的数据时,协处理器30可以确定实例是初始化的。协处理器30然后可以确定存储在内联高速缓存存储器18中的针对动态软件操作的实例的数据是否是针对该实例的正确数据。协处理器30可以通过将存储在内联高速缓存存储器18中的数据与从处理器10接收到的数据进行比较,来确定所存储的数据不是针对动态软件操作的实例的正确数据。当所存储的针对动态软件操作的实例的数据与处理器10所提供的数据不匹配时,协处理器30可以确定所存储的针对动态软件操作的数据不是正确的数据,并且因此可以向处理器10发送信号,指示协处理器30不能够对动态软件操作的实例进行处理。处理器10然后可以对动态软件操作的该实例进行初始化,并将该实例的结果作为另一个常数值存储到内联高速缓存存储器18。

由于针对动态软件操作的对象实现(例如,对象映射)的变化,所存储的针对动态软件操作的实例的数据可能与从处理器10接收到的数据不匹配。这种变化可以将对象的实例与不同的值相关联,从而引起针对对象的实例或动态软件操作的实例的函数的不同结果。类似于上面的未初始化的实例,动态软件操作的实例可能由于这种变化而未初始化。

当内联高速缓存存储器18中存在针对动态软件操作的实例的数据并且该数据是正确的数据时,协处理器30可以将针对动态软件操作的实例的常数值返回给处理器10。在一个方面中,上面对动态软件操作的实例的初始化可以包括:处理器10照常运行动态软件操作的实例以实现其结果。一些动态软件操作是共同的,并且动态软件操作的不同实例被重复地调用。在许多情况下,动态软件操作的相同实例被重复地调用。协处理器30可以被配置为:通过向动态软件操作的初始化的实例提供预定的或预先计算的结果(其存储在专用于存储结果的存储器(即,内联高速缓存存储器18)中), 来增加动态软件操作的速度。

图4示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备,其中该计算设备具有附接到处理器管线的协处理器和内联高速缓存存储器。与图3中所示出的计算设备类似,该计算设备可以包括处理器10,寄存器或存储器12,数据高速缓存14,内联高速缓存存储器18,处理器管线20a、20b、20c,内联高速缓存管线22a、22b,以及协处理器30。在一个方面中,内联高速缓存存储器18可以与协处理器30分离。计算设备还可以包括内联高速缓存管线22c,其被进一步配置为连接协处理器30和内联高速缓存存储器18,类似于图2中。内联高速缓存存储器18可以由协处理器30存取,并且可由其它组件(例如,处理器10)通过协处理器30存取。在一个方面中,内联高速缓存存储器18可以专用于协处理器30。在另一个方面中,内联高速缓存存储器18可以是跨越多个协处理器30共享的一个或多个内联高速缓存存储器18。不管图4中所示出的计算设备与图3中所示出的计算设备的结构上的不同,这些计算设备的操作和它们的组件基本上类似。

在包括协处理器30的方面中,处理器10可以被配置为与协处理器30进行通信,并且可能不需要对处理器的指令集架构的更改。在一个方面中,与动态软件操作的实例相关联的数据可以从处理器10明确地传递给协处理器30。在另一个方面中,协处理器30可以能够与存储器12和数据高速缓存14进行直接通信。这种直接通信可以允许协处理器30通过存储器12和数据高速缓存14的方式从处理器10隐含地接收与动态软件操作的实例相关联的该数据。处理器10对协处理器30的函数调用可以包括阻塞(blocking)类型的调用,其中一次仅可以处理一个调用。处理器10对协处理器30的函数调用可以包括非阻塞(non-blocking)或异步类型的调用,这可以允许内联高速缓存管线22a、22b、22c中并发进行多个调用。类似地,处理器10对协处理器30的函数调用可以是并行类型的调用,这可以允许内联高速缓存管线22a、22b、22c中同时进行多个调用。

图5示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备,其中该计算设备具有附接到处理器管线的功能单元和内联高速缓存存储器。与图2类似,该计算设备可以包括处理器10,寄存器或 存储器12,数据高速缓存14,内联高速缓存存储器18,处理器管线20a、20b、20c,以及内联高速缓存管线22a、22b。在一个方面中,内联高速缓存硬件加速器可以是被配置为执行动态软件操作的功能单元50。功能单元50可以是被配置为执行特定功能或计算的电路。例如,功能单元50可以是加法器或乘法器。可以组合一个或多个功能单元50,以实现特定的功能或计算。多个功能单元50或功能单元50的群组可以被配置为实现各种不同的动态软件操作。功能单元50可以是处理器10的集成组件。在一个方面中,内联高速缓存存储器18可以与功能单元50分离。计算设备还可以包括内联高速缓存管线,其被进一步配置为连接功能单元50和内联高速缓存存储器18。内联高速缓存存储器18可由功能单元50存取,并且可由其它组件(例如,处理器10)通过功能单元50存取。在一个方面中,内联高速缓存存储器18可以专用于功能单元50。在另一个方面中,内联高速缓存存储器18可以是跨越多个功能单元50共享的一个或多个内联高速缓存存储器18。

如下面进一步详细描述的,处理器10可以确定动态软件操作的实例是初始化的还是未初始化的,与上面描述中的协处理器如何做出该确定类似。当动态软件操作的实例是未初始化的时,处理器10可以执行动态软件操作的实例来确定结果。处理器10可以将所执行的动态软件操作的实例的结果存储在内联高速缓存存储器18上,使得动态软件操作的实例可以被初始化。当处理器10确定动态软件操作的实例是初始化的时,处理器10可以将与动态软件操作的初始化的实例相关的数据传递给一个或多个所选择的功能单元50。处理器10所选择的功能单元50可以被专门配置为执行由处理器10接收的动态软件操作。处理器10可以将动态软件操作与适当的功能单元50相匹配,并将适当的数据传递给所选择的功能单元50。功能单元50可以使用来自处理器10的数据来操作,以确定与存储在内联高速缓存存储器18上的动态软件操作的实例相关的内联高速缓存数据。功能单元50可以使用来自处理器10的数据并执行动态软件操作(其中功能单元被配置为实现该动态软件操作)。动态软件操作的初始化的实例的结果可以是存储在内联高速缓存存储器18上的常数值,并且可以传递给处理器10以完成执行动态软件操作的实例。

在包括功能单元50的方面中,处理器10可能会或者可能不会被配置为与功能单元50进行通信,并且可能会或者可能不会需要对处理器的指令集架构的更改。在一个方面中,与动态软件操作的实例相关联的数据可以从处理器10明确地传递给功能单元50。在另一个方面中,功能单元50可以能够与存储器12和数据高速缓存14进行直接通信。这种直接通信可以允许功能单元50通过存储器12和数据高速缓存14的方式从处理器10隐含地接收与动态软件操作的实例相关联的数据。处理器10对功能单元50的函数调用可以包括阻塞类型的调用,其中一次仅可以处理一个调用。处理器10对功能单元50的功能调用可以包括非阻塞或异步类型的调用,这可以允许内联高速缓存管线22a、22b中并发进行多个调用。类似地,处理器10对功能单元50的函数调用可以是并行类型的调用,这可以允许内联高速缓存管线22a、22b中同时进行多个调用。

图6示出了根据一个方面的用于动态语言中的内联高速缓存的硬件加速的计算设备,其中该计算设备具有附接到处理器管线的内联高速缓存存储器。与图1中所示出的计算设备类似,该计算设备可以包括处理器10,寄存器或存储器12,数据高速缓存14,内联高速缓存存储器18,处理器管线20a、20b、20c,以及内联高速缓存管线22a。在一个方面中,内联高速缓存硬件加速器可以是被配置为存储动态软件操作的实例的结果的内联高速缓存存储器18。在一个方面中,内联高速缓存存储器18可以是动态软件操作的多个实例所共享的一个或多个内联高速缓存存储器18、均专用于存储相同的动态软件操作的多个实例的一个或多个内联高速缓存存储器18、或者专用于存储所有动态软件操作的所有实例的一个内联高速缓存存储器18。

如下面进一步详细描述的,处理器10可以确定动态软件操作的实例是初始化的还是未初始化的,与上面所描述的协处理器如何做出该确定类似。当动态软件操作的实例是未初始化的时,处理器10可以执行动态软件操作的实例来确定结果。处理器10可以将所执行的动态软件操作的实例的结果存储在内联高速缓存存储器18上,使得动态软件操作的实例可以被初始化。当处理器10确定动态软件操作的实例是初始化的时,处理器10可以取回存储在内联高速缓存存储器18上的针对动态软件操作的初始化的实例的数 据,而不必完全执行操作(如果操作未初始化,则需要完全执行操作)。

在前述的方面计算设备中的每个计算设备中,可以以各种组合来配置组件(包括处理器10,寄存器或存储器12,数据高速缓存14,内联高速缓存硬件加速器16,内联高速缓存存储器18,处理器管线20a、20b、20c,内联高速缓存管线22a、22b、22c,以及协处理器30和功能单元50)。组件中的一些或所有组件可以包括单独的或组合的组件。类似地,组件中的一些或所有组件可以被包括为SoC或一个或多个集成电路的一部分。

图7示出了使用用于动态语言中的内联高速缓存的硬件加速来进行内联高速缓存代码和常数初始化的方面方法700。计算设备及其组件(包括处理器、寄存器或用于寄存器堆的存储器、数据高速缓存、内联高速缓存硬件加速器、内联高速缓存存储器、处理器管线、内联高速缓存管线、协处理器以及功能单元)可以执行方法700。在框702中,计算设备可以运行动态语言可执行程序。在一个方面中,动态语言可执行程序可以在web浏览器、web应用或独立应用中运行。在框704中,计算设备可以实现对象的函数或动态软件操作的实例。共同的动态软件操作(例如,加载数据、存储数据、调用某些函数、以及对数据执行二进制操作)可以是被包括用于硬件加速的动态软件操作类型。在框706中,编译器(例如,静态编译器、运行时编译器或动态编译器)可以生成可执行指令以供处理器指示处理器或协处理器与其进行交互,并运行用于动态软件操作的实例的内联高速缓存硬件加速器。这些指令可以使得处理器或协处理器直接或通过内联高速缓存硬件加速器来从内联高速缓存存储器读取或向内联高速缓存存储器写入,并使得内联高速缓存硬件加速器如下面所描述的运行。

在确定框708中,计算设备可以确定计算设备是否先前运行了对象的函数或动态软件操作的实例。在一个方面中,计算设备可以通过针对所存储的与动态软件操作的实例相关的数据来检查内联高速缓存存储器,来完成该确定。内联高速缓存存储器上经确定的存在与动态软件操作的实例相关的数据可以向计算设备表明动态软件操作的实例可能是初始化的。然而,在没有下面所讨论的进一步确定的情况下,关于动态软件操作是初始化的确定可能不是确定的。例如,与动态软件操作的实例相关的数据可以被存储并且因此可以表明动态软件操作的先前实例是初始化的但是数据可能不 是当前的。

当计算设备确定动态软件操作的实例先前被运行(即,确定框708=“是”)时,在确定框710中,计算设备可以确定动态软件操作的实例的对象实现是否已改变。确定动态软件操作的实例的对象实现是否已改变可以向计算设备指示存储在内联高速缓存存储器中的针对动态软件操作的实例的数据是否是当前数据。当计算设备确定动态软件操作的实例的对象实现未改变(即,确定框710=“否”)时,在框712中,计算设备可以查找存储在内联高速缓存存储器上的动态软件操作的实例的值。确定在内联高速缓存存储器中存在针对动态软件操作的实例的数据并且该数据是当前的可以一起向计算设备表明动态软件操作的实例是初始化的。在框722中,计算设备可以对来自内联高速缓存存储器的、由处理器作为动态软件操作的一部分而请求的数据执行任何操作。在框724中,计算设备可以将与动态软件操作的实例相关的数据返回给处理器。数据可以直接返回给处理器或通过用于寄存器堆的存储器和/或数据高速缓存间接返回给处理器。

当计算设备确定动态软件操作的实例先前未运行(即,确定框708=“否”)时,或者当计算设备确定动态软件操作的实例的对象实现已改变(即,确定框710=“是”)时,在框714中,计算设备可以在操作的对象实现中查找操作的相关字段。对于处理器来说,逐项遍历对象实现直到处理器找到与操作的对象值相关联的适当字段可能是常见的。该过程会是消耗时间和资源的,并且对适当值的内联高速缓存有助于避免针对动态软件操作的将来实例重复该步骤。硬件加速通过从处理器取得硬件高速缓存中所涉及的处理中的一些处理并将其分配给内联硬件加速器,或者通过简化对内联高速缓存的数据的存储和取回来促进该努力。

在确定框716中,计算设备可以确定针对动态软件操作的实例是否存在内联高速缓存数据。这是有可能的,因为动态软件操作的先前实例可能已初始化,但是动态操作的实例的当前数据可能与先前初始化的实例的数据不匹配。当计算设备确定针对动态软件操作的实例不存在内联高速缓存数据(即,确定框716=“否”)时,在框718中,计算设备可以创建或初始化针对动态软件操作的实例的内联高速缓存数据。计算设备可以继续到框722,以对由处理器作为动态软件操作的实例的一部分而请求的数据执行任 何操作,并且可以执行框724的操作以返回实例的结果。

当计算设备确定针对动态软件操作的实例存在内联高速缓存数据(即,确定框716=“是”)时,在框720中,计算设备可以创建或初始化针对动态软件操作的实例的内联高速缓存数据,包括针对先前实例的内联高速缓存数据。例如,当动态软件操作的第一实例与动态软件操作的第二实例不同时,计算设备可以初始化包括第一内联高速缓存的第二内联高速缓存,其被配置为替代经初始化的第一内联高速缓存。计算设备可以继续到框722,以对由处理器作为动态软件操作的实例的一部分而请求的数据执行任何操作,并且可以执行框724的操作以返回实例的结果。

在各个方面中,内联高速缓存可以具有多个分配和替换策略。例如,在框718和720中,计算设备可能不会针对动态软件操作的每个实例初始化内联高速缓存数据。例如,可以仅在动态软件操作的第二次执行之后初始化内联高速缓存数据。其它指定的标准可以确定针对动态软件操作何时可以初始化内联高速缓存数据,例如根据各种度量的执行频率、围绕时间和/或资源的执行复杂度和/或成本、或者运行的程序或应用的操作。在一个方面中,出于各种原因,初始化的内联高速缓存数据可以被移除或撤销初始化(uninitialized)。例如,通过常规策略(例如最近最少使用、最少频繁使用、先进先出、后进先出、以及寿命),可以利用操作将内联高速缓存数据从内联高速缓存明确地驱逐。其它标准(例如,最不复杂和/或最不昂贵或者最多内联高速缓存使用)也可以是移除内联高速缓存数据的因素。在一些方面中,内联高速缓存存储器的性能或空间可用性可以确定内联高速缓存数据何时可以被考虑移除。用于初始化或撤销初始化的一些标准在确定是否要初始化或撤销初始化动态软件操作的内联高速缓存数据时可以考虑当前和/或历史数据。被移除的内联高速缓存数据可以根据所描述的标准中的任何标准再次初始化,这可能需要满足其它的、比要初始化的内联高速缓存数据潜在更严格的标准,或者可以在至少某个时段内或在某个事件发生之前防止初始化。例如,可以防止被移除的内联高速缓存数据再次初始化,直到程序的下一次运行为止,或者直到重置内联高速缓存(如在重启计算设备时)为止。

图8示出了用于由处理器使用针对动态语言中的内联高速缓存的内联 高速缓存代码和常数的方面方法800。计算设备及其组件(包括处理器、寄存器或用于寄存器堆的存储器、数据高速缓存、内联高速缓存硬件加速器、内联高速缓存存储器、处理器管线、内联高速缓存管线、协处理器以及功能单元)可以执行方法800。在框802中,计算设备可以接收对对象的实例或者动态软件操作的实例的函数调用。在确定框804中,计算设备可以确定接收到的数据是否是对象而不是例如小的整数。当计算设备确定接收到的数据不是对象(即,确定框804=“否”)时,在框816中,计算设备可以将对函数调用的控制返回给处理器。

当计算设备确定接收到的数据是对象(即,确定框804=“是”)时,在框806中,计算设备可以加载动态软件操作的实例的当前对象实现。在框808中,计算设备可以加载动态软件操作的实例的预期对象实现。预期对象实现可以是用于初始化动态软件操作的先前实例的对象实现。在确定框810中,计算设备可以确定当前对象实现和预期对象实现是否是相同的对象实现。可以通过将当前对象的编码与在生成内联高速缓存中的代码时与内联高速缓存一起存储的对象的编码进行比较,来做出该确定。这种编码可以是对象原型的地址,或者是对象字段的编码,或者可以唯一地标识对象的结构的任何其它机制。在动态软件操作的实例的初始化之后对象实现有可能改变,并且结果可能是来自动态软件操作的当前实例的对象实现的数据可能不再与来自先前实例的数据匹配。返回基于动态软件操作的先前实例的错误数据会造成动态软件的执行中的错误。当计算设备确定当前对象实现和预期对象实现不同(即,确定框810=“否”)时,在框816中,计算设备可以将函数调用的控制返回给处理器。

当计算设备确定当前对象实现和预期对象实现相同(即,确定框810=“是”)时,在框812中,计算设备可以取回内联高速缓存数据。在框814中,计算设备可以将与动态软件操作的实例相关的数据返回给处理器。数据可以直接返回给处理器或通过用于寄存器堆的存储器和/或数据高速缓存间接返回给处理器。

图9示出了用于由功能单元使用针对动态语言中的内联高速缓存的内联高速缓存代码和常数的方面方法900。计算设备及其组件(包括处理器、寄存器或用于寄存器堆的存储器、数据高速缓存、内联高速缓存硬件加速 器、内联高速缓存存储器、处理器管线、内联高速缓存管线、协处理器以及功能单元)可以执行方法900。在框902中,计算设备可以加载对象类型。对象类型可以向计算设备指示正在运行什么动态软件操作。在框904中,计算设备可以加载对象标识符。对象标识符可以向计算设备指示动态软件操作的特定实例正在运行,包括例如输入值。使用来自实例的信息,在框906中,计算设备可以加载针对动态软件操作的实例的内联高速缓存数据。在框908中,计算设备可以对实例的数据执行动态软件操作。计算设备可以使用对象类型、对象标识符和内联高速缓存数据作为参数,来执行动态软件操作。在框910中,计算设备可以将与动态软件操作的实例相关的数据返回给处理器。数据可以直接返回给处理器或通过用于寄存器堆的存储器和/或数据高速缓存间接返回给处理器。

图10示出了适合于与各个方面一起使用的示例性移动计算设备。移动计算设备1000可以包括处理器1002,其耦合到触摸屏控制器1004和内部存储器1006。处理器1002可以是被指定用于通用或特定处理任务的一个或多个多核集成电路。内部存储器1006可以是易失性或非易失性存储器,并且还可以是安全的和/或加密的存储器、或者不安全和/或未加密的存储器、或者其任意组合。触摸屏控制器1004和处理器1002还可以耦合到触摸屏面板1012,例如电阻感测触摸屏、电容感测触摸屏、红外线感测触摸屏等等。另外,移动计算设备1000的显示器不必具有触摸屏功能。

移动计算设备1000可以具有用于发送和接收通信的一个或多个无线信号收发机1008(例如,Peanut、蓝牙、Zigbee、Wi-Fi、RF无线)和天线1010,无线信号收发机1008和天线1010彼此耦合和/或耦合到处理器1002。收发机1008和天线1010可以与上面提到的电路一起使用,以实现各种无线传输协议栈和接口。移动计算设备1000可以包括蜂窝网络无线调制解调器芯片1016,其实现经由蜂窝网络的通信并且耦合到处理器。

移动计算设备1000可以包括耦合到处理器1002的外围设备连接接口1018。外围设备连接接口1018可以被单独配置为接受一种类型的连接,或者可以被配置为接受各种类型的物理和通信连接、共同或专有连接,例如USB、FireWire、Thunderbolt或PCIe。外围设备连接接口1018还可以耦合到类似配置的外围设备连接端口(未示出)。

移动计算设备1000还可以包括扬声器1014以用于提供音频输出。移动计算设备1000还可以包括由塑料、金属或者各材料的组合构成的壳体1020,以用于包含本文所讨论的组件中的所有或一些组件。移动计算设备1000可以包括耦合到处理器1002的电源1022,例如一次性或可再充电电池。可再充电电池还可以耦合到外围设备连接端口,以从移动设备1000外部的源接收充电电流。移动计算设备1000还可以包括物理按钮1024,以用于接收用户输入。移动计算设备1000还可以包括电源按钮1026,以用于开启和关闭移动设备1000。

上面描述的各个方面还可以在各种其它类型的计算设备内实现,例如图11中所示出的膝上型计算设备1100。许多膝上型计算机包括触摸板触摸表面1117,其充当计算机的指向设备,并且因此可以接收拖动、滚动和轻拂(flick)手势,类似于在装备有触摸屏显示器以及上面所描述的计算设备上实现的那些手势。膝上型计算设备1100通常会包括处理器1111,其耦合到易失性存储器1112和大容量非易失性存储器,例如闪存的硬盘驱动器1113。另外,计算设备1100可以具有用于发送和接收电磁辐射的一个或多个天线1108,其中天线1108可以连接到与处理器1111耦合的无线数据链路和/或蜂窝电话收发机1116。计算设备1100还可以包括耦合到处理器1111的软盘驱动器1114和压缩盘(CD)驱动器1115。在笔记本配置中,计算设备壳体包括均耦合到处理器1111的触摸板1117、键盘1118和显示器1119。计算设备的其它配置可以包括如公知的耦合到处理器(例如,经由USB输入)的计算机鼠标或轨迹球,这些还可以结合各个方面一起使用。台式计算机在各种配置中可以类似地包括这些计算设备组件,包括将组件分离或组合成一个或多个分离的但可连接的部件。

各个实施例还可以在各种商业可用的服务器设备中的任何服务器设备上实现,例如图12中所示出的服务器1200。这种服务器1200通常包括处理器1201,其耦合到易失性存储器1202和大容量非易失性存储器,例如硬盘驱动器1204。服务器1200还可以包括耦合到处理器1201的软盘驱动器、压缩盘(CD)或DVD盘驱动器1206。服务器1200还可以包括耦合到处理器1201的网络接入端口1203,以用于与网络1205(例如耦合到其它广播系统计算机和服务器的局域网、互联网、公共交换电话网和/或蜂窝数据网 络(例如,CDMA、TDMA、GSM、PCS、3G、4G、LTE或者任何其它类型的蜂窝数据网络))建立网络接口连接。

提供前述的方法描述和过程流程图仅作为说明性的例子,并非旨在要求或暗示必须用所给出的次序来执行各个方面的操作。如本领域技术人员将意识到的,可以用任何次序来执行前述方面中的操作的次序。诸如“此后”、“然后”、“接下来”之类的词语并非旨在对操作的次序进行限制;这些词语仅用于引导读者贯穿对方法的描述。此外,以单数形式对权利要求要素的任何引用,例如使用冠词“一”、“一个”或“所述”不应解释为将要素限制为单数。

结合各个方面所描述的各种说明性的逻辑框、模块、电路和算法操作可以实现为电子硬件、计算机软件或者二者的组合。为了清楚地示出硬件和软件的这种可互换性,上面已经对各种说明性的组件、框、模块、电路和操作围绕其功能进行了一般性描述。至于这种功能是实现为硬件还是软件,这取决于特定的应用和施加在整体系统上的设计约束。技术人员可以针对每个特定应用以不同的方式来实现所描述的功能,但是这种实现决策不应当解释为致使偏离本发明的范围。

利用被设计为执行本文所描述的功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其它可编程逻辑器件、分立门或晶体管逻辑器件、分立硬件组件或者其任意组合,可以实现或执行用于实现结合本文公开的各方面所描述的各种说明性的逻辑单元、逻辑框、模块和电路的硬件。通用处理器可以是微处理器,但在替代方案中,该处理器也可以是任何常规的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器与DSP内核的结合,或者任何其它此种配置。替代地,可以由特定于给定功能的电路来执行一些步骤或方法。

在一个或多个方面中,所描述的功能可以在硬件、软件、固件或其任意组合中实现。如果在软件中实现,则所述功能可以作为一条或多条指令、操作或代码存储在非暂时性计算机可读介质或者非暂时性处理器可读介质上。本文所公开的方法或算法的操作可以体现在包括处理器可执行指令或 操作的处理器可执行软件模块中,该处理器可执行软件模块可以驻留在非暂时性计算机可读或处理器可读存储介质上。非暂时性计算机可读或处理器可读存储介质可以是可由计算机或处理器存取的任何存储介质。通过举例而非限制性的方式,这种非暂时性计算机可读或处理器可读介质可以包括RAM、ROM、EEPROM、FLASH存储器、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备,或者可用于存储具有指令、操作或数据结构形式的期望的程序代码并且可由计算机存取的任何其它介质。如本文所使用的,磁盘(disk)和光盘(disc)包括压缩光盘(CD)、激光光盘、光盘、数字多功能光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘利用激光来光学地复制数据。上面各项的组合也包括在非暂时性计算机可读和处理器可读介质的范围内。此外,方法或算法的操作可以作为代码、指令和/或操作的一个或任意组合或集合驻留在可以并入计算机程序产品中的非暂时性处理器可读介质和/或计算机可读介质上。

提供对所公开的方面的以上描述是为了使得任何本领域技术人员能够实施或使用本发明。对这些方面的各种修改对于本领域技术人员来说将是显而易见的,并且在不偏离本发明的精神或范围的情况下,本文所定义的总体原理可以应用于其它方面。因此,本发明并非旨在受限于本文所示出的方面,而是旨在被给予与所附权利要求以及本文所公开的原理和新颖性特征相一致的最广的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1