CN105074657B - 并行管道中的发散分支的硬件和软件解决方案 - Google Patents
并行管道中的发散分支的硬件和软件解决方案 Download PDFInfo
- Publication number
- CN105074657B CN105074657B CN201480017686.3A CN201480017686A CN105074657B CN 105074657 B CN105074657 B CN 105074657B CN 201480017686 A CN201480017686 A CN 201480017686A CN 105074657 B CN105074657 B CN 105074657B
- Authority
- CN
- China
- Prior art keywords
- instruction
- given
- road
- variable
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 27
- 230000004044 response Effects 0.000 claims abstract description 27
- 238000003860 storage Methods 0.000 claims description 39
- 230000007958 sleep Effects 0.000 claims description 14
- 238000013507 mapping Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 abstract description 7
- 238000009826 distribution Methods 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 16
- 238000010276 construction Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000013404 process transfer Methods 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
- G06F9/38873—Iterative single instructions for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Computer Hardware Design (AREA)
Abstract
一种用于在处理器内部的硬件并行执行道上有效地处理指令的系统和方法。响应于已识别的循环内部的给定发散点,编译器将所述已识别的循环内部的指令布置到超长指令字(VLIW)中。至少一个VLIW包括由所述给定发散点和对应汇聚点之间的不同基本块混合的指令。所述编译器生成代码,其中当被执行时,所述代码在运行时将给定的VLIW内部的指令分配给目标处理器内部的多个并行执行道。所述目标处理器包括单指令多数据(SIMD)微型体系结构。对给定的道的分配是基于运行时在所述给定分散点处针对所述给定的道发现的分支方向。所述目标处理器包括用于存储指示的矢量寄存器,所述指示指示了已提取的VLIW内部的哪个给定指令用于相关联的道来执行。
Description
背景
技术领域
本公开涉及计算系统,并且更具体地说,涉及在处理器内部的硬件并行执行道上有效地处理指令。
背景
任务的并行化被用来增加计算机系统的吞吐量。为此,编译器可从程序代码中提取并行化的任务以在系统硬件上并行执行。为了增加在硬件上的并行执行,处理器可包括多个并行执行道,如单指令多数据(SIMD)微型体系结构。与单道微型体系结构或通用微型体系结构相比,这种类型的微型体系结构可以为特定的软件应用程序提供更高的指令吞吐量。受益于SIMD微型体系结构的任务的一些实例包括视频图形渲染、加密和垃圾回收。
在许多情况下,特定的软件应用程序具有数据并行性,其中每个工作项目的执行或并行函数调用在自身内部是数据相关的。例如,第一工作项目可数据独立于第二工作项目,并且第一工作项目和第二工作项目中的每一个被同时安排在SIMD微型体系结构内部的单独并行执行道上。然而,在第一工作项目和第二工作项目中的每一个内部执行的指令量可以是数据相关的。实施为分支指令的条件测试可针对第一工作项目通过,但是针对取决于每个工作项目的数据的第二工作项目未通过。
由于第二工作项目在第一工作项目继续其正在进行的执行时停止执行并且等待,并行执行的效率可能被降低。当只有少数工作项目由于已通过测试而继续执行,而大部分工作项目由于未通过测试而空闲时,低效率增长。
实施方案概述
本发明涵盖用于在处理器内部的硬件并行执行道上有效地处理指令的系统和方法。在各种实施方案中,后端编译器检查软件应用程序的程序指令以布置指令并且生成代码来在目标处理器上目有效地处理指令。目标处理器可包括单指令多数据(SIMD)微型体系结构内部的多个并行执行道。编译器可识别循环和对应的基本块。循环内部的发散点可包括分支指令。例如,在已识别的循环内部的程序指令中可以使用if-elseif-else构造、if-else构造、条件构造等等。在执行发散点和对应汇聚点之间的已翻译的和已编译的程序指令期间,可遍历多个跟踪路径。
在编译期间,响应于已识别的循环内部的给定发散点,编译器可将已识别的循环内部的指令布置到一个或多个超长指令字(VLIW)中。至少一个VLIW可包括由给定发散点和对应汇聚点之间的不同基本块混合的指令。例如,如果给定发散点和对应汇聚点之间存在具有四个指令的基本块A和具有六个指令的基本块B,那么编译器可将指令排列到六个VLIW中。前四个VLIW可包括来自基本块A和基本块B中的每一个的一个指令。第一VLIW可包括来自基本块A和基本块B中的每一个的第一指令。第二VLIW可包括来自基本块A和基本块B中的每一个的第二指令,以此类推。最后两个VLIW可包括与空(nop)成组的来自基本块B的一个指令。编译器可追踪指向VLIW中的每一个的程序计数器(PC)值。
编译器可生成代码来与已翻译和已编译的程序指令一起插入。当被执行时,插入的代码可在运行时将给定VLIW内部的指令分配给目标处理器内部的多个并行执行道。对给定道的分配可基于在运行时在给定分散点处针对给定的道发现的分支方向。继续上述实施例,如果VLIW是由基本块A和基本块B创建的第二VLIW并且给定的道的分支指令已被接受,那么给定的道可被分配第二VLIW内部的基本块A中的第二指令。如果分支指令并未被接受,那么给定的道可被分配第二VLIW内部的基本块B中的第二指令。在各种实施方案中,VLIW具有可变长度。当被执行时,插入的代码可更新对应于下一个PC的VLIW的大小。
在一些实施方案中,处理器可包括单指令多数据(SIMD)微型体系结构内部的多个并行执行道。所述处理器可包括大小寄存器,其用于存储可变长度VLIW的大小。处理器内部的控制逻辑可在相应周期中提取并解码给定VLIW内部的某一数量的指令,所述数量等于已存储大小。多个执行道可同时执行给定VLIW内部的所述数量的指令。处理器可另外包括矢量寄存器,其具有与多个执行道中对应的道相关联的比特范围。所述比特范围可存储偏移量。给定的偏移量可识别已提取的VLIW内部的指令。
参照以下描述和附图可以进一步理解这些实施方案和其他实施方案。
附图简述
图1是单指令多数据(SIMD)管道执行流程的一个实施方案的概括性框图。
图2是控制流程图的一个实施方案的概括性框图。
图3是用于控制流程图的执行序列的一个实施方案的概括性框图。
图4是用于处理器的SIMD微型体系结构的逻辑布局的概括性框图。
图5是目标代码排列的一个实施方案的概括性框图。
图6是用于使用编译技术来优化多个工作项目在处理器中的并行执行的方法的一个实施方案的概括性框图。
图7是用于使用硬件技术来优化多个工作项目在处理器中的并行执行的方法的一个实施方案的概括性框图。
图8是目标代码排列的另一个实施方案的概括性框图。
虽然本发明容易有各种修改和替代形式,但通过举例方式在附图中展示特定的实施方案并且在本文中对其进行详细描述。然而应理解,附图和对实施方案的详细描述并不意图将实施方案限于所公开的特定形式,而相反,实施方案应涵盖属于由所附权利要求书所界定的精神和范围内的所有修改、等同物以及替代方案。
实施方案详述
在以下描述中,阐述了许多特定细节以提供对实施方案的透彻理解。然而,本领域的一般技术人员应当认识到,可能在没有这些特定细节的情况下实现实施方案。在一些情况下,没有详细展示众所周知的电路、结构和技术以避免混淆实施方案。
参照图1,展示了示出单指令多数据(SIMD)管道执行流程100的一个实施方案的概括性框图。指令102-108可被提取并且被发送至具有相关联数据的SIMD管道。展示了并行的垂直执行道内部的多个计算单元。计算单元中的一些是活动的计算单元110。由于在给定的管阶段期间被禁用,其他计算单元是不活动的计算单元112。为了便于说明,未展示控制逻辑和存储元件,如管道寄存器。
硬件计算单元包括硬件,所述硬件进行具有相关联数据的给定工作项目的给定指令的执行。这种硬件可包括算术逻辑单元,所述算术逻辑单元被配置来进行加法、乘法、零检测、按位移位、除法、视频图形和多媒体指令或处理器设计领域的技术人员已知的其他操作。在SIMD管道内部具有并行执行道的处理器的实施例包括图形处理单元(GPU)、数字信号处理(DSP)等等。在一个实施方案中,SIMD管道可位于视频卡上。在另一个实施方案中,SIMD管道可集成在母板上。
SIMD管道可改进在游戏、娱乐、科学和医学领域中使用的广泛多种数据并行应用的计算性能。这类应用通常需要在大量对象上执行相同的程序。因为每个对象独立于其他对象被处理,但是使用相同的操作序列,所以SIMD微型体系结构提供相当大的性能增强。GPU也被考虑用于非图形计算。
软件应用程序可包括函数调用或计算内核和内部函数的集合。软件程序员可定义函数调用,而内部函数可在给定的库中被定义。例如,软件应用程序可在二维(2D)数据阵列(如图像文件)上进行数据处理。软件应用程序可在2D图像的逐个像素基础上或者在二维矩阵的逐个元素基础上进行由软件程序员开发的算法。给定的函数调用可在索引空间上被调用。索引空间也可被称为维度空间。对于数据并行软件应用程序,N维计算域可定义一维空间、二维空间或三维空间,或者索引空间。一个实施例是2D图像内部的像素。
函数调用可与一个或多个数据记录相匹配以产生一个或多个计算工作项目。因此,两个或更多个工作项目可利用单个函数调用的相同指令,但是在不同的数据记录上操作。函数调用可包括创建分叉的控制流程转移指令,而计算机程序中的分叉形通常按常见定义创建软件线程。在索引空间内的给定点处的函数调用的给定实例可被称为“工作项目”。工作项目也可被称为工作单元。继续以上实施例,工作项目可响应于2D图像中的给定像素(给定索引)而使用函数调用中的一个或多个指令在数据记录上操作。通常,工作项目具有相关联的独特标识符(ID)。
索引空间可定义在有充足的硬件支持的情况下并行地执行的工作项目的总数量。例如,索引空间可定义280个工作项目,但是GPU可在任何给定的时间支持64个工作项目的同时执行。工作项目的总数量可定义全局工作大小。工作项目可进一步分组成工作组。每个工作组可具有独特标识符(ID)。给定的工作组内部的工作项目可以能够互相通信并且使执行同步并且调整存储器访问。大量工作项目可被聚类成波阵面以便以SIMD方式在GPU上同步执行。关于以上针对总共280个工作项目的实施例,波阵面可包括64个工作项目。
指令102-108可被提取并且进入具有相关联数据的SIMD管道。指令104可以是控制流程转移指令,如条件性分支。指令106可以是当条件为真时被执行的路径上的第一指令。指令108可以是当条件为假时,被执行的路径上的第一指令。例如,分支指令104可与高级语言程序中的IF语句相关联。指令106可与高级语言程序中的THEN语句相关联。指令108可与高级语言程序中的ELSE语句相关联。
给定的行内部的计算单元中的每一个可以是相同的计算单元。这些计算单元中的每一个可在相同指令但是在与不同工作项目相关联的不同数据上操作。如图所示,工作项目中的一些通过由条件性分支指令104提供的测试,而其他工作项目未通过测试。SIMD管道内部的控制逻辑可执行可用路径中的每一个并且选择性地禁用对应于并未选择当前路径的工作项目的执行单元,如计算单元。例如,在执行If-Then-Else构造语句期间,在SIMD体系结构的每一列的内部是被配置来执行“Then”(路径A)和“Else”(路径B)路径的执行单元。
因为第一工作项目和第二工作项目在第三工作项目继续其正在进行的执行时停止执行并且等待,所以并行执行的效率可能被降低。因此,在执行分支指令104后,在给定的行中并不是所有的计算单元都是活动的计算单元110。如图所示,一个或多个计算单元是已被禁止执行的不活动的计算单元112。如果大量计算单元在给定的管阶段期间不活动,那么SIMD核心的效率和吞吐量被降低。在一个实施方案中,“Else”路径是函数调用的返回。函数调用的执行结束,并且对应的工作项目变得空闲。然而,SIMD核心中相邻的工作项目可继续执行。
现在转到图2,展示了示出控制流程图200的一个实施方案的概括性框图。一般来说,控制流程图可由编译器优化器和静态分析工具使用。控制流程图200可表示程序或程序的一部分在其执行期间可能遍历的路径。在控制流程图中,图中的每个节点表示一个基本块。大多数表示包括入口块(通过这个入口块,控制进入控制流程图)和出口块(通过这个出口块,控制退出控制流程图)。
在编译期间,软件应用程序可给控制流程图200提供从基本块0(BB 0)编号到基本块7(BB 7)的八个基本块(BB)。尽管展示八个基本块,但是在其他实施方案中,可使用另一数量的基本块。对于控制流程图200,基本块1是入口块并且基本块6是出口块。基本块0-7中的每一个是具有一个入口点和一个出口点的直线指令序列。控制流程图200可表示循环。在循环内,控制流程图200可表示具有基本块1-4的IF-THEN-ELSE构造和具有基本块4-6的IF构造。
现参照图3,展示了示出用于控制流程图的执行序列300的一个实施方案的概括性框图。执行序列310表示当被分配给SIMD管道时用于先前所示控制流程图200的典型执行序列。用于单个循环迭代的执行时间是循环内部的基本块(如BB 1至BB 6)中的每一个的执行时间的总和。然而,对于给定的工作项目和对应的硬件执行道,BB 2和BB 3中只有一个被执行。类似地,针对给定的工作项目,可以跳过BB 5。尽管针对给定的工作项目可以不执行特定基本块,但是相关联的执行时间仍然是用于循环迭代的执行时间的总和的一部分。
执行序列320表示当被分配给修改后的SIMD管道时用于先前所示控制流程图200的替代性执行序列。用于单个循环迭代的执行时间是单个循环迭代中实际被执行的基本块的执行时间的总和,而不是循环内部的基本块中的每一个的执行时间。执行序列320转换控制流程图200的执行。编译器可在将源代码编译成目标代码期间进行这种转换。
在一些实施方案中,编译器在每个基本块的结束处产生代码,其中当被执行时,所示代码识别下一个要执行的基本块。可在基本块的结束处插入所产生的代码。或者,可在基本块的结束处插入分支指令,以在将控制转移至下一个基本块之前将控制流程转移至附加的代码。附加的代码由BB C表示,所述BB C是指中央的基本块。当被执行时,每个分支基本块(如BB 1、BB 4和BB 6)识别要将控制转移至的下一个基本块。识别是基于分支解析,分支解析进一步基于特定的数据记录和分支指令。当被执行时,BBC从每个工作项目接收目标基本块的地址并且设置线程寄存器来执行相应的目标基本块。在SIMD管道中正被执行的不同工作项目之间,给定的工作项目具有用于控制流程转移指令(如分支语句、跳跃语句和条件语句)的单个目标。
在执行序列320中,在BB 4完成时,第一工作项目可分支至BB 5并且将对应的地址传递至BB C。在BB 4完成时,第二工作项目可分支至BB 6并且将对应的地址传递至BB C。编译器可创建动态超长指令字(DVLIW),其包括来自将要被同时执行的目标基本块中的每一个的指令。当被执行时,由编译器生成的代码可更新下一个要执行的DVLIW的大小,其对应于下一个程序计数器(PC)值。另外,当被执行时,所生成的代码可更新正在给定的并行执行道上执行的给定工作项目和指向下一个要执行的DVLIW内部的指令的指针之间的映射。所述指针可以是识别下一个要提取的DVLIW内部的指令中的相关联一个的偏移量。
参照图4,展示了示出用于处理器的SIMD微型体系结构的逻辑布局400的一个实施方案的概括性框图。处理器具有用于存储数据和指令的动态随机存取存储器(DRAM)450。在一些实施方案中,除了DRAM之外还使用给定等级的缓存存储器子系统。如图所示,处理器可具有与用于每行计算单元的控制逻辑420成组的相对较小的缓存存储器子系统430。可用管道输送处理器内部的数据流,尽管为了简化说明并未展示存储元件,如管道寄存器。在给定的管道阶段中,如果这个阶段中的相关联指令基于先前未通过的测试(如并未接受的分支)而并未被执行,那么计算单元可能未使用。
SIMD管道包括工作项目460,工作项目460包括道A-F。道A-F中的每一个可对应于包括计算单元的垂直并行硬件道中的相应一个。管道可另外包括矢量寄存器462。矢量寄存器462可包括用于并行执行道中的每一个的条目、字段或比特范围。每个条目可包括总数量的比特,其包括用来识别在相应工作项目上执行的给定踪迹的第一数量的比特以及用来支持特殊代码的第二数量的比特。特殊代码可识别等待或睡眠状态、循环退出状态、用于停止执行而不是用于结束循环的障碍标识符、事件标识符等等。当给定条目中不存储特殊代码时,存储的值可识别用于相关联的道来执行的DVLIW内部的指令中的相应一个。
程序计数器(PC)寄存器466可存储指向下一个要从存储器(如i缓存)中提取的DVLIW的指针值或地址。处理器还可包括大小寄存器468,其存储DVLIW的大小或长度。在一些实施方案中,大小可以是表示可变长度DVLIW内部的指令数量的整数。
DVLIW 464内部的指令A至指令G中的每一个表示控制流程图中的执行踪迹。编译器可在存储器(如i缓存)中布置DVLIW。在一个实施例中,工作项目460内部的道B可对应于SIMD管道中从左边开始数的第二垂直执行道。存储在矢量寄存器462中的偏移量B可与道B相关联并且指向DVLIW 464内部的第一指令,即指令A。因此,道B可接收将要处理的指令A。类似地,工作项目460内部的道A可对应于SIMD管道中最左边的垂直执行道。存储在矢量寄存器462中的偏移量A可与道A相关联并且指向DVLIW 464内部的最后一个指令,即指令G。因此,道A可接收将要处理的指令G。
尽管未展示,但是指令缓存(i缓存)可包括多个实现方式中的一个来支持DVLIW。i缓存可包括多个更小缓存,用来提取对应于DVLIW的给定单个PC的一个或多个指令。相同的PC可取决于DVLIW的大小来对更小缓存中的一个或多个中的有效指令编索引。除了存储在PC寄存器466中的指针或地址值,I缓存还可接收存储在大小寄存器468中的大小。可选地,I缓存可具有用于访问相同的有效缓存行或缓存组中的一个或多个指令的多个数据端口。再次,要提取的有效指令的数量可等于来自大小寄存器468的已接收大小。
现参照图5,展示了示出目标代码排列500的一个实施方案的概括性框图。代码排列500示出用于分别在图2和图3中展示的控制流程图200和随附执行序列320的可由编译器生成的目标代码布局的一个实施方案。基本块代码504表示用于相应基本块的代码。例如,展示了布置在布局500中用于基本块0-3和基本块7的代码的一个副本。展示了布置在布局500中用于基本块4-5的代码的两个副本。布局500中展示了用于基本块6的代码的四个副本。
代码502可由编译器针对区域(如循环)的入口产生并插入。当稍后被执行时,代码502可更新下一个DVLIW的大小并且更新已获取的DVLIW内部的指令和目标处理器中的并行执行道之间的映射。例如,目标处理器内部的大小寄存器和矢量寄存器可使得它们存储的内容由所执行的代码502更新。如图所示,可在基本块0、1和基本块7的开始处插入代码502。
代码506可由编译器针对到发散点(如基本块1、4和基本块6的结束)的过渡产生并插入。当稍后被执行时,代码506可确定DVLIW的大小变化以及已提取的DVLIW内部的指令和目标处理器中的并行执行道之间对应的映射变化。因此,在控制流程图内部的发散点和汇聚点处更新大小和映射。编译器识别DVLIW的大小改变并且映射改变时所在的点。使用表示法BBC(0,1),其中第一索引指示踪迹标识符(ID)并且第二索引指示基本块(BB)ID,用于插入代码506的所识别点可存在于BBC(0,1)、BBC(0,4)、BB C(0,6)、BBC(1,4)、BBC(1,6)、BBC(2,6)和BBC(3,6)处。在这个实施例中的踪迹ID可与对应的偏移量相同。
在目标代码排列500的开始处,代码502进行初始化步骤并且可将DVLIW的大小设定为1。矢量寄存器的条目中的每一个内部的偏移量可被设定为指向BB 0内部的相同指令,如偏移量0。因此,PC可被设定为0或另一个适当的开始地址。如图所示,有四个可能的并行踪迹,但是工作项目的数量可以是独立的。例如,SIMD管道可具有用于处理已分配的工作项目的8个、16个、64个或另一数量的并行执行道。SIMD管道内部的工作项目中的每一个在矢量寄存器中具有存储的0的偏移量并且将会执行相同指令。这个用于每个工作项目的相同指令是来自BB 0的指令。BB 0中的指令是由每个工作项目一个接一个地执行,并且PC在每个指令提取后递增。
在BB 0的执行完成后,循环入口块BB 1即将被处理。在BB 1开始处的代码502维持DVLIW大小为1并且维持用于每个工作项目的偏移量为0。矢量寄存器的条目中的每一个内部的偏移量可被设定为指向BB 1内部的相同指令,如偏移量0。PC可保持在BB 0完成时递增的值。SIMD管道内部的工作项目中的每一个具有在矢量寄存器中存储为0的偏移量并且将会执行相同的指令。用于每个工作项目的这个相同指令是来自BB 1的指令。BB 1中的指令是由每个工作项目一个接一个地执行,并且PC在每个指令提取后递增。
当被执行时,在BB 1结束处的BBC(0,1)处的代码506使已存储的DVLIW大小从1变为2。现在将BB 3内部的指令添加至已提取的DVLIW。另外,当被执行时,BBC(0,1)处的代码506设定矢量寄存器中用于分支至BB 3的工作项目的条目以存储值1。矢量寄存器中用于分支至BB 2的工作项目的条目通过继续存储0保持不变。尽管以这种方式使用值0和1,但是可使用其他数值来设定对应的指示和映射。在这一点上,DVLIW具有由两个单独基本块BB 2和BB 3混合的两个指令。随着PC继续递增,已提取的DVLIW继续包括来自这两个基本块的混合指令,直到BB 2的处理完成。编译器可能已经以这种方式将指令在存储器中布置为混合的以便支持DVLIW内部的指令的并行执行。
在BB 2完成时,DVLIW的大小保持为2。矢量寄存器中已存储的偏移量也维持它们的值。然而,现在偏移量0对应于BB 4中的指令,而不是BB 2中的指令。在BBC(0,4)完成时,在踪迹0中的BB 4的结束处的代码506更新大小寄存器以存储3并且更新用于分支至BB 6的工作项目的条目以存储2。在将单个PC和已存储的大小发送至i缓存之后,从i缓存提取长度为3的DVLIW。DVLIW包括来自BB 3或BB 4、BB 5和BB 6的混合指令。在矢量寄存器中具有相关联的存储为0的偏移量的工作项目从BB(0,5)获取已提取的指令。在矢量寄存器中具有相关联的存储为1的偏移量的工作项目取决于PC已递增多少而从BB(1,3)或BB(1,4)获取结果。在矢量寄存器中具有相关联的存储为2的偏移量的工作项目从BB(2,6)获取已提取的指令。编译器先前已经在存储器中以这种方式布置指令,使得单个PC和已存储的大小向i缓存指示要提取的DVLIW的类型。
在BBC(1,4)完成时,在踪迹1中的BB 4的结束处的代码506更新大小寄存器以存储4并且更新用于分支至BB(3,6)的工作项目的条目以存储3。在将单个PC和已存储的大小发送至i缓存之后,从i缓存提取长度为4的DVLIW。DVLIW包括来自BB 6的第一副本、BB 5的单个副本、BB 6的第二副本和BB 6的第三副本的混合指令。在矢量寄存器中具有相关联的存储为0的偏移量的工作项目从BB(0,6)获取已提取的指令。在矢量寄存器中具有相关联的存储为1的偏移量的工作项目获取来自任一BB(1,5)的结果。在矢量寄存器中具有相关联的存储为2的偏移量的工作项目从BB(2,6)获取已提取的指令。在矢量寄存器中具有相关联的存储为3的偏移量的工作项目从BB(3,6)获取已提取的指令。编译器先前已经在存储器中以这种方式布置指令,使得单个PC和已提取的大小向i缓存指示要提取的DVLIW的类型。
对于BB(0,6)、BB(1,6)、BB(2,6)和BB(3,6)中的每一个,控制流程在BB 6结束处可返回至BB 1以用于另一个循环迭代或者从循环中终止。在对应的记录内部的相关联分支指令和数据将在运行时确定控制流程方向。一些工作项目可继续另一个迭代,而其他工作项目可退出循环。可在矢量寄存器中的对应条目中存储特殊的代码状态以指示采用哪个路径。响应于确定给定的工作项目将会继续另一个循环迭代并且多个工作项目中的至少一个其他工作项目仍在处理用于相关联基本块的代码,可针对所述给定的工作项目在矢量寄存器中的相关联条目中存储睡眠状态编码。
响应于确定给定的工作项目将会退出循环,可针对所述给定的工作项目在矢量寄存器中的相关联条目中存储退出状态编码。睡眠状态编码和退出状态编码中的每一个不同于在循环迭代期间使用的偏移量并且相互不同。在一些实施方案中,对于处于睡眠状态或退出状态的给定工作项目,代码506停止给定工作项目的执行并且在存储器(如堆栈存储器)中存储至少下一个程序计数器(PC)和工作项目标识符(ID),以便快速检索。
在BB 6结束处的代码506可检查工作项目中的每一个的状态。响应于确定每个工作项目处于睡眠状态或每个工作项目处于退出状态,处理器在执行代码506的同时可通过分支至相应已存储的下一个PC来重启每个工作项目的执行。响应于确定每个工作项目已停止并且至少一个工作项目处于与另一个工作项目不同的状态,处理器在执行代码506的同时可通过分支至相应已存储的下一个PC来仅重启处于睡眠状态的工作项目的执行。如果至少一个工作项目仍在处理循环中的基本块内部的指令,那么对所述至少一个工作项目的执行继续而处于特殊状态的其他工作项目等待。脱离睡眠状态的工作项目返回至BB 1。另外,在BB 1开始处的代码502重新初始化矢量寄存器和大小寄存器。脱离退出状态的工作项目分支至BB 7。另外,在BB 7开始处的代码502相应地重新初始化矢量寄存器和大小寄存器。
在上述实施例中,循环具有单个出口。在其他具有多个出口的情形中,可在存储器(如堆栈)中存储对应的状态信息,如至少下一个PC和工作项目ID。随后,可检索状态信息(如从堆栈中弹出它们)用于重启。处于睡眠状态或退出状态的工作项目都可具有存储在存储器(如堆栈)中的状态信息。由于不同的工作项目可在不同的循环迭代处退出循环,可将具有状态信息的多个条目放置在存储器(如堆栈)中。在重启时间,当被执行时,编译器产生的代码可弹出状态信息并且合并用于从相同的下一个PC重启的工作项目的信息。
现参照图6,展示了用于使用编译器技术来最优化多个工作项目在处理器中的并行执行的方法600的一个实施方案。出于讨论目的,以相继次序展示这个实施方案和随后描述的方法的后续实施方案中的步骤。然而,在其他实施方案中一些步骤可以与图示不同的次序发生,一些步骤可同时进行,一些步骤可与其他步骤结合,并且一些步骤可以不存在。
在块602中,可定位并分析软件程序或子例程。程序代码可由设计者以高级语言(如C语言或另一种语言)书写。这个软件程序可被书写用于编译和执行并行数据应用程序,如在游戏、商业、医疗和其他领域。程序代码可指软件应用程序、子例程、动态链接库的任何部分或其他。路径名可由用户按照命令提示键入。或者,用户名可从给定的目录位置或者其他位置读取,以便开始编译源代码。可在编译期间检查、翻译、优化并且进一步处理程序代码内部的指令。
在一些实施方案中,静态地编译源代码。在这类实施方案中,在前端编译期间,可将源代码翻译成中间表示(IR)。后端编译步骤可将IR翻译成机器代码。静态后端编译可进行更多的转换和优化。在其他实施方案中,使用准时制(JIT)方法编译源代码。在获得系统配置后,JIT方法可产生适当的二进制代码。使用任一方法,编译器可识别函数调用、循环、循环内部的踪迹和程序代码中的基本块。在程序分析期间可构造一个或多个控制流程图。
在各种实施方案中,在处理器(如通用处理器)上编译程序代码。程序代码可被编译用于目标处理器,所述目标处理器包括并行微型体系结构,如SIMD微型体系结构。一个或多个相关联的数据记录可被分配给函数调用以产生一个或多个工作项目。
在检测到程序代码中的任何发散点之前,当已分析的和已翻译的指令出现在程序代码中时,编译器可将它们布置在存储器中。基本上,编译器可能正在创建大小为1的VLIW。如果编译器检测到在已识别的循环内部的发散点(条件块604),那么在块606中,编译器可创建超长指令字(VLIW)。编译器可通过在存储器中布置由发散点和对应汇聚点之间的多个基本块混合的指令来创建VLIW。可布置和分配一个或多个相关联的数据记录来伴随已创建的VLIW内部的混合指令以产生一个或多个相关联的工作项目。
在块608中,可插入生成的代码,其中当被执行时,所述代码将指向VLIW内部的一个指令的偏移量映射到目标处理器内部的多个并行执行道中的一个给定的道。或者,映射可在偏移量和工作项目ID之间。在块610中,可插入生成的代码,其中当被执行时,所述代码更新下一个要提取的VLIW的大小。在块612中,可在循环的结束处插入生成的代码,其中当被执行时,所述代码存储关于将要进入睡眠或退出状态的执行道的状态信息。可如先前实施例中所描述那样在程序代码中特定的点插入生成的代码。与发散点和汇聚点相关联的基本块可具有更多插入的代码,用于维持对映射和DVLIW大小的更新。
现参照图7,展示了用于使用硬件技术来最优化多个工作项目在处理器中的并行执行的方法700的一个实施方案。出于讨论目的,以相继次序展示这个实施方案和随后描述的方法的后续实施方案中的步骤。然而,在其他实施方案中一些步骤可以与图示不同的次序发生,一些步骤可同时进行,一些步骤可与其他步骤结合,并且一些步骤可以不存在。
在块702中,将相关联的数据记录分配给已编译的代码以产生多个工作项目。在块704中,将工作项目安排给具有单指令多数据(SIMD)微型体系结构的目标处理器。在块706中,使用已更新的VLIW大小和单个程序计数器(PC),从存储器(如i缓存)提取长度等于已更新的VLIW大小的VLIW。VLIW中的指令可以来自循环内部的发散点和汇聚点之间的单独基本块。
汇聚点在块708中,读取矢量寄存器以获得在已提取的VLIW内部的指令和处理器中正在执行工作项目的并行执行道之间的映射信息。映射信息可针对给定的工作项目和对应的执行道确定要处理VLIW中的哪个指令。在块710中,使用并行执行道同时执行VLIW中的指令。如果针对给定的工作项目到达循环的结束(条件块712)并且如果没有检测到活动的工作项目(条件块714),那么在块716中,读取关于分配给并行执行道的工作项目中的每一个的相应状态信息。状态信息可包括至少下一个PC和工作项目ID。状态信息可用于继续并行执行道内部的执行。如果针对给定的工作项目到达循环的结束(条件块712)并且如果检测到任何活动的工作项目(条件块714),那么在块718中,存储关于给定的工作项目的状态信息以供以后使用。给定的工作项目使执行停止并且可被置于睡眠或退出状态。
现参照图8,展示了示出目标代码排列800的另一个实施方案的概括性框图。代码排列800示出用于分别在图2和图3中展示的控制流程图200和随附执行序列320的可由编译器生成的目标代码布局的一个实施方案。代码502-506可进行与先前所描述功能相同的功能。
基本块的大小在编译时是已知的。编译器可布置并且安排程序代码的指令以使初始化代码最小化并且减小DVLIW的大小。在使用控制流程图200和目标代码排列500的前一实施例中,使用BB 6的四个副本。编译器可通过引入间隙来减少踪迹和附随偏移量的数量。间隙可利用空操作(nop operation)。
这里可使用之前描述的关于代码排列500的步骤。在BB 2完成时,DVLIW的大小保持为2。然而,已提取的DVLIW内部的两个指令中的一个是在排列800中提供间隙的空操作。偏移量0对应于空操作并且偏移量1对应于BB 3中的指令。在BB 3完成时,DVLIW从2减小至1。现在偏移量0对应于BB 4中的指令并且偏移量1对应于空操作。
在BBC(0,4)完成时,踪迹0中的BB 4的结束处的代码506将大小寄存器从1更新为2。代码506更新用于分支至BB 6的工作项目的条目以存储1。在将单个PC和已存储的大小发送至i缓存之后,可从i缓存提取长度为2的DVLIW。DVLIW包括来自BB 5和BB 6的混合指令。在矢量寄存器中具有相关联的存储为0的偏移量的工作项目从BB(0,5)获取已提取的指令。在矢量寄存器中具有相关联的存储为1的偏移量的工作项目从BB(1,6)获取已提取的指令。
在BB(1,6)完成时,代码506将DVLIW的大小从2更新为1。对应于BB(1,6)的工作项目停止执行,存储状态信息,并且等待,直到在下一个PC处重启执行。下一个PC可指向BB 1或BB 7。其他步骤可如之前所描述那样进行。代码排列800响应于确定在检测到的给定发散点和对应汇聚点之间的第一踪迹路径小于在给定发散点和对应汇聚点之间的第二踪迹路径示出,编译器可使无操作与VLIW中对应于第二踪迹路径的指令成组,所述第二踪迹路径是在第一踪迹路径的完成和对应汇聚点之间创建的。
对于之前描述的实施方案中的每一个,进一步的并行化可发生,其中代码是在循环的外部与循环内部的代码并行化。例如,用于BB 7的程序代码可与BB 1并行化以终止用于完成循环的工作项目的程序。另外,响应于检测到对应于VLIW内部的资源独立指令而不是单个指令的偏移量,相关联的工作项目和执行道可在执行道内部同时执行多个资源独立指令。
此外,编译器可使用寄存器分配来减小DVLIW的大小。程序代码可包括以下陈述式:X=(A+B)+(B+M)。这里,两个操作使用相同的操作码。第一踪迹包括加法操作,如T1=A+B。第二踪迹包括加法操作,如T2=C+D。有工作项目使用来自具有偏移量(如0)的基本块X(BB X)的T1。有其他工作项目使用来自具有偏移量(如1)的BB Y的T2。如果第一操作数对“C”和“A”、第二操作数对“B”和“D”以及结果数对“T1”和“T2”分别被分配给BB X和BB Y中的相同寄存器,那么表达式r3=r1+r2可用作大小为1的DVLIW。对应的偏移量可被设定为0以节省解码时间或释放槽。
应注意的是,上述实施方案可包括软件。在这种实施方案中,实施方法和/或机制的程序指令可被传送或存储在计算机可读介质上。被配置来存储程序指令的各种类型的介质是可获取的并且包括硬盘、软盘、CD-ROM、DVD、闪存、可编程ROM(PROM)、随机存取存储器(RAM)和各种其他形式的易失性或非易失性存储器。一般来说,计算机可存取存储介质可包括在用于向计算机提供指令和/或数据期间可由所述计算机存取的任何存储介质。例如,计算机可读存储介质可包括存储介质,如磁性或光学介质(例如磁盘(固定的或可移动的))、磁带、CD-ROM或DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW或蓝光。存储介质还可包括易失性或非易失性存储介质,如RAM(例如,同步动态RAM(SDRAM))、双倍数据速率(DDR、DDR2、DDR3等)SDRAM、低功率DDR(LPDDR2等)SDRAM、Rambus DRAM(RDRAM)、静态RAM(SRAM等)、ROM、闪存、可经由外围接口(如通用串行总线(USB)接口)访问的非易失性存储器(例如,闪存)等。存储介质可包括微机电系统(MEMS),以及可经由通信介质(如网络和/或无线电线路)访问的存储介质。
另外,程序指令可包括以高级编程语言(如C语言)或设计语言(HDL)(如Verilog、VHDL)或数据库格式(如GDS II流格式(GDSII))对硬件功能的行为级描述或寄存器传输级(RTL)描述。在一些情况下,所述描述可以由合成工具读取,所述合成工具可对描述进行合成以从合成库产生包括一系列门的网表。所述网表包括门集合,所述门还表示包括系统的硬件的功能性。随后可放置或选路发送所述网表以产生描述要应用于掩模的几何形状的数据集。所述掩模随后可以用于各种半导体制造步骤以产生对应于系统的一个半导体电路或多个半导体电路。或者,根据需要,计算机可存取存储介质上的指令可以是所述网表(带有或不带有合成库)或数据集。或者,可利用指令以便由来自供应商(如和Mentor)的基于硬件的类型的模拟器进行模拟。
尽管已相当详细地描述了以上实施方案,但一旦完全了解以上公开内容,各种变化和修改对所属领域的技术人员将变为显而易见。所附权利要求书意图被解释为涵盖所有这类变化和修改。
Claims (20)
1.一种非暂时性计算机可读存储介质,其存储被配置用于由计算机系统的至少一个处理器执行的至少一个程序,其中所述至少一个程序包括可由处理器执行来进行以下操作的指令:
识别多个程序指令内部的循环和对应的基本块;并且
响应于检测多个程序指令的已识别的循环内部的给定发散点,将所述已识别的循环内部的多个指令布置到多个可变长度超长指令字中,其中所述已识别的循环内部的所述给定发散点可包括分支指令,其中至少一个可变长度超长指令字包括由所述给定发散点和对应汇聚点之间的不同基本块混合的多个指令;以及
将进行如下操作的程序代码添加到所述多个程序指令中:
更新大小寄存器,以指示针对可变长度超长指令字要提取的指令的数量;以及
更新矢量寄存器,以存储可变长度超长指令字的指令与目标处理器内的多个并行执行道之间的映射。
2.如权利要求1所述的非暂时性计算机可读存储介质,其中响应于检测已识别的循环内部的给定发散点,所述程序指令还可执行以在运行时将至少一个可变长度超长指令字内部的所述多个指令分配给目标处理器内部的多个并行执行道,所述目标处理器包括单指令多数据微型体系结构。
3.如权利要求2所述的非暂时性计算机可读存储介质,其中所述程序指令可执行,以至少部分基于在运行时在所述给定发散点处针对给定的执行道发现的分支方向将所述多个指令中的一个指令分配给所述给定的执行道。
4.如权利要求1所述的非暂时性计算机可读存储介质,其中由所述大小寄存器指示的指令数量进一步指示不同基本块的数量,所述可变长度超长指令字从所述不同基本块中获得其指令。
5.如权利要求4所述的非暂时性计算机可读存储介质,其中响应于所述检测到的给定发散点和所述对应汇聚点之间的第一踪迹路径小于第二踪迹路径,所述程序指令可执行以使空操作在一个或多个可变长度超长指令字中与对应于所述第二踪迹路径的指令成组。
6.如权利要求1所述的非暂时性计算机可读存储介质,其中为了存储所述可变长度超长指令字的指令与多个并行执行道的道之间的映射,所述程序代码在矢量寄存器内部的特定比特范围中写入偏移量,所述特定比特范围与所述多个并行执行道中对应的道相关联,其中所述偏移量识别用于由所述多个并行执行道中对应的道来执行的可变长度超长指令字内部的给定指令。
7.如权利要求6所述的非暂时性计算机可读存储介质,其中响应于给定踪迹已到达所述已识别的循环的结束,所述程序指令可执行以:
响应于在运行时确定所述给定踪迹被安排来分支回到所述已识别的循环的开始,在所述矢量寄存器内部的对应比特范围中写入睡眠状态;并且
响应于在运行时确定所述给定踪迹被安排来分支退出所述已识别的循环,在所述矢量寄存器内部的所述对应比特范围中写入退出状态。
8.如权利要求7所述的非暂时性计算机可读存储介质,其中响应于所述给定踪迹处于所述睡眠状态或所述退出状态,所述程序指令可执行以:
停止所述给定踪迹的执行;并且
存储用于所述给定踪迹的至少下一个程序计数器和工作项目标识符。
9.如权利要求8所述的非暂时性计算机可读存储介质,其中响应于每个工作项目处于睡眠状态或每个工作项目处于退出状态,所述程序指令可执行以在相应已存储的下一个程序计数器处重启每个工作项目的执行。
10.如权利要求8所述的非暂时性计算机可读存储介质,其中响应于每个工作项目被停止并且至少一个工作项目处于与另一个工作项目不同的状态,所述程序指令可执行以在相应已存储的下一个程序计数器处仅重启处于睡眠状态的工作项目的执行。
11.一种处理器,其包括:
单指令多数据微型体系结构内部的多个并行执行道;
大小寄存器,其被配置来存储数值,所述数值指示针对可变长度超长指令字要提取的指令的数量;以及
矢量寄存器,其包括多个条目,每个条目对应于所述多个并行执行道中的不同道;
程序计数器寄存器,其被配置来存储可变长度超长指令字的标识;以及
控制逻辑,其被配置来执行程序代码,所述程序代码被配置来进行如下操作:
识别多个程序指令内部的循环和对应的基本块;并且
响应于检测多个程序指令的已识别的循环内部的给定发散点:
将所述已识别的循环内部的多个指令布置到多个可变长度超长指令字中,其中所述已识别的循环内部的所述给定发散点可包括分支指令,其中至少一个可变长度超长指令字包括由所述给定发散点和对应汇聚点之间的不同基本块混合的多个指令;
将进行如下操作的程序代码添加到所述多个程序指令中:
更新大小寄存器,以指示针对可变长度超长指令字要提取的指令的数量;以及
更新矢量寄存器,以存储可变长度超长指令字的指令与目标处理器内的多个并行执行道之间的映射。
12.如权利要求11所述的处理器,其中存储所述可变长度超长指令字的指令与多个并行执行道的道之间的映射,所述控制逻辑被配置来在矢量寄存器内部的特定比特范围中写入偏移量,所述特定比特范围与所述多个并行执行道中对应的道相关联,其中所述偏移量识别用于由所述多个并行执行道中对应的道来执行的可变长度超长指令字内部的给定指令。
13.如权利要求12所述的处理器,其中存储在所述矢量寄存器中的有效偏移量的数量等于存储在所述大小寄存器中的大小,其中响应于检测到对应于所述可变长度超长指令字内部的多个资源独立指令的偏移量,所述多个并行执行道还被配置来在相关联的执行道内部同时执行所述多个指令,其中响应于给定踪迹已到达所述已识别的循环的结束并且所述矢量寄存器内部的对应比特范围指示所述给定踪迹处于睡眠状态或退出状态,所述控制逻辑还被配置来:
停止所述给定踪迹的执行;并且
存储用于所述给定踪迹的至少下一个程序计数器和道标识符。
14.如权利要求12所述的处理器,其中响应于检测到对应于所述可变长度超长指令字内部的多个资源独立指令的偏移量,所述多个并行执行道还被配置来在相关联的执行道内部同时执行所述多个指令。
15.如权利要求12所述的处理器,其中响应于给定踪迹已经到达所述已识别的循环的结束并且所述矢量寄存器内部的对应比特范围指示所述给定踪迹处于睡眠状态或退出状态,所述控制逻辑还被配置来:
停止所述给定踪迹的执行;并且
存储用于所述给定踪迹的至少下一个程序计数器和道标识符。
16.如权利要求15所述的处理器,其中响应于所述多个并行执行道中的每一个处于所述睡眠状态或所述退出状态,所述控制逻辑还被配置来:通过分支至相应已存储的下一个程序计数器,针对每个执行道重启执行。
17.如权利要求15所述的处理器,其中响应于所述多个并行执行道中的每一个道处于所述睡眠状态或所述退出状态,所述控制逻辑还被配置来:通过分支至相应已存储的下一个程序计数器,仅针对处于睡眠状态的执行道重启执行。
18.一种方法,其包括:
识别多个程序指令内部的循环和对应的基本块;
响应于检测已识别的循环内部的给定发散点:
将所述已识别的循环内部的多个指令布置到多个可变长度超长指令字中,其中所述已识别的循环内部的所述给定发散点可包括分支指令,其中至少一个可变长度超长指令字包括由所述给定发散点和对应汇聚点之间的不同基本块混合的指令;
更新大小寄存器,以指示针对可变长度超长指令字要提取的指令的数量,所述指令的数量由下一个程序计数器寄存器来识别;以及
更新矢量寄存器,以存储可变长度超长指令字的指令与目标处理器内的多个并行执行道之间的映射。
19.如权利要求18所述的方法,其中响应于检测所述已识别的循环内部的所述给定发散点,所述方法还包括:基于在运行时在所述给定发散点处针对给定的执行道发现的分支方向,在运行时将所述至少一个可变长度超长指令字内部的指令分配给目标处理器内部的多个并行执行道,所述目标处理器包括单指令多数据微型体系结构。
20.如权利要求19所述的方法,其中为了在运行时将给定的可变长度超长指令字内部的指令分配给所述多个并行执行道,所述方法还包括:存储与所述多个并行执行道中对应的道相关联的指令,其中所述与所述多个并行执行道中对应的道相关联的指令识别用于相关联的执行道来执行的所述给定的可变长度超长指令字内部的给定指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/753,098 | 2013-01-29 | ||
US13/753,098 US9830164B2 (en) | 2013-01-29 | 2013-01-29 | Hardware and software solutions to divergent branches in a parallel pipeline |
PCT/US2014/013455 WO2014120690A1 (en) | 2013-01-29 | 2014-01-28 | Hardware and software solutions to divergent branches in a parallel pipeline |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105074657A CN105074657A (zh) | 2015-11-18 |
CN105074657B true CN105074657B (zh) | 2018-11-30 |
Family
ID=51224341
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480017686.3A Active CN105074657B (zh) | 2013-01-29 | 2014-01-28 | 并行管道中的发散分支的硬件和软件解决方案 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9830164B2 (zh) |
EP (1) | EP2951682B1 (zh) |
JP (1) | JP6236093B2 (zh) |
KR (1) | KR101787653B1 (zh) |
CN (1) | CN105074657B (zh) |
WO (1) | WO2014120690A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9612811B2 (en) * | 2014-01-21 | 2017-04-04 | Nvidia Corporation | Confluence analysis and loop fast-forwarding for improving SIMD execution efficiency |
EP3106982B1 (en) * | 2015-06-18 | 2021-03-10 | ARM Limited | Determination of branch convergence in a sequence of program instructions |
JP6167193B1 (ja) * | 2016-01-25 | 2017-07-19 | 株式会社ドワンゴ | プロセッサ |
CN110716750A (zh) * | 2018-07-11 | 2020-01-21 | 超威半导体公司 | 用于部分波前合并的方法和系统 |
CN113439256A (zh) * | 2019-02-26 | 2021-09-24 | 三菱电机株式会社 | 信息处理装置、信息处理方法和信息处理程序 |
CN112230995B (zh) * | 2020-10-13 | 2024-04-09 | 广东省新一代通信与网络创新研究院 | 一种指令的生成方法、装置以及电子设备 |
CN113885877A (zh) * | 2021-10-11 | 2022-01-04 | 北京超弦存储器研究院 | 编译的方法、装置、设备及介质 |
US11762762B1 (en) * | 2022-03-24 | 2023-09-19 | Xilinx, Inc. | Static and automatic inference of inter-basic block burst transfers for high-level synthesis |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5794003A (en) * | 1993-11-05 | 1998-08-11 | Intergraph Corporation | Instruction cache associative crossbar switch system |
CN1598762A (zh) * | 2003-09-18 | 2005-03-23 | 国际商业机器公司 | 具有自我修复能力的多并行管线处理器 |
CN101449256A (zh) * | 2006-04-12 | 2009-06-03 | 索夫特机械公司 | 对载明并行和依赖运算的指令矩阵进行处理的装置和方法 |
US7546393B2 (en) * | 2003-05-29 | 2009-06-09 | International Business Machines Corporation | System for asynchronous DMA command completion notification wherein the DMA command comprising a tag belongs to a plurality of tag groups |
US7814487B2 (en) * | 2005-04-26 | 2010-10-12 | Qualcomm Incorporated | System and method of executing program threads in a multi-threaded processor |
CN101930358A (zh) * | 2010-08-16 | 2010-12-29 | 中国科学技术大学 | 一种单指令多数据流结构上的数据处理方法及处理器 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4435758A (en) * | 1980-03-10 | 1984-03-06 | International Business Machines Corporation | Method for conditional branch execution in SIMD vector processors |
EP0374419A3 (en) | 1988-12-21 | 1991-04-10 | International Business Machines Corporation | Method and apparatus for efficient loop constructs in hardware and microcode |
GB2311882B (en) | 1996-04-04 | 2000-08-09 | Videologic Ltd | A data processing management system |
US6003128A (en) | 1997-05-01 | 1999-12-14 | Advanced Micro Devices, Inc. | Number of pipeline stages and loop length related counter differential based end-loop prediction |
US5898865A (en) | 1997-06-12 | 1999-04-27 | Advanced Micro Devices, Inc. | Apparatus and method for predicting an end of loop for string instructions |
US6157988A (en) | 1997-08-01 | 2000-12-05 | Micron Technology, Inc. | Method and apparatus for high performance branching in pipelined microsystems |
US6032252A (en) | 1997-10-28 | 2000-02-29 | Advanced Micro Devices, Inc. | Apparatus and method for efficient loop control in a superscalar microprocessor |
US6366999B1 (en) | 1998-01-28 | 2002-04-02 | Bops, Inc. | Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution |
US6356994B1 (en) | 1998-07-09 | 2002-03-12 | Bops, Incorporated | Methods and apparatus for instruction addressing in indirect VLIW processors |
JP2000259579A (ja) | 1999-03-11 | 2000-09-22 | Hitachi Ltd | 半導体集積回路 |
JP3616556B2 (ja) * | 1999-06-29 | 2005-02-02 | 株式会社東芝 | 拡張命令を処理する並列プロセッサ |
US6986025B2 (en) * | 2001-06-11 | 2006-01-10 | Broadcom Corporation | Conditional execution per lane |
EP1367485B1 (en) * | 2002-05-31 | 2012-10-31 | STMicroelectronics Limited | Pipelined processing |
US7159103B2 (en) | 2003-03-24 | 2007-01-02 | Infineon Technologies Ag | Zero-overhead loop operation in microprocessor having instruction buffer |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD processing |
US7366885B1 (en) | 2004-06-02 | 2008-04-29 | Advanced Micro Devices, Inc. | Method for optimizing loop control of microcoded instructions |
US7330964B2 (en) * | 2005-11-14 | 2008-02-12 | Texas Instruments Incorporated | Microprocessor with independent SIMD loop buffer |
JP2008090744A (ja) | 2006-10-04 | 2008-04-17 | Matsushita Electric Ind Co Ltd | プロセッサおよびオブジェクトコード生成装置 |
WO2008072178A1 (en) | 2006-12-11 | 2008-06-19 | Nxp B.V. | Pipelined processor and compiler/scheduler for variable number branch delay slots |
US7937574B2 (en) | 2007-07-17 | 2011-05-03 | Advanced Micro Devices, Inc. | Precise counter hardware for microcode loops |
US20090327674A1 (en) * | 2008-06-27 | 2009-12-31 | Qualcomm Incorporated | Loop Control System and Method |
US20100281483A1 (en) | 2009-04-30 | 2010-11-04 | Novafora, Inc. | Programmable scheduling co-processor |
KR101700406B1 (ko) | 2010-11-16 | 2017-01-31 | 삼성전자주식회사 | 재구성 가능 어레이의 실행 모드를 동적으로 결정하기 위한 장치 및 방법 |
-
2013
- 2013-01-29 US US13/753,098 patent/US9830164B2/en active Active
-
2014
- 2014-01-28 CN CN201480017686.3A patent/CN105074657B/zh active Active
- 2014-01-28 WO PCT/US2014/013455 patent/WO2014120690A1/en active Application Filing
- 2014-01-28 KR KR1020157023380A patent/KR101787653B1/ko active IP Right Grant
- 2014-01-28 EP EP14746711.2A patent/EP2951682B1/en active Active
- 2014-01-28 JP JP2015555420A patent/JP6236093B2/ja active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5794003A (en) * | 1993-11-05 | 1998-08-11 | Intergraph Corporation | Instruction cache associative crossbar switch system |
US7546393B2 (en) * | 2003-05-29 | 2009-06-09 | International Business Machines Corporation | System for asynchronous DMA command completion notification wherein the DMA command comprising a tag belongs to a plurality of tag groups |
CN1598762A (zh) * | 2003-09-18 | 2005-03-23 | 国际商业机器公司 | 具有自我修复能力的多并行管线处理器 |
US7814487B2 (en) * | 2005-04-26 | 2010-10-12 | Qualcomm Incorporated | System and method of executing program threads in a multi-threaded processor |
CN101449256A (zh) * | 2006-04-12 | 2009-06-03 | 索夫特机械公司 | 对载明并行和依赖运算的指令矩阵进行处理的装置和方法 |
CN101930358A (zh) * | 2010-08-16 | 2010-12-29 | 中国科学技术大学 | 一种单指令多数据流结构上的数据处理方法及处理器 |
Non-Patent Citations (1)
Title |
---|
Instruction Shuffler:Achieving MIMD-like Performance on SIMD Architectures;YAOHUA WANG 等;《computer architecture letters》;20120701;第11卷(第2期);第37-40页 * |
Also Published As
Publication number | Publication date |
---|---|
KR101787653B1 (ko) | 2017-11-15 |
EP2951682A4 (en) | 2016-12-28 |
KR20150112017A (ko) | 2015-10-06 |
EP2951682A1 (en) | 2015-12-09 |
EP2951682B1 (en) | 2018-08-22 |
JP2016504699A (ja) | 2016-02-12 |
US9830164B2 (en) | 2017-11-28 |
CN105074657A (zh) | 2015-11-18 |
US20140215183A1 (en) | 2014-07-31 |
JP6236093B2 (ja) | 2017-11-22 |
WO2014120690A1 (en) | 2014-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105051680B (zh) | 用于在处理器内部的硬件并行执行道上处理指令的处理器及方法 | |
CN105074657B (zh) | 并行管道中的发散分支的硬件和软件解决方案 | |
EP2710467B1 (en) | Automatic kernel migration for heterogeneous cores | |
US9342334B2 (en) | Simulating vector execution | |
US20120331278A1 (en) | Branch removal by data shuffling | |
Mikushin et al. | KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs | |
Riedel et al. | Banshee: A fast LLVM-based RISC-V binary translator | |
US20090133022A1 (en) | Multiprocessing apparatus, system and method | |
Shin et al. | Developing a custom DSP for vision based human computer interaction applications | |
Jammer | Characterization and translation of OpenMP use cases to MPI using LLVM | |
Zhu | Application-Specific Software Defined Memory | |
Koufaty | Architectural and compiler support to hide coherence misses in distributed shared-memory multiprocessors | |
Huang et al. | Use of computation-unit integrated memories in high-level synthesis | |
Rangan et al. | A distributed multiple-SIMD processor in memory | |
Herbordt et al. | Array control for high-performance SIMD systems | |
Pinto | Many-Core Architectures: Hardware-Software Optimization and Modeling Techniques | |
Gebhart | Implementation of a Streaming Parallel Model for the TRIPS Architecture | |
Chiou | Design study of a novel computer instruction execution unit | |
Liu | A Tiger Compiler for the Cell Broadband Engine Architecture | |
Leupers et al. | Scalable Simulation for MPSoC Software and Architectures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |