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

在访问动态类型化对象过程中的并发内联高速缓存优化制造技术

技术编号:13155288 阅读:80 留言:0更新日期:2016-05-09 18:21
本发明专利技术描述了用于基于内联高速缓存代码来并发访问动态类型对象的方法和装置。单个线程中的内联高速缓存初始化可被卸载到解译器,而不会造成不必要的同步开销。可提供线程偏置机制来检测代码块是否在单个线程中执行。此外,可减少经由编译器诸如基线JIT编译器执行的内联高速缓存初始化的次数,以提高处理性能。

【技术实现步骤摘要】
【国外来华专利技术】【专利说明】 相关申请的交叉引用 本专利申请设及并要求于2013年8月30日由Filip Pizlo等人提交的名称为 "RUNTIME ACCESS OF DYNAMIC OB巧CTS"的美国临时专利申请61/872,386的权益,该专利 申请W引用方式全文并入本文。
本专利技术通常设及针对动态类型化数据的运行时访问。更具体地,本专利技术设及对内 联高速缓存代码进行优化W并发执行基于动态语言的代码。
技术介绍
动态语言诸如化¥日5沈191:、1?油7、?71:11〇]1、?日1'1和?册等正日益被认为是静态语言 诸如C和C++的替代。动态语言带来很多益处,诸如程序员生产率和相对浅的学习曲线。然 而,进一步采用包括化¥曰5。1'191:、1?山巧、?八11〇]1和其他语言的动态语言的障碍是缺少高性能 共享存储器并发机制,诸如在静态语言中明显可用的线程和锁定或libdispatch。由于对象 在动态语言中的工作方式,运一问题被认为是困难的,所W至今还未解决。 先前为解决该问题所作的尝试包括围绕每个对象访问添加锁定机制。尽管锁定机 制可保证期望的并发语义,但是非常慢。锁定和解锁可按照低于正常堆访问的量级来执行, 因此引入过高的开销。 另外,内联高速缓存(IC)通常用于基于化vaScript的代码的高性能具体实施。典 型地,内联高速缓存包括自修改代码。然而,可在多个处理器上执行的并发自修改代码可能 既困难又慢。因此,向用于基于化vaScript的代码的基于内联高速缓存的具体实施添加并 发性可能造成不切实际的昂贵。 此外,JavaScript作为语言允许在已构造对象之后向那些对象添加元素。如果基 于化vaScript的程序被执行W向对象添加比可被包含在其内联属性存储装置中的更多的 属性,则必须分配单独的外联存储器块W存储其附加属性。JavaScript阵列主要用于编索 引的属性存储。关于对象的编索引属性的存在总是要求分配外联索引属性存储对象。[000引因此,用于执行基于动态语言的程序的现有具体实施往往缺乏效率、并发性和有 效优化。
技术实现思路
从动态编程语言诸如化vaScript生成的代码可包括增强型对象模型W允许在运 行时期间并发执行数据访问。除了对象的类型结构和数据有效载荷存储属性或字段值之 夕h索引结构可被引入到表示动态类型化对象的对象模型。索引结构的元素可作为用于访 问对象的间接索引指向对应属性值处。 在一个实施例中,动态类型化程序代码(例如,实现某一算法)可被允许通过对象 的索引结构经由附加间接索引来对对象的单个属性值并发执行每次访问操作而不会产生 竞争状况。针对对象的单个属性值的每次访问(例如,加载/存储)操作可要求多个指令操作 和/或原子操作。在并发执行期间,运些指令可被允许W非同步方式交织。 在其他实施例中,用于访问单个线程中的动态类型化对象的内联高速缓存初始化 可被卸载到解译器而不会造成不必要的同步开销。可提供线程偏置机制来检测代码块是否 在单个线程中执行。此外,可减少经由编译器诸如基线JIT编译器执行的内联高速缓存初始 化的次数,W提高处理性能。 代码块可为编译单元、一部分源代码、一个或多个源代码文件或其他可适用代码 语句集(例如,代码规范的连续部分)。编译单元可指代被编译为并且被认为是一个逻辑单 元的源代码。编译单元可包括一个或多个完整的源代码文件,但是还可为专用代码部分或 文件的所选择的部分。编译单元内的声明和定义可确定函数和数据对象的范围。 在其他实施例中,由多个线程中共享的代码块中的内联高速缓存初始化可被延迟 或定时W减少所要求的处理器同步(例如,光点)的出现,W利用初始化来更新可执行代码。 例如,每个线程可在运行时期间将初始化代码存储在缓冲器中。光点定时器(例如,经由特 定线程)可使得所有内联高速缓存周期性地(例如,每IOms)初始化(例如,更新到运行时), 只要缓冲器对于所要求的处理器同步来说非空即可。因此,可减少针对内联高速缓存初始 化所需的昂贵或缓慢的同步操作的调用次数。 在其他实施例中,针对基于动态语言的程序可动态跟踪阵列对象是否为平面阵列 类型。平面阵列类型的阵列对象的阵列元素可被存储在所分配的对象单元内的可选内联存 储装置中,W表示阵列对象。对象单元中的内联存储装置可被可用存储空间限定在于存储 器中分配的相邻对象单元之间。对象的平面阵列类型可基于对象是否表示阵列并且基于对 象单元的内联存储装置是否具有足够的存储空间来存储阵列的元素。平面阵列类型的阵列 对象可允许在对象单元中访问的阵列对象的阵列元素,而无需经由被存储在对象单元中的 指针进行附加存储器加载。此外,生成支持平面阵列类型的可执行代码的编译器的类型系 统可允许编译器基于平面阵列类型来执行代码优化。 通过附图并且通过W下具体描述,本专利技术的其他特征将显而易见。【附图说明】 本专利技术W举例的方式进行说明,并且不限于各个附图的图形,在附图中类似的附 图标号指示类似的元件,并且其中: 图1为示出了用于从网络化设备检索的基于动态语言的源代码的示例性执行运行 时的网络图; 图2为示出了并发执行和/或优化执行访问动态类型化对象的系统的一个实施例 的框图; 图3为示出了用于执行共享共同动态类型化对象的多个线程的一个示例性运行时 的框图; 图4示出了经由并发执行而共享的动态类型化对象的示例性分配; 图5为示出了用于生成用于访问动态类型化对象的并发可执行指令的过程的一个 实施例的流程图; 图6为示出了用于基于具有索引标号的对象模型来并发访问对象的属性值的过程 的一个实施例的流程图. 图7A-图7B为示出了针对并发执行来优化内联高速缓存的代码块的运行时系统的 框图; 图8示出了用于利用内联高速缓存代码来动态编译代码块的并发执行的示例性时 间线; 图9为示出了用于自修改内联代码访问用于并发执行的动态类型化对象的过程的 一个实施例的流程图; 图10为示出了用于基于具有索引标号的对象模型借助内联高速缓存并发访问对 象的属性值来动态编译函数代码块的过程的一个实施例的流程图; 图11示出了针对平面阵列对象支持阵列数据存储内联的对象模型的实例; 图12为示出了用于优化动态编程语言中指定的对象数据访问的动态分配的阵列 数据内联的系统的一个实施例的框图; 图13为示出了动态编译代码W分配阵列数据内联的过程的一个实施例的流程图; 图14为示出了用于在运行时期间识别平面阵列数据类型W生成指令W用于经由 平面阵列分配的内联迭代地访问对象的过程的一个实施例的流程图; 图15示出了数据处理系统诸如计算机系统的一个实例,该数据处理系统可与本文 所述的实施例一起使用。【具体实施方式】 本文描述了用于共享动态类型化对象、优化用于访问动态类型化数据的内联高速 缓存代码、优化动态类型对象中的阵列数据的方法和装置。在W下说明中示出了许多具体 细节,W提供对本专利技术的实施例的彻底解释。然而,对于本领域的技术人员显而易见的是, 本专利技术的实施例可在不具有运些具体细节的情况下被实施。在其他情况下,尚未详细示出 熟知的部件、结构和技术,W免模糊对此说明的理解。 在本说明书中提到的。一个实施例"("one embodiment"或"an embodiment")是指 结合本文档来自技高网
...

【技术保护点】
一种在其中具有指令的机器可读非暂态存储介质,所述指令当由机器执行时使得所述机器执行方法,所述方法包括:从源代码的源代码块生成初始内联代码,所述源代码块指定对对象的至少一次访问,所述初始内联代码具有用于执行对所述对象的一次访问的串行内联高速缓存代码,其中所述串行内联高速缓存代码包括串行慢速代码路径和快速代码路径,所述串行内联高速缓存代码确定经由所述快速代码路径还是所述串行慢速代码路径来执行对所述对象的所述一次访问;从所述源代码块生成并发内联代码,所述并发内联代码具有用于执行对所述对象的所述一次访问的并发内联高速缓存代码,其中所述并发内联高速缓存代码包括并发慢速代码路径和所述快速代码路径,所述并发内联高速缓存代码确定经由所述快速代码路径还是所述并发慢速代码路径来执行对所述对象的访问;经由特定线程来执行所述初始内联代码以执行对所述对象的所述至少一次访问,其中所述串行内联高速缓存代码嵌入用于所述快速代码路径的对象类型相关联的一个或多个常量参数,其中所述串行慢速代码路径经由所述特定线程被执行以更新所述串行内联高速缓存代码的所述常量参数的值;以及经由一个或多个线程来执行所述并发内联代码以执行对所述对象的所述至少一次访问,其中所述并发内联高速缓存代码嵌入用于所述快速代码路径的常量参数,其中所述并发慢速代码路径被并发执行以更新所述并发内联高速缓存代码的所述常量参数的值,其中如果所述串行内联高速缓存代码的所更新的常量参数或所述并发内联高速缓存代码的所更新的常量参数对应于匹配所述对象的类型的对象类型,则执行所述快速代码路径以执行对所述对象的所述至少一次访问。...

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

【专利技术属性】
技术研发人员:F·J·皮泽罗
申请(专利权)人:苹果公司
类型:发明
国别省市:美国;US

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

1