CN109918134B - 用于vliw基本块调度的组合启发式指令选择优化方法 - Google Patents
用于vliw基本块调度的组合启发式指令选择优化方法 Download PDFInfo
- Publication number
- CN109918134B CN109918134B CN201910168208.7A CN201910168208A CN109918134B CN 109918134 B CN109918134 B CN 109918134B CN 201910168208 A CN201910168208 A CN 201910168208A CN 109918134 B CN109918134 B CN 109918134B
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- functional unit
- ready
- heuristic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- General Factory Administration (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种用于VLIW基本块调度的组合启发式指令选择优化方法,步骤包括:S1.在每个指令周期进行指令选择发射时,若至少存在一个功能单元的剩余有效指令级数为2,转入执行步骤S2;S2.获取各就绪指令所对应的关联功能单元,查找剩余有效指令级数大于2的第一类关联单元,以及查找剩余指令级数为2的第二类关联单元并获取剩余指令完成所需时间,确定得到第一启发量以及第二启发量;S3.根据确定得到的第一启发量、第二启发量挑选出就绪指令作为最终输出就绪指令。本发明能够提高功能单元剩余指令级数较小时的指令调度优化效果,且有实现方法简单、调度优化效果好、执行效率高等优点。
Description
技术领域
本发明涉及VLIW(Very Long Instruction Word,超长指令字)体系结构处理器的编译优化技术领域,尤其涉及一种用于VLIW基本块调度的组合启发式指令选择优化方法。
背景技术
基本块调度是提高指令并行度的重要优化处理过程之一,它在保证执行逻辑正确的前提下,通过重新安排指令的执行顺序来充分发挥硬件的性能,是VLIW体系结构提高代码执行效率的重要方法。在基本块指令调度中,影响指令调度效果的核心问题是在每一个节拍进行指令选择的问题。
对于流水线体系结构,基本块调度通常采用表调度方法,该方法是通过在调度过程中始终维持两个序列:一个是已经调度过的结点序列Scheds;另一个是每一个时间点的候选指令集合Cands,再通过反复从Cands中到达基本块末尾具有最大延迟时间的指令构成的集合中选择合适的指令到Scheds,直到所有的指令都被调度完毕。现有技术中通常是基于上述方法,通过以下启发式方法来解决指令选择问题:
1)从第一候选指令集合中选择延迟时间最大的结点,或者以避免停顿该结点而应当被调度的最早时间为依据从中选择时间值最小的那个结点;
2)如果体系结构有多条流水线,并且每条流水线都有若干候选结点,则优先选择最近没有为它调度指令的那些流水线上的候选结点;
3)优先选择那些在选择之后能使新产生的候选指令集合的元素个数最大的指令。
一个基本块内指令序列如图1所示,现有技术中表调度方法在确定每条指令执行顺序时通常是以DAG当前结点到叶结点的最大时延来安排指令的优先级,而对于具有超标量特征的VLIW体系结构,其指令序列的执行具有典型突出特征,即各功能单元执行的指令之间的信赖关系造成这些功能单元之间有隐含的相关性,因此对于向量VLIW体系结构,还需要考虑标量单元和向量单元之间的相关性。
针对向量VLIW体系结构的特征,为了有效地利用就绪指令来填充有效指令的延迟槽,中国专利申请CN104699466A提供一种面向VLIW体系结构的多元启发式指令选择方法,通过基于指令依赖优先级实现多元启发式指令选择以解决指令选择问题,能够利用处理器丰富的功能单元资源来挖掘基本块指令序列的并行度,但是该方法仅是从释放关联功能单元的调度域的角度出发,并没有考虑功能单元执行剩余指令所需时间问题,而基本块指令序列的总执行时间取决于最后一个指令执行包的中的指令被执行完毕的时间Te,当部分(或全部)功能单元的剩余待调度指令的依赖优先级数量较小时应用该方法会造成调度优化性能下降,不能有效地确保较好的调度效果。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、调度优化效果好且执行效率高的用于VLIW基本块调度的组合启发式指令选择优化方法,能够提高功能单元剩余有效指令依赖优先级数量较小时的指令调度优化效果。
为解决上述技术问题,本发明提出的技术方案为:
一种用于VLIW基本块调度的组合启发式指令选择优化方法,步骤包括:
S1.在每个指令周期进行指令选择发射时,若各功能单元中至少存在一个功能单元的剩余有效指令级数为2,转入执行步骤S2;
S2.对于每个功能单元,获取功能单元就绪指令集合中各就绪指令所对应的关联功能单元构成关联单元集合,查找所述关联单元集合中剩余有效指令级数大于2的第一类关联单元,以及查找所述关联单元集合中剩余指令级数为2的第二类关联单元并获取所述第二类关联单元的剩余指令完成所需时间,由查找到的第一类关联单元确定得到第一启发量以及由获取的所述剩余指令完成所需时间确定得到第二启发量;
S3.根据所述步骤S2确定得到的第一启发量、第二启发量从所述就绪指令集合中挑选出就绪指令作为最终输出就绪指令。
作为本发明的进一步改进:所述步骤S2中,通过计算所述第二类关联单元中各功能单元的剩余指令最早完成时间,由各所述剩余指令最早完成时间中最大值得到所述第二启发量,其中所述剩余指令最早完成时间为对应功能单元中所有二级指令的最早执行完成时间的最大值。
作为本发明的进一步改进,所述剩余指令最早完成时间按照下式计算得到:
Tu_end2=Max(S={tend_2_x}),1≤x≤N2;
tend_2_x=tem_2_x+texec(Ix);
tem_2_x=Max(Max(S={tde_y}),Max(S={td1_z}))(1≤y≤N0,1≤z≤N1);
其中,N2为该单元的二级指令的数量,tend_2_x为第x条二级指令I2x的最早完成时间,tem_2_x为第x条二级指令I2x的最早发射时间,texec(Ix)为第x条二级指令I2x所需的执行时间,tde_y为第x条二级指令I2x所依赖的指定已发射指令的结束时间,td1_z为第x条二级指令I2x所依赖的指定一级指令的执行结束时间,N0和N1分别为第x条二级指令I2x所依赖的已发射指令的数量和所依赖的一级指令的数量。
作为本发明的进一步改进,计算所述剩余指令最早完成时间时还包括配置步骤,具体步骤为:使得各功能单元的剩余指令最早完成时间不小于各功能单元中一级指令的最晚完成时间以及不小于各功能单元中的剩余指令数量。
作为本发明的进一步改进,所述配置步骤的具体步骤为:按式t3=对应功能单元的所有一级指令的最早完成时间节拍号+该功能单元的二级指令数量计算得到t3,判断当前计算得到的所述剩余指令最早完成时间Tu_end2,如果Tu_end2<t3,则令Tu_end2=t3。
作为本发明的进一步改进,计算各一级指令的最早完成时间的具体步骤为:循环遍历一级指令发射时机表中的各元素,再遍历各元素中存储的集合中的各指令,按照式t=指令对应的表格行号+指令执行所需的节拍数计算得到各一级指令的最早完成时间t。
作为本发明的进一步改进,所述步骤S2中,具体由所述第二类关联单元的数量得到所述第一启发量。
作为本发明的进一步改进:所述步骤S3中,具体从所有就绪指令中,使用所述第一启发量挑选所有关联功能单元中为所述第一类关联单元的关联功能单元所对应的就绪指令,以及使用所述第二启发量挑选所有关联功能单元中为所述第二类关联单元且剩余指令最早完成时间最大的关联功能单元所对应的就绪指令,作为最终的就绪指令,其中所述剩余指令最早完成时间为对应功能单元中所有二级指令的最早执行完成时间的最大值。
作为本发明的进一步改进,所述步骤S3的具体步骤为:
S31.遍历每个功能单元,为每个功能单元确定对应的指令挑选处理模式,其中若目标功能单元的所有就绪指令所对应的所有关联功能单元均为所述第一类关联单元,采用第一模式挑选出目标功能单元的就绪指令,否则转入执行步骤S32;
S32.若存在至少一个关联功能单元为所述第一类关联单元,执行第二模式,即使用所述第一启发量将为所述第一类关联单元的关联功能单元所对应的各就绪指令挑选为优先指令,否则所有关联功能单元均为第二类关联单元,执行第三模式,即使用第二启发量将各关联功能单元中剩余指令最早完成时间最大的关联功能单元所对应的各就绪指令挑选为优先指令。
作为本发明的进一步改进,所述步骤S31中为每个功能单元确定对应的指令挑选处理模式的具体步骤为:
S311.预先分别设置初始模式mode0、第一模式mode1、第二模式mode2以及第三模式mode3,初始化令指令挑选处理模式modeUx=mode0;
S312.遍历各功能单元Ux的各就绪指令Ix,找出各就绪指令Ix的所有关联功能单元构成关联功能单元集合RelUnits_x;
S313.将各所述关联功能单元集合RelUnits_xRelUnits_x的内容添加到总集合RelUnits中,令RelUnitsBU=RelUnits,并令RelUnitsBU=RelUnitsBU-Ux;
S314.如果所述总集合RelUnitsBU非空,执行步骤S315,否则令指令挑选处理模modeUx=mode0并结束当前模式确定处理;
S315.如果集合RelUnitsBU为集合UnitsL2的子集,其中UnitsL2为剩余有效指令级数大于2的功能单元集合,令指令挑选处理模式modeUx=mode1并结束当前模式确定处理,否则执行步骤S316;
S316.如果所述总集合RelUnits中有任意功能单元为所述第一关联单元,获取各就绪指令Ix所对应的为第一关联单元的关联功能单元形成集合L2Units,将各就绪指令Ix和集合L2Units形成映射关系并放入映射Ix_L2Units中,令指令挑选处理模式modeUx=mode2;否则,令指令挑选处理模式modeUx=mode3,结束当前模式确定处理。
与现有技术相比,本发明的优点在于:
1、本发明针对VLIW体系结构的多功能单元硬件特性,在考虑指令间依赖关系及该关系导致的功能单元之间相关性的同时,还考虑剩余指令的依赖关系层级数量,并根据剩余指令与功能单元之间的归属关系,进一步使用启发式来前瞻相关功能单元的剩余指令完成所需时间,利用该时间确定挑选被优先选择的就绪指令集合,使得可以有效节省基本块的执行时间,确保剩余待调度指令的依赖优先级数量较小时的指定调度优化性能,从而优化基本块调度整体效果。
2、本发明针对VLIW体系结构的特性,通过综合考虑指令间依赖关系的跨功能单元特性和功能单元完成剩余指令所需的时间,将关联功能单元的范围拓展到对就绪指令有依赖的指令所在的任何功能单元,提供前瞻关联功能单元完成剩余指令所需时间来优化地选择发射指令,让剩余执行时间较长的关联功能单元对应的就绪指令先发射,使得指令发射顺序更符合缩短关联功能单元总体完成时间的需求,从而缩短基本块的总体执行时间,能够更充分地发挥出硬件性能、提升代码的执行效率。
3、本发明通过一方面为每个功能单元统计剩余指令的有效优先级数量,另一方面分析与就绪指令集合涉及到的每个关联功能单元的剩余指令,计算剩余指令最早完成时间以作为进行指令选择的启发量,使得可以综合考虑指令间依赖关系以及功能单元完成剩余指令所需时间来实现最佳就绪指令的选择,有效提高指令调度优化性能。
附图说明
图1是一个基本块指令序列的示意图。
图2是本实施例实现VLIW基本块调度组合启发式指令选择优化的实现流程示意图。
图3是在具体应用实施例中第一种功能单元分布情况(剩余指令级数部分为2级、另一部分超过2级)的示意图。
图4是在具体应用实施例中第二种功能单元分布情况(剩余指令级数均为2)的示意图。
图5是本实施例中实现就绪指令选择优化的具体流程示意图。
图6是本发明在具体应用实施例中实现VLIW基本块调度组合启发式指令选择优化的顶层控制流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图2所示,本实施例用于VLIW基本块调度的组合启发式指令选择优化方法步骤包括:
S1.在每个指令周期进行指令选择发射时,若各功能单元中至少存在一个功能单元的剩余有效指令级数为2,转入执行步骤S2;
S2.对于每个功能单元,获取功能单元就绪指令集合中各就绪指令所对应的关联功能单元构成关联单元集合,查找关联单元集合中剩余有效指令级数大于2的第一类关联单元,以及查找关联单元集合中剩余指令级数为2的第二类关联单元并获取第二类关联单元的剩余指令完成所需时间,由查找到的第一类关联单元确定得到第一启发量以及由获取的剩余指令完成所需时间确定得到第二启发量;
S3.根据步骤S2确定得到的第一启发量、第二启发量从就绪指令集合中挑选出就绪指令作为最终输出就绪指令。
本实施例针对VLIW体系结构的多功能单元硬件特性,在考虑指令间依赖关系及该关系导致的功能单元之间相关性的同时,考虑剩余指令的依赖关系层级(即依赖优先级)数量(即指令优先级数或指令级数),并根据剩余指令与功能单元之间的归属关系,进一步使用启发式来前瞻相关功能单元的剩余指令完成所需时间,即各功能单元执行完毕剩余指令所需的特征时间状态,将该时间状态应用于多元启发式指令选择之中来确定挑选被优先选择的就绪指令集合,使得可以有效节省基本块的执行时间,确保部分(或全部)功能单元的剩余待调度指令的依赖优先级数量较小时的指定调度优化性能,从而优化基本块调度整体效果。
本实施例上述方法,针对VLIW体系结构的特性,通过综合考虑指令间依赖关系的跨功能单元特性和功能单元完成剩余指令所需的时间,将关联功能单元的范围拓展到对就绪指令有依赖的指令所在的任何功能单元,提供前瞻关联功能单元完成剩余指令所需时间来优化地选择发射指令,让剩余执行时间较长的关联功能单元对应的就绪指令先发射,使得指令发射顺序更符合缩短关联功能单元总体完成时间的需求,从而缩短基本块的总体执行时间,能够更充分地发挥出硬件性能、提升代码的执行效率。
本实施例在每次进行发射指令选择时,若至少有一个功能单元的指令依赖层级数量为2,主要包含两种情况:一是基本块的指令层级总数较少;二是在基本块调度过程中至少有一个功能单元的剩余指令层级数减少到2,在该情况下通过基于指令依赖关系、功能单元之间相关性以及功能单元的剩余指令完成所需时间按照上述方法进行就绪指令选择,使得可以提高上述两种情况下功能单元的剩余指令的依赖优先级数量较小时的指定调度优化性能。
在具体应用实施例中就绪指令的一部分关联功能单元中的剩余有效指令级数为2,且另一部分关联功能单元的剩余有效指令级数超过2的情况如图3所示,其中I3和I4为就绪指令,图中箭头指向为指令间依赖情况,以I3为例,I3的关联功能单元为功能单元1、2,存在剩余指令级数为2的功能单元,也包括剩余指令级数超过2的功能单元;就绪指令的所有关联功能单元都剩下2级指令的情况如图4所示,其中I3和I4为就绪指令。
本实施例步骤S2中,通过计算第二类关联单元中各功能单元的剩余指令最早完成时间,由各剩余指令最早完成时间中最大值得到第二启发量,其中剩余指令最早完成时间为对应功能单元中所有二级指令的最早执行完成时间的最大值,即使用剩余指令级数为2的关联功能单元中剩余指令最早完成的关联功能单元作为第二启发量以进行指令挑选。本实施例具体使用第二类关联单元的数量作为第一启发量以进行指令挑选。即如果某个关联功能单元u的剩余指令依赖层级数正好为2(第二类关联单元),则该单元的剩余执行时间用该单元的剩余指令最早完成时间的最大值(剩余指令最早完成时间)来表示,如果大于2则不考虑其剩余指令的完成时间。
本实施例步骤S3中,具体从所有就绪指令中,使用第一启发量挑选所有关联功能单元中为第一类关联单元的关联功能单元所对应的就绪指令,以及使用第二启发量挑选所有关联功能单元中为第二类关联单元且剩余指令最早完成时间最大的关联功能单元所对应的就绪指令,作为最终的优先指令,其中剩余指令最早完成时间为对应功能单元中所有二级指令的最早执行完成时间的最大值。
在具体应用实施例中,第一启发量即为指令的剩余超过2级指令的关联功能单元的数量,步骤S3在指令选择处理过程中,根据该第一启发量从输入就绪指令集合中将所有的关联功能单元剩余指令级数大于2的指令挑选出来,形成新的集合并作为后续操作的输入就绪指令集合;第二启发量即为指令的关联功能单元的剩余指令最早完成时间,步骤S3在指令选择处理过程中,查找出输入就绪指令集合中各指令对应的关联功能单元最早完成时间的最大值,并从各最大值中进一步找出最大值,即为各关联功能单元的剩余指令最早完成时间的最大值,将此最大值对应的所有就绪指令挑选出来,形成新的集合并作为后续操作的输入就绪指令集合。
本实施例通过上述步骤,一方面为每个功能单元统计剩余指令的有效优先级数量,另一方面分析与就绪指令集合涉及到的每个关联功能单元的剩余指令,计算剩余指令最早完成时间(剩余指令执行完毕所需的最少完成时间对应的指令周期数)以作为进行指令选择的启发量,使得可以综合考虑指令间依赖关系以及功能单元完成剩余指令所需时间来实现最佳就绪指令的选择,有效提高指令调度优化性能。上述执行时间或完成时间即为所需时间对应的指令周期数。
指令的关联功能单元可能是任意一个功能单元,在具体应用实施例中,对于某功能单元u,如果其剩余指令级数为2时,剩余指令最早完成时间具体按照下式计算得到:
Tu_end2=Max(S={tend_2_x}),1≤x≤N2 (1)
tend_2_x=tem_2_x+texec(Ix) (2)
tem_2_x=Max(Max(S={tde_y}),Max(S={td1_z}))(1≤y≤N0,1≤z≤N1) (3)
其中,N2为该单元的二级指令的数量,tend_2_x为第x条二级指令I2x的最早完成时间,tem_2_x为第x条二级指令I2x的最早发射时间,texec(Ix)为第x条二级指令I2x所需的执行时间,tde_y为第x条二级指令I2x所依赖的指定已发射指令的结束时间,td1_z为第x条二级指令I2x所依赖的指定一级指令的执行结束时间,N0和N1分别为第x条二级指令I2x所依赖的已发射指令的数量和所依赖的一级指令的数量,如果N0=0,则Max(tde_y)=0。
某个功能单元的剩余指令完成所需时间Tu_end2必然不会小于此单元各1级指令的最晚完成时间,也不会小于此单元的剩余指令数量。本实施例中,计算剩余指令最早完成时间时还包括配置步骤,具体步骤为:使得各功能单元的剩余指令最早完成时间不小于各功能单元中一级指令的最晚完成时间以及不小于各功能单元中的剩余指令数量。
本实施例中,配置步骤的具体步骤为:按式t3=对应功能单元的所有一级指令的最早完成时间节拍号+该功能单元的二级指令数量计算得到t3,判断当前计算得到的剩余指令最早完成时间Tu_end2,如果Tu_end2<t3,则令Tu_end2=t3,以使得剩余指令最早完成时间不小于对应功能单元中各一级指令的最晚完成时间以及不小于对应功能单元的剩余指令数量。
本实施例中,计算各一级指令的最早完成时间的具体步骤为:循环遍历一级指令发射时机表中的各元素,再遍历各元素中存储的集合中的各指令,按照式t=指令对应的表格行号+指令执行所需的节拍数计算得到各一级指令的最早完成时间t。
在具体应用实施例中,本实施例步骤S3的具体步骤为:
S31.遍历每个功能单元,为每个功能单元确定对应的指令挑选处理模式,其中若目标功能单元的所有就绪指令所对应的所有关联功能单元均为第一类关联单元,采用第一模式挑选出目标功能单元的就绪指令,否则转入执行步骤S32;
S32.若存在至少一个关联功能单元为第一类关联单元,执行第二模式,即使用第一启发量将为第一类关联单元的关联功能单元所对应的各就绪指令挑选为优先指令,否则所有关联功能单元均为第二类关联单元,执行第三模式,即使用第二启发量将各关联功能单元中剩余指令最早完成时间最大的关联功能单元所对应的各就绪指令挑选为优先指令。
上述第一模式可以根据需求采用现有的所需的指令选择方法,即当所有关联功能单元的剩余指令均超过2时采用所需的现有指令选择方法从就绪指令集合中挑选就绪指令,当存在至少一个关联功能单元的剩余指令级数为2时,且若至少存在一个关联功能单元的剩余指令级数超过2,将有剩余超过2级指令的关联功能单元(第一类关联单元)所对应的就绪指令挑选出来作为最终输出就绪指令,若全部关联功能单元的剩余级数均为2,则将关联功能单元中最早完成时间的最大值对应的就绪指令挑选出来作为最终输出就绪指令。
在具体应用实施例中,本实施例步骤S31中为每个功能单元确定对应的指令挑选处理模式的具体步骤为:
S311.预先分别设置初始模式mode0、第一模式mode1、第二模式mode2以及第三模式mode3,初始化令指令挑选处理模式modeUx=mode0;
S312.遍历各功能单元Ux的各就绪指令Ix,找出各就绪指令Ix的所有关联功能单元构成关联功能单元集合RelUnits_x;
S313.将各关联功能单元集合RelUnits_xRelUnits_x的内容添加到总集合RelUnits中,令RelUnitsBU=RelUnits,并令RelUnitsBU=RelUnitsBU-Ux;
S314.如果总集合RelUnitsBU非空,执行步骤S315,否则令指令挑选处理模modeUx=mode0并结束当前模式确定处理;
S315.如果集合RelUnitsBU为集合UnitsL2的子集,其中UnitsL2为剩余有效指令级数大于2的功能单元集合,令指令挑选处理模式modeUx=mode1并结束当前模式确定处理,否则执行步骤S316;
S316.如果总集合RelUnits中有任意功能单元为第一关联单元,获取各就绪指令Ix所对应的为第一关联单元的关联功能单元形成集合L2Units,将各就绪指令Ix和集合L2Units形成映射关系并放入映射Ix_L2Units中,令指令挑选处理模式modeUx=mode2;否则,令指令挑选处理模式modeUx=mode3,结束当前模式确定处理。
在确定每个功能的指令选择处理模式后,遍历各功能单元Ux,为各功能单元Ux从就绪指令集合中挑选指令,流程为:读取其处理模式值modeUx,如果modeUx等于mode2,则找到关联功能单元数都不超过2的那些就绪指令,并将它们从就绪指令集合中删除,即使得选取剩余指令级数超过2的关联功能单元所对应的就绪指令;如果modeUx等于mode3,则通过一重循环遍历各就绪指令Ix的timeMax,找出它们的最大值maxT,再次通过一重循环遍历各就绪指令Ix的timeMax,若timeMax不等于maxT,则将相应的指令从就绪指令集合中删除,即使得选择剩余指令执行所需时间最长的关联功能单元所对应的就绪指令。
如图5所示,本实施例实现指令选择优化时,具体先针对输入就绪指令集合中的各指令分析对应的关联功能单元形成关联功能单元集合;统计各功能单元的剩余指令级数,并在级数为2时计算对应功能单元的最早完成时间;统计各就绪指令所对应的关联功能单元中剩余指令级数超过2的关联功能单元(第一类关联单元)的数量,结合关联功能单元的最早完成时间确定后续的指令挑选过程应使用的处理模式,并在满足条件时为就绪指令计算关联功能单元最早完成时间的最大值作为启发量;针对各功能单元,再根据确定的处理模式和指令的关联功能单元最早完成时间启发量,挑选就绪指令作为输出就绪指令合集的内容,使得按下述挑选出最终就绪指令:(1)将有剩余超过2级指令的关联功能单元(第一类关联单元)所对应的就绪指令挑选出来;(2)将第二类关联单元最早完成时间的最大值对应的就绪指令挑选出来,将挑选出的指令作为最终输出就绪指令。
本实施例通过上述步骤,在每个指令周期选择指令来发射时,以是否有关联功能单元的有效指令级数为2进行分情况处理,且如果有至少1个功能单元的剩余有效指令级数为2,对各个功能单元的就绪指令使用以下的组合启发式来进行指令选择:
第1个启发式:若某功能单元的就绪指令集合中仍然有部分指令的至少1个关联功能单元剩余指令级数超过2(第一类关联单元),则相应的就绪指令被选择为优先发射者,即挑选出第一类关联单元所对应的就绪指令。
第2个启发式:若所有关联功能单元的剩余有效指令级数都为2(第二类关联单元),则剩余执行时间最长的关联功能单元对应的就绪指令被选择为优先发射者,即挑选第二类关联单元剩余指令完成时间最早的所对应的就绪指令。
第3个启发式:某个功能单元的剩余指令完成所需时间Tu_end2必然不会小于此单元各1级指令的最晚完成时间,也不会小于此单元的剩余指令数量。
通过上述组合启发式进行指令选择优化,使得可以综合考虑指令间依赖关系以及功能单元完成剩余指令所需时间来实现最佳就绪指令的选择,有效提高指令调度优化性能。
本实施例上述方法还可以方便的与其他有关指令依赖层级(或依赖优先级)的指令选择方法配合使用,如将最后一步得到的输出就绪指令集合作为后续输入就绪指令集合,结合其他指令选择方法进行进一步的就绪指令挑选以进一步提高优化性能。
以下以本发明在具体应用实施例中以面向对象语言实现VLIW基本块调度的组合启发式指令选择优化为例,对本发明方法进行进一步说明。
在面向对象语言程序中,数据和相关的功能模块都封装在类中,本实施例将涉及的实施内容可封装成一个基本块调度器类,把所需的数据都作为这个类的数据成员,所需的各子方法都作为这个类的成员函数。由于本发明方法是为VLIW体系结构的功能单元在每一拍优化地从就绪指令集合中优化地选择一条发射指令的问题,所以假定本方法所需的基本信息都已经准备好,包括:体系结构的基本信息保存在相应的体系结构类对象中,各基本块的基本信息保存在相应的基本块类对象中,各指令的基本信息保存在相应的指令类对象中,基本块内指令间的依赖关系信息,即指令所依赖的其他指令(下面称被依赖指令)、依赖于该指令的其他指令(下面称依赖指令)等信息,保存在指令类对象中,或保存在专门的依赖关系描述数据结构中,具体取前者;指令依赖关系层级信息、指令对应的功能单元信息两者以一个依赖表格描述,其行号即依赖层级编号且从0开始增长,列号代表功能单元的编号且从0开始增长,表格中的每一个元素是一个指令集合;已发射且当前时刻正在执行中的指令的信息存储在资源状态表中。
本实施基于面向对象语言程序,除硬件结构信息和指令集信息外,定义相关的数据结构主要包括:
①资源状态表
资源状态表是一个一维数组,其中的每一个数组元素是一个链表且对应一个功能单元。链表中的每一个结点是一个资源状态对象,记录了其对应的功能单元在当前节拍正在执行的各指令以及各指令执行完成还需要的节拍数量。
②各功能单元的就绪指令集合
就绪指令即当前可发射的指令,它要么没有依赖于其他,要么所依赖的指令都已经执行完毕。对于每个功能单元,其剩余指令中当前可发射的指令可能不只一条,用集合存储起来。多个功能单元各自的就绪指令集合构成一个数组,数组元素的下标即功能单元的编号。
③一级指令发射时机表
一级指令发射时机表保存一级指令的发射时刻对应的节拍信息,它是一个二维表格,列号的含义与依赖网格的列号的含义相同,行号从0开始增长,每个元素是一个集合,第0行中的指令即为当前节拍的就绪指令。
④各功能单元的剩余有效指令级数表
该表用于存储在当前节拍各功能单元的剩余指令对应的有效指令级数值,如果为0说明该功能单元的所有指令已经全部发射。可以用数组存储,也可以用映射存储。
⑤剩余有效指令级数超过2的功能单元集合
如果某个功能单元的剩余有效指令级数大于2,则其相应的功能单元编号放入此集合中。
⑥剩余有效指令级数等于2的功能单元的最早完成时间
将为剩余有效指令级数等于2的功能单元计算出最早完成时间,这些功能单元的编号及其最早完成时间用一个映射来存储。
⑦就绪指令的关联功能单元最早完成时间的最大值
每条就绪指令可能有多个关联功能单元,如果这些关联功能单元的剩余有效指令级数都为2,则将这些关联功能单元的最早完成时间的最大值找出来,查找出的就绪指令及相应的最大值用一个映射来存储。
⑧指令挑选处理模式常量枚举集
每种处理模式用一个特别的常数表示,所有的这些常数构成一个集合,或者一个枚举类型,总共有4种处理模式,分别用mode0、mode1、mode2、mode3来表示。
如图6所示,本实施例顶层控制流程主要包括以下步骤:
步骤1:更新资源状态表,资源状态表中记录各功能单元目前已经流入的指令以及每一条指令的剩余执行节拍数;
步骤2:获取就绪指令集合,为各功能单元分别创建就绪指令集合;
步骤3:分析关联功能单元,包括分析各可发射指令的关联功能单元以及其他必要信息;
步骤4:计算剩余有效指令级数为2的功能单元(第二类关联单元)计算最早完成时间;
步骤5:确定指令挑选处理模式,为各功能单元确定指令选择处理模式;
步骤6:计算指令的关联功能单元剩余指令完成所需时间确定启发量;
步骤7:进行指令挑选,根据处理模式和启发量对就绪指令进行挑选。
本实施例计算功能单元的最早完成时间的详细流程为:
步骤4.1:获取各功能单元的剩余有效指令级数。算法是:设置一个UnitsEffectInstnLevels数组来存储各功能单元的剩余有效指令级数值,并初始化为0。用一个二重循环遍历依赖表格中的各单元,外层循环遍历表格的各列(相当于遍历各功能单元),内层循环遍历遍历表格的各行。在内层循环中,如果发现相应的表格单元所存储的指令集合不为空,则将对应功能单元的剩余有效指令级数值修改为“行号+1”。
步骤4.2:找出所有剩余有效指令级数大于2的功能单元。算法是:设置一个集合UnitsL2来存储找到的功能单元的编号。用一个一重循环遍历UnitsEffectInstnLevels中的各元素,如果发现某个元素的值大于2,则将对应的功能单元编号放入UnitsL2中。
步骤4.3:找出所有剩余有效指令级数等于2的功能单元。算法是:设置一个集合Units来存储找到的功能单元的编号。用一个一重循环遍历UnitsEffectInstnLevels中的各元素,如果发现某个元素的值等于2,则将对应的功能单元编号放入Units中。
步骤4.4:获取已经发射且未执行完毕的指令的剩余执行时间信息。算法是:用一个二重循环遍历资源状态表中的每一个元素。在内层循环中,如果发现表格元素含有有效的指令,将该指令与其剩余执行时间放入映射集合emittedInstn_needTime中。
步骤4.5:计算各一级指令的最早完成时间。算法是:用二重循环遍历一级指令发射时机表的各元素。在内层循环中,再用一个循环遍历表格元素中存储的集合中的各指令,计算指令的最早完成时间t=集合对应的表格行号+指令执行所需的节拍数。将指令与t放入映射集合prio1Instn_endTime中。
步骤4.6:遍历Units的各元素,对每个功能单元,执行如下处理:
a)通过上述式(3)计算二级指令I2x的最早发射时间tem_2_x,然后,利用式(2)计算I2x的最早完成时间,最后,利用式(1)计算Tu_end2得到结果;
b)计算t3=该功能单元的所有一级指令的最早完成时间节拍号+该功能单元的二级指令数量。如果Tu_end2<t3,则令Tu_end2=t3。最后,将功能单元编号及其Tu_end2存入Unit_minFinishTime映射中。
本实施例步骤5中通过遍历每个功能单元,对于每个单元Ux获得其指令挑选处理模式modeUx的详细步骤为:
步骤5.1:令modeUx=mode0;
步骤5.2:遍历Ux的各就绪指令(用Ix表示),找出Ix的关联单元集合(可能含Ux),构成集合RelUnits_x。Ix的关联单元集合是指依赖于Ix的那些二级指令所在的功能单元构成的集合;
步骤5.3:将各RelUnits_x的内容添加到总集合RelUnits中。令RelUnitsBU=RelUnits,并令RelUnitsBU=RelUnitsBU-Ux;
步骤5.4:如果RelUnitsBU非空,执行下列步骤,否则,令modeUx=mode0并结束处理;
步骤5.5:如果RelUnitsBU是UnitsL2的子集,令modeUx=mode1并结束处理,否则,执行下列步骤;
步骤5.6:如果RelUnits中有任意功能单元具有>2个有效依赖优先级,获取各Ix的具有超过2级指令的关联单元分别形成集合L2Units,将Ix和L2Units放入映射Ix_L2Units中,令modeUx=mode2;否则令modeUx=mode3,结束处理。
本实施例步骤6中计算就绪指令的关联功能单元剩余执行完成所需时间的启发量的详细步骤为:用一个二重循环计算各就绪指令的关联功能单元完成时间启发量,外层循环遍历各功能单元Ux,内层循环遍历功能单元的各就绪指令Ux,在内层循环中执行如下步骤:
(a)找到指令Ix的关联功能单元编号集合relatedUnits;
(b)设置关联功能单元最大值timeMax,并初始化为0;
(c)用一个循环遍历relatedUnits中的各功能单元编号,在循环中通过Unit_minFinishTime映射找到该功能单元对应的最早完成时间te,如果timeMax<te,则timeMax=te;
(d)将timeMax作为Ix的关联功能单元完成时间启发量值。
本实施例步骤7中进行指令挑选的详细步骤为:遍历各功能单元Ux,每个功能单元Ux按如下步骤从其就绪指令集合中挑选指令:
步骤7.1:读取其处理模式值modeUx;
步骤7.2:如果modeUx等于mode2,则找到关联功能单元数都不超过2的那些就绪指令,并将它们从就绪指令集合中删除;
步骤7.3:如果modeUx等于mode3,则:
(a)通过一重循环遍历各就绪指令Ix的timeMax,找出它们的最大值maxT。
(b)再次通过一重循环遍历各就绪指令Ix的timeMax,若timeMax不等于maxT,则将相应的指令从就绪指令集合中删除。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (8)
1.一种用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,步骤包括:
S1.在每个指令周期进行指令选择发射时,若各功能单元中至少存在一个功能单元的剩余有效指令级数为2,转入执行步骤S2;
S2.对于每个功能单元,获取功能单元的就绪指令集合中各就绪指令所对应的关联功能单元构成关联单元集合,查找所述关联单元集合中剩余有效指令级数大于2的第一类关联单元,以及查找所述关联单元集合中剩余指令级数为2的第二类关联单元并获取所述第二类关联单元的剩余指令完成所需时间,由查找到的第一类关联单元确定得到第一启发量以及由获取的所述剩余指令完成所需时间确定得到第二启发量;
S3.根据所述步骤S2确定得到的第一启发量、第二启发量从所述就绪指令集合中挑选出就绪指令作为最终输出就绪指令;
所述步骤S2中,通过计算所述第二类关联单元中各功能单元的剩余指令最早完成时间,由各所述剩余指令最早完成时间得到所述第二启发量,其中所述剩余指令最早完成时间为各对应功能单元中所有二级指令的最早完成时间的最大值;
所述剩余指令最早完成时间按照下式计算得到:
Tu_end2=Max(S={tend_2_x}),1≤x≤N2;
tend_2_x=tem_2_x+texec(I2x);
tem_2_x=Max(Max(S={tde_y}),Max(S={td1_z}))(1≤y≤N0,1≤z≤N1);
其中,N2为该单元的二级指令的数量,tend_2_x为第x条二级指令I2x的最早完成时间,tem_2_x为第x条二级指令I2x的最早发射时间,texec(I2x)为第x条二级指令I2x所需的执行时间,tde_y为第x条二级指令I2x所依赖的指定已发射指令的结束时间,td1_z为第x条二级指令I2x所依赖的指定一级指令的执行结束时间,N0和N1分别为第x条二级指令I2x所依赖的已发射指令的数量和所依赖的一级指令的数量。
2.根据权利要求1所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,计算所述剩余指令最早完成时间时还包括配置步骤,具体步骤为:使得各功能单元的剩余指令最早完成时间不小于各功能单元中一级指令的最晚完成时间以及剩余指令最早完成时间不小于各功能单元中的剩余指令数量。
3.根据权利要求2所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,所述配置步骤的具体步骤为:按式t3=对应功能单元的所有一级指令的最早完成时间节拍号+该功能单元的二级指令数量计算得到t3,与当前计算得到的所述剩余指令最早完成时间Tu_end2比较,如果Tu_end2<t3,则令Tu_end2=t3。
4.根据权利要求3所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,计算各一级指令的最早完成时间的具体步骤为:循环遍历一级指令发射时机表中的各元素,再遍历各元素中存储的集合中的各指令,按照式t=指令对应的表格行号+指令执行所需的节拍数计算得到各一级指令的最早完成时间t。
5.根据权利要求1~4中任意一项所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,所述步骤S2中,具体由所述第二类关联单元的数量得到所述第一启发量。
6.根据权利要求1~4中任意一项所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,所述步骤S3中,具体从所有就绪指令中,使用所述第一启发量挑选所有关联功能单元中为所述第一类关联单元的关联功能单元所对应的就绪指令,以及使用所述第二启发量挑选所有关联功能单元中为所述第二类关联单元且剩余指令最早完成时间最大的关联功能单元所对应的就绪指令,作为最终的就绪指令,其中所述剩余指令最早完成时间为对应功能单元中所有二级指令的最早执行完成时间的最大值。
7.根据权利要求6所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,所述步骤S3的具体步骤为:
S31.遍历每个功能单元,为每个功能单元确定对应的指令挑选处理模式,其中若目标功能单元的所有就绪指令所对应的所有关联功能单元均为所述第一类关联单元,采用第一模式挑选出目标功能单元的就绪指令,否则转入执行步骤S32;
S32.若存在至少一个关联功能单元为所述第一类关联单元,执行第二模式,即使用所述第一启发量将为所述第一类关联单元的关联功能单元所对应的各就绪指令挑选为优先指令,否则所有关联功能单元均为第二类关联单元,执行第三模式,即使用第二启发量将各关联功能单元中剩余指令最早完成时间最大的关联功能单元所对应的各就绪指令挑选为优先指令。
8.根据权利要求7所述的用于VLIW基本块调度的组合启发式指令选择优化方法,其特征在于,所述步骤S31中为每个功能单元确定对应的指令挑选处理模式的具体步骤为:
S311.预先分别设置初始模式mode0、第一模式mode1、第二模式mode2以及第三模式mode3,初始化令指令挑选处理模式modeUx=mode0;
S312.遍历各功能单元Ux的各就绪指令Ix,找出各就绪指令Ix的所有关联功能单元构成关联功能单元集合RelUnits_x;
S313.将各所述关联功能单元集合RelUnits_x的内容添加到总集合RelUnits中,令RelUnitsBU=RelUnits,并令RelUnitsBU=RelUnitsBU-Ux;
S314.如果所述总集合RelUnitsBU非空,执行步骤S315,否则令指令挑选处理模modeUx=mode0并结束当前模式确定处理;
S315.如果集合RelUnitsBU为集合UnitsL2的子集,其中UnitsL2为剩余有效指令级数大于2的功能单元集合,令指令挑选处理模式modeUx=mode1并结束当前模式确定处理,否则执行步骤S316;
S316.如果所述总集合RelUnits中有任意功能单元为第一关联单元,获取各就绪指令Ix所对应的为所述第一关联单元的关联功能单元形成集合L2Units,将各就绪指令Ix和集合L2Units形成映射关系并放入映射Ix_L2Units中,令指令挑选处理模式modeUx=mode2;否则,令指令挑选处理模式modeUx=mode3,结束当前模式确定处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910168208.7A CN109918134B (zh) | 2019-03-06 | 2019-03-06 | 用于vliw基本块调度的组合启发式指令选择优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910168208.7A CN109918134B (zh) | 2019-03-06 | 2019-03-06 | 用于vliw基本块调度的组合启发式指令选择优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109918134A CN109918134A (zh) | 2019-06-21 |
CN109918134B true CN109918134B (zh) | 2023-05-30 |
Family
ID=66963584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910168208.7A Active CN109918134B (zh) | 2019-03-06 | 2019-03-06 | 用于vliw基本块调度的组合启发式指令选择优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109918134B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778528B (zh) * | 2021-09-13 | 2023-03-24 | 北京奕斯伟计算技术股份有限公司 | 指令发送方法、装置、电子设备及存储介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6658447B2 (en) * | 1997-07-08 | 2003-12-02 | Intel Corporation | Priority based simultaneous multi-threading |
US7020746B2 (en) * | 2003-01-28 | 2006-03-28 | Microsoft Corporation | Method and system for an atomically updated, central cache memory |
WO2014102563A1 (en) * | 2012-12-26 | 2014-07-03 | Intel Corporation | Select logic using delayed reconstructed program order |
CN103279327B (zh) * | 2013-04-28 | 2015-11-25 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
US9612840B2 (en) * | 2014-03-28 | 2017-04-04 | Intel Corporation | Method and apparatus for implementing a dynamic out-of-order processor pipeline |
CN107077642B (zh) * | 2014-08-22 | 2021-04-06 | D-波系统公司 | 可用于量子计算的用于求解问题的系统和方法 |
CN104699466B (zh) * | 2015-03-26 | 2017-07-18 | 中国人民解放军国防科学技术大学 | 一种面向vliw体系结构的多元启发式指令选择方法 |
CN104699464B (zh) * | 2015-03-26 | 2017-12-26 | 中国人民解放军国防科学技术大学 | 一种基于依赖网格的指令级并行调度方法 |
US10332006B2 (en) * | 2016-12-15 | 2019-06-25 | At&T Intellectual Property I, L.P. | Optimization of over-the-air file distribution for connected cars based upon a heuristic scheduling algorithm |
CN107730085B (zh) * | 2017-09-19 | 2020-05-12 | 电子科技大学 | 一种基于分支定界法的多功能组网雷达任务规划方法 |
CN108184244B (zh) * | 2018-01-18 | 2021-02-02 | 重庆邮电大学 | 一种支持传输时延优化的工业无线网络确定性调度方法 |
-
2019
- 2019-03-06 CN CN201910168208.7A patent/CN109918134B/zh active Active
Non-Patent Citations (1)
Title |
---|
基于寄存器压力差异化的VLIWDSP编译器超块调度算法;鲍丽丹;张铁军;王东辉;;微电子学与计算机(第09期);第18-22页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109918134A (zh) | 2019-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11449364B2 (en) | Processing in a multicore processor with different cores having different architectures | |
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
US8732714B2 (en) | Method for reorganizing tasks for optimization of resources | |
US5887174A (en) | System, method, and program product for instruction scheduling in the presence of hardware lookahead accomplished by the rescheduling of idle slots | |
CN104699464B (zh) | 一种基于依赖网格的指令级并行调度方法 | |
US20060038811A1 (en) | Fast multi-pass partitioning via priority based scheduling | |
US20120054722A1 (en) | Trace generating unit, system, and program of the same | |
CN103530088A (zh) | 分级循环指令 | |
CN113157318B (zh) | 基于倒计时缓冲的gpdsp汇编移植优化方法及系统 | |
CN104699466B (zh) | 一种面向vliw体系结构的多元启发式指令选择方法 | |
CN109918134B (zh) | 用于vliw基本块调度的组合启发式指令选择优化方法 | |
Sanchez et al. | Instruction scheduling for clustered VLIW architectures | |
Sánchez et al. | The effectiveness of loop unrolling for modulo scheduling in clustered VLIW architectures | |
CN116028127A (zh) | 适用于多发射处理器指令重排的启发式方法及装置 | |
US9081561B2 (en) | Method for improving execution performance of multiply-add instruction during compiling | |
Sun et al. | An adaptive framework for large-scale state space search | |
Feljan et al. | Task allocation optimization for multicore embedded systems | |
CN101452394A (zh) | 编译方法和编译器 | |
US20060107267A1 (en) | Instruction scheduling method | |
US20170277538A1 (en) | Speculative multi-threading trace prediction | |
Sun et al. | ParSSSE: An adaptive parallel state space search engine | |
KR102161055B1 (ko) | 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 | |
CN115686795A (zh) | 一种基于dag的启发式任务调度方法 | |
WO2021147449A1 (en) | Method and apparatus for predicting and scheduling copy instruction for software pipelined loops | |
US8924691B2 (en) | Software pipelining |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |