首页> 中国专利> 用于对流水线中的块进行调度的编译方法和设备

用于对流水线中的块进行调度的编译方法和设备

摘要

提供一种用于对流水线中的块进行调度的编译方法和设备。所述用于对流水线中的块进行调度的编译方法可包括:使用处理器对程序代码的控制流中的块的存取计数进行配置;响应于进入块的边缘的边缘计数大于或等于预定值,确定块为重要块,边缘计数包括在块的存取计数中;基于存取计数对重要块进行调度以防止寄存器回写冲突。

著录项

  • 公开/公告号CN103970510A

    专利类型发明专利

  • 公开/公告日2014-08-06

    原文格式PDF

  • 申请/专利权人 三星电子株式会社;

    申请/专利号CN201410014235.6

  • 发明设计人 金泰松;

    申请日2014-01-13

  • 分类号G06F9/38(20060101);G06F9/45(20060101);

  • 代理机构11286 北京铭硕知识产权代理有限公司;

  • 代理人韩明星;王兆赓

  • 地址 韩国京畿道水原市

  • 入库时间 2023-12-17 00:55:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-06-29

    授权

    授权

  • 2015-12-02

    实质审查的生效 IPC(主分类):G06F9/38 申请日:20140113

    实质审查的生效

  • 2014-08-06

    公开

    公开

说明书

本申请要求于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的示图。作为 软件方法,可使用操作调度。可预先识别寄存器回写冲突,并可对操作进行 调度以避免寄存器回写冲突。

当已在期望的周期中写入寄存器时,可对流水线进行调度以插入不需要 写入寄存器的操作。例如,不需要写入寄存器的操作可包括存储操作或NOP 302。当如所示出的在第五周期中在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-up instructions) (诸如shift2和load3)示出在同一周期中发生叠加指令(doubled-up instructions)的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、磁带、软盘、光学数据存储 装置。此外,基于并使用附图的流程图和框图以及这里提供的它们的相应描 述,这里公开的用于实现示例实施例的功能程序、代码和代码段可容易地被 实施例所属领域的程序员解释。

以上已描述了一些示例。然而,将理解,可进行各种修改。例如,如果 以不同的顺序执行描述的技术,和/或如果以不同的方式组合和/或由其它组件 或它们的等同物代替或补充在描述的系统架构、装置或电路中的组件,则可 实现合适的结果。因此,其它实施方式在权利要求的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号