CN103970510B - 用于对流水线中的块进行调度的编译方法和设备 - Google Patents
用于对流水线中的块进行调度的编译方法和设备 Download PDFInfo
- Publication number
- CN103970510B CN103970510B CN201410014235.6A CN201410014235A CN103970510B CN 103970510 B CN103970510 B CN 103970510B CN 201410014235 A CN201410014235 A CN 201410014235A CN 103970510 B CN103970510 B CN 103970510B
- Authority
- CN
- China
- Prior art keywords
- block
- piece
- important
- edge
- scheduled
- 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.)
- Expired - Fee Related
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/443—Optimisation
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63G—MERRY-GO-ROUNDS; SWINGS; ROCKING-HORSES; CHUTES; SWITCHBACKS; SIMILAR DEVICES FOR PUBLIC AMUSEMENT
- A63G11/00—See-saws
-
- 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/4451—Avoiding pipeline stalls
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)
Abstract
提供一种用于对流水线中的块进行调度的编译方法和设备。所述用于对流水线中的块进行调度的编译方法可包括:使用处理器对程序代码的控制流中的块的存取计数进行配置;响应于进入块的边缘的边缘计数大于或等于预定值,确定块为重要块,边缘计数包括在块的存取计数中;基于存取计数对重要块进行调度以防止寄存器回写冲突。
Description
本申请要求于2013年1月28日提交到韩国知识产权局的第10-2013-0009058号韩国专利申请的优先权,该申请的公开通过引用全部包含于此。
技术领域
与示例性实施例一致的方法和设备涉及用于对程序代码的流水线(pipeline)中的块进行调度的编译方法和设备。
背景技术
在具有多流水线的计算机结构中,回写(writeback)表示暂存寄存器根据操作存储将被记录在磁盘中的数据。由于包括物理操作的记录慢于电处理,因此可通过回写将数据记录在寄存器中来减少总的系统时延(latency)。
在操作操作时延针对每个操作而不同的情况下,从不同周期开始的操作可能同时将数据写入到寄存器。这被称为寄存器回写冲突。
因此,需要可避免寄存器回写冲突并可使时延最小化的编译器技术。
发明内容
根据示例性实施例的一方面,可提供一种用于对流水线中的块进行调度的编译方法,所述编译方法包括:对程序代码的控制流程中的块的存取计数进行配置;将进入块的边缘的边缘计数大于或等于预定值的块确定为重要块,边缘计数包括在块的存取计数中;基于存取计数对重要块进行调度以防止寄存器回写冲突。
将进入块的边缘的边缘计数大于或等于预定值的块确定为重要块,边缘计数包括在块的存取计数中的步骤可包括:将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘,并将重要边缘进入的块确定为重要块。
将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘的步骤可包括:将从未调度块进入的重要边缘标记为普通边缘。
基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤可包括:根据基于存取计数确定的优先级对块进行分类,并按基于优先级对块进行分类的次序顺序地对块进行调度。
将进入块的边缘的边缘计数大于或等于预定值的块确定为重要块,边缘计数包括在块的存取计数中的步骤可包括:基于存取计数从块形成超块。
基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤可包括:将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中。
将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中的步骤可包括:将空操作(NOP)调度到预料到寄存器回写冲突的周期中。
基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤可包括:将存储操作调度到预料到寄存器回写冲突的周期中。
基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤可包括:对重要块的操作进行调度以在重要块内或以边缘连接到重要块的块中执行回写。
所述编译方法还可包括:在不重要块中不考虑回写而进行调度。
在不重要块中不考虑回写而进行调度的步骤可包括:按物理方法将停顿周期应用于不重要块的预料到寄存器回写冲突的周期中。
所述编译方法还可包括:当存在从不重要块离开并进入到至已调度块的边缘时,进行调度以在不重要块中执行操作的回写。
根据另一示例性实施例的一方面,可提供一种用于对流水线中的块进行调度的编译设备,所述编译设备包括:块编译单元,在程序代码的控制流中对块的存取计数进行配置;块确定单元,将进入块的边缘的边缘计数大于或等于预定值的块确定为重要块,边缘计数包括在存取计数中;块调度单元,基于存取计数对重要块进行调度以防止寄存器回写冲突。
所述编译设备还可包括:超块形成单元,基于存取计数从块形成超块;块调度单元可根据基于存取计数确定的优先级对块和超块进行分类,并可按分类的次序顺序地对块和超块进行调度。
块确定单元可包括边缘标记单元,在块中将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘,并将从未调度块进入的重要边缘标记为普通边缘,并且块确定单元可将重要边缘进入的块确定为重要块。
块调度单元还可将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中,并且当存在从不重要块离开并进入到已调度块的边缘时,块调度单元可对不重要块中的操作的回写执行进行调度。
所述编译设备还可包括停顿应用单元,将停顿周期应用于不重要块的预料到发生寄存器回写冲突的周期中。
根据另一实施例的一方面,可提供一种非暂时性计算机可读介质,包括用于命令计算机执行用于对流水线中的块进行调度的编译方法的程序。
根据另一实施例的一方面,可提供一种对流水线中的块进行调度的编译方法。所述编译方法可包括:通过处理器,使用块的存取计数确定块是否为重要块;响应于确定块为重要块而对块进行调度,以防止块发生寄存器回写冲突。
块的存取计数可以是作为对至少一个操作指令进行仿真的结果的块的使用数与编译的程序代码的存取总数的比率。
所述编译方法还可包括:响应于确定块为不重要块而对块进行调度,以允许块发生寄存器回写冲突
所述编译方法还可包括:响应于对块进行调度以允许块发生寄存器回写冲突,确定块是否被预料为发生寄存器回写冲突,并响应于确定块被预料为发生寄存器回写冲突,应用停顿周期。
根据另一实施例的一方面,可提供一种用于对流水线中的块进行调度的编译设备。所述编译设备可包括:块确定单元,被配置为通过将进入块的边缘的边缘计数与预定值进行比较来确定块是重要的还是不重要的;块调度单元,被配置为对流水线中的块进行调度,使得响应于块为重要的,对块进行调度以防止块发生寄存器回写冲突,并响应于块为不重要的,对块进行调度以允许块发生寄存器回写冲突。
块调度单元还可被配置为,响应于块为不重要的,确定块是否被预料为发生寄存器回写冲突,并响应于确定块被预料为发生寄存器回写冲突,将停顿周期应用于预料到寄存器回写冲突的周期中。
附图说明
从以下结合附图对特定示例性实施例的详细描述,上述和其它方面将变得清楚和更加容易理解,在附图中:
图1A和图1B是示出根据示例性实施例的由于在流水线中具有相同时延或不同时延的每个操作而发生的回写的示图;
图2是示出为了在流水线中避免寄存器回写冲突而应用停顿周期(stall cycle)的示图;
图3是示出为了在流水线中避免寄存器回写冲突而插入的空操作(NOP)的示图;
图4A和图4B是示出超块中的推测(speculation)的控制流的示图;
图5是示出基本块(BB)中的NOP的控制流的示图;
图6是示出根据示例性实施例的用于对流水线中的块进行调度的编译方法的流程图;
图7A和图7B是示出根据示例性实施例的被配置的程序代码的控制流的示图;
图8A和图8B是示出根据示例性实施例的基于配置结果形成的超块的控制流程的示图;
图9A和图9B是示出根据示例性实施例的基于配置结果分类的块的控制流程的示图;
图10A和图10B是示出根据示例性实施例的基于配置结果标记的重要边缘的控制流程的示图;
图11A和图11B是示出根据示例性实施例的重要边缘进入的被调度的块的控制流程的示图;
图12A和图12B是示出根据示例性实施例的考虑重要边缘被调度的块的控制流程的示图;
图13A和图13B是示出根据示例性实施例的依次按分类次序被调度的块的控制流程的示图;
图14示出根据示例性实施例的用于对流水线中的块进行调度的编译器设备。
具体实施方式
可如下定义贯穿本公开使用的术语。
流水线可表示用于将系统设计为将一个处理器划分为具有不同功能的一系列子处理器并使子处理器能够同时处理数据的架构。这里,通过多个步骤执行一个指令来完成操作所花费的时间段可被称为时延,每个步骤所花费的时间段可称为一个周期。
控制流程可与用于指定输入/输出装置进行处理并将程序的名称链接到硬件的一组控制代码相应,并可表示由流程图表示的关于程序执行顺序的所有可能路径的概念。
在控制流程中,“div”表示除法操作,“mul”表示乘法操作,“add”表示加法操作,“sub”表示减法操作,“shift”表示在寄存器中将位值向左移位或向右移位的操作,“jump”表示无条件地重复循环的操作,“branch”表示有条件地重复循环的操作,“load”表示从存储器取值的操作,“nop”或“NOP”表示空操作。每个缩写之后的值表示块的指定号。例如,“add3”表示在第三块中执行加法操作。
这里,控制流程可表示根据程序代码的多个块,并且在每一块中,行方向可表示执行操作的周期的次序。选择图4作为示例,在第一块491中,可首先执行“div1”,并可在执行四个周期的NOP之后执行“branch”。根据示例性实施例,程序代码可包括中间表示(IR)代码,在编译器内语言(例如,C、C++、JAVA等)被转换为中间表示(IR)代码。即,编码器可通过处理器将高级语言转换为机器语言。
图1A和图1B示出根据示例性实施例的可由于具有不同时延的操作而发生的寄存器回写冲突并示出由于在流水线中具有相同时延或不同时延的操作而发生的回写。
在图1A和图1B中,IF表示取指令操作,即,直到完成从存储器取将在执行一个指令之后接着执行的指令为止由处理器单元执行的操作;ID表示确定从存储器取的指令的类型的指令解码操作;EX表示基于在ID步骤中确定的指令的类型执行指令的执行操作;WB表示根据操作把将被记录在磁盘中的数据临时存储在寄存器中的回写操作。
这里,横轴表示周期,纵轴表示操作。
参照图1A,可通过使操作时延相同,来针对每个操作在不同周期中执行WB。这里,分配到每个操作的相同时延可与操作的时延中的最长时延相应。然而,即使产生了结果,对于具有短时延的操作,寄存器回写也是可能的。因为该原因,可能需要数据转发。然而,在超长指令字(VLIW)的情况下,由于宽的发行宽度(issue width),因此数据转发是可能的,并且在具有高时钟频率和长流水线的处理器中,可能不能进行数据转发。
参照图1B,针对具有不同时延的每个操作,WB101可在同一周期中工作。例如,第一操作(op1)和第二操作(op2)分别具有从IF至WB的不同的周期,即,四个周期和三个周期。当在第一周期中执行op1并在第二周期中执行op2,时,在第五周期中执行op1和op2的WB101。因此,可在不同操作之间发生同时将数据写入寄存器的寄存器回写冲突。
如图1A所示,可通过使用复杂转发逻辑对时延进行量化,来防止寄存器回写冲突。如图2所示,可考虑硬件方法(例如,寄存器写缓冲器或流水线停顿)以避免寄存器回写冲突。作为软件方法,如图3至图5所示,块调度可用于解决寄存器回写冲突。
图2是示出为了在流水线中避免寄存器回写冲突而应用的停顿周期的示图。与图1相似,横轴表示周期,纵轴表示操作。
当发生寄存器回写冲突时,流水线可被停顿,一个寄存器可被回写,流水线可被解禁,并且其它寄存器可被写入。例如,为了避免op1与op2之间的寄存器回写冲突,可在第五周期将停顿周期201应用于操作2(op2)与操作5(op5)之间。该流水线停顿可停止整个流水线,并且频繁的流水线停顿可导致性能降低。
作为用于避免寄存器冲突的另一硬件方法,可使用寄存器写缓冲器。当发生寄存器回写冲突时,一个寄存器可被布置在寄存器写缓冲器中,并可在下一周期中被写入。在这种情况下,当在下一周期再次发生寄存器回写冲突时,可能无法避免冲突。该方法可仅适用于具有一个周期时延的流水线,并可能不适合长时延和短时延共存的最近情况。
图3是示出为了在流水线中避免寄存器回写而插入的NOP的示图。作为软件方法,可使用操作调度。可预先识别寄存器回写冲突,并可对操作进行调度以避免寄存器回写冲突。
当已在期望的周期中写入寄存器时,可对流水线进行调度以插入不需要写入寄存器的操作。例如,不需要写入寄存器的操作可包括存储操作或NOP302。当如所示出的在第五周期中在op1与op2之间发生寄存器回写冲突时,可能需要停顿周期301来避免冲突。代替停顿周期,可插入NOP302。在这种情况下,不正确的调度会增加NOP302的数量,从而导致性能降低。
图4A和图4B是示出超块中的推测(speculation)的控制流程的示图。作为用于避免寄存器回写冲突的另一软件方法,可考虑全局调度。全局调度可表示同时对一组基本块(BB)执行的操作调度,而不是在BB中执行的操作调度。超块可以是全局调度的典型示例,并可仅包括外边缘而不包括块之间的内边缘。这里,边缘可表示根据存取从一个块移动到另一个块的方向,即,操作的次序。更具体地讲,存取可被理解为经过每一个块,以便在通过针对编译的程序代码的可选操作指令执行仿真的处理中操作所述可选操作指令。
该块调度可通常不考虑寄存器回写而使用等长度时延而被执行,或该块调度可被执行以在BB中完成寄存器回写。在这种情况下,性能可能由于寄存器回写冲突而降低。
例如,如图4A中所示,1st块491和2nd块492可形成第一块410作为超块,并且第二块、第三块和第四块可出现在程序代码的控制流上。通过推测490,可将mul1操作从第一块410的2nd块调度到1st块491。如图4B所示,第一块410的1st块491和2nd块492中的NOP的数量可由于调度的mul1操作而减少。
图5是示出BB中的NOP的控制流程的示图。第一块510可与从1st块591和2nd块592形成的超块相应。在第一块510中,可如右侧的虚线示出发生每个操作的回写的周期513。在第一块510中,可执行每个操作,并且在一个或两个周期之后,可在如由右侧的虚线指示的区域所示的周期513中发生回写。
与第一块510相似,可示出发生第二块520的每个操作的回写的周期523、发生第三块的每个操作的回写的周期533和发生第三块540的每个操作的回写的周期543。
如图5中所示,操作调度可在超块和BB中工作。在这种情况下,系统性能可由于发生在每个块以完成块中的每个操作的多个NOP而降低。
以下,将参照附图详细描述示例性实施例。
图6是示出根据示例性实施例的用于对流水线中的块进行调度的编译方法的流程图。
在操作610中,编译器可配置(profile)程序代码。在程序代码的控制流程中,可针对每个块配置存取计数。可通过配置存取计数来针对每个块计算边缘计数。例如,边缘计数可表示对内边缘(具体地,通过仿真而进入每个块的边缘)的数量进行计数。反过来,外边缘可与从每个块至另一块存在的边缘相应。所述边缘可被理解为块之间的路径,其中,可选操作指令通过该路径以在针对程序代码执行仿真的处理中被操作。此外,边缘计数可被视为在给定预定数量的操作指令的情况下,相应路径的使用率或相应路径使用相对于存取总数(预定数量)的比率。
根据示例性实施例,可通过针对给定的预定存取总数的程序代码的仿真来计算存取计数和边缘计数。例如,可分别由每一块的存取数相对于存取总数的比率和每一块的边缘数相对于存取总数的比率来表示存取计数和边缘计数。因此,作为对一个或多个操作指令进行仿真的结果,存取计数可被理解为每个块的使用数的比率或每个块的使用数相对于编译的程序代码的比率。此外,存取计数可被视为边缘计数之和。
在操作620中,编译器可基于存取计数形成超块。编译器可通过基于存取计数据将至少两个块分为一组来形成超块。根据示例性实施例,在针对至少两个块中的每一个的存取计数大并且所述至少两个块以边缘彼此连接的情况下,可形成超块。
在操作630中,编译器可根据基于存取计数确定的优先级对块进行分类。随着每一块的存取计数相对于存取总数的比率变得越来越高,具有这样的比率的块可具有较高的优先级。根据示例性实施例,可基于最高存取计数将意图形成超块的块分类为最高优先级块。
在操作640中,编译器可确定边缘计数是否大于预定重要限制。这里,预定重要限制可在编译程序代码时由用户任意设置。根据示例性实施例,边缘计数的重要限制可以是但不限于10%。即,10%仅为示例而不意图限制为由用户任意设置的边缘计数的预定重要限制。
在操作650中,编译器可将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘。这里,当将重要边缘接收为内边缘的块比将该重要边缘发送为外边缘的块具有更高优先级时,与该重要边缘对应的边缘可被标记为普通边缘。即,当重要边缘从未调度的块离开时,相应的重要边缘可被标记为普通边缘。
在操作660中,编译器可基于存取计数按分类次序调度重要块。编译器可根据基于存取计数的优先级将块和超块进行分类,并可按根据优先级的分类次序依次对块进行调度。这里,可穿过BB调度传送到重要边缘的寄存器回写。为了降低系统复杂性,可执行调度以完成BB中的回写。
在现有技术中,通过将NOP添加到BB来完成BB中的调度操作。因此,周期相应于添加的NOP而增大,并且整个执行时间将更长。相反,这里描述的调度操作穿过BB。因此,通过将最少NOP添加到BB来在另一BB中完成操作,从而使执行时间短于现有技术的执行时间。可基于图5和图13A中的添加的NOP数来理解该差异。换句话说,在穿过BB进行调度的情况下,当与在BB中进行调度的情况相比时,可添加更少的NOP。此外,可基于图5的超块510与图13的超块的比较来理解前述特征。
随后,可不考虑不重要块的回写来执行调度。在不重要块中,可将停顿周期应用于预料到寄存器回写冲突的周期中,以将后续操作延迟一个周期。根据示例性实施例,不重要块可由于具有低的存取计数和低的执行概率而对性能具有不重要的影响。
参照图7至图13进一步详细描述前述中描述的每个操作。
图7A和图7B是示出根据示例性实施例的被配置的程序代码的控制流程的示图。这里,进一步详细描述图6的操作610。示出根据程序代码的控制流程中的每个块791、792、720、730和740。
参照图7A,控制流程被示出为由于每个块的未配置而不计算边缘计数。参照图7B,控制流程被示出为通过在对每个块进行配置之后的整个存取的仿真来计算的边缘计数。例如,作为边缘计数计算的结果,进入第一块的1st块791的边缘761可具有85%的边缘计数,进入第一块的2nd块792的边缘711可具有80%的边缘计数,从第一块的1st791进入第二块720的边缘712可具有5%的边缘计数,进入第二块720的边缘762可具有10%的边缘计数,进入第三块730的边缘763可具有5%的边缘计数,从第三块730进入到第二块720的边缘732可具有2%的边缘计数,从第三块730进入到第四块740的边缘734可具有3%的边缘计数。
图8A和图8B是示出根据示例性实施例的基于配置结果形成的超块的控制流程的示图。这里,进一步详细描述图6的操作620。对于每个块891、892、810、820、830和840,边缘计数和被计算为边缘计数的和的存取计数可与图7的边缘计数和存取计数相同。
参照图8A,进入第一块810的1st块891的边缘861可具有85%的边缘计数,进入第一块810的2nd块892的边缘811可具有80%的边缘计数。参照图8B,可将具有高的存取计数(例如,大于或等于预定值的存取计数)的1st块891和2nd块892进行分组以形成作为超块的第一块810。
图9A和图9B是示出根据示例性实施例的基于配置结果分类的块的控制流程的示图。这里,进一步详细描述图6的操作630。对于每个块,存取计数和边缘计数可与图7的存取计数和边缘计数相同。
参照图9A,第一块910可具有85%的存取计数,第二块920可具有17%的存取计数,第三块930可具有5%的存取计数,第四块940可具有3%的存取计数。参照图9B,具有最高存取计数的第一块910可被分类为最高优先级块960、具有第二最高存取计数的第二块920可被分类为第二最高优先级块970,具有第三最高存取计数的第三块930可被分类为第三最高优先级块980,具有最低最高存取计数的第四块940可被分类为最低优先级块990。
图10A和图10B是示出根据示例性实施例的基于配置结果标记的重要边缘的控制流程的示图。这里,进一步详细描述图6的操作640和操作650。
根据示例性实施例,如图10A所示,在每个块的边缘1061、1062、1063、1011、1012、1032和1034中,具有大于或等于预定重要限制的边缘计数的边缘可被标记为重要边缘。例如,当重要限制在编译时被用户设置为10%时,可如图10B所示标记进入第一块的具有85%的边缘计数的重要边缘1001、第一块内的具有80%的边缘计数的重要边缘1002和进入第二块的具有10%的边缘计数的重要边缘1003。
图11A和图11B是示出根据示例性实施例的重要边缘进入的被调度的块的控制流程的示图。这里,进一步详细描述图6的操作660。
根据示例性实施例,如图11B所示,由第一块1110中的1st块1111和2nd块1112的右侧的虚线所指示的区域1113可表示发生执行操作的回写的周期的次序。例如,如图11A所示,针对完成在作为最高优先级块1160的第一块1110中的每个操作的执行所花费的时延,div1可具有六个周期,mul1可具有两个周期,load1可具有五个周期。这里,可在基于各个系统完成每个操作的执行之后的一个或两个周期发生回写,而可在同一系统内同一周期中发生回写。
如图11A所示,标记的重要边缘1101和1102进入的最高优先级块1160可与重要块相应。在重要块中可将不执行回写的操作调度到预料到寄存器回写冲突的周期中,可对每个操作进行调度以完成穿过BB或BB中的回写。这里,不执行回写的操作可包括NOP或存储操作。
例如,如图11B中所示,可对每个操作进行调度。在形成为超块的第一块1110的1st块1111中,可执行div1,并可在下一周期中执行mul1。这里,因为mul1具有两个周期时延,因此可发生回写。
随后,在第一块1110的2nd块1112中,由于load1具有5个周期的时延,因此可对三个NOP进行调度,以在超块中完成load1的回写。
此外,div1可基于图7中计算的边缘计数以80%的概率被传送到第二块1112。根据示例性实施例,由于div1具有六个周期时延,因此可通过对不需要执行回写的NOP进行调度来避免寄存器回写冲突。这里,div1可基于图7中示出的边缘计数以5%概率被传送到第二块,并且参照图12提供进一步详细描述。
图12A和图12B是示出根据示例性实施例的考虑重要边缘被调度的块的控制流程的示图。这里,可在图6的操作660中执行第二最高优先级块1270的调度。
如图12A和12B所示,第二最高优先级块1270可考虑来自第一块1210的边缘、来自第五块1250的边缘1252和来自第三最高优先级块1280的边缘是否与重要边缘相应。
这里,边缘1252可能难以用于进行调度,这是因为,尽管来自第五块1250的边缘1252与重要边缘相应,但是第五块1250还没有被调度。因此,由于相对低的重要性,即使来自第五块1250的边缘1252具有大于或等于预定重要限制的边缘计数,来自第五块1250的边缘1252也可被标记为普通边缘。即,由于边缘1252与普通边缘相应且其他边缘因为具有小于重要限制的边缘计数所以与不重要边缘相应,因此,可不考虑回写而将第二最高优先级块1270作为不重要块而进行调度。
根据示例性实施例,第二块1220右侧的虚线元素1223可表示发生执行操作的回写的周期次序。例如,对于第二最高优先级块1270的每个操作,load2可具有五个周期时延,shift2可具有一个周期时延,add2可具有一个周期时延,sub2可具有一个周期时延。
如图12B中所示,可通过不考虑回写而进行调度,来以物理方法避免寄存器回写冲突,这是因为第二块1220因重要边缘被标记为普通边缘而与不重要块相应。
例如,因为在第二块1220中的load2具有五个周期时延因此可在图12B中示出的周期中执行回写。这里,可在完成load2的执行之后的一个或两个周期发生回写。随后,由于shift2、add2和sub2中的每一个具有一个周期时延,因此可立即执行回写。
如参照图11所述,因为从第一块传送的div1具有六个周期时延,因此可在add2的同一周期中发生回写。在这种情况下,如图7所示,由于在add2的同一周期发生div1的回写的概率仅为5%,因此,停顿周期可按物理方法使用停顿周期。根据示例性实施例,可在不影响总性能的情况下,防止代码量的增加。
图13A和图13B是示出根据示例性实施例的按分类次序顺序被调度的块的控制流程的示图。这里,可在图6的操作660中执行对被分类为重要块的块1380和1390的调度。
根据示例性实施例,如图13B所示,被实粗线包围的指令示出执行操作的顺序,每个块1320、1330和1340的右侧的虚线元素1323、1333和1334可表示在第三块1330和第四块1340中执行的操作的回写被执行的周期的次序。例如,对于每个操作,load3和load4可具有五个周期时延,add3可具有一个周期时延。此外,指令叠加指令(instructions doubled-upinstructions)(诸如shift2和load3)示出在同一周期中发生叠加指令(doubled-upinstructions)的WB。
具体地,如图13A所示,在第三优先级块1380的内边缘中不存在重要边缘的情况下,第三最高优先级块1380可以是不重要块。可假设第四优先级块1390可具有进入到第四优先级块1390的下一块且从第四优先级块1390离开的块,并且接收相应边缘的所述块可未被调度。在这种情况下,由于第四优先级块1390的下一块未被调度并且无法考虑特定情况,因此可与重要块相似地对第四优先级块1390的每个操作进行调度以在BB中完成回写。
例如,第三优先级块1380的load3可基于图7中示出的边缘计数以2%概率被传送到第二块1320,且以3%概率被传送到第四块1340。由于可在与第二块1320中的shift2的同一周期发生回写1323但是这样的概率低,因此可通过应用停顿周期来避免寄存器回写冲突。这里,可由于add3具有一个周期时延而立即发生回写。
此外,如图13B中所示,由于第四块1340的load4具有五个周期时延,因此可对三个NOP进行调度以完成BB中的load4的回写,这里,从第三块1330传送的load3的回写可基于图7中示出的边缘计数以3%概率发生在不执行回写的NOP周期中。
根据示例性实施例,当存取总数为100时,可在1035个周期期间执行图5的方法,可在包括770个周期和7个停顿周期的总共777个周期期间执行图13的方法。因此,由于图5的方法具有26个指令而示例性实施例具有21个指令因此可导致执行执行时间减少24%,代码量减少19%。
根据示例性实施例,如图14所示,用于在流水线中对块进行调度的编译器设备可包括块配置单元1410、块确定单元1420、块调度单元1430、超块形成单元1440和停顿应用单元1450。
块配置单元1410可在程序代码的控制流程中对块的存取计数进行配置。这里,可基于可通过仿真方法获得的边缘计数对块的存取计数进行配置。
块确定单元1420可将具有大于或等于预定值的存取计数的块确定为重要块。这里,存取计数可包括边缘计数。块确定单元1420可包括用于将具有大于或等于预定重要限制的边缘计数标记为重要边缘并将从未调度块进入的重要边缘标记为普通边缘的边缘标记单元1425,块确定单元1420可将重要边缘进入的块确定为重要块。
块调度单元1430可基于存取计数对重要块进行调度。块调度单元1430可将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中,并且当存在从不重要块离开并进入至已调度块的边缘时,块调度单元1430可执行用于在不重要块中执行回写的调度。
根据示例性实施例,提供一种块调度单元1430,所述块调度单元1430可根据基于存取计数确定的优先级对块和超块进行分类,并可按分类次序顺序地对块和超块进行调度。
超块形成单元1440基于存取计数从块形成超块。例如,超块形成单元1440可通过具有高的存取计数的通过边缘对彼此连接的至少两个块进行分组来形成超块。
停顿应用单元1450可将停顿周期应用至不重要块的预料到寄存器回写冲突的周期中。
根据示例性实施例,提供一种用于在流水线中对块进行调度的编译设备,所述编译设备可对用于穿过BB边界执行寄存器回写的操作进行调度以提高性能。此外,编译设备可执行调度以防止在基于作为配置结果的边缘计数确定的重要块中的停顿以使性能最大化,并可将停顿周期应用至不重要块以使代码量最小化。此外,编译设备可对基于存取计数确定的优先级分类的块进行调度以防止回溯并使编译时间最小化。
可使用硬件组件、软件组件或它们的组合来实现这里描述的单元。例如,可使用一个或多个通用或专用计算机(诸如处理器、流水线处理器、控制器和算术逻辑单元、数字信号处理器、微型计算机、现场可编程阵列、可编程逻辑单元、微处理器或能够以限定的方式响应和执行指令的任何其它装置)来实现处理装置。处理装置可运行操作系统(OS)和运行在OS上的一个或多个软件应用。处理装置还可响应于软件的执行来存取、存储、操作、处理和创建数据。为了简单的目的,处理装置的描述用作单数;然而,本领域的技术人员将理解,处理装置可包括多个处理元件和多种类型的处理元件。例如,处理装置可包括多个处理器或者处理器和控制器。此外,不同的处理配置(诸如并行处理器)是可行的。
软件可包括用于独立地或共同地命令或配置处理装置按照需要进行操作的计算机程序、代码段、指令或它们的一些组合。可在任何类型的机器、组件、物理装置或虚拟装置、计算机存储介质或装置中,或以能够提供指令或数据或者被处理装置解释的传输信号波来实现软件和数据。软件还可被分布在与计算机系统结合的网络上,从而以分布式的形式存储和执行所述软件。尤其是,可通过一个或多个计算机可读记录介质来存储软件和数据。
计算机可读记录介质可包括可存储之后可由计算机系统或处理装置读取的数据的任何数据存储装置。计算机可读记录介质的示例包括只读存储器(ROM)、随机存取存储器(RAM)、CD-ROM、磁带、软盘、光学数据存储装置。此外,基于并使用附图的流程图和框图以及这里提供的它们的相应描述,这里公开的用于实现示例实施例的功能程序、代码和代码段可容易地被实施例所属领域的程序员解释。
以上已描述了一些示例。然而,将理解,可进行各种修改。例如,如果以不同的顺序执行描述的技术,和/或如果以不同的方式组合和/或由其它组件或它们的等同物代替或补充在描述的系统架构、装置或电路中的组件,则可实现合适的结果。因此,其它实施方式在权利要求的范围内。
Claims (22)
1.一种用于对管线中的块进行调度的编译方法,所述编译方法包括:`
使用处理器对程序代码的控制流程中的块的存取计数进行配置;
响应于进入块的边缘的边缘计数大于或等于预定值,将块确定为重要块,其中,边缘计数包括在块的存取计数中;
使用存取计数对重要块进行调度以防止寄存器回写冲突,
其中,基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤包括:将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中。
2.如权利要求1所述的编译方法,其中,将块确定为重要块的步骤包括:
将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘;
将重要边缘进入的块确定为重要块。
3.如权利要求2所述的编译方法,其中,将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘的步骤包括:将从未调度块进入的重要边缘标记为普通边缘。
4.如权利要求1所述的编译方法,其中,基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤包括:
根据基于存取计数确定的优先级对块进行分类;
按基于优先级对块进行分类的次序顺序地对块进行调度。
5.如权利要求1所述的编译方法,其中,将块确定为重要块的步骤包括:基于存取计数从块形成超块。
6.如权利要求1所述的编译方法,其中,将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中的步骤包括:将空操作(NOP)调度到预料到寄存器回写冲突的周期中。
7.如权利要求1所述的编译方法,其中,基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤包括:将存储操作调度到预料到寄存器回写冲突的周期中。
8.如权利要求1所述的编译方法,其中,基于存取计数对重要块进行调度以防止寄存器回写冲突的步骤包括:对重要块的操作进行调度以在重要块内或以边缘连接到重要块的块中执行回写。
9.如权利要求1所述的编译方法,还包括:
在不重要块中不考虑回写而进行调度。
10.如权利要求9所述的编译方法,其中,在不重要块中不考虑回写而进行调度的步骤包括:按物理方法将停顿周期应用于不重要的预料到寄存器回写冲突的周期中。
11.如权利要求1所述的编译方法,还包括:
响应于存在从不重要块离开并进入到至已调度块的边缘,进行调度以在不重要块中执行操作的回写。
12.一种用于对流水线中的块进行调度的编译设备,所述编译设备包括处理器和存储有计算机程序的存储器,
其中,处理器被配置为,通过运行所述计算机程序来执行:
在程序代码的控制流程中对块的存取计数进行配置;
响应于进入块的边缘的边缘计数大于或等于预定值将块确定为重要块,其中,边缘计数包括在存取计数中;
基于存取计数对重要块进行调度以防止寄存器回写冲突,
其中,所述处理器还被配置为将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中。
13.如权利要求12所述的编译设备,其中,所述处理器还被配置为:
基于存取计数从块形成超块,
其中,所述处理器还被配置为根据基于存取计数确定的优先级对块和超块进行分类,并按分类的次序顺序地对块和超块进行调度。
14.如权利要求12所述的编译设备,其中,所述处理器还被配置为在块中将具有大于或等于预定重要限制的边缘计数的边缘标记为重要边缘,并将从未调度块进入的重要边缘标记为普通边缘,
其中,所述处理器还被配置为将重要边缘进入的块确定为重要块。
15.如权利要求12所述的编译设备,其中,所述处理器还被配置为响应于存在从不重要块离开并进入到至已调度块的边缘,块调度单元对不重要块中的操作的回写执行进行调度。
16.如权利要求12所述的编译设备,其中,所述处理器还被配置为将停顿周期应用于不重要块的预料到发生寄存器回写冲突的周期中。
17.一种对流水线中的块进行调度的编译方法,所述编译方法包括:
通过处理器,响应于进入块的边缘的边缘级数等于或大于预定值而确定所述块为重要块,其中,边缘计数包括在所述块的存取计数中;
响应于确定块为重要块而对块进行调度,以防止块发生寄存器回写冲突,
其中,响应于确定块为重要块而对块进行调度,以防止块发生寄存器回写冲突的步骤包括:
将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中。
18.如权利要求17所述的编译方法,其中,块的存取计数为作为对至少一个操作指令进行仿真的结果的块的使用数与编译的程序代码的存取总数的比率。
19.如权利要求18所述的编译方法,还包括:响应于确定块为不重要块而对块进行调度,以允许块发生寄存器回写冲突。
20.如权利要求19所述的编译方法,还包括:
响应于对块进行调度以允许块发生寄存器回写冲突,确定块是否被预料为发生寄存器回写冲突,并响应于确定块被预料为发生寄存器回写冲突,应用停顿周期。
21.一种用于对流水线中的块进行调度的编译设备,所述编译设备包括处理器和存储有计算机程序的存储器,
其中,所述处理器被配置为,当执行所述计算机程序时,执行:
通过将进入块的边缘的边缘计数与预定值进行比较来确定块是重要的还是不重要的;
对流水线中的块进行调度,使得响应于块为重要的,对块进行调度以防止块发生寄存器回写冲突,并响应于块为不重要的,对块进行调度以允许块发生寄存器回写冲突,
其中,所述处理器还被配置为将不执行回写的操作调度到重要块的预料到寄存器回写冲突的周期中。
22.如权利要求21所述的编译设备,其中,块调度单元还被配置为,响应于块为不重要的,确定块是否被预料为发生寄存器回写冲突,并响应于确定块被预料为发生寄存器回写冲突,将停顿周期应用于预料到寄存器回写冲突的周期中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130009058A KR101711388B1 (ko) | 2013-01-28 | 2013-01-28 | 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치 |
KR10-2013-0009058 | 2013-01-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103970510A CN103970510A (zh) | 2014-08-06 |
CN103970510B true CN103970510B (zh) | 2018-06-29 |
Family
ID=49958319
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410014235.6A Expired - Fee Related CN103970510B (zh) | 2013-01-28 | 2014-01-13 | 用于对流水线中的块进行调度的编译方法和设备 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9207922B2 (zh) |
EP (1) | EP2759932A1 (zh) |
JP (1) | JP6349088B2 (zh) |
KR (1) | KR101711388B1 (zh) |
CN (1) | CN103970510B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7208448B2 (ja) * | 2019-02-01 | 2023-01-19 | 富士通株式会社 | 情報処理装置、情報処理プログラム、及び情報処理方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092180A (en) * | 1997-11-26 | 2000-07-18 | Digital Equipment Corporation | Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed |
US7949855B1 (en) * | 2004-11-17 | 2011-05-24 | Nvidia Corporation | Scheduler in multi-threaded processor prioritizing instructions passing qualification rule |
CN102200924A (zh) * | 2011-05-17 | 2011-09-28 | 北京北大众志微系统科技有限责任公司 | 基于模调度实现循环指令调度的编译方法及装置 |
US8315995B1 (en) * | 2008-09-09 | 2012-11-20 | Peer Fusion, Inc. | Hybrid storage system |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5222240A (en) * | 1990-02-14 | 1993-06-22 | Intel Corporation | Method and apparatus for delaying writing back the results of instructions to a processor |
SG75756A1 (en) * | 1994-02-28 | 2000-10-24 | Intel Corp | Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path |
US5553256A (en) * | 1994-02-28 | 1996-09-03 | Intel Corporation | Apparatus for pipeline streamlining where resources are immediate or certainly retired |
JPH0944362A (ja) * | 1995-07-27 | 1997-02-14 | Toshiba Corp | コンパイラ |
US6112317A (en) | 1997-03-10 | 2000-08-29 | Digital Equipment Corporation | Processor performance counter for sampling the execution frequency of individual instructions |
US6139199A (en) * | 1997-06-11 | 2000-10-31 | Sun Microsystems, Inc. | Fast just-in-time (JIT) scheduler |
US6260189B1 (en) * | 1998-09-14 | 2001-07-10 | Lucent Technologies Inc. | Compiler-controlled dynamic instruction dispatch in pipelined processors |
US6862677B1 (en) * | 2000-02-16 | 2005-03-01 | Koninklijke Philips Electronics N.V. | System and method for eliminating write back to register using dead field indicator |
JP2003131888A (ja) | 2001-10-29 | 2003-05-09 | Hitachi Ltd | 手続き間命令スケジューリング方法 |
JP2003140910A (ja) | 2001-11-05 | 2003-05-16 | Hitachi Ltd | Vliwプロセッサにおけるバイナリトランスレーション方法 |
US7954102B2 (en) | 2002-11-13 | 2011-05-31 | Fujitsu Limited | Scheduling method in multithreading processor, and multithreading processor |
US8001363B2 (en) | 2005-04-04 | 2011-08-16 | Globalfoundries Inc. | System for speculative branch prediction optimization and method thereof |
US9710269B2 (en) | 2006-01-20 | 2017-07-18 | Qualcomm Incorporated | Early conditional selection of an operand |
US8127114B2 (en) | 2007-03-28 | 2012-02-28 | Qualcomm Incorporated | System and method for executing instructions prior to an execution stage in a processor |
US8145874B2 (en) | 2008-02-26 | 2012-03-27 | Qualcomm Incorporated | System and method of data forwarding within an execution unit |
GB2458487B (en) * | 2008-03-19 | 2011-01-19 | Imagination Tech Ltd | Pipeline processors |
KR101032771B1 (ko) | 2009-05-29 | 2011-05-06 | 광운대학교 산학협력단 | 구성형 프로세서에서 risc 명령어와 확장 명령어를 병렬 처리하기 위한 방법 및 그에 따른 구성형 프로세서 |
-
2013
- 2013-01-28 KR KR1020130009058A patent/KR101711388B1/ko active IP Right Grant
- 2013-12-19 US US14/134,517 patent/US9207922B2/en not_active Expired - Fee Related
-
2014
- 2014-01-08 JP JP2014001611A patent/JP6349088B2/ja not_active Expired - Fee Related
- 2014-01-13 CN CN201410014235.6A patent/CN103970510B/zh not_active Expired - Fee Related
- 2014-01-20 EP EP14151699.7A patent/EP2759932A1/en not_active Withdrawn
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092180A (en) * | 1997-11-26 | 2000-07-18 | Digital Equipment Corporation | Method for measuring latencies by randomly selected sampling of the instructions while the instruction are executed |
US7949855B1 (en) * | 2004-11-17 | 2011-05-24 | Nvidia Corporation | Scheduler in multi-threaded processor prioritizing instructions passing qualification rule |
US8315995B1 (en) * | 2008-09-09 | 2012-11-20 | Peer Fusion, Inc. | Hybrid storage system |
CN102200924A (zh) * | 2011-05-17 | 2011-09-28 | 北京北大众志微系统科技有限责任公司 | 基于模调度实现循环指令调度的编译方法及装置 |
Non-Patent Citations (2)
Title |
---|
MELD SCHEDULING: A TECHNIQUE FOR RELAXING SHCEDULING CONSTRAINTS;Santosh G等;《International journal of parallel programming》;19980801;第349-381页 * |
Profile-Driven Instruction Level Parallel Scheduling with Application to Super Blocks;Chekuri C等;《Proceedings of the 29th annual IEEE/ACM international symposium on micro architecture》;19961204;第58-67页 * |
Also Published As
Publication number | Publication date |
---|---|
JP6349088B2 (ja) | 2018-06-27 |
KR101711388B1 (ko) | 2017-03-02 |
US9207922B2 (en) | 2015-12-08 |
EP2759932A1 (en) | 2014-07-30 |
US20140215448A1 (en) | 2014-07-31 |
CN103970510A (zh) | 2014-08-06 |
JP2014146311A (ja) | 2014-08-14 |
KR20140096498A (ko) | 2014-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11262787B2 (en) | Compiler method | |
US10936008B2 (en) | Synchronization in a multi-tile processing array | |
US11321272B2 (en) | Instruction set | |
CN106104481B (zh) | 用于执行确定性和机会性多线程的系统和方法 | |
US11416440B2 (en) | Controlling timing in computer processing | |
GB2287108A (en) | Method and apparatus for avoiding writeback conflicts between execution units sharing a common writeback path | |
US20150127926A1 (en) | Instruction scheduling approach to improve processor performance | |
Bhagyanath | Code generation for synchronous control asynchronous dataflow architectures | |
WO2022036690A1 (zh) | 一种图计算装置、处理方法及相关设备 | |
CN103970510B (zh) | 用于对流水线中的块进行调度的编译方法和设备 | |
US10817459B2 (en) | Direction indicator | |
WO2022053152A1 (en) | Method of interleaved processing on a general-purpose computing core | |
US11269806B2 (en) | Data exchange pathways between pairs of processing units in columns in a computer | |
US20060200648A1 (en) | High-level language processor apparatus and method | |
Lázaro-Muñoz et al. | A tasks reordering model to reduce transfers overhead on GPUs | |
JP2004503872A (ja) | 共同利用コンピュータシステム | |
US11176066B2 (en) | Scheduling messages | |
Abdullah et al. | Cause-effect reaction latency in real-time systems | |
US20130061028A1 (en) | Method and system for multi-mode instruction-level streaming | |
JP2002318689A (ja) | 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法 | |
JP2011128672A (ja) | スーパースカラプロセッサ及びその命令処理方法 | |
Amarasinghe et al. | 6.035 Computer Language Engineering (SMA 5502), Fall 2002 | |
Blatner et al. | Out-of-Order Execution of Data-Flow Process Networks for Streaming Applications | |
JPH11272465A (ja) | パイプライン制御型計算機 |
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 |
Granted publication date: 20180629 Termination date: 20200113 |
|
CF01 | Termination of patent right due to non-payment of annual fee |