使用硬件指针的simd核心中的发散分支解决方案的制作方法_2

文档序号:9332647阅读:来源:国知局
(ID)。
[0032] 索引空间可定义在有充足的硬件支持的情况下并行地执行的工作项目的总数量。 例如,索引空间可定义280个工作项目,但是GPU可在任何给定的时间支持64个工作项目 的同时执行。工作项目的总数量可定义全局工作大小。工作项目可进一步分组成工作组。 每个工作组可具有独特标识符(ID)。给定的工作组内部的工作项目可以能够互相通信并 且使执行同步并且调整存储器访问。大量工作项目可被聚类成波阵面以便以SHffi方式在 GPU上同步执行。关于以上针对总共280个工作项目的实施例,波阵面可包括64个工作项 目。
[0033] 指令102-108可被提取并且进入具有相关联数据的S頂D管道。指令104可以是 控制流程转移指令,如条件性分支。指令106可以是当条件为真时被执行的路径上的第一 指令。指令108可以是当条件为假时,被执行的路径上的第一指令。例如,分支指令104可 与高级语言程序中的IF语句相关联。指令106可与高级语言程序中的THEN语句相关联。 指令108可与高级语言程序中的ELSE语句相关联。
[0034] 给定的行内部的计算单元中的每一个可以是相同的计算单元。这些计算单元中的 每一个可在相同指令但是在与不同工作项目相关联的不同数据上操作。如图所示,工作项 目中的一些通过由条件性分支指令104提供的测试,而其他工作项目未通过测试。SHffi管 道内部的控制逻辑可执行可用路径中的每一个并且选择性地禁用对应于并未选择当前路 径的工作项目的执行单元,如计算单元。例如,在执行If-Then-Else构造语句期间,在SIMD 体系结构的每一列的内部是被配置来执行"Then"(路径A)和"Else"(路径B)路径的执 行单元。
[0035] 因为第一工作项目和第二工作项目在第三工作项目继续其正在进行的执行时停 止执行并且等待,所以并行执行的效率可能被降低。因此,在执行分支指令104后,在给定 的行中并不是所有的计算单元都是活动的计算单元110。如图所示,一个或多个计算单元是 已被禁止执行的不活动的计算单元112。如果大量计算单元在给定的管阶段期间不活动,那 么SHffi核心的效率和吞吐量被降低。在一个实施方案中,"Else"路径是函数调用的返回。 函数调用的执行结束,并且对应的工作项目变得空闲。然而,SHffi核心中相邻的工作项目 可继续执行。
[0036] 现在转到图2,展示了示出控制流程图200的一个实施方案的概括性框图。一般来 说,控制流程图可由编译器优化器和静态分析工具使用。控制流程图200可表示程序或程 序的一部分在其执行期间可能遍历的路径。在控制流程图中,图中的每个节点表示一个基 本块。大多数表示包括入口块(通过这个入口块,控制进入控制流程图)和出口块(通过 这个出口块,控制退出控制流程图)。
[0037] 在编译期间,软件应用程序可给控制流程图200提供从基本块0 (BB 0)编号到基 本块7(BB 7)的八个基本块(BB)。尽管展示八个基本块,但是在其他实施方案中,可使用另 一数量的基本块。对于控制流程图200,基本块1是入口块并且基本块6是出口块。基本块 0-7中的每一个是具有一个入口点和一个出口点的直线指令序列。控制流程图200可表示 循环。在循环内,控制流程图200可表示具有基本块1-4的IF-THEN-ELSE构造和具有基本 块4-6的IF构造。
[0038] 现参照图3,展示了示出用于控制流程图的执行序列300的一个实施方案的概括 性框图。执行序列310表示当被分配给SHffi管道时用于先前所示控制流程图200的典型 执行序列。用于单个循环迭代的执行时间是循环内部的基本块(如BB 1至BB 6)中的每 一个的执行时间的总和。然而,对于给定的工作项目和对应的硬件执行道,BB 2和BB 3中 只有一个被执行。类似地,针对给定的工作项目,可以跳过BB 5。尽管针对给定的工作项目 可以不执行特定基本块,但是相关联的执行时间仍然是用于循环迭代的执行时间的总和的 一部分。
[0039] 执行序列320表示当被分配给修改后的SMD管道时用于先前所示控制流程图200 的替代性执行序列。用于单个循环迭代的执行时间是单个循环迭代中实际被执行的基本块 的执行时间的总和,而不是循环内部的基本块中的每一个的执行时间。执行序列320转换 控制流程图200的执行。编译器可在将源代码编译成目标代码期间进行这种转换。
[0040] 在一些实施方案中,编译器在每个基本块的结束处产生代码,其中当被执行时,所 示代码识别下一个要执行的基本块。可在基本块的结束处插入所产生的代码。或者,可在 基本块的结束处插入分支指令,以在将控制转移至下一个基本块之前将控制流程转移至附 加的代码。附加的代码由BBC表示,所述BBC是指中央的基本块。当被执行时,每个分支基 本块(如BB UBB 4和BB 6)识别要将控制转移至的下一个基本块。识别是基于分支解 析,分支解析进一步基于特定的数据记录和分支指令。当被执行时,BBC从每个工作项目接 收目标基本块的地址并且设置线程寄存器来执行相应的目标基本块。在S頂D管道中正被 执行的不同工作项目之间,给定的工作项目具有用于控制流程转移指令(如分支语句、跳 跃语句和条件语句)的单个目标。
[0041] 在执行序列320中,在BB 4完成时,第一工作项目可分支至BB 5并且将对应的 地址传递至BBC。在BB 4完成时,第二工作项目可分支至BB 6并且将对应的地址传递至 BBC。目标处理器可创建动态超长指令字(DVLIW),其包括来自将要被同时执行的目标基本 块中的每一个的指令。当被目标处理器执行时,由编译器产生的代码可更新下一个要执行 的DVLIW的大小,其对应于下一个程序计数器(PC)值。另外,当被执行时,所产生的代码可 更新正在给定的并行执行道上执行的给定工作项目和指向给定PC寄存器的程序计数器标 识符(PC ID)之间的映射。给定PC寄存器可保存指向下一个要提取的DVLIW内部的指令 中的相关联一个的指针或地址。
[0042] 参照图4,展示了示出用于处理器的SHffi微型体系结构的逻辑布局400的一个实 施方案的概括性框图。处理器具有用于存储数据和指令的动态随机存取存储器(DRAM)450。 在一些实施方案中,除了 DRAM之外还使用给定等级的缓存存储器子系统。如图所示,处理 器可具有与用于每行计算单元的控制逻辑420成组的相对较小的缓存存储器子系统430。 可用管道输送处理器内部的数据流,尽管为了简化说明并未展示存储元件,如管道寄存器。 在给定的管道阶段中,如果这个阶段中的相关联指令基于先前未通过的测试(如并未接受 的分支)而并未被执行,那么计算单元可能未使用。
[0043] S頂D管道包括工作项目460,工作项目460包括道A-F。道A-F中的每一个可对 应于包括计算单元的垂直并行硬件道中的相应一个。SHffi管道包括多个程序计数器(PC) 寄存器466a-466g。PC寄存器466a-466g中的每一个可存储指向下一个将要从存储器(如 i缓存)提取的DVLIW内部的相关联指令的指针值或地址。动态超长指令字(DVLIW) 464包 括多个指令,如指令A至指令G。DVLIW 464内部的指令A至指令G中的每一个表示控制流 程图中的执行踪迹。DVLIW 464可基于存储在PC寄存器466a-466g中的有效指针值来生 成和布局。包括SHffi管道的处理器还可包括存储DVLIW 464的大小或长度的大小寄存器 468。在一些实施方案中,大小可以是表示可变长度DVLIW内部的指令数量的一个整数。
[0044] 管道可另外包括矢量寄存器462。矢量寄存器462可包括用于并行执行道中的每 一个的条目、字段或比特范围。每个条目可包括总数量的比特,其包括用来识别PC寄存器 466a-466g中的给定一个的第一数量的比特以及用来支持特殊代码的第二数量的比特。特 殊代码可识别等待或睡眠状态、循环退出状态、用于停止执行而不是用于结束循环的障碍 标识符、事件标识符等等。
[0045] 在一个实施例中,工作项目460内部的道B可对应于SHffi管道中从左边开始数的 第二垂直执行道。存储在矢量寄存器462中的"PC B"可与道B相关并且指向PC寄存器 466b。PC寄存器466b可存储指向DVLIW 464内部的指令B的地址或指针值。因此,道B可 接收将要处理的指令B。
[0046] 尽管未展示,但是指令缓存(i缓存)可包括用于同时接收多个PC值的多个端口。 在给定的时钟周期内,i缓存可同时提取DVLIW 464中的一个或多个指令。i缓存可使用存 储在PC寄存器466a-466g中的多个已接收的有效PC值。除了存储在PC寄存器466a-466g 中的多个指针或地址,i缓存还可接收存储在大小寄存器468中的大小。i缓存可具有用于 访问相同的有效缓存行或缓存组中的一个或多个指令的多个数据端口。再次,要提取的有 效指令的数量可等于来自大小寄存器468的已接收大小。
[0047] 现参照图5,展示了示出用于执行的代码排列500的一个实
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1