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

用于对非叶代码进行基于编译器的矢量化的系统和方法技术方案

技术编号:8737278 阅读:200 留言:0更新日期:2013-05-26 12:43
本发明专利技术描述了用于软件应用的矢量化的系统和方法。在一些实施例中,源代码依赖关系可以按可以扩展编译器的能力以矢量化否则为标量的函数的方式来表达。例如,当编译被调用函数时,编译器可以识别被调用函数与除了传递至该被调用函数的参数以外的其它变量的依赖关系。该编译器可以记录这些依赖关系,例如,记录在依赖关系文件中。稍后,当编译调用该被调用函数的调用函数时,同一(或另一)编译器可以引用先前识别的依赖关系,并将它们用于确定是否和怎样矢量化调用函数。具体来说,这些技术可以辅助非叶循环的矢量化。因为非叶循环相对常见,所以在此描述的技术可以增加可以被应用至许多应用的矢量化的量。

【技术实现步骤摘要】
【国外来华专利技术】
本公开涉及计算机系统,并且更具体地说,涉及用于使能软件应用的通用矢量化的系统和方法。
技术介绍
典型软件开发范例是公知的。计算机程序员采用高级编程语言(例如,Basic, C++等)来编写源代码。在某一点处,程序员使用编译器将源代码变换成目标代码。在变换成可执行代码之后(例如,在链接或其它编译时间或运行时间处理之后),接着,所得目标代码可以通过计算机或计算装置来执行。计算机如今具有多个处理单元,并且能够并行地执行指令。利用这种架构的优点,现代编译器可以尝试“并行化”或“矢量化”特定软件功能,从而代替使单一处理单元顺序地一次执行一个指令,多个处理单元可以同时执行多个指令。在编译处理期间,编译器分析软件功能以确定是否存在针对矢量化的任何障碍。一个这种障碍例如是存在真实数据依赖关系(dependency)。这在当前指令引用通过执行在前指令所获取的数据时发生。在该情况下,较后指令仅可以在较早指令之后执行,并由此两个指令不能并行执行。另一潜在障碍是存在函数调用。例如,如果要编译的函数对外部函数进行调用,则编译器不能够矢量化该调用函数。
技术实现思路
本公开提供了用于使能通用矢量化软件应用的系统和方法。为此,在此公开的系统和方法提供对扩展编译器的能力以矢量化函数的依赖关系和/或接口的表达。在一非限制实施例中,编译器可以在其编译期间检查存储器和/或一函数(“被调用函数”)内的数据依赖关系,并且在依赖关系数据库(举例来说,如依赖关系文件)中表达那些依赖关系。一旦编译,被调用函数就可以例如变为库函数等。在稍后的时间点,可以创建另一函数(“调用函数”),以使其针对被调用函数进行调用。在编译调用函数期间,编译器可以访问与被调用函数相关联的依赖关系文件,并且可以识别其依赖关系。基于被调用函数的依赖关系,编译器可以进行有关是否矢量化调用函数的判定。另外或另选的是,编译器可以判定仅矢量化调用函数的一部分。与其它可能方式相比,通过使用依赖关系文件而提供的可见性可以允许编译器矢量化更高百分比的函数。例如,实现依赖关系文件允许矢量化包括非叶循环(non-leaf loop)(即,对源代码不可见的外部函数进行调用的循环)的函数。因为现今大多数软件函数包括一个或多个非叶循环,所以这些系统和方法可以增加可以被应用至任何应用的矢量化的量。在另一非限 制实施例中,编译器可以根据单一源代码描述生成函数的标量和矢量形式。函数的标量形式可以使用如由源代码最初指定的标量接口。同时,函数的矢量形式可以实现针对该函数的、用于接收矢量参数和生成矢量返回值的矢量接口。例如,矢量接口可以在与函数相关联的依赖关系文件中暴露。这种另选矢量接口的存在例如允许编译器从矢量化循环内进行矢量函数调用,而非从矢量化循环内进行多个串行化标量函数调用。在此公开的技术的各种组合还准许函数的矢量化不包含循环,其与公认知识相反,并且仍提供许多优点。特别地讲,这些技术可以增加软件应用中的总矢量化的量。附图说明图1是例示根据某些实施例的、可操作以实现用于使能实现软件应用的通用矢量化的技术的计算机系统的框图。图2是例示根据某些实施例的、在通过计算机系统执行时可以生成可执行代码的编译器的框图。图3示出了例示根据某些实施例的、表达依赖关系数据库中的依赖关系的方法的流程图。图4示出了例示根据某些实施例的、矢量化函数的方法的流程图。图5示出了例示根据某些实施例的、全函数矢量化方法的流程图。图6示出了例示根据某些实施例的、利用所矢量化函数的方法的流程图。虽然易受各种修改和另选形式,但在本说明书中讨论的具体实施例在附图中通过示例进行了示出,并且在此将进行详细描述。然而,应当明白,附图和详细描述不是旨在将本公开限制成所公开的特定形式,但与此相反,本专利技术要覆盖落入如所附权利要求书所限定的本公开的精神和范围内的所有修改例、等同物以及另选例。具体实施例方式介绍下面的说明书首先讨论例示计算机系统或装置。本说明书还描述了例示编译器,其可以被配置成执行和/或生成用于计算机系统的可执行代码。接着,本说明书提出了用于使能实现非叶循环和全函数矢量化的几种技术。例示性计算机系统图1描绘了根据某些实施例的、可操作以实现用于使能实现软件应用的通用矢量化的技术的例示计算机系统。在该非限制例中,计算机系统100包括经由I/O接口 130耦接至存储器120的一个或多个处理器110a-110n。计算机系统100还包括耦接至I/O接口130的网络接口 140和存储接口 150。存储接口 150将外部存储装置155连接至I/O接口130。而且,网络接口 140可以将系统100连接至网络(未示出)或者连接至另一计算机系统(未示出)。在一些实施例中,计算机系统100可以是仅包括一个处理器IlOa的单一处理器系统。在其它实施例中,计算机系统100可以包括两个或更多个处理器110a-110n。处理器IlOa-1lOn可以包括能够执行指令的任何处理器。例如,处理器IlOa-1lOn可以是实现任何合适指令集架构(ISA)的通用或嵌入式处理器,举例来说,如x86、PowerPC , SPARC 、或MIPStmI SAs0在一实施例中,处理器IlOa-1lOn可以包括在美国专利N0.7617496和美国专利N0.7395419中描述的Macroscalar处理器的各种特征。系统存储器120可以被配置成存储可通过处理器IlOa-1lOn访问的指令和数据。例如,系统存储器120可以是静态随机访问存储器(SRAM)、同步动态RAM (SDRAM)、非易失性/闪速型存储器、或者任何其它任何合适类型的存储器技术。实现下面详细描述的希望功能或应用的程序指令和/或数据的一部分可以被示出存储在系统存储器120内。另外或另选的是,那些程序指令和/或数据的一部分可以被存储在存储装置155、一个或多个处理器IlOa-1lOn内的高速缓冲存储器中、或者可以经由网络接口 140从网络抵达。I/O接口 130可操作以管理处理器IlOa-1lOru系统存储器120以及该系统中的或接合至其的任何装置(包括网络接口 140、存储接口 150或其它外围接口)之间的数据通信。例如,I/O接口 130可以将来自一个组件的数据或控制信号转换成适于供另一组件使用的格式。在一些实施例中,I/O接口 130可以包括对通过各种类型外围总线接合的装置的支持,举例来说,如外围组件互连(PCI)总线或通用串行总线(USB)。而且,在一些实施例中,I/O接口 130的一些或全部功能可以并入处理器110a-110n。网络接口 140被配置成允许数据在计算机系统100与接合至网络的其它装置(举例来说,如其它计算机系统)之间交换。例如,网络接口 140可以支持经由有线或无线通用数据网络、电信/电话网络、诸如Fibre Channel SAN等的存储区域网络等的通信。存储接口 150被配置成允许计算机系统100与诸如存储装置155的存储装置接口连接。存储接口 150可以支持以下标准存储接口:如高级技术附加数据包接口(ATAPI)标准(其还可以被称为集成驱动电子设备(IDE))的一个或多个合适版本、小型计算机系统接口(SCSI)标准、IEEE 1394 “Firewire”标准、USB标准、或者适于互连海量存本文档来自技高网...

【技术保护点】

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

【专利技术属性】
技术研发人员:J·E·戈尼诺
申请(专利权)人:苹果公司
类型:
国别省市:

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

1