部分向量化编译系统的制作方法_3

文档序号:8323918阅读:来源:国知局
代码的循环体内的后向依赖。识别可包括生成循环体的SSA分析并且基于SSA生成LDG。 LDG可提供与向量化单元相关联的节点以及与在节点之间依赖关系相关联的边缘。在操作 1020,选择循环体内的迭代的一个或更多个范围。选择范围以不包括识别的后向依赖。在 操作1030,将选择的范围向量化。可在向量处理器上执行选择的范围。
[0037] 图11示出与本公开内容一致的部分向量化系统104和向量处理器108的示范配 置。部分向量化系统104可包括处理器1102、存储器1104、输入/输出(I/O)接口 1106及 芯片集1108。向量处理器108可包括多个标量处理器110。
[0038] 处理器1102可以是任何适合的处理器,包括但不限于通用处理器和专用集成电 路。此类处理器可以能够在一个或更多个处理器核上执行一个或多个线程。不加限制地, 处理器1102优选地是通用处理器,诸如但不限于商业上从Intel Corp.和Advanced Micro Devices (AMD)可得到的商用通用处理器。此外,虽然图11示出包含单个处理器的部分向 量化系统,但可使用多个处理器。
[0039] 存储器1104可以是任何适合类型的计算机可读存储器。此类存储器的示例包括 但不限于:半导体固件存储器、可编程存储器、非易失性存储器、只读存储器、电可编程存储 器、随机存取存储器、闪存存储器(例如可包括NAND或NOR类型存储器结构)、磁盘存储器、 光盘存储器、其组合及诸如此类。另外或备选地,计算机可读媒体可包括其它和/或以后开 发的类型的计算机可读存储器。
[0040] I/O 1106可包括允许部分向量化系统104输出与本公开内容一致的部分向量化 代码到向量处理器108以便在标量处理器110上并行执行的硬件(即,电路)、软件或硬件和 软件的组合。
[0041] 芯片集1108可包括对部分向量化系统适合的电路。例如,在部分向量化系统是台 式计算机或笔记本计算机的情况下,芯片集1108可包括适合台式计算机平台或笔记本计 算机平台的电路。在任何情况下,芯片集1108内的电路可包括集成电路芯片,诸如但不限 于商业上从Intel Corp可得到的商用集成电路芯片。当然,也可使用其它类型的集成电路 芯片。
[0042] 在一些实施例中,向量处理器可提供硬件支持(例如,以向量化指令的形式)以便 结合上述部分向量化技术提供增大的性能。这些向量指令可包括操纵谓词向量以支持迭代 范围选择的指令。向量指令也可包括指令以检测使能条件和边界条件。向量指令也可包括 传播在向量内的元素值以支持标量更新和到后续迭代的传播的指令。向量指令也可包括生 成和提交临时副本以支持推测执行的指令。
[0043] 本文中所述方法的实施例可在包括例如计算机可读存储媒体的一个或多个存储 媒体的系统中实现,计算机可读存储媒体上单独或组合存储有在由一个或多个处理器执行 时执行方法的指令。这里,处理器可例如包括系统CPU (例如,核处理器)和/或可编程电 路。因此,预期根据本文中所述方法的操作可跨诸如在几个不同物理位置的处理结构的多 个物理装置分布。此外,如本领域技术人员将理解的,预期方法操作可单独或以子组合方式 执行。因此,并非每个流程图的所有操作需要执行,并且如本领域技术人员将理解的,本公 开内容明确预期此类操作的所有子组合是允许的。
[0044] 存储媒体可包括任何类型的有形媒体,例如任何类型的盘,包括软盘、光盘、压缩 盘只读存储器(CD-ROM)、可重写压缩盘(CD-RW)、数字多功能盘(DVD)及磁光盘、半导体装 置,诸如只读存储器(R0M)、诸如动态和静态RAM的随机存取存储器(RAM)、可擦除可编程只 读存储器(EPROM)、电擦除可编程只读存储器(EEEPR0M)、闪存、磁卡或光学卡或适用于存 储电子指令的任意类型的媒体。
[0045] 如本文的任何实施例中使用的,"电路"可例如单独或以任何组合方式包括硬连线 电路、可编程电路、状态机电路和/或存储由可编程电路执行的指令的固件。应用(app)可 实施为可在诸如主机处理器或其它可编程电路的可编程电路上执行的代码或指令。如本文 中的任何实施例中使用的,模块可实施为电路。电路可实施为集成电路,如集成电路芯片。
[0046] 因此,本公开内容提供用于生成和执行可包括要向量化的代码的循环体内的后向 依赖的部分向量化代码的技术(例如,系统、方法和计算机可读存储媒体)。
[0047] 系统可包括部分向量化编译器,部分向量化编译器配置成识别代码的循环体内的 后向依赖,选择循环体内迭代的一个或更多个范围,选择的范围不包括识别的后向依赖,并 且将选择的范围向量化。此示例的系统也可包括配置成执行选择的范围的向量处理器。
[0048] 另一示例系统包括上述组件,并且部分向量化编译器还配置成生成循环体的SSA 分析;基于循环体的SSA生成LDG,LDG包括节点和边缘,节点与SSA的虚拟化单元相关联, 并且边缘与在节点之间的依赖关系相关联,并且虚拟化单元包括语句、表达式和操作,并且 依赖关系包括CDE和DDE ;以及将LDG分割成一个或更多个第一类型区域以及一个或更多 个第二类型区域,第一类型区域包括依赖循环,并且第二类型区域不包括依赖循环。
[0049] 另一示例系统包括上述组件,并且部分向量化编译器还配置成识别嵌套的循环, 嵌套的循环包括内部循环和外部循环;平整内部循环;以及级联内部循环的迭代,迭代与 内部循环的一个或更多个调用相关联。
[0050] 另一示例系统包括上述组件,并且向量处理器还配置成提供断定的向量指令执行 和循环迭代范围启用。
[0051] 另一示例系统包括上述组件,并且向量处理器还配置成检测后向依赖的识别中的 错误,并且校正循环体代码的执行流以从检测到的错误恢复。
[0052] 根据另一方面,提供了一种方法。方法可包括识别代码的循环体内的后向依赖。此 示例的方法也可包括选择循环体内迭代的一个或更多个范围,并且选择的范围不包括识别 的后向依赖。此示例的方法可还包括将选择的范围向量化。
[0053] 另一示例方法包括上述操作,并且识别还包括生成循环体的SSA分析;基于循环 体的SSA生成LDG,LDG包括节点和边缘,节点与SSA的虚拟化单元相关联,并且边缘与在 节点之间的依赖关系相关联,并且虚拟化单元包括语句、表达式和操作,并且依赖关系包括 CDE 和 DDE。
[0054] 另一示例方法包括上述操作,并且还包括确定在LDG的节点之间的依赖距离,依 赖距离与LDG的边缘相关联;以及如果与边缘相关联的依赖距离等于或超过与向量处理器 相关联的向量化长度,则删除一个或更多个边缘。
[0055] 另一示例方法包括上述操作,并且还包括将LDG分割成一个或更多个第一类型区 域和一个或更多个第二类型区域,并且第一类型区域包括依赖循环,并且第二类型区域不 包括依赖循环。
[0056] 另一示例方法包括上述操作,并且还包括识别嵌套的循环,嵌套的循环包括内部 循环和外部循环;平整内部循环;以及级联内部循环的迭代,迭代与内部循环的一个或更 多个调用相关联。
[0057] 另一示例方法包括上述操作,并且还包括配置向量处理器以提供断定的向量指令 执行和循环迭代范围选择。
[0058] 另一示例方法包括上述操作,并且还包括在向量处理器上执行选择的范围。
[0059] 另一示例方法包括上述操作,并且执行还包括检测后向依赖的识别中的错误;并 且校正循
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1