当前位置: 首页 > 专利查询>英特尔公司专利>正文

使用写入掩码的具有SIMD架构的寄存器分配制造技术

技术编号:6064265 阅读:264 留言:0更新日期:2012-04-11 18:40
单指令多数据处理器可以通过识别在编译期间具有不兼容写入掩码的生命期来实现寄存器分配。然后,在冲突图中,在具有不兼容掩码的生命期之间添加边,以使得这些生命期将不会被分派给相同物理寄存器。

Register allocation with SIMD schema using write mask

A single instruction multiple data processor can achieve register allocation by identifying the lifetime of an incompatible write mask during compilation. Then, in the conflict diagram, edges are added between the lifetime of an incompatible mask so that these lifetimes will not be assigned to the same physical register.

【技术实现步骤摘要】
使用写入掩码的具有SIMD架构的寄存器分配
技术介绍
本专利技术总体上涉及处理器,并且具体地涉及单指令多数据处理器。单指令多数据(SIMD)处理器是在其中每一个指令可以并行地操作多个数据元素的处理器。一些单指令多数据处理器可以以不同长度进行操作,例如SIMD8、SIMD16,或 SIMD32。物理SIMD寄存器具有可以用来存储多个小数据元素的大量比特。操作的模式可以大致的描述为SIMDmxn,其中“m”是描述向量大小的数值项,以及“η”是在SIMD中执行的并发程序流的数量。SIMD8,SIMDlxS的简称,基于阵列数据结构的结构来表示SIMD操作, 其中一个寄存器包含由八个向量构成的一个数据元素(同一个)。有效地,存在八个并发程序流。SIMD16是SIMDlxl6的简称,其中每一个SIMD指令对包含由16个向量构成的一个数据元素(同一个)的一对寄存器进行操作。SIMD16具有16个并发程序流。写入掩码(write mask)可以用于允许通过一个控制流分支来计算寄存器的一部分并通过另一控制流分支来计算寄存器的另一部分。当用一个控制流分支中的一个掩码写入的寄存器被用并行控制流分支中不同的掩码写入时,可能发生执行错误。例如,简单执行错误在将常量数据块加载到在“那么”(then)分支中也被写入的寄存器中的指令的“并行”分支中使用“无掩码”修饰符(modifier)。具有无掩码修饰符的指令可以重写在“那么”分支中写入的数据。如果省略无掩码修饰符或如果将不同寄存器用作所述块加载的目的地,那么将重写没有意义的数据。然而,在该情况下,需要无掩码修饰符,并且大部分寄存器分配算法将允许相同目的地用于每一个指令。通常地,这意味着除非所有的“并行”分支使用相同类型的掩码,例如相同宽度的掩码,否则不可以使用掩码修饰符或写入掩码。这种无法使用具有不同写入掩码类型的写入掩码或掩码修饰符可能导致效率降低,因为使用较少数量的并发程序流。附图说明图1是本专利技术的一个实施例的流程图;图2是根据一个实施例的图1中示出的流程图的构建阶段的流程图;图3是假设的控制流图;图4是假设的支配树;图5是根据本专利技术的另一实施例的构建阶段的流程图;以及图6是根据一个实施例的计算机系统的示意性描述。具体实施例方式根据本专利技术的一些实施例,可以在寄存器分配算法的构建阶段之前或期间检测不能具有不兼容(即,冲突)的写入掩码的生命期(live range) 0因此,可以检测冲突并可以采取纠正动作。这与传统技术形成对比,所述传统技术简单地确定是否可能存在冲突并且采取纠正动作,而不管冲突是否事实上已经发生。根据一些实施例,可以通过为冲突图增加边来修补这些冲突。这与可以简单地排除两种不同单指令多数据模式的使用的传统技术形成对比。因此,例如,在允许SIMD8和 SIMD16 二者的架构中,在一些传统的方法中,只有使用较小数量的流的模式可以被使用或只有写入掩码的较低部分可以被使用,以避免冲突的可能性。在一些实施例中,可以使用图着色寄存器分配算法来为特定的寄存器分配变量和生命期。在这种情况下,如图1所说明的,可以将检测和冲突消解二者添加到寄存器分配算法的构建阶段。寄存器分配是将程序变量分派到少数量的处理器寄存器中的过程。总的目标是将尽可能多的操作数保持在寄存器中以最大化结果程序的执行速度。已知不同的寄存器分配机制,包括装箱、诸如Chow式分配器的基于优先级的图着色、诸如Chaitin式分配器的自底向上的图着色,以及线性扫描寄存器分配方法(常用在即时(JIT)编译器中)。根据本专利技术的一些实施例,使用了 Chaitin-Briggs图着色寄存器分配算法,但是在其他实施例中,可以使用其他寄存器分配算法。寄存器分配算法试图保证在并行控制流分支中不使用不兼容的掩码来写入寄存器。在一些实施例中,这可以通过使用图1中所示的图着色寄存器分配算法10来完成。思想是将尽可能多的变量分配到寄存器并且只在必要时将变量抛出到主存储器。根据使用 Chaitin-Briggs图着色的实施例,在重编号阶段12,每一个变量被给予其自身唯一编号的逻辑寄存器。该重编号阶段也可以被称为寄存器变量识别。在构建阶段14,获得冲突图。变量和生命期被表示为无向图中的顶点,并且当两个顶点(也被称为“结点”)对应的变量由于同时存在而冲突时可以通过边将它们连接起来。 可以将该图的顶点着色视为寄存器分配,其中由顶点颜色来表示每一个寄存器并且没有顶点具有与其邻居相同的颜色。生命期是变量活动的时间间隔。在一些实施例中,可以可互换地看待变量和生命期。当两个变量同时存在并且由此冲突时在它们之间画一条边。因此,冲突变量需要在不同的寄存器位置处存在或在图中具有不同的颜色以避免冲突。接着,合并阶段16试图优化每一个图的路径。当可能时,通过用一个变量取代两个不冲突的变量来合并结点以减少图着色问题的大小。接着,在框18计算抛出成本。在构建冲突图之后,考虑到寄存器数量有限,因此可能不能将所有的结点映射到寄存器。所以可以抛出或移动一些结点到外部存储器。目标是抛出导致最小抛出成本的那些结点。抛出成本是将结点抛出到外部存储器的成本,并且可以取决于多个因素,包括使用变量的频率。可以使用由于抛出导致的执行性能的降低的启发式测量来对抛出哪些结点进行优先化。该优先化确定将结点移到外部存储器的顺序。接着,在简化/选择阶段20,通过将可用颜色应用到每一个顶点结点来完成图的实际着色,其中所述颜色对应不同的寄存器。这可以一个块接一个块地完成。块简单地说是要编译的代码块。阶段20之后,在框22之中实际确定抛出代码。抛出代码是使得变量被抛出到外部存储器所需的代码。该流程针对所有块在移动到下一级之前执行。然后,在简化/选择级之后,随后的循环在确定抛出代码之后回到开始。接着参考图2,根据一个实施例,构建阶段14在菱形30处从确定两个写入掩码之间是否可能存在冲突开始。如果是,那么在框32,实际确定不能具有不兼容写入掩码的那些生命期。接着,在框34将边添加到冲突图,以使得具有不兼容写入掩码的生命期不被分派给相同的物理寄存器。因此,参考图3,在该例子中,假设的控制流图可以包括入口块,其后是在出口块之前的编号为BBO到BB7的一系列块。该控制流图示出了要被编译的算法的逻辑流。图4示出了图3中示出的控制流图的假设的支配树。在编译器中使用支配树来确定树中哪些基本块是另一基本块的孩子。一个块是一个子块的父亲,也即保证流要通过该父块来到达该子块。例如,在图3的控制流图中,基本块I(BBl)是基本块2(BB2)的父亲, 如图4的支配树所示。因此,支配树指示哪些结点(称为父结点)被遍历以到达其他结点(称为子结点)。支配树可以由编译器根据控制流图而得到,但是编译器不能根据支配树而得到控制流图。在一个实施例中,使用支配树来找到并行分支和并行活动集。并行活动集是不能具有不兼容写入掩码的生命期的集合。与另一基本块并行的基本块是该基本块的支配树前趋(直到支配不在该基本块的支配路径中的出口块的前趋)的直接后继。换言之,并行块可以包括到并行执行分支的入口结点。基本块2是到基本块6的并行执行分支的入口结点。并行块还包括来自并行执行分支的“联合节点”(join node) 0在该例子中,基本块7是基本块6的联合节点本文档来自技高网...

【技术保护点】
1.一种方法,包括:确定在单指令多数据处理器的编译期间不能具有冲突写入掩码的生命期。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:T·扬恰克B·J·阿什博
申请(专利权)人:英特尔公司
类型:发明
国别省市:US

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

1