CN105009076A - 在运行时的软件流水线 - Google Patents
在运行时的软件流水线 Download PDFInfo
- Publication number
- CN105009076A CN105009076A CN201480011194.3A CN201480011194A CN105009076A CN 105009076 A CN105009076 A CN 105009076A CN 201480011194 A CN201480011194 A CN 201480011194A CN 105009076 A CN105009076 A CN 105009076A
- Authority
- CN
- China
- Prior art keywords
- performance level
- scheduling
- local scheduling
- level
- local
- 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
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/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4452—Software pipelining
-
- 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
装置和方法可提供确定对于由动态编译器处理一个或多个循环的性能水平和执行代码优化以对一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。在一个示例中,可对一个或多个循环建立依赖图,并且基于性能水平将每个依赖图分区成级。
Description
技术领域
本发明描述的实施例大体上涉及软件流水线,并且更特定地涉及在动态编译器中执行软件流水线。
背景技术
软件流水线可以是高效编译器技术,其利用来自循环的指令级并行性。常规软件流水线可局限于静态编译器中的部署,其可不适合于动态编译活动,例如在硬件/软件协同设计、动态语言、云计算和嵌入式系统中牵涉的那些。
附图说明
本发明的实施例的各种优势将通过阅读下列说明和附上的权利要求书并且通过参考下列图而对本领域内技术人员变得明显,其中:
图1是根据实施例的装置的示例的框图;
图2A和2B是根据实施例的方法的示例的流程图;
图3A-3E是根据实施例的场景的插图;
图4是根据实施例的系统的框图;
图5是根据实施例的处理器的示例的框图。
具体实施方式
现在转向图1,图示用于对动态编译器执行软件流水线的装置21。图示的装置21包括第一模块22、第二模块23、第三模块24、第四模块25和第五模块26。该第一模块22可确定对于由动态编译器处理一个或多个循环的性能水平,其中该性能水平通过计算最小启动间隔(MII)来确定。第二模块23可执行代码优化以对一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度,其中执行的代码优化包括分配硬件资源并且确定对于每个分区级中包括的指令的局部依赖性来产生局部调度。
另外,执行的代码优化可包括调整局部调度来解决循环承载依赖性以创建调整的局部调度并且使指令从它们的当前级移到下一个级以如果所调整的局部调度未实现性能水平且还未发生规定时期则产生下一个迭代调度。执行的代码优化可重复以使用下一个迭代调度来产生新的调整的局部调度,只要规定时期直到调整的局部调度实现性能水平才发生即可。
第三模块24可对一个或多个循环建立依赖图并且基于性能水平将每个依赖图分区成级。第四模块25可确定调整的局部调度是否实现性能水平并且如果所调整的局部调度未实现性能水平,则第五模块26可确定是否已发生规定时期。图示的装置21因此在优化对于动态编译活动(例如在硬件/软件协同设计、动态语言、云计算和嵌入式系统中牵涉的那些)的代码方面可以是有用的。
图2A图示在运行时对动态编译器执行软件流水线的方法。图示的方法可实现为逻辑指令集和/或固件,其存储在例如随机存取存储器(RAM)、只读存储器(ROM)、可编程ROM(PROM)、闪速存储器等机器或计算机可读存储介质中,在例如可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)、复杂可编程逻辑设备(CPLD)等可配置逻辑中,在使用汇编语言编程和例如专用集成电路(ASIC)、互补金属氧化物半导体(CMOS)或晶体管-晶体管逻辑(TTL)技术等电路技术的固定功能性硬件中,或其任何组合中。例如,用于实施在图示的方法中示出的操作的计算机程序代码可采用一个或多个编程语言的任何组合来编写,其包括面向对象编程语言(例如C++或类似物)和常规程序编程语言,例如“C”编程语言或相似编程语言。此外,方法可使用前面提到的电路技术中的任一个来实现。
方法可一般通过在不违背任何依赖或资源约束的情况下使循环迭代的执行重叠来执行软件流水线。图示的方法在过程块11处通过计算最小启动间隔(MII)而开始。该最小启动间隔可以是循环迭代开始到下一个循环迭代开始之间的最短时期。在一个示例中,启动间隔越短,完成循环过程所需要的周期数越小并且可使用软件流水线越快地执行循环过程。另外,作为计算MII的副产物,可在后续调度期间识别关键操作并且给予其优先级。
对于指定循环,例如在图3A中图示的循环,建立依赖图。例如在图3B中图示依赖图。在图中,图示有两个循环承载依赖边缘,d→b和b→a,每个具有迭代距离值(1)。依赖边缘c→d具有两个周期的延迟。其它依赖是局部的,并且因此它们具有迭代距离值(0)。强连通分量(SSC)可使用例如Tarjan的强连通分量算法等算法从依赖图识别。
最小启动间隔可使用算法中识别的SCC来计算,例如Howard迭代策略算法,其可实现如下:
MIICalculation(H),其中H是在Howard迭代策略算法中扫描SCC的最大次数。
在依赖图中识别SCC
MII ← - ∞
for 每个 SCC do
利用Howard迭代策略算法计算SCC的广义最大电路平均值,但策略在持续H次地扫描SCC后还未稳定时中止
MII=max(MII, 广义最大电路平均值)
isCritical(a) ←FALSE operation a
for 每个 SCC do
if MII=SCC的广义最大电路平均值 then
isCritical(a) ←TRUEoperation a∈SCC策略图中的关键周期。
在过程块12处,图示的方法将依赖图分区成初始级集来形成接近最佳调度的初始调度。过程块12还可提供初始化时期变量(例如,“i”,在下文更详细论述的)。每个级可具有预定高度MII。例如,如果在图3B中图示的依赖图被切开使得每个级具有MII个周期,则所得的初始调度在图3C中图示,这时MII等于二(2)。
依赖图可使用例如Bellman-Ford算法等算法来分区。算法可计算自伪开始节点到依赖图中的每个节点的最长路径。在一个示例中,对于节点的路径长度除以MII是对于节点的级指数。这样的方法可创建初始调度,其中每个节点被分配级。在该过程中,每个边缘(a→b,δ,d)可具有δ-d*MII的长度,并且伪开始可连接到具有长度0的任何其它节点。边缘a→b,δ,d具有从a→b的依赖,其中δ是延迟并且d是迭代距离。计算的最长路径可分成级。
算法可例如使用阈值B来控制Bellman-Ford算法的迭代次数而实现如下。一旦迭代次数达到B并且未完成算法,整个方法中止。
对于原始循环体中顺序中的每个operation b,do
如果len(b)由之前的步骤改变
中止软件流水线
节点a
节点a
在过程块13处,图示的方法开始执行代码优化来产生流水线调度并且实现计算的MII。特别地,在过程块13处,图示的方法可分配硬件资源、实行对分区级中的指令的局部依赖以及创建局部调度。可对指令内的每个操作分配资源和偏移。过程块13可例如用算法实现如下:
对于当前内核中反向顺序中的每个操作,do
对于每个外出边缘,do
应用例如任何列表调度,其作用于局部依赖并且按照具有高度优先级函数的资源约束工作。
在过程块14处,图示的方法可通过调整局部调度来解决循环承载依赖而继续执行代码优化。对于未用局部调度解决的每个循环承载依赖,可在源与目的指令之间插入一个或多个空白级以尝试解决循环承载依赖(即,水平内核扩展)。这样的方法在两个操作之间延伸时间距离以不小于依赖的延迟。图3D图示具有循环承载依赖的局部调度。通过在c与d之间添加空白级(如在图3E中图示的),解决依赖。
为了解决在过程块13期间还未解决的循环承载依赖,内核扩展可例如执行如下:
让(a→b,δ,d)成为在任何执行代码优化之前原始依赖图中未解决的循环承载依赖图。作为第一选择,进行通过在循环承载依赖的源与汇节点之间插入空白级的水平内核扩展来增加时间距离d的尝试。这样的方法可迫使它们的时间差异满足或超出依赖的延迟,并且从而在不增加启动间隔的情况下解决依赖。
作为其中存在通过插入空白级而无法解决的任何循环承载依赖的另一个方法中,启动间隔(II)可增加。
当插入新的级时,可不违背已经满足的之前的依赖。如果特定依赖的汇节点级在依赖的源节点级之前,则在它们之间插入级可只使时间差减小。简而言之,对于依赖,可存在“禁止”级和“可扩展”级。紧挨任何禁止(可扩展)级之前插入空白级可使依赖的源与汇之间的时间差减小(增加)。形式上,对于边缘e: a→b,。Stage(o)可以是运算o的级指数。
注意两个集可由源与汇节点的级之间的级组成,因为如果在源和汇节点的级两者之前(或两者之后)插入级,对时间差将没有影响。
现在对于未解决的依赖,为了在不改变启动间隔(II)的情况下解决它,紧挨它的可扩展级中的一个之前插入的级的最小数量可从以下得到:
,其中offset(o)是在内核中它的级中的运算o的时间偏移。
基本上,可计算禁止级的全局集,其中该全局集是所有依赖的禁止级的联合。对于每个级s,可通过初始化为0的变量newStagesBefore(s)来对在它之前插入的新级的数量进行记录。然后可扫描所有循环承载依赖,并且图示的方法决定是否插入新的级以及插入多少。在任何循环承载依赖(a->b)无法通过插入空白级解决的情况下,增加启动间隔(II)来解决它。解决它的最小II可以是 。
进行内核扩展的算法可例如实现如下:
m←当前内核的总级
if不成立,then
if m>S,其中S是内核中允许的最大级数
,并且内核扩展过程结束。
s←任何级
节点a
并且这之后使II←max(II, feasibleII(e)), 。
在过程块15处,图示的方法可确定调整的局部调度(其是在执行过程块14之后所得的调度)是否实现计算的MII。如果是的话,在过程块17处,过程停止并且图示的方法终止。如果否的话,在过程块16处,图示的方法确定是否已发生规定时期。例如,图示的方法可确定时期变量(例如,变量“i”)是否等于规定时期。规定时期可以是阈值,例如预定义数量的迭代。每当图示的方法执行过程块13和14时,发生迭代,并且变量(i)相应地在过程块19中递增。执行的代码优化可在图示的方法中止之前进行有限次数。因此,如果图示的方法确定发生规定时期,则图示的方法在过程块17处终止。
在过程块18处,图示的方法修改调整的局部调度来对下一个处理迭代创建更紧凑的调度。为了产生实现计算的最小启动间隔的调度,调整的局部调度可基于当前调度通过使指令从它们的当前级移到它们的下一个级来修改。这样的方法对代码优化的下一个迭代产生下一个迭代调度。图示的方法重复代码优化,只要规定时期直到获得实现计算的最小启动间隔的调整的局部调度才发生(即,i规定时期)即可。
在过程块19处,图示的方法可使对于下一个处理迭代的变量(i)递增,并且方法返回过程块13来继续执行。
图2B图示执行流水线的方法。图示的方法可实现为逻辑指令集和/或固件,其存储在例如RAM、ROM、PROM、闪速存储器等机器或计算机可读存储介质中,在例如PLA、FPGA、CPLD等可配置逻辑中,在使用汇编语言编程和例如ASIC、CMOS或TTL技术等电路技术的固定功能性硬件中,或其任何组合中。
图示的方法在过程块32处提供确定对于由动态编译器处理一个或多个循环的性能水平,其中该性能水平通过计算最小启动间隔(MII)来确定。在过程块33处,图示的方法提供执行代码优化来对一个或多个循环产生在过程块33处的规定时期内实现所确定的性能水平的流水线调度,其中执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令确定局部依赖以产生局部调度。
此外,执行的代码优化可包括调整局部调度来解决循环承载依赖以创建调整的局部调度,并且如果所调整的局部调度未实现性能水平且未发生规定时期,则使指令从它们的当前级移到下一个级来产生下一个迭代调度。执行的代码优化可重复以使用下一个迭代调度来产生新的调整的局部调度,只要规定时期直到调整的局部调度实现性能水平才发生即可。
在过程块34处,建立对于一个或多个循环的依赖图并且每个依赖图基于性能水平而分区成级。图示的方法在过程块35处确定调整的局部调度是否实现性能水平并且在过程块36处,如果所调整的局部调度未实现性能水平,则图示的方法确定是否已发生规定时期。
现在转向图4,图示微处理器系统的图。在图4中示出多处理器系统1000,其可包括第一处理元件1070和第二处理元件1080。尽管示出两个处理元件1070和1080,要理解系统1000的实施例还可包括仅仅一个这样的处理元件。
系统1000图示为点到点互连系统,其中第一处理元件1070和第二处理元件1080经由点到点互连1050而耦合。应理解在图4中图示的互连中的任一个或全部可实现为多点总线而不是点到点互连。
如在图4中示出的,处理器元件1070和1080中的每个可以是多核处理器,其包括第一和第二处理器核(即,处理器核1074a和1074b以及处理器核1084a和1084b)。这样的核1074a、1074b、1084a、1084b可配置成执行指令代码。
每个处理元件1070、1080可包括至少一个共享高速缓存1896。共享高速缓存1896a、1896b可分别存储处理器的一个或多个部件(例如,核1074a、1074b和1084a、1084b)所利用的数据(例如,指令)。例如,共享高速缓存可局部高速缓存在存储器1032、1034中存储的数据以供处理器的部件更快速访问。在一个或多个实施例中,共享高速缓存可包括一个或多个中级高速缓存,例如2级(L2)、3级(L3)、4级(L4)或其它级高速缓存、最后级高速缓存(LLC)和/或其组合。
尽管仅示出有两个处理元件1070、1080,要理解本发明的范围不这样受限制。在其它实施例中,在指定处理器中可存在一个或多个额外处理元件。备选地,处理元件1070、1080中的一个或多个可以是除处理器以外的元件,例如加速器或现场可编程门阵列。例如,额外处理元件可包括与第一处理器1070相同的额外处理器、与第一处理器1070异构或不对称的额外处理器、加速器(例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理元件。从品质(其包括架构、微架构、热、功耗特性及类似物)的度量谱方面来看,在处理元件1070、1080之间可以存在多种差异。这些差异可使它们自身有效地表现为处理元件1070、1080之中的不对称和异构性。对于至少一个实施例,各种处理元件1070、1080可驻存在相同的芯片封装中。
第一处理元件1070可进一步包括存储器控制器逻辑(MC)1072和点到点(P-P)接口1076和1078。相似地,第二处理元件1080可包括MC 1082和P-P接口1086和1088。如在图4中示出的,MC 1072和1082使处理器耦合于相应的存储器,即存储器1032和存储器1034,其可以是局部附连到相应处理器的主存储器的部分。尽管MC 逻辑1072和1082图示为集成到处理元件1070、1080内,对于备选实施例,MC逻辑可以是在处理元件1070、1080外部的分立逻辑,而不是在其中集成。
第一处理元件1070和第二处理元件1080可分别经由P-P互连1076、1086和1084耦合于I/O子系统1090。如在图4中示出的,I/O子系统1090包括P-P接口1094和1098。此外,I/O子系统1090包括接口1092,用于使I/O子系统1090与高性能图形引擎1038耦合。在一个实施例中,总线可用于使图形引擎1038耦合于I/O子系统1090。备选地,点到点互连1039可使这些部件耦合。
进而,I/O子系统1090可经由接口1096耦合于第一总线1016。在一个实施例中,第一总线1016可以是外围部件互连(PCI)总线或例如PCI Express总线或另一个第三代I/O互连总线等总线,但本发明的范围不这样受限制。
如在图4中示出的,各种I/O设备1014可连同总线桥1018一起耦合于第一总线1016,该总线桥1018可使第一总线1016耦合于第二总线1010。在一个实施例中,第二总线1010可以是低引脚计数(LPC)总线。各种设备可耦合于第二总线1010,这些设备包括例如键盘/鼠标1012、通信设备1026(其进而可与计算机网络503通信)和数据存储单元1019,例如盘驱动器或其它大容量存储设备,其在一个实施例中可包括代码1030。代码1030可包括用于执行上文描述的方法中的一个或多个的实施例的指令,例如,图2A和/或2B的方法。此外,音频I/O 1024可耦合于第二总线1010。
注意预想了其它实施例。例如,代替图4的点到点架构,系统可实现多点总线或另一个这样的通信拓扑。图4的元件也可备选地使用比在图4中示出的更多或更少的集成芯片来分区。
图5图示根据一个实施例的处理器核200。该处理器核200可以是对于任何类型的处理器(例如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器或执行代码的其它设备)的核。尽管在图5中仅图示一个处理器核200,处理元件可备选地包括不止一个图5中图示的处理器核200。处理器核200可以是单线程核,或对于至少一个实施例,处理器核200可因为它每核可包括超过一个硬件线程上下文(或“逻辑处理器”)而是多线程。
图5还包括存储器270,其耦合于处理器200。存储器270可以是如本领域内技术人员已知或用别的方式对他们可用的很多种存储器(其包括存储器层级的各种层)中的任一个。存储器270可包括要由处理器200核执行的一个或多个代码213指令,其中该代码213可实现在图2A和/或2B中图示的方法。处理器核200遵循由代码213指示的指令的程序序列。每个指令可进入前端部分210并且由一个或多个解码器220处理。解码器220可产生微操作(例如采用预定义格式的固定宽微操作)作为它的输出,或可产生反映原始代码指令的其它指令、微指令或控制信号。图示的前端210还包括寄存器重命名逻辑225和调度逻辑230,其一般分配资源并且使对应于转换指令的操作列队以供执行。
示出处理器200,其包括具有指令单元255-1至255-N的集的执行逻辑250。一些实施例可包括专用于特定功能或功能集的许多执行单元。其它实施例可仅包括一个执行单元或可以执行特定功能的一个执行单元。图示的执行逻辑250执行由代码指令规定的操作。
在完成由代码指令规定的操作的执行后,后端逻辑260使代码213的指令退出。在一个实施例中,处理器200允许无序执行但需要有序的指令退出。退出逻辑265可采取如本领域内技术人员已知的多种形式(例如,重排序缓冲区或类似物)。采用该方式,处理器核200至少根据由解码器产生的输出、寄存器重命名逻辑225使用的硬件寄存器和表以及执行逻辑850修改的任何寄存器(未示出)而在代码213的执行期间变换。
尽管未在图5中图示,处理元件可包括在具有处理器核200的芯片上的其它元件。例如,处理元件可包括存储器控制逻辑连同处理器核200。处理元件可包括I/O控制逻辑和/或可包括与存储器控制逻辑集成的I/O控制逻辑。处理元件还可包括一个或多个高速缓存。
额外注释和示例:
示例1可包括用于执行流水线的装置。该装置可包括:第一模块,用于确定对于由动态编译器处理一个或多个循环的性能水平;和第二模块,用于执行代码优化以对一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
示例2可包括示例1的装置,其进一步包括第三模块,用于对一个或多个循环建立依赖图并且基于性能水平将每个依赖图分区成级。
示例3可包括示例2的装置,其进一步包括:第四模块,用于确定调整的局部调度是否实现性能水平;和第五模块,用于如果所调整的局部调度未实现性能水平则确定是否已发生规定时期。
示例4可包括示例1至3中的任一个的装置,其中性能水平通过计算最小启动间隔(MII)来确定。
示例5可包括示例3的装置,其中执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令解决局部依赖来产生局部调度。
示例6可包括示例5的装置,其中执行的代码优化包括调整局部调度来解决循环承载依赖并且创建调整的局部调度。
示例7可包括示例6的装置,其中执行的代码优化包括如果所调整的局部调度未实现性能水平并且未发生规定时期则使指令从它们的当前级移到下一个级来产生下一个迭代调度。
示例8可包括示例7的装置,其中重复执行的代码优化以使用下一个迭代调度来产生新的调整的局部调度,只要规定时期直到调整的局部调度实现性能水平才发生即可。
示例9可包括至少一个计算机可读介质,其包括一个或多个指令,这些指令当在计算设备上执行时使该计算设备配置成:确定对于由动态编译器处理一个或多个循环的性能水平;并且执行代码优化以对一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
示例10可包括示例9的至少一个计算机可读介质,其进一步包括对一个或多个循环建立依赖图并且基于性能水平将每个依赖图分区成级。
示例11可包括示例10的至少一个计算机可读介质,其进一步包括:确定调整的局部调度是否实现性能水平;和如果所调整的局部调度未实现性能水平则确定是否已发生规定时期。
示例12可包括示例9至11中的任一个的至少一个计算机可读介质,其中性能水平要通过计算最小启动间隔(MII)来确定。
示例13可包括示例11的至少一个计算机可读介质,其中执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令解决局部依赖来产生局部调度。
示例14可包括示例13的至少一个计算机可读介质,其中执行的代码优化包括调整局部调度来解决循环承载依赖并且创建调整的局部调度。
示例15可包括示例14的至少一个计算机可读介质,其中执行的代码优化包括如果所调整的局部调度未实现性能水平并且未发生规定时期则使指令从它们的当前级移到下一个级来产生下一个迭代调度。
示例16可包括示例15的至少一个计算机可读介质,其中要重复执行的代码优化以使用下一个迭代调度来产生新的调整的局部调度,只要规定时期直到调整的局部调度实现性能水平才发生即可。
示例17可包括执行流水线的方法,其包括:确定对于由动态编译器处理一个或多个循环的性能水平;并且执行代码优化以对一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
示例18可包括示例17的方法,其进一步包括对一个或多个循环建立依赖图并且基于性能水平将每个依赖图分区成级。
示例19可包括示例18的方法,其进一步包括确定调整的局部调度是否实现性能水平;和如果所调整的局部调度未实现性能水平则确定是否已发生规定时期。
示例20可包括示例17至19中的任一个的方法,其中性能水平要通过计算最小启动间隔(MII)来确定。
示例21可包括示例19的方法,其中执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令解决局部依赖来产生局部调度。
示例22可包括示例21的方法,其中执行的代码优化包括调整局部调度来解决循环承载依赖并且创建调整的局部调度。
示例23可包括示例22的方法,其中执行的代码优化包括如果所调整的局部调度未实现性能水平并且未发生规定时期则使指令从它们的当前级移到下一个级来产生下一个迭代调度。
示例24可包括示例23的方法,其中要重复执行的代码优化以使用下一个迭代调度来产生新的调整的局部调度,只要规定时期直到调整的局部调度实现性能水平才发生即可。
示例25可包括用于执行流水线的装置,其包括用于执行示例17至24的方法中的任一个的部件。
示例可提供计算机可读存储介质,其具有指令集,这些指令如果由处理器执行则促使处理器确定对于由动态编译器处理一个或多个循环的性能水平,并且执行代码优化以对一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
其它示例可提供计算机可读介质,其具有指令集,这些指令如果由处理器执行则促使处理器计算对于由动态编译器处理一个或多个循环的最小启动间隔并且对一个或多个循环产生在规定时期内实现计算的最小启动间隔的流水线调度。
实施例能适用于与所有类型的半导体集成电路(“IC”)芯片一起使用。这些IC芯片的示例包括但不限于处理器、控制器、芯片集部件、可编程逻辑阵列(PLA)、存储器芯片、网络芯片及类似物。另外,在图中的一些中,信号导线用线表示。一些可以不同来指示更多的组成信号路径、具有数字标签来指示许多组成信号路径和/或在一个或多个末端处具有箭头来指示主要的信息流方向。然而,这不应以限制性的方式解释。相反,这样的附加细节可连同一个或多个示范性实施例一起使用以便于更容易地理解电路。任何表示的信号线,无论是否具有额外的信息,实际上可包括可在多个方向上行进并且可用任何适合类型的信号方案(例如用差分对、光纤线和/或单端线实现的数字或模拟线)实现的一个或多个信号。
可已经给出示例尺寸/模型/值/范围,但本发明的实施例不限于此。当制造技术(例如,光刻)随时间而成熟时,预期可以制造具有较小尺寸的设备。另外,为了简化说明和论述,并且为了不混淆本发明的实施例的某些方面,众所周知的到IC芯片和其它部件的电力/接地连接可在或可不在图内示出。此外,设置可采用框图形式示出以避免混淆本发明的实施例,并且还鉴于关于这样的框图设置的实现的细节高度取决于实现实施例所在平台(即,这样的细节应该完全在本领域内技术人员的视野内)这一事实。在阐述特定细节(例如,电路)以便描述本发明的示例实施例的情况下,可以在没有这些特定细节或具有这些特定细节的变化形式的情况下实践本发明的实施例,这对本领域内技术人员应该是明显的。从而描述被视为说明性而非限制性的。
一些实施例如可使用可存储指令、指令集(其如果由机器执行则可促使机器执行根据实施例的方法和/或操作)的机器或有形的计算机可读介质或物品而实现。这样的机器可包括,例如任何适合的处理平台、计算平台、计算设备、处理设备、计算系统、处理系统、计算机、处理器或类似物,并且可使用硬件和/或软件的任何适合的组合实现。
机器可读介质或物品可包括,例如任何适合类型的存储器单元、存储器设备、存储器物品、存储器介质、存储设备、存储物品、存储介质和/或存储单元,例如存储器、可移动或不可移动介质、可擦除或不可擦除介质、可写或可重写介质、数字或模拟介质、硬盘、软盘、压缩盘只读存储器(CD-ROM)、可记录压缩盘(CD-R)、可重写压缩盘(CD-RW)、光盘、磁介质、磁光介质、可移动存储卡或盘、各种类型的数字多功能盘(DVD)、带、盒式磁带或类似物。
机器可读介质可包括用于采用机器可读形式存储、传输或接收信息的任何机构,并且介质可包括程序代码可经过的介质,例如天线、光纤、通信接口等。程序代码可采用分组、串行数据、并行数据等的形式传输,并且可采用压缩或加密格式使用。
程序代码或指令可存储在例如易失性和/或非易失性存储器中,例如存储设备和/或关联的机器可读或机器可访问介质,其包括但不限于固态存储器、硬驱动器、软盘、光存储、带、闪速存储器、存储条、数字视频盘、数字多功能盘(DVD)等,以及更为奇异的介质,例如机器可访问生物状态保存存储。
指令可包括任何适合类型的代码,例如源代码、编译代码、解释代码、可执行代码、静态码、动态码、加密码,及类似物,其使用任何适合的高级、低级、面向对象、视觉、编译和/或解释性编程语言来实现。
除非另外专门规定,可意识到例如“处理”、“计算”、“确定”或类似的术语指计算机或计算系统或相似电子计算设备的动作和/或过程,其操纵在计算系统的寄存器和/或存储器内表示为物理量(例如,电子)的数据和/或将其变换为其它数据,这样的其它数据相似地表示为计算系统的存储器、寄存器或其它这样的信息存储、传输或显示设备内的物理量。实施例在该上下文中不受限制。
术语“耦合”可在本文中用于指谈论的部件之间的任何类型的关系(直接或间接的),并可适用于电、机械、流体、光、电磁、机电或其它连接。另外,术语“第一”、“第二”等在本文中可仅用于便于论述,并且不具有特定时间或时间顺序的意义,除非另外指出。
本领域内技术人员将从前面的描述意识到本发明的实施例的广泛的技术可以多种形式实现。因此,尽管本发明的实施例已经连同其特定示例描述,本发明的实施例的真正范围不应这样受限制,因为当研究图、说明书和下面的权利要求书时其它修改将对技术人员变得明显。
Claims (25)
1. 一种用于执行流水线的装置,其可包括:
第一模块,用于确定对于由动态编译器处理一个或多个循环的性能水平;和
第二模块,用于执行代码优化以对所述一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
2. 如权利要求1所述的装置,其进一步包括:
第三模块,用于对所述一个或多个循环建立依赖图并且基于所述性能水平将每个依赖图分区成级。
3. 如权利要求2所述的装置,其进一步包括:
第四模块,用于确定调整的局部调度是否实现所述性能水平;和
第五模块,用于如果所调整的局部调度未实现所述性能水平则确定是否已发生所述规定时期。
4. 如权利要求3所述的装置,其中所述性能水平通过计算最小启动间隔(MII)来确定。
5. 如权利要求3所述的装置,其中所述执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令解决局部依赖来产生局部调度。
6. 如权利要求5所述的装置,其中所述执行的代码优化包括调整所述局部调度来解决循环承载依赖并且创建所述调整的局部调度。
7. 如权利要求6所述的装置,其中所述执行的代码优化包括如果所述调整的局部调度未实现所述性能水平并且未发生所述规定时期则使指令从它们的当前级移到下一个级来产生下一个迭代调度。
8. 如权利要求7所述的装置,其中重复所述执行的代码优化以使用所述下一个迭代调度来产生新的调整的局部调度,只要所述规定时期直到所述调整的局部调度实现所述性能水平才发生即可。
9. 至少一个计算机可读介质,其包括一个或多个指令,所述指令当在计算设备上执行时使所述计算设备配置成:
确定对于由动态编译器处理一个或多个循环的性能水平;以及
执行代码优化以对所述一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
10. 如权利要求9所述的至少一个计算机可读介质,其进一步包括一个或多个指令,所述指令在由所述处理器执行时促使所述处理器:
对所述一个或多个循环建立依赖图并且基于所述性能水平将每个依赖图分区成级。
11. 如权利要求10所述的至少一个计算机可读介质,其进一步包括一个或多个指令,所述指令在由所述处理器执行时促使所述处理器:
确定调整的局部调度是否实现所述性能水平;以及
如果所述调整的局部调度未实现性能水平则确定是否已发生所述规定时期。
12. 如权利要求11所述的至少一个计算机可读介质,其中所述性能水平要通过计算最小启动间隔(MII)来确定。
13. 如权利要求11所述的至少一个计算机可读介质,其中所述执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令解决局部依赖来产生局部调度。
14. 如权利要求13所述的至少一个计算机可读介质,其中所述执行的代码优化包括调整所述局部调度来解决循环承载依赖并且创建所述调整的局部调度。
15. 如权利要求14所述的至少一个计算机可读介质,其中所述执行的代码优化包括如果所述调整的局部调度未实现所述性能水平并且未发生所述规定时期则使指令从它们的当前级移到下一个级来产生下一个迭代调度。
16. 如权利要求15所述的至少一个计算机可读介质,其中要重复所述执行的代码优化以使用所述下一个迭代调度来产生新的调整的局部调度,只要所述规定时期直到所述调整的局部调度实现所述性能水平才发生即可。
17. 一种执行流水线的方法,其包括:
确定对于由动态编译器处理一个或多个循环的性能水平;以及
执行代码优化以对所述一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度。
18. 如权利要求17所述的方法,其进一步包括:
对所述一个或多个循环建立依赖图并且基于所述性能水平将每个依赖图分区成级。
19. 如权利要求18所述的方法,其进一步包括:
确定调整的局部调度是否实现所述性能水平;以及
如果所述调整的局部调度未实现所述性能水平则确定是否已发生所述规定时期。
20. 如权利要求19所述的方法,其中所述性能水平要通过计算最小启动间隔(MII)来确定。
21. 如权利要求19所述的方法,其中所述执行的代码优化包括分配硬件资源并且对每个分区级中包括的指令解决局部依赖来产生局部调度。
22. 如权利要求21所述的方法,其中所述执行的代码优化包括调整所述局部调度来解决循环承载依赖并且创建所述调整的局部调度。
23. 如权利要求22所述的方法,其中所述执行的代码优化包括如果所述调整的局部调度未实现所述性能水平并且未发生所述规定时期则使指令从它们的当前级移到下一个级来产生下一个迭代调度。
24. 如权利要求23所述的方法,其中重复所述执行的代码优化以使用所述下一个迭代调度来产生新的调整的局部调度,只要所述规定时期直到所述调整的局部调度实现所述性能水平才发生即可。
25. 一种用于执行流水线的装置,其包括:
用于确定对于由动态编译器处理一个或多个循环的性能水平的部件;和
用于执行代码优化以对所述一个或多个循环产生在规定时期内实现所确定的性能水平的流水线调度的部件。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/853430 | 2013-03-29 | ||
US13/853,430 US9239712B2 (en) | 2013-03-29 | 2013-03-29 | Software pipelining at runtime |
PCT/US2014/031975 WO2014160837A1 (en) | 2013-03-29 | 2014-03-27 | Software pipelining at runtime |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105009076A true CN105009076A (zh) | 2015-10-28 |
CN105009076B CN105009076B (zh) | 2020-07-28 |
Family
ID=51622156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480011194.3A Expired - Fee Related CN105009076B (zh) | 2013-03-29 | 2014-03-27 | 在运行时的软件流水线 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9239712B2 (zh) |
EP (1) | EP2956853A4 (zh) |
JP (1) | JP6172614B2 (zh) |
KR (1) | KR101719087B1 (zh) |
CN (1) | CN105009076B (zh) |
WO (1) | WO2014160837A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9038042B2 (en) * | 2012-06-29 | 2015-05-19 | Analog Devices, Inc. | Staged loop instructions |
US9239712B2 (en) | 2013-03-29 | 2016-01-19 | Intel Corporation | Software pipelining at runtime |
US20160179550A1 (en) * | 2014-12-23 | 2016-06-23 | Intel Corporation | Fast vector dynamic memory conflict detection |
WO2016106691A1 (en) * | 2014-12-31 | 2016-07-07 | Yahoo! Inc. | Method and/or Apparatus for Generating Signal Processing Pipelines |
KR20180038875A (ko) | 2016-10-07 | 2018-04-17 | 삼성전자주식회사 | 데이터 입출력 유닛, 전자 장치 및 그 제어 방법들 |
US10628142B2 (en) | 2017-07-20 | 2020-04-21 | Texas Instruments Incorporated | Loop break |
US11294685B2 (en) | 2019-06-04 | 2022-04-05 | International Business Machines Corporation | Instruction fusion using dependence analysis |
US11861366B2 (en) | 2021-08-11 | 2024-01-02 | Micron Technology, Inc. | Efficient processing of nested loops for computing device with multiple configurable processing elements using multiple spoke counts |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5920724A (en) * | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
US20030135724A1 (en) * | 2001-12-12 | 2003-07-17 | Gayathri Krishnamurthy | Partitioning symmetric nodes efficiently in a split register file architecture |
CN102918561A (zh) * | 2010-06-28 | 2013-02-06 | 英特尔公司 | 硬件和软件分界的图像处理流水线 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07121381A (ja) * | 1993-10-28 | 1995-05-12 | Hitachi Ltd | ループ最適化方法 |
JP3218932B2 (ja) * | 1995-07-06 | 2001-10-15 | 株式会社日立製作所 | データプリフェッチコード生成方法 |
US5809308A (en) * | 1995-11-17 | 1998-09-15 | Sun Microsystems, Inc. | Method and apparatus for efficient determination of an RMII vector for modulo scheduled loops in an optimizing compiler |
US6044222A (en) * | 1997-06-23 | 2000-03-28 | International Business Machines Corporation | System, method, and program product for loop instruction scheduling hardware lookahead |
US5970249A (en) * | 1997-10-06 | 1999-10-19 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
EP1113357A3 (en) * | 1999-12-30 | 2001-11-14 | Texas Instruments Incorporated | Method and apparatus for implementing a variable length delay instruction |
JP3477137B2 (ja) * | 2000-03-03 | 2003-12-10 | 松下電器産業株式会社 | 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6832370B1 (en) * | 2000-05-09 | 2004-12-14 | Hewlett-Packard Development, L.P. | Data speculation within modulo scheduled loops |
JP3808755B2 (ja) * | 2001-11-07 | 2006-08-16 | 富士通株式会社 | Jitコンパイラを備えた仮想計算機 |
US20030120882A1 (en) | 2001-12-20 | 2003-06-26 | Granston Elana D. | Apparatus and method for exiting from a software pipeline loop procedure in a digital signal processor |
AU2003242768A1 (en) * | 2002-08-02 | 2004-02-25 | Telefonaktiebolaget Lm Ericsson (Publ) | Optimised code generation |
US7058938B2 (en) | 2003-03-05 | 2006-06-06 | Intel Corporation | Method and system for scheduling software pipelined loops |
US20060200651A1 (en) | 2005-03-03 | 2006-09-07 | Collopy Thomas K | Method and apparatus for power reduction utilizing heterogeneously-multi-pipelined processor |
US7958340B2 (en) | 2008-05-09 | 2011-06-07 | International Business Machines Corporation | Monitoring software pipeline performance on a network on chip |
US8209525B2 (en) * | 2008-08-15 | 2012-06-26 | Apple Inc. | Method and apparatus for executing program code |
US8239404B2 (en) * | 2010-06-10 | 2012-08-07 | Microsoft Corporation | Identifying entries and exits of strongly connected components |
US9239712B2 (en) | 2013-03-29 | 2016-01-19 | Intel Corporation | Software pipelining at runtime |
-
2013
- 2013-03-29 US US13/853,430 patent/US9239712B2/en not_active Expired - Fee Related
-
2014
- 2014-03-27 CN CN201480011194.3A patent/CN105009076B/zh not_active Expired - Fee Related
- 2014-03-27 EP EP14775994.8A patent/EP2956853A4/en not_active Withdrawn
- 2014-03-27 JP JP2016505561A patent/JP6172614B2/ja not_active Expired - Fee Related
- 2014-03-27 KR KR1020157022960A patent/KR101719087B1/ko active IP Right Grant
- 2014-03-27 WO PCT/US2014/031975 patent/WO2014160837A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5920724A (en) * | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
US20030135724A1 (en) * | 2001-12-12 | 2003-07-17 | Gayathri Krishnamurthy | Partitioning symmetric nodes efficiently in a split register file architecture |
CN102918561A (zh) * | 2010-06-28 | 2013-02-06 | 英特尔公司 | 硬件和软件分界的图像处理流水线 |
Non-Patent Citations (3)
Title |
---|
KEMAL EBCIOGLU等: "Optimizations and Oracle Parallelism with Dynamic Translation", 《PROCEEDINGS OF THE 32ND ANNUAL ACM/IEEE INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE》 * |
PIERRE-YVES CALLAND等: "Circuit Retiming Applied to Decomposed Software Pipelining", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS》 * |
叶丞等: "SMS软件流水调度算法的设计与实现", 《计算机工程与科学》 * |
Also Published As
Publication number | Publication date |
---|---|
CN105009076B (zh) | 2020-07-28 |
KR20150110742A (ko) | 2015-10-02 |
EP2956853A4 (en) | 2016-10-19 |
US20140298306A1 (en) | 2014-10-02 |
JP6172614B2 (ja) | 2017-08-02 |
KR101719087B1 (ko) | 2017-04-04 |
EP2956853A1 (en) | 2015-12-23 |
WO2014160837A1 (en) | 2014-10-02 |
JP2016515735A (ja) | 2016-05-30 |
US9239712B2 (en) | 2016-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105009076A (zh) | 在运行时的软件流水线 | |
US10684776B2 (en) | Memory configuration for inter-processor communication in an MPSoC | |
US9443049B2 (en) | Boundary based power guidance for physical synthesis | |
US9576085B2 (en) | Selective importance sampling | |
US9684751B2 (en) | Slack redistribution for additional power recovery | |
US20150199468A1 (en) | Method and apparatus for selecting data path elements for cloning | |
US8595668B1 (en) | Circuits and methods for efficient clock and data delay configuration for faster timing closure | |
US9529587B2 (en) | Refactoring data flow applications without source code changes or recompilation | |
US20190392089A1 (en) | Automated region based optimization of chip manufacture | |
Wu et al. | Asynchronous circuit placement by lagrangian relaxation | |
US9519744B1 (en) | Merging of storage elements on multi-cycle signal distribution trees into multi-bit cells | |
JP6242170B2 (ja) | 回路設計支援装置及びプログラム | |
US10599804B1 (en) | Pin cloning and subway creation on automatically generated design physical hierarchy | |
US9672321B2 (en) | Virtual positive slack in physical synthesis | |
US20170212977A1 (en) | Area and/or power optimization through post-layout modification of integrated circuit (ic) design blocks | |
US9569581B1 (en) | Logic structure aware circuit routing | |
KR101676962B1 (ko) | 리셋이 있는 단열 디-플립플롭 회로 | |
CN105760560A (zh) | 用于优化集成电路噪声性能的方法和装置 | |
JP2012043327A (ja) | クロックツリー設計方法及びクロックツリー設計装置 | |
JP2004240530A (ja) | 回路設計方法、回路設計装置および記録媒体 | |
Talukdar | Power-aware automated hybrid pipelining of combinational circuits | |
Yu et al. | Network flow-based simultaneous retiming and slack budgeting for low power design | |
Mukherji et al. | Reconfigurable Application Specific Instruction Set Processors-A New Paradigm for Embedded System Design | |
Tavakolinia | FPGA power optimization | |
AU2015271896A1 (en) | Selection of system-on-chip component models for early design phase evaluation |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200728 Termination date: 20210327 |