CN105051680A - 使用硬件指针的simd核心中的发散分支解决方案 - Google Patents
使用硬件指针的simd核心中的发散分支解决方案 Download PDFInfo
- Publication number
- CN105051680A CN105051680A CN201480013689.XA CN201480013689A CN105051680A CN 105051680 A CN105051680 A CN 105051680A CN 201480013689 A CN201480013689 A CN 201480013689A CN 105051680 A CN105051680 A CN 105051680A
- Authority
- CN
- China
- Prior art keywords
- given
- instruction
- road
- processor
- register
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000004044 response Effects 0.000 claims abstract description 18
- 238000003860 storage Methods 0.000 claims description 17
- 238000009826 distribution Methods 0.000 claims description 2
- 238000000605 extraction Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 12
- 238000013507 mapping Methods 0.000 abstract description 11
- 238000012545 processing Methods 0.000 abstract description 6
- 230000000875 corresponding effect Effects 0.000 description 29
- 238000010586 diagram Methods 0.000 description 18
- 230000006870 function Effects 0.000 description 17
- 238000013461 design Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 5
- 238000012546 transfer Methods 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 102100029777 Eukaryotic translation initiation factor 3 subunit M Human genes 0.000 description 1
- 101001012700 Homo sapiens Eukaryotic translation initiation factor 3 subunit M Proteins 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 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
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline, 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/321—Program or instruction counter, e.g. incrementing
-
- 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, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- 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, 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, 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, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
Abstract
一种用于在处理器内部的硬件并行执行道上有效地处理指令的系统和方法。响应于已识别的循环内部的给定发散点,编译器产生代码,其中当被执行时,所述代码确定将要处理的下一个超长指令世界(VLIW)的大小并且确定将要存储在目标处理器内的多个对应PC寄存器内的多个指针值。更新后的PC寄存器指向由所述给定发散点和对应会聚点之间的不同基本块混合的指令。所述目标处理器包括单指令多数据(SIMD)微型体系结构。对给定的道的分配是基于运行时在所述给定分散点处针对所述给定的道发现的分支方向。所述处理器包括用于将PC寄存器映射到执行道的矢量寄存器。
Description
背景
技术领域
本公开涉及计算系统,并且更具体地说,涉及在处理器内部的硬件并行执行道上有效地处理指令。
背景
任务的并行化被用来增加计算机系统的吞吐量。为此,编译器可从程序代码中提取并行化的任务以在系统硬件上并行执行。为了增加在硬件上的并行执行,处理器可包括多个并行执行道,如单指令多字(SIMD)微型体系结构。与单道微型体系结构或通用微型体系结构相比,这种类型的微型体系结构可以为特定的软件应用程序提供更高的指令吞吐量。受益于SIMD微型体系结构的任务的一些实例包括视频图形渲染、加密和垃圾回收。
在许多情况下,特定的软件应用程序具有数据并行性,其中每个工作项目的执行或并行函数调用在自身内部是数据相关的。例如,第一工作项目可数据独立于第二工作项目,并且第一工作项目和第二工作项目中的每一个被同时安排在SIMD微型体系结构内部的单独并行执行道上。然而,在第一工作项目和第二工作项目中的每一个内部执行的指令量可以是数据相关的。实施为分支指令的条件测试可针对第一工作项目通过,但是针对取决于每个工作项目的数据的第二工作项目未通过。
由于第二工作项目在第一工作项目继续其正在进行的执行时停止执行并且等待,并行执行的效率可能被降低。当只有少数工作项目由于已通过测试而继续执行,而大部分工作项目由于未通过测试而空闲时,低效率增长。
实施方案概述
本发明涵盖用于在处理器内部的硬件并行执行道上有效地处理指令的系统和方法。在各种实施方案中,处理器包括单指令多数据(SIMD)微型体系结构内部的多个并行执行道。处理器可包括多个程序计数器(PC)寄存器。另外,处理器可包括大小寄存器,其用于存储可变长度VLIW的大小。处理器内部的控制逻辑可在一个周期中提取给定VLIW内部的某一数量的指令,所述数量等于已存储的大小。控制逻辑可利用某一数量的PC寄存器来提取给定VLIW内部的指令,所述数量等于已存储的大小。多个PC寄存器中的相应一个存储指向多个已提取指令中的独特一个的指针值。多个执行道可同时执行给定VLIW内部的所述数量的指令。
处理器可另外包括矢量寄存器,其具有与多个执行道中的对应道相关联的比特范围。比特范围可存储标识符(ID)。给定ID可识别多个PC寄存器中的给定PC寄存器。给定PC寄存器可存储指针值,所述指针值指向已提取VLIW内部的给定指令以便相关联的道来执行。
在一些实施方案中,后端编译器检查软件应用程序的程序指令以识别循环和对应的基本块。循环内部的发散点可包括分支指令。例如,在已识别的循环内部的程序指令中可以使用if-elseif-else构造、if-else构造、条件构造等等。在执行发散点和对应会聚点之间的已翻译的和已编译的程序指令期间,可遍历多个跟踪路径。
在编译期间,响应于已识别的循环内部的给定发散点,编译器可产生代码以与已翻译的和已编译的程序指令一起插入。当被执行时,插入的代码可确定下一个要处理的VLIW的大小并且确定要存储在对应PC寄存器中的指针值。更新后的PC寄存器可指向由给定发散点和对应会聚点之间的不同基本块混合的指令。例如,如果给定发散点和对应会聚点之间存在具有四个指令的基本块A和具有六个指令的基本块B,那么编译器可将指令排列到六个VLIW中。前四个VLIW可包括来自基本块A和基本块B中的每一个的一个指令。两个对应的PC寄存器可被更新来指向这些指令。第一VLIW可包括来自基本块A和基本块B中的每一个的第一指令。第二VLIW可包括来自基本块A和基本块B中的每一个的第二指令,以此类推。PC寄存器被再次更新来指向基本块A和基本块B中的每一个内部的相关联指令。最后两个VLIW可包括来自与节点成组的基本块B的一个指令。
对给定道的分配可基于在运行时在给定分散点处针对给定的道发现的分支方向。继续上述实施例,如果VLIW是由基本块A和基本块B创建的第二VLIW并且给定的道的分支指令已被接受,那么给定的道可被分配第二VLIW内部的基本块A中的第二指令。如果分支指令并未被接受,那么给定的道可被分配第二VLIW内部的基本块B中的第二指令。相关联的PC寄存器存储指针值,所述指针值基于分支方向指向基本块A或基本块B中的第二指令。
参照以下描述和附图可以进一步理解这些实施方案和其他实施方案。
附图简述
图1是单指令多数据(SIMD)管道执行流程的一个实施方案的概括性框图。
图2是控制流程图的一个实施方案的概括性框图。
图3是用于控制流程图的执行序列的一个实施方案的概括性框图。
图4是用于处理器的SIMD微型体系结构的逻辑布局的概括性框图。
图5是目标代码排列的一个实施方案的概括性框图。
图6是用于使用编译技术来优化多个工作项目在处理器中的并行执行的方法的一个实施方案的概括性框图。
图7是用于使用硬件技术来优化多个工作项目在处理器中的并行执行的方法的一个实施方案的概括性框图。
图8是用于使用硬件技术来优化多个工作项目在处理器中的并行执行的方法的另一个实施方案的概括性框图。
图9是目标代码排列的另一个实施方案的概括性框图。
虽然本发明容易有各种修改和替代形式,但通过举例方式在附图中展示特定的实施方案并且在本文中对其进行详细描述。然而应理解,附图和对实施方案的详细描述并不意图将实施方案限于所公开的特定形式,而相反,实施方案应涵盖属于由所附权利要求书所界定的精神和范围内的所有修改、等同物以及替代方案。
实施方案详述
在以下描述中,阐述了许多特定细节以提供对实施方案的透彻理解。然而,本领域的一般技术人员应当认识到,可能在没有这些特定细节的情况下实现实施方案。在一些情况下,没有详细展示众所周知的电路、结构和技术以避免混淆实施方案。
参照图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(BB0)编号到基本块7(BB7)的八个基本块(BB)。尽管展示八个基本块,但是在其他实施方案中,可使用另一数量的基本块。对于控制流程图200,基本块1是入口块并且基本块6是出口块。基本块0-7中的每一个是具有一个入口点和一个出口点的直线指令序列。控制流程图200可表示循环。在循环内,控制流程图200可表示具有基本块1-4的IF-THEN-ELSE构造和具有基本块4-6的IF构造。
现参照图3,展示了示出用于控制流程图的执行序列300的一个实施方案的概括性框图。执行序列310表示当被分配给SIMD管道时用于先前所示控制流程图200的典型执行序列。用于单个循环迭代的执行时间是循环内部的基本块(如BB1至BB6)中的每一个的执行时间的总和。然而,对于给定的工作项目和对应的硬件执行道,BB2和BB3中只有一个被执行。类似地,针对给定的工作项目,可以跳过BB5。尽管针对给定的工作项目可以不执行特定基本块,但是相关联的执行时间仍然是用于循环迭代的执行时间的总和的一部分。
执行序列320表示当被分配给修改后的SIMD管道时用于先前所示控制流程图200的替代性执行序列。用于单个循环迭代的执行时间是单个循环迭代中实际被执行的基本块的执行时间的总和,而不是循环内部的基本块中的每一个的执行时间。执行序列320转换控制流程图200的执行。编译器可在将源代码编译成目标代码期间进行这种转换。
在一些实施方案中,编译器在每个基本块的结束处产生代码,其中当被执行时,所示代码识别下一个要执行的基本块。可在基本块的结束处插入所产生的代码。或者,可在基本块的结束处插入分支指令,以在将控制转移至下一个基本块之前将控制流程转移至附加的代码。附加的代码由BBC表示,所述BBC是指中央的基本块。当被执行时,每个分支基本块(如BB1、BB4和BB6)识别要将控制转移至的下一个基本块。识别是基于分支解析,分支解析进一步基于特定的数据记录和分支指令。当被执行时,BBC从每个工作项目接收目标基本块的地址并且设置线程寄存器来执行相应的目标基本块。在SIMD管道中正被执行的不同工作项目之间,给定的工作项目具有用于控制流程转移指令(如分支语句、跳跃语句和条件语句)的单个目标。
在执行序列320中,在BB4完成时,第一工作项目可分支至BB5并且将对应的地址传递至BBC。在BB4完成时,第二工作项目可分支至BB6并且将对应的地址传递至BBC。目标处理器可创建动态超长指令字(DVLIW),其包括来自将要被同时执行的目标基本块中的每一个的指令。当被目标处理器执行时,由编译器产生的代码可更新下一个要执行的DVLIW的大小,其对应于下一个程序计数器(PC)值。另外,当被执行时,所产生的代码可更新正在给定的并行执行道上执行的给定工作项目和指向给定PC寄存器的程序计数器标识符(PCID)之间的映射。给定PC寄存器可保存指向下一个要提取的DVLIW内部的指令中的相关联一个的指针或地址。
参照图4,展示了示出用于处理器的SIMD微型体系结构的逻辑布局400的一个实施方案的概括性框图。处理器具有用于存储数据和指令的动态随机存取存储器(DRAM)450。在一些实施方案中,除了DRAM之外还使用给定等级的缓存存储器子系统。如图所示,处理器可具有与用于每行计算单元的控制逻辑420成组的相对较小的缓存存储器子系统430。可用管道输送处理器内部的数据流,尽管为了简化说明并未展示存储元件,如管道寄存器。在给定的管道阶段中,如果这个阶段中的相关联指令基于先前未通过的测试(如并未接受的分支)而并未被执行,那么计算单元可能未使用。
SIMD管道包括工作项目460,工作项目460包括道A-F。道A-F中的每一个可对应于包括计算单元的垂直并行硬件道中的相应一个。SIMD管道包括多个程序计数器(PC)寄存器466a-466g。PC寄存器466a-466g中的每一个可存储指向下一个将要从存储器(如i缓存)提取的DVLIW内部的相关联指令的指针值或地址。动态超长指令字(DVLIW)464包括多个指令,如指令A至指令G。DVLIW464内部的指令A至指令G中的每一个表示控制流程图中的执行踪迹。DVLIW464可基于存储在PC寄存器466a-466g中的有效指针值来生成和布局。包括SIMD管道的处理器还可包括存储DVLIW464的大小或长度的大小寄存器468。在一些实施方案中,大小可以是表示可变长度DVLIW内部的指令数量的一个整数。
管道可另外包括矢量寄存器462。矢量寄存器462可包括用于并行执行道中的每一个的条目、字段或比特范围。每个条目可包括总数量的比特,其包括用来识别PC寄存器466a-466g中的给定一个的第一数量的比特以及用来支持特殊代码的第二数量的比特。特殊代码可识别等待或睡眠状态、循环退出状态、用于停止执行而不是用于结束循环的障碍标识符、事件标识符等等。
在一个实施例中,工作项目460内部的道B可对应于SIMD管道中从左边开始数的第二垂直执行道。存储在矢量寄存器462中的“PCB”可与道B相关并且指向PC寄存器466b。PC寄存器466b可存储指向DVLIW464内部的指令B的地址或指针值。因此,道B可接收将要处理的指令B。
尽管未展示,但是指令缓存(i缓存)可包括用于同时接收多个PC值的多个端口。在给定的时钟周期内,i缓存可同时提取DVLIW464中的一个或多个指令。i缓存可使用存储在PC寄存器466a-466g中的多个已接收的有效PC值。除了存储在PC寄存器466a-466g中的多个指针或地址,i缓存还可接收存储在大小寄存器468中的大小。i缓存可具有用于访问相同的有效缓存行或缓存组中的一个或多个指令的多个数据端口。再次,要提取的有效指令的数量可等于来自大小寄存器468的已接收大小。
现参照图5,展示了示出用于执行的代码排列500的一个实施方案的概括性框图。具有SIMD管道的目标处理器可使用存储在多个PC寄存器中的指针或地址值来生成DVLIW。目标处理可执行所得的DVLIW,其具有与工作项目中的每一个相关联的数据记录。代码排列500示出用于分别在图2和图3中展示的控制流程图200和随附执行序列320的可由处理器创建的所执行代码布局。代码排列500示出在执行序列320的运行时对DVLIW内部的指令的PC寄存器分配。在这个实施例中,使用四个PC寄存器。
基本块代码504表示用于相应基本块的代码。例如,展示了将在排列500中执行用于基本块0-3和基本块7的代码的一个副本。展示了正在排列500中执行用于基本块4-5的代码的两个副本。正在排列500中执行用于基本块6的代码的四个副本。
代码502可由编译器针对区域(如循环)的入口产生并插入。当稍后被执行时,代码502可更新下一个DVLIW的大小并且更新已获取的DVLIW内部的指令和目标处理器中的PC寄存器之间的映射。例如,目标处理器内部的大小寄存器和矢量寄存器可使得它们存储的内容由所执行的代码502更新。如图所示,可在基本块0、1和基本块7的开始处插入代码502。
代码506可由编译器针对到发散点(如基本块1、4和基本块6的结束)的过渡产生并插入。当稍后被执行时,代码506可确定DVLIW的大小变化以及已提取的DVLIW内部的指令和目标处理器中的PC寄存器之间对应的映射变化。因此,在控制流程图内部的发散点和会聚点处更新大小和映射。编译器识别DVLIW的大小改变并且映射改变时所在的点。使用表示法BBC(0,1),其中第一索引指示踪迹标识符(ID)并且第二索引指示基本块(BB)ID,用于插入代码506的所识别点可存在于BBC(0,1)、BBC(0,4)、BBC(0,6)、BBC(1,4)、BBC(1,6)、BBC(2,6)和BBC(3,6)处。在这个实施例中的踪迹ID可与对应的PC寄存器相同。
在执行控制流程图200的开始时,代码502进行初始化步骤并且可将DVLIW的大小设定为1。矢量寄存器的条目中的每一个内部的PCID可被设定为指向BB0内部的相同指令,如PC0。PC0可存储值0或另一个适当的开始地址。如图所示,有四个可能的并行踪迹,但是工作项目的数量可以是独立的。例如,SIMD管道可具有用于处理已分配的工作项目的8个、16个、64个或另一数量的并行执行道。SIMD管道内部的工作项目中的每一个在矢量寄存器中具有存储为0的PCID并且将会执行相同指令。这个用于每个工作项目的相同指令是来自BB0的指令。BB0中的指令是由每个工作项目一个接一个地执行,并且PC在每个指令提取后递增。
在BB0的执行完成后,循环入口块BB1即将被处理。在BB1开始处的代码502维持DVLIW大小为1并且维持用于每个工作项目的PCID为0。矢量寄存器的条目中的每一个内部的PCID可被设定为指向BB1内部的相同指令,如PC0。PC可保持为从在BB0完成时达到的值递增的值。BB1中的指令是由每个工作项目一个接一个地执行,并且PC在每个指令提取后递增。
当被执行时,在BB1结束处的BBC(0,1)处的代码506使已存储的DVLIW大小从1变为2。现在将BB3内部的指令添加至已提取的DVLIW。另外,当被执行时,BBC(0,1)处的代码506设定矢量寄存器中用于分支至BB3的工作项目的条目以存储值PC1。矢量寄存器中用于分支至BB2的工作项目的条目通过继续存储PC0保持不变。尽管以这种方式使用值0和1,但是可使用其他数值来设定对应的指示和映射。在这一点上,DVLIW具有两个指令,所述两个指令是来自两个单独基本块BB2和BB3的混合的已提取指令。随着多个PC寄存器继续递增,已提取的DVLIW继续包括来自这两个基本块的混合指令,直到BB2的处理完成。
在BB2完成时,DVLIW的大小保持为2。矢量寄存器中已存储的PCID也维持它们的值。然而,现在PC0对应于BB4中的指令,而不是BB2中的指令。在BBC(0,4)完成时,在踪迹0中的BB4的结束处的代码506更新大小寄存器以存储3并且更新矢量寄存器中用于分支至BB6的工作项目的条目以存储PC2。在将存储在多个PC寄存器中的多个地址和已存储的大小发送至i缓存之后,从i缓存提取三个指令。在目标处理中由已提取的指令生成长度为3的DVLIW。DVLIW包括来自BB3或BB4、BB5和BB6的混合指令。
在矢量寄存器中具有相关联的存储为0的PCID的工作项目从BB(0,5)获取已提取的指令。在矢量寄存器中具有相关联的存储为1的PCID的工作项目取决于地址已递增多少而从BB(1,3)或BB(1,4)获取结果。在矢量寄存器中具有相关联的存储为2的PCID的工作项目从BB(2,6)获取已提取的指令。
在BBC(1,4)完成时,在踪迹1中的BB4的结束处的代码506更新大小寄存器以存储4并且更新用于分支至BB(3,6)的工作项目的条目以存储值为3的PCID。在将存储在多个PC寄存器中的多个地址和已存储的大小发送至i缓存之后,从i缓存提取四个指令。在目标处理器内部由已提取的指令生成长度为4的DVLIW。DVLIW包括来自BB6的第一副本、BB5的单个副本、BB6的第二副本和BB6的第三副本的混合指令。在矢量寄存器中具有相关联的存储为0的PCID的工作项目从BB(0,6)获取已提取的指令。在矢量寄存器中具有相关联的存储为1的PCID的工作项目获取来自任一BB(1,5)的结果。在矢量寄存器中具有相关联的存储为2的PCID的工作项目从BB(2,6)获取已提取的指令。在矢量寄存器中具有相关联的存储为3的PCID的工作项目从BB(3,6)获取已提取的指令。
对于BB(0,6)、BB(1,6)、BB(2,6)和BB(3,6)中的每一个,控制流程在BB6结束处可返回至BB1以用于另一个循环迭代或者从循环中终止。在对应的记录内部的相关联分支指令和数据将在运行时确定控制流程方向。一些工作项目可继续另一个迭代,而其他工作项目可退出循环。可在矢量寄存器中的对应条目中存储特殊的代码状态以指示采用哪个路径。响应于确定给定的工作项目将会继续另一个循环迭代并且多个工作项目中的至少一个其他工作项目仍在处理用于相关联基本块的代码,可针对所述给定的工作项目在矢量寄存器中的相关联条目中存储睡眠状态编码。
响应于确定给定的工作项目将会退出循环,可针对所述给定的工作项目在矢量寄存器中的相关联条目中存储退出状态编码。睡眠状态编码和退出状态编码中的每一个不同于在循环迭代期间使用的PCID并且相互不同。在一些实施方案中,对于处于睡眠状态或退出状态的给定工作项目,代码506停止给定工作项目的执行并且在存储器(如堆栈存储器)中存储至少下一个程序计数器(PC)和工作项目标识符(ID),以便快速检索。
在BB6结束处的代码506可检查工作项目中的每一个的状态。响应于确定每个工作项目处于睡眠状态或每个工作项目处于退出状态,处理器在执行代码506的同时可通过分支至相应已存储的下一个PC来重启每个工作项目的执行。响应于确定每个工作项目已停止并且至少一个工作项目处于与另一个工作项目不同的状态,处理器在执行代码506的同时可通过分支至相应已存储的下一个PC来仅重启处于睡眠状态的工作项目的执行。如果至少一个工作项目仍在处理循环中的基本块内部的指令,那么对所述至少一个工作项目的执行继续而处于特殊状态的其他工作项目等待。脱离睡眠状态的工作项目返回至BB1。另外,在BB1开始处的代码502重新初始化矢量寄存器和大小寄存器。脱离退出状态的工作项目分支至BB7。另外,在BB7开始处的代码502相应地重新初始化矢量寄存器和大小寄存器。
在上述实施例中,循环具有单个出口。在其他具有多个出口的情形中,可在存储器(如堆栈)中存储对应的状态信息,如至少下一个PC和工作项目ID。随后,可检索状态信息(如从堆栈中弹出它们)用于重启。处于睡眠状态或退出状态的工作项目都可具有存储在存储器(如堆栈)中的状态信息。由于不同的工作项目可在不同的循环迭代处退出循环,可将具有状态信息的多个条目放置在存储器(如堆栈)中。在重启时间,当被执行时,编译器产生的代码可弹出状态信息并且合并用于从相同的下一个PC重启的工作项目的信息。
现参照图6,展示了用于使用编译器技术来最优化多个工作项目在处理器中的并行执行的方法600的一个实施方案。出于讨论目的,以相继次序展示这个实施方案和随后描述的方法的后续实施方案中的步骤。然而,在其他实施方案中一些步骤可以与图示不同的次序发生,一些步骤可同时进行,一些步骤可与其他步骤结合,并且一些步骤可以不存在。
在块602中,可定位并分析软件程序或子例程。程序代码可由设计者以高级语言(如C语言或另一种语言)书写。这个软件程序可被书写用于编译和执行并行数据应用程序,如在游戏、商业、医疗和其他领域。程序代码可指软件应用程序、子例程、动态链接库的任何部分或其他。路径名可由用户按照命令提示键入。或者,用户名可从给定的目录位置或者其他位置读取,以便开始编译源代码。可在编译期间检查、翻译、优化并且进一步处理程序代码内部的指令。
在一些实施方案中,静态地编译源代码。在这类实施方案中,在前端编译期间,可将源代码翻译成中间表示(IR)。后端编译步骤可将IR翻译成机器代码。静态后端编译可进行更多的转换和优化。在其他实施方案中,使用准时制(JIT)方法编译源代码。在获得系统配置后,JIT方法可产生适当的二进制代码。使用任一方法,编译器可识别函数调用、循环、循环内部的踪迹和程序代码中的基本块。在程序分析期间可构造一个或多个控制流程图。
在各种实施方案中,在处理器(如通用处理器)上编译程序代码。程序代码可被编译用于目标处理器,所述目标处理器包括并行微型体系结构,如SIMD微型体系结构。一个或多个相关联的数据记录可被分配给函数调用以产生一个或多个工作项目。
在检测到程序代码中的任何发散点之前,当已分析的和已翻译的指令出现在程序代码中时,编译器可将它们布置在存储器中。基本上,编译器可能正在创建大小为1的VLIW。如果编译器检测到在已识别的循环内部的发散点(条件块604),那么在块606中,可插入已产生的代码,其中当被执行时,所述代码更新下一个要提取的VLIW的大小。编译器可以一种允许目标处理器创建超长指令字(VLIW)的方式设置代码和数据记录。编译器可跟踪由发散点和对应会聚点之间的多个基本块混合的指令的程序计数器(PC)值。当执行已产生的代码时,可随后将多个PC值传递至目标处理器。可跟踪一个或多个相关联的数据记录来伴随VLIW内部的混合指令以产生一个或多个相关联的工作项目。
在块608中,编译器可插入代码,其中当被执行时,所述代码将指向VLIW内部的指令的多个PC寄存器映射到目标处理器内部的多个并行执行道中的给定一个。或者,映射可在偏移量和工作项目ID之间。在块610中,编译器可插入已产生的代码,其中当被执行时,所述代码更新下一个要提取的VLIW的VLIW大小和映射。在块612中,可在循环的结束处插入已产生的代码,其中当被执行时,所述代码存储关于将要进入睡眠或退出状态的执行道的状态信息。
现参照图7,展示了用于使用硬件技术来最优化多个工作项目在处理器中的并行执行的方法700的一个实施方案。出于讨论目的,以相继次序展示这个实施方案和随后描述的方法的后续实施方案中的步骤。然而,在其他实施方案中一些步骤可以与图示不同的次序发生,一些步骤可同时进行,一些步骤可与其他步骤结合,并且一些步骤可以不存在。
在块702中,将相关联的数据记录分配给已编译的代码以产生多个工作项目。在一些实施方案中,操作系统可进行分配。在块704中,将工作项目安排给具有单指令多数据(SIMD)微型体系结构的目标处理器。在块706中,更新具有下一个要提取的VLIW的大小的大小寄存器。在块708中,更新多个PC寄存器中的一个或多个。多个PC寄存器可储存指向将要生成的VLIW内部的对应字的指针或地址。
在块710中,更新用于将多个PC寄存器映射到执行工作项目的并行执行道的矢量寄存器。对应于并行执行道中的一个给定的道的特定字段或条目可存储PC标识符(ID)。PCID可识别多个PC寄存器中的一个,将要读取所述一个PC寄存器来获得将由相关联的执行道处理的指令的地址。使用更新后的大小和多个程序计数器(PC),在块712中,处理器可提取某一数量的指令,所述数量等于来自i缓存的更新后的大小。已提取的指令可来自循环内部的发散点和会聚点之间的单独基本块。在块714中,目标处理器可读取矢量寄存器以生成具有已提取的指令的VLIW。存储在矢量寄存器中的映射信息可针对给定的工作项目和对应的执行道确定要处理VLIW中的哪个指令。目标处理器可将已提取的指令映射到执行工作项目的并行执行道。
现参照图8,展示用于使用硬件技术来最优化多个工作项目在处理器中的并行执行的方法800的另一个实施方案。出于讨论目的,以相继次序展示这个实施方案和随后描述的方法的后续实施方案中的步骤。然而,在其他实施方案中一些步骤可以与图示不同的次序发生,一些步骤可同时进行,一些步骤可与其他步骤结合,并且一些步骤可以不存在。
在块802中,使用目标处理器中的并行执行道同时执行已生成的VLIW中的指令。如果针对给定的工作项目到达循环的结束(条件块804)并且如果没有检测到活动的工作项目(条件块806),那么在块810中,读取关于分配给并行执行道的工作项目中的每一个的相应状态信息。状态信息可包括至少下一个PC和工作项目ID。状态信息可用于继续并行执行道内部的执行。
如果针对给定的工作项目到达循环的结束(条件块804)并且如果检测到任何活动的工作项目(条件块806),那么在块812中,存储关于给定的工作项目的状态信息以供以后使用。给定的工作项目可使执行停止并且可被置于睡眠或退出状态。
现参照图9,展示了示出目标代码排列900的另一个实施方案的概括性框图。代码排列900示出当执行用于分别在图2和图3中展示的控制流程图200和随附执行序列320的代码时,由处理器创建的排列的一个实施方案。代码502-506可进行与先前所描述功能相同的功能。
基本块的大小在编译时是已知的。编译器可跟踪PC并且安排程序代码的指令以使初始化代码最小化并且减小DVLIW的大小。在使用控制流程图200和代码排列500的前一实施例中,使用BB6的四个副本。编译器可通过引入间隙来减少踪迹和附随PC寄存器ID的数量。间隙可利用空操作(nopoperation)。
这里可使用之前描述的关于代码排列500的步骤。在BB2完成时,DVLIW的大小保持为2。然而,已提取的DVLIW内部的两个指令中的一个是在排列900中提供间隙的空操作。PC寄存器ID0对应于空操作并且PC寄存器ID1对应于BB3中的指令。在BB3完成时,DVLIW从2减小至1。现在PC寄存器ID0对应于BB4中的指令并且PC寄存器ID1对应于空操作。
在BBC(0,4)完成时,处理器在执行踪迹0中的BB4的结束处的代码506的同时将大小寄存器从1更新为2。已执行的代码506更新矢量寄存器中用于分支至BB6的工作项目的条目以存储PCID1。在将两个PC寄存器值和已存储的大小发送至i缓存之后,可从i缓存提取两个指令。两个已提取的指令包括来自BB5和BB6的混合指令。在矢量寄存器中具有相关联的存储为为0的PC寄存器ID的工作项目从BB(0,5)获取已提取的指令。在矢量寄存器中具有相关联的存储为1的PC寄存器ID的工作项目从BB(1,6)获取已提取的指令。
在BB(1,6)完成时,代码506将DVLIW的大小从2更新为1。对应于BB(1,6)的工作项目停止执行,存储状态信息,并且等待,直到在下一个PC处重启执行。下一个PC可指向BB1或BB7。其他步骤可如之前所描述那样进行。代码排列900响应于确定在检测到的给定发散点和对应的会聚点之间的第一踪迹路径小于在给定发散点和对应的会聚点之间的第二踪迹路径示出,编译器可使无操作与对应于VLIW中的第二踪迹路径的指令成组,所述VLIW是在第一踪迹路径的完成和对应会聚点之间创建的。
对于之前描述的实施方案中的每一个,进一步的并行化可发生,其中代码是在循环的外部与循环内部的代码并行化。例如,用于BB7的程序代码可与BB1并行化以终止用于完成循环的工作项目的程序。另外,响应于检测到对应于VLIW内部的资源独立指令而不是单个指令的PC寄存器ID,相关联的工作项目和执行道可在执行道内部同时执行多个资源独立指令。
此外,编译器可使用寄存器分配来减小DVLIW的大小。程序代码可包括以下陈述式:X=(A+B)+(B+M)。这里,两个操作使用相同的操作码。第一踪迹包括加法操作,如T1=A+B。第二踪迹包括加法操作,如T2=C+D。有工作项目使用来自具有PC寄存器ID(如0)的基本块X(BBX)的T1。有其他工作项目使用来自具有PC寄存器ID(如1)的BBY的T2。如果第一操作数对“C”和“A”、第二操作数对“B”和“D”以及结果数对“T1”和“T2”分别被分配给BBX和BBY中的相同寄存器,那么表达式r3=r1+r2可用作大小为1的DVLIW。对应的PC寄存器ID可被设定为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、RambusDRAM(RDRAM)、静态RAM(SRAM等)、ROM、闪存、可经由外围接口(如通用串行总线(USB)接口)访问的非易失性存储器(例如,闪存)等。存储介质可包括微机电系统(MEMS),以及可经由通信介质(如网络和/或无线电线路)访问的存储介质。
另外,程序指令可包括以高级编程语言(如C语言)或设计语言(HDL)(如Verilog、VHDL)或数据库格式(如GDSII流格式(GDSII))对硬件功能的行为级描述或寄存器传输级(RTL)描述。在一些情况下,所述描述可以由合成工具读取,所述合成工具可对描述进行合成以从合成库产生包括一系列门的网表。所述网表包括门集合,所述门还表示包括系统的硬件的功能性。随后可放置或选路发送所述网表以产生描述要应用于掩模的几何形状的数据集。所述掩模随后可以用于各种半导体制造步骤以产生对应于系统的一个半导体电路或多个半导体电路。或者,根据需要,计算机可存取存储介质上的指令可以是所述网表(带有或不带有合成库)或数据集。或者,可利用指令以便由来自供应商(如和Mentor)的基于硬件的类型的模拟器进行模拟。
尽管已相当详细地描述了以上实施方案,但一旦完全了解以上公开内容,各种变化和修改对所属领域的技术人员将变为显而易见。所附权利要求书意图被解释为涵盖所有这类变化和修改。
Claims (20)
1.一种处理器,其包括:
单指令多数据(SIMD)微型体系结构内部的多个并行执行道;
多个程序计数器(PC)寄存器;
控制逻辑,其被配置来提取给定超长指令字(VLIW)内部的多个指令,其中所述多个PC寄存器中的相应一个存储指向所述多个指令中的独特一个的指针值;并且
其中所述多个执行道被配置来同时执行所述给定VLIW内部的所述已提取的多个指令。
2.如权利要求1所述的处理器,其中所述处理器还包括矢量寄存器,所述矢量寄存器被配置来存储在特定比特范围内的标识符(ID),其中每个比特范围与所述多个执行道中的对应道相关联,其中给定的ID识别所述多个PC寄存器中的给定一个。
3.如权利要求2所述的处理器,其中所述处理器还包括大小寄存器,所述大小处理器被配置来存储将要处理的VLIW的大小。
4.如权利要求3所述的处理器,其中存储在所述矢量寄存器中的有效ID的数量等于存储在所述大小寄存器中的大小。
5.如权利要求3所述的处理器,其中所述控制逻辑还被配置来:
解码某一数量的已提取指令,所述数量等于存储在所述大小寄存器中的所述大小;并且
至少基于存储在所述矢量寄存器中的ID和存储在所述多个PC寄存器中的对应指针值将所述已解码的指令中的给定一个分配给所述多个执行道中的给定的道,所述ID与所述给定的道相关联。
6.如权利要求5所述的处理器,其中响应于所述多个PC寄存器中的给定一个指向多个资源独立指令,所述多个执行道中的相关联的一个还被配置来同时执行所述多个资源独立指令。
7.如权利要求5所述的处理器,其中响应于所述多个执行道中的给定的道已到达循环的结束,所述控制逻辑还被配置来:
响应于在运行时确定所述给定的道被安排来分支回到所述循环的开始,在所述矢量寄存器内部的对应比特范围内写入睡眠状态;并且
响应于在运行时确定所述给定的道被安排来分支退出循环,在所述矢量寄存器内部的所述对应比特范围内写入退出状态。
8.如权利要求7所述的处理器,其中响应于所述给定的道处于所述睡眠状态或所述退出状态,所述控制逻辑还被配置来:
停止所述给定的道的执行;并且
存储给定的踪迹的至少下一个程序计数器(PC)和所述工作项目标识符(ID)。
9.如权利要求8所述的处理器,其中响应于确定所述多个执行道中的每一个处于所述睡眠状态或所述退出状态,所述控制逻辑还被配置来通过分支至相应已存储的下一个PC来重启每个道的执行。
10.如权利要求9所述的处理器,其中响应于所述多个执行道中的每一个被停止并且至少一个道处于与另一个道不同的状态,所述控制逻辑还被配置来通过分支至相应已存储的下一个PC来仅重启处于睡眠状态的道的执行。
11.一种非暂时性计算机可读存储介质,其存储被配置用于由计算机系统的至少
一个处理器执行的至少一个程序,其中所述至少一个程序包括可执行来进行以下操作的指令:
将软件线程分配给硬件并行道;
识别多个程序指令内部的循环和对应的基本块;并且
响应于已识别的循环内部的给定发散点:
确定给定超长指令字(VLIW)的大小;并且
在运行时将第一数量的程序计数器(PC)指针值分配给目标处理器内部的多个并行执行道,所述目标处理器包括单指令多数据(SIMD)微型体系结构。
12.如权利要求11所述的非暂时性计算机可读存储介质,其中对给定的道的分配是基于在运行时在所述给定发散点处针对所述给定的道发现的分支方向。
13.如权利要求12所述的非暂时性计算机可读存储介质,其还包括可执行来进行如下操作的指令:使用下一个将被提取的VLIW中的第二数量的指令来更新所述大小。
14.如权利要求13所述的非暂时性计算机可读存储介质,其进一步包括可执行来进行以下操作的指令:
使用指向所述下一个VLIW中的所述第二数量的指令中的独特一个的对应指针来更新所述第二数量的PC指针值中的每一个;并且
更新多个索引,所述多个索引将所述多个执行道中的每一个映射到所述更新后的PC指针值中的给定一个。
15.一种方法,其包括:
提取给定超长指令字(VLIW)内部的多个指令,其中多个PC寄存器中的相应一个存储指向所述多个指令中的独特一个的指针值;以及
在单指令多数据(SIMD)微型体系结构内部的多个并行执行道中同时执行所述给定VLIW内部的所述已提取的多个指令。
16.如权利要求15所述的方法,其还包括在矢量寄存器的特定字段中存储标识符(ID),其中每个字段与所述多个执行道中的对应道相关联,其中给定的ID识别所述多个PC寄存器中的给定一个。
17.如权利要求16所述的方法,其还包括存储将要处理的VLIW的大小。
18.如权利要求17所述的方法,其中存储在所述矢量寄存器中的有效ID的数量等于所述已存储的大小。
19.如权利要求17所述的方法,其还包括:
解码某一数量的已提取的指令,所述数量等于所述已存储的大小;以及
至少基于存储在所述矢量寄存器中的ID和存储在所述多个PC寄存器中的对应指针值将所述已解码的指令中的给定一个分配给所述多个执行道中的给定一个,所述ID与所述给定的道相关联。
20.如权利要求19所述的方法,其中响应于检测到所述多个PC寄存器中的给定一个指向多个资源独立指令,所述方法还包括在所述多个执行道中的相关联一个中同时执行所述多个资源独立指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/753,113 US9639371B2 (en) | 2013-01-29 | 2013-01-29 | Solution to divergent branches in a SIMD core using hardware pointers |
US13/753,113 | 2013-01-29 | ||
PCT/US2014/013474 WO2014120703A1 (en) | 2013-01-29 | 2014-01-29 | Solution to divergent branches in a simd core using hardware pointers |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105051680A true CN105051680A (zh) | 2015-11-11 |
CN105051680B CN105051680B (zh) | 2018-08-14 |
Family
ID=51224343
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480013689.XA Active CN105051680B (zh) | 2013-01-29 | 2014-01-29 | 用于在处理器内部的硬件并行执行道上处理指令的处理器及方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9639371B2 (zh) |
EP (1) | EP2951681B1 (zh) |
JP (1) | JP6159825B2 (zh) |
KR (1) | KR101702651B1 (zh) |
CN (1) | CN105051680B (zh) |
WO (1) | WO2014120703A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196736A (zh) * | 2018-02-26 | 2019-09-03 | 爱思开海力士有限公司 | 电子设备及其操作方法 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9697003B2 (en) * | 2013-06-07 | 2017-07-04 | Advanced Micro Devices, Inc. | Method and system for yield operation supporting thread-like behavior |
US9582321B2 (en) * | 2013-11-08 | 2017-02-28 | Swarm64 As | System and method of data processing |
US9292269B2 (en) * | 2014-01-31 | 2016-03-22 | Nvidia Corporation | Control flow optimization for efficient program code execution on a processor |
US9348595B1 (en) | 2014-12-22 | 2016-05-24 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US10180841B2 (en) | 2014-12-22 | 2019-01-15 | Centipede Semi Ltd. | Early termination of segment monitoring in run-time code parallelization |
KR101624636B1 (ko) * | 2015-03-03 | 2016-05-27 | 주식회사 에이디칩스 | 명령어 패치 장치 및 방법 |
US9208066B1 (en) * | 2015-03-04 | 2015-12-08 | Centipede Semi Ltd. | Run-time code parallelization with approximate monitoring of instruction sequences |
US10296346B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
US10296350B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US9715390B2 (en) | 2015-04-19 | 2017-07-25 | Centipede Semi Ltd. | Run-time parallelization of code execution based on an approximate register-access specification |
EP3106982B1 (en) * | 2015-06-18 | 2021-03-10 | ARM Limited | Determination of branch convergence in a sequence of program instructions |
US10585623B2 (en) | 2015-12-11 | 2020-03-10 | Vivante Corporation | Software defined FIFO buffer for multithreaded access |
JP6167193B1 (ja) * | 2016-01-25 | 2017-07-19 | 株式会社ドワンゴ | プロセッサ |
US10474468B2 (en) * | 2017-02-22 | 2019-11-12 | Advanced Micro Devices, Inc. | Indicating instruction scheduling mode for processing wavefront portions |
US10620994B2 (en) | 2017-05-30 | 2020-04-14 | Advanced Micro Devices, Inc. | Continuation analysis tasks for GPU task scheduling |
US10990394B2 (en) * | 2017-09-28 | 2021-04-27 | Intel Corporation | Systems and methods for mixed instruction multiple data (xIMD) computing |
US10877757B2 (en) * | 2017-11-14 | 2020-12-29 | Nvidia Corporation | Binding constants at runtime for improved resource utilization |
CN110716750A (zh) * | 2018-07-11 | 2020-01-21 | 超威半导体公司 | 用于部分波前合并的方法和系统 |
FR3084187B1 (fr) * | 2018-07-18 | 2021-01-01 | Commissariat Energie Atomique | Procede d'acceleration de l'execution d'un programme a chemin unique par execution en parallele de sequences conditionnellement concurrentes |
US11061681B2 (en) | 2019-07-25 | 2021-07-13 | International Business Machines Corporation | Instruction streaming using copy select vector |
CN113885877A (zh) * | 2021-10-11 | 2022-01-04 | 北京超弦存储器研究院 | 编译的方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1174353A (zh) * | 1996-08-19 | 1998-02-25 | 三星电子株式会社 | 采用多个向量寄存器组的单指令多数据处理方法及其装置 |
CN102043755A (zh) * | 2009-10-22 | 2011-05-04 | 财团法人工业技术研究院 | 可重组态处理装置及其系统 |
CN102707927A (zh) * | 2011-04-07 | 2012-10-03 | 威盛电子股份有限公司 | 具有条件指令的微处理器及其处理方法 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0374419A3 (en) | 1988-12-21 | 1991-04-10 | International Business Machines Corporation | Method and apparatus for efficient loop constructs in hardware and microcode |
JPH07239780A (ja) * | 1994-01-06 | 1995-09-12 | Motohiro Kurisu | 1クロック可変長命令実行処理型命令読み込み電子計 算機 |
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 |
US6490673B1 (en) | 1998-11-27 | 2002-12-03 | Matsushita Electric Industrial Co., Ltd | Processor, compiling apparatus, and compile program recorded on a recording medium |
JP2000259579A (ja) | 1999-03-11 | 2000-09-22 | Hitachi Ltd | 半導体集積回路 |
WO2002065259A1 (en) | 2001-02-14 | 2002-08-22 | Clearspeed Technology Limited | Clock distribution system |
JP3796124B2 (ja) * | 2001-03-07 | 2006-07-12 | 株式会社ルネサステクノロジ | スレッド間優先度可変プロセッサ |
US6986025B2 (en) * | 2001-06-11 | 2006-01-10 | Broadcom Corporation | Conditional execution per lane |
US7159103B2 (en) | 2003-03-24 | 2007-01-02 | Infineon Technologies Ag | Zero-overhead loop operation in microprocessor having instruction buffer |
US7124318B2 (en) | 2003-09-18 | 2006-10-17 | International Business Machines Corporation | Multiple parallel pipeline processor having self-repairing capability |
US7366885B1 (en) | 2004-06-02 | 2008-04-29 | Advanced Micro Devices, Inc. | Method for optimizing loop control of microcoded instructions |
US7814487B2 (en) | 2005-04-26 | 2010-10-12 | Qualcomm Incorporated | System and method of executing program threads in a multi-threaded processor |
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 | プロセッサおよびオブジェクトコード生成装置 |
US7937574B2 (en) | 2007-07-17 | 2011-05-03 | Advanced Micro Devices, Inc. | Precise counter hardware for microcode loops |
-
2013
- 2013-01-29 US US13/753,113 patent/US9639371B2/en active Active
-
2014
- 2014-01-29 WO PCT/US2014/013474 patent/WO2014120703A1/en active Application Filing
- 2014-01-29 KR KR1020157023117A patent/KR101702651B1/ko active IP Right Grant
- 2014-01-29 EP EP14746501.7A patent/EP2951681B1/en active Active
- 2014-01-29 JP JP2015555422A patent/JP6159825B2/ja active Active
- 2014-01-29 CN CN201480013689.XA patent/CN105051680B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1174353A (zh) * | 1996-08-19 | 1998-02-25 | 三星电子株式会社 | 采用多个向量寄存器组的单指令多数据处理方法及其装置 |
CN102043755A (zh) * | 2009-10-22 | 2011-05-04 | 财团法人工业技术研究院 | 可重组态处理装置及其系统 |
CN102707927A (zh) * | 2011-04-07 | 2012-10-03 | 威盛电子股份有限公司 | 具有条件指令的微处理器及其处理方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196736A (zh) * | 2018-02-26 | 2019-09-03 | 爱思开海力士有限公司 | 电子设备及其操作方法 |
Also Published As
Publication number | Publication date |
---|---|
JP6159825B2 (ja) | 2017-07-05 |
CN105051680B (zh) | 2018-08-14 |
US20140215187A1 (en) | 2014-07-31 |
WO2014120703A1 (en) | 2014-08-07 |
EP2951681A4 (en) | 2016-12-07 |
JP2016508640A (ja) | 2016-03-22 |
EP2951681B1 (en) | 2018-11-14 |
KR101702651B1 (ko) | 2017-02-03 |
KR20150111990A (ko) | 2015-10-06 |
EP2951681A1 (en) | 2015-12-09 |
US9639371B2 (en) | 2017-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105051680A (zh) | 使用硬件指针的simd核心中的发散分支解决方案 | |
CN105074657A (zh) | 并行管道中的发散分支的硬件和软件解决方案 | |
EP2710467B1 (en) | Automatic kernel migration for heterogeneous cores | |
CN100555225C (zh) | 一种支持x86虚拟机的risc处理器装置及方法 | |
US20080250227A1 (en) | General Purpose Multiprocessor Programming Apparatus And Method | |
CN102298514A (zh) | 用于有效动态二进制变换的寄存器映射技术 | |
US20120331278A1 (en) | Branch removal by data shuffling | |
CN101251792A (zh) | 用于受应用管理的线程单元的结构化异常处理 | |
CN103988174A (zh) | 无需额外寄存器执行寄存器重命名的数据处理设备和方法 | |
CN103793208B (zh) | 矢量dsp处理器和协处理器协同运作的数据处理系统 | |
CN101847096A (zh) | 包含栈变量函数的优化方法 | |
US20180246847A1 (en) | Highly efficient scheduler for a fine grained graph processor | |
CN107038019A (zh) | 单指令多数据计算系统中处理指令的方法及计算系统 | |
CN113360157A (zh) | 一种程序编译方法、设备以及计算机可读介质 | |
US20090133022A1 (en) | Multiprocessing apparatus, system and method | |
US20060149943A1 (en) | System and method for simulating hardware interrupts | |
CN1898641B (zh) | 微控制器指令集 | |
US20030135535A1 (en) | Transferring data between threads in a multiprocessing computer system | |
CN117075903A (zh) | 基于张量的编译方法、设备及其计算机可读存储介质 | |
CN117075902A (zh) | 基于张量的编译方法、设备及其计算机可读存储介质 | |
Kopetzky | An array simulator generator |
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 |