CN104699466B - 一种面向vliw体系结构的多元启发式指令选择方法 - Google Patents

一种面向vliw体系结构的多元启发式指令选择方法 Download PDF

Info

Publication number
CN104699466B
CN104699466B CN201510135366.4A CN201510135366A CN104699466B CN 104699466 B CN104699466 B CN 104699466B CN 201510135366 A CN201510135366 A CN 201510135366A CN 104699466 B CN104699466 B CN 104699466B
Authority
CN
China
Prior art keywords
instruction
amount
functional unit
inspiration
target
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
Application number
CN201510135366.4A
Other languages
English (en)
Other versions
CN104699466A (zh
Inventor
陈书明
胡勇华
孙海燕
王霁
扈啸
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN201510135366.4A priority Critical patent/CN104699466B/zh
Publication of CN104699466A publication Critical patent/CN104699466A/zh
Application granted granted Critical
Publication of CN104699466B publication Critical patent/CN104699466B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开一种面向VLIW体系结构的多元启发式指令选择方法,步骤包括:1)获取各功能单元的候选指令集中所有可发射指令,可发射指令为所有其数据依赖指令均已执行完的指令;2)分别计算各功能单元中每条可发射指令对应的多个启发量,启发量包括指令与依赖指令之间的依赖关系量、指令与处理单元之间的关系量以及指令与功能单元之间的关系量;3)对各功能单元中的可发射指令执行多次排序,每次排序时按照优先级顺序选择一个启发量作为排序比较量,得到排序后的可发射指令序列作为指令选择对象。本发明针对VLIW体系结构的特性,充分考虑了指令与处理单元之间的硬件特性以及数据与功能单元的关联性,具有指令选择合理、并行度高的优点。

Description

一种面向VLIW体系结构的多元启发式指令选择方法
技术领域
本发明涉及VLIW(Very LongInstruction Word,超长指令字)体系结构的编译优化技术领域,尤其涉及一种面向VLIW体系结构的多元启发式指令选择方法。
背景技术
基本块调度是提高代码的指令级并行度的重要处理过程之一,它在保证产生相同结果的前提下,通过重新安排指令的执行顺序来充分发挥硬件的性能,因而是流水线体系结构或者多功能单元的超长指令字体系结构中提高代码执行效率的重要途径。
对于流水线体系结构,基本块调度通常是采用表调度方法,采用该方法在调度过程中,需要维持2个序列:一是已经调度过(被发射)的结点序列Scheds;二是每一个时间点的候选指令集合Cands。候选指令集合Cands有两个子集:一是到基本块末尾具有最大延迟时间的第一候选指令集合ACands;二是第一候选指令集合ACands中最早开始时间小于或等于等于当前时间的第二候选指令集合BCands。
基于表调度方法对基本块的指令进行重排的流程如下:
1)获得各指令到基本块末尾的最大可能延迟;
2)从基本块的无环有向图(Directed Acyclic Graph,DAG)的根结点向叶结点方向遍历,找出候选指令集合Cands;
3)从候选指令集合Cands中找到到达基本块末尾具有最大延迟时间的指令到第一候选指令集合ACands;
4)从ACands中选择合适的指令到已经调度过的结点序列Scheds;
5)反复进行2)、3)、4)三个步骤的处理直到基本块内的所有指令全部都到已经调度过的结点序列Scheds中,已经调度过的结点序列Scheds中的指令顺序即指令重排后的指令顺序。
在基本块调度中,影响指令重排结果的核心因素是每一个时间点的指令的选择。在表调度方法中,具体就是从候选指令集合Cands中的选择指令。然而,当第一候选指令集合ACands中的指令数量大于1时,则存在具体选择哪条指令的问题。
目前对于解决指令选择的问题有一些启发式策略,例如:
策略一:从第一候选指令集合ACands中选择延迟时间最大或具有最小ETime的结点n,其中ETime是为了避免停顿该结点应当被调度的最早时间;
策略二:如果体系结构有多条流水线,并且每条流水线都有若干候选结点,则优先选择最近没有为它调度指令的那些流水线上的候选结点;
策略三:优先选择那些在选择之后能使新产生的候选指令集合Cands 的元素个数最大的指令。
上述三种策略对于功能单元丰富的流向量超长指令字处理器而言,一方面没有考虑处理器内标量处理单元和向量处理单元的区分;另一方面没有考虑指令间数据依赖关系所隐含的相应功能单元之间的关联性,因此其均不适用于在VLIW体系结构中进行较好的指令选择。
由于流向量超长指令字处理器具有超标量机器的特征,因此目前对于超标量系统,指令调度还存在通过使用成组启发式的贪婪法来实现的策略。该贪婪法是尽可能地用就绪指令填充有效指令槽实现,具体方法是:假设所考虑的处理机有n个可并行执行的部件P1...Pn,并且每一个部件Pi可以执行类别为PClass(i)的指令,用表调度算法中所用的数据结构的n个副本来模拟这些功能部件,并由IClass函数确定具体指令inst所对应的类别,当且仅当PClass(i) = IClass (inst)时指令inst能够由执行部件Pi执行。但该贪婪方法是从在表调度方法的基础上修改而来的,其仍然没有考虑处理器内处理单元与指令之间的硬件特性,以及指令间数据依赖关系所隐含的功能单元之间的关联性。
综上所述,上述指令选择策略对于流向量VLIW处理器均不能较好地反映代码与功能单元之间的关联关系,也不能反映代码在处理器上一段时间内的执行特征,因此无法充分地发掘VLIW类处理器中指令的并行性,同时难以充分发挥硬件的性能。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、指令选择合理且并行度高的面向VLIW体系结构的多元启发式指令选择方法,能够针对VLIW体系结构的特性,充分考虑指令与处理单元之间的硬件特性以及数据与功能单元的关联性。
为解决上述技术问题,本发明提出的技术方案为:
一种面向VLIW体系结构的多元启发式指令选择方法,步骤包括:
1)获取各功能单元的候选指令集中所有可发射指令,所述可发射指令为所有数据依赖指令均已执行完的指令;
2)分别计算各功能单元中每条可发射指令对应的多个启发量,所述启发量包括指令与依赖指令之间的依赖关系量、指令与处理单元之间的关系量以及指令与功能单元之间的关系量;
3)对各功能单元中的可发射指令执行多次排序,每次排序时按照优先级顺序选择一个启发量作为排序比较量,得到排序后的可发射指令序列作为指令选择对象。
作为本发明的进一步改进,所述步骤3)中每个功能单元的可发射指令执行多次排序的具体实施步骤为:
3.1)取目标功能单元中所有可发射指令作为当前排序序列,并选择优先级最高的启发量作为当前启发量,转入执行步骤3.2);
3.2)将可发射指令根据当前启发量的值进行排序,对排序后的指令按照启发量的值分为多个指令子序列,得到排序后的多个指令子序列;
3.3)取所述步骤3.2)得到的排序后的多个指令子序列中最优启发量值对应的最优指令子序列作为当前排序序列,并选择优先级为下一级的启发量作为当前启发量,返回执行步骤3.2),直至完成根据所有启发量进行的排序。
作为本发明的进一步改进,所述步骤2)中指令与处理单元之间的关系量具体包括:目标指令中与目标指令对应不同处理单元的数据依赖指令数所对应的第一处理单元关系量,以及目标指令中是由标量处理单元或向量处理单元的通道寄存器引起数据依赖的数据依赖指令数所对应的第二处理单元关系量;所述步骤2)中启发量包括对应所述第一处理单元关系量的另类处理单元依赖指令启发量、对应所述第二处理单元关系量的通道寄存器依赖指令启发量。
作为本发明的进一步改进,所述步骤2)中指令与功能单元之间的关系量具体包括:目标指令的数据依赖指令对应的所有功能单元数所对应的第一功能单元关系量,以及目标指令的数据依赖指令对应的所有功能单元中下拍空闲的功能单元数所对应的第二功能单元关系量,以及目标指令中与目标指令对应不同功能单元的数据依赖指令数所对应的第三功能单元关系量;所述步骤1)中启发量还包括对应所述第一功能单元关系量的关联功能单元启发量、对应所述第二功能单元关系量的下拍空闲关联功能单元启发量、以及对应所述第三功能单元关系量的另类功能单元依赖指令启发量。
作为本发明的进一步改进,所述步骤2)中指令与依赖指令之间的依赖关系量具体是指目标指令的所有数据依赖指令数;所述步骤2)中启发量还包括对应所述数据依赖指令数的依赖指令启发量。
作为本发明的进一步改进:所述步骤2)中启发量还包括指令本身执行特性启发量,所述指令本身执行特性启发量为执行目标指令所需的节拍数。
作为本发明的进一步改进:所述步骤3)中各启发量的优先级顺序从高到低依次为:另类处理单元依赖指令启发量、通道寄存器依赖指令启发量、下拍空闲关联功能单元启发量、关联功能单元启发量、另类功能单元依赖指令启发量、依赖指令启发量以及指令执行节拍数。
作为本发明的进一步改进,所述步骤1)中还包括获取资源状态表步骤,具体实施步骤为:获取目标基本块中当前节拍以及当前节拍前若干个节拍中各个功能单元状态的资源状态表,所述资源状态表的每个结点记录了对应的功能单元在目标时刻执行的目标指令以及完成所述目标指令还需要的节拍数。
作为本发明的进一步改进,所述步骤1)中每个功能单元获取可发射指令的具体实施步骤为:为当前功能单元设置一个存储可发射指令的可发射指令集合并初始化为空;遍历所述资源状态表中当前功能单元的所有一级就绪指令,如果一条目标指令的所有数据依赖指令已经执行完毕,则将所述目标指令添加到可发射指令集合中,并将可发射指令数增加1。
作为本发明的进一步改进,所述步骤1)还包括为确定所述指令与功能单元之间的关系量获取每个功能单元准就绪指令的步骤,具体实施步骤为:为当前功能单元设置一个存储准就绪指令的准就绪指令集合,以及存储准就绪指令的依赖指令的集合并初始化为空;遍历所述资源状态表中当前功能单元的二级指令,若一条目标指令的所有依赖指令全部满足只要一拍完成的可发射指令或为在下一拍到来前执行完毕,则将所述目标指令添加到功能单元相应的准就绪指令集合中,将所述目标指令的所有依赖指令则添加到功能单元相应的准就绪指令的依赖指令集合中。
与现有技术相比,本发明的优点在于:
1)本发明针对流向量VLIW体系结构的特性,充分考虑指令与依赖指令之间的依赖关系、与处理单元之间关系、与功能单元之间关系设置多元启发量,能够有效反映VLIW体系结构的硬件特性以及与功能单元之间的关联性,再根据启发量对指令进行带优先级的排序,使得根据启发量的影响以及硬件特性能够得到适合流向量VLIW处理器体系结构的合理指令序列,同时尽可能让所有功能单元处于忙碌的状态,达到充分发挥体系结构优势、提高基本块内指令级并行性的目的。
2)本发明进一步设置另类处理单元依赖指令数、通道寄存器依赖指令数作为指令与处理单元之间的关系量对应的启发量,设置关联功能单元数、下拍空闲关联功能单元数以及另类功能单元依赖指令数作为指令与功能单元之间的关系量对应的启发量,设置依赖指令数作为指令与依赖指令之间依赖关系量对应的启发量,设置指令执行的节拍数作为指令本身执行特性启发量,充分反映了流向量VLIW体系结构包含标量处理单元和向量处理单元的硬件特性、指令间数据依赖关系所隐含的功能单元之间的关联性以及指令本身特性,从而提供有效的重排依据。
附图说明
图1是本实施例面向VLIW体系结构的多元启发式指令选择方法的实现流程示意图。
图2是本实施例中一个功能单元的候选指令分级原理示意图。
图3是本实施例中资源状态表的原理结构示意图。
图4是本实施例中可发射指令排序的原理示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明
如图1所示,本实施例面向VLIW体系结构的多元启发式指令选择方法,步骤包括:
1)获取各功能单元的候选指令集中所有可发射指令,可发射指令为所有数据依赖指令均已执行完的指令;
2)分别计算各功能单元中每条可发射指令对应的多个启发量,启发量包括指令与依赖指令之间的依赖关系量、指令与处理单元之间的关系量以及指令与功能单元之间的关系量;
3)对各功能单元中的可发射指令执行多次排序,每次排序时按照优先级顺序选择一个启发量作为排序比较量,得到排序后的可发射指令序列作为指令选择对象。
流向量VLIW DSP处理器具有标量处理单元和向量处理单元并存、以及具有多功能部件等特性,影响基本块调度效果的因素中不同因素所造成的影响度不同,且其中还包括与体系结构相关的因素。本实施例针对流向量VLIW DSP处理器的特性,预先分别取指令与依赖指令之间依赖关系量、与处理单元之间的关系量、与功能单元之间的关系量作为启发量,以考虑指令与依赖指令之间的依赖关系、与处理单元之间关系、与功能单元之间关系设置多元启发量,以反映VLIW体系结构的硬件特性以及与功能单元之间的关联性。
本实施例中,步骤2)中指令与处理单元之间的关系量具体包括:目标指令中与目标指令对应不同处理单元的数据依赖指令数所对应的第一处理单元关系量,以及目标指令中是由标量处理单元或向量处理单元的通道寄存器引起数据依赖的数据依赖指令数所对应的第二处理单元关系量;步骤2)中启发量包括对应第一处理单元关系量的另类处理单元依赖指令启发量、对应第二处理单元关系量的通道寄存器依赖指令启发量。
本实施例中,步骤2)中指令与功能单元之间的关系量具体包括:目标指令的数据依赖指令对应的所有功能单元数所对应的第一功能单元关系量,以及目标指令的数据依赖指令对应的所有功能单元中下拍空闲的功能单元数所对应的第二功能单元关系量,以及目标指令中与目标指令对应不同功能单元的数据依赖指令数所对应的第三功能单元关系量;步骤1)中启发量还包括对应第一功能单元关系量的关联功能单元启发量、对应第二功能单元关系量的下拍空闲关联功能单元启发量、以及对应第三功能单元关系量的另类功能单元依赖指令启发量。
本实施例中,步骤2)中指令与依赖指令之间的依赖关系量具体是指目标指令的所有数据依赖指令数;步骤2)中启发量还包括对应数据依赖指令数的依赖指令启发量。
本实施例中,步骤2)中启发量还包括指令本身执行特性启发量,指令本身执行特性启发量为执行目标指令所需的节拍数。
本实施例中,步骤3)中各启发量的优先级顺序从高到低依次为:另类处理单元依赖指令启发量、通道寄存器依赖指令启发量、下拍空闲关联功能单元启发量、关联功能单元启发量、另类功能单元依赖指令启发量、依赖指令启发量以及指令执行节拍数的顺序从高到低依次设置优先级。
本实施例首先是根据影响流向量VLIW处理器基本块指令级并行度的因素设置各种启发式元素类型,包括:与处理单元相关的启发式元素类型、与功能单元相关的启发式元素类型、与指令有关的启发式元素类型,对应描述指令与处理单元、功能单元以及指令之间的关系,以充分考虑VLIW体系结构的硬件特性以及与功能单元之间的关联性。考虑到程序的工作是由不同处理单元协作完成的,因而将与处理单元相关的启发式元素类型最优先考虑,而由于关系到硬件中各种功能单元的利用率,与处理单元相关的启发式元素类型、与功能单元相关的启发式元素类型两种类型中元素的优先权更高,因此启发式元素类型按优先级从高到低依次为:与处理单元相关的启发式元素类型、与功能单元相关的启发式元素类型、与指令有关的启发式元素类型。
然后,根据上述三种启发式元素类型设置对应的启发式元素,由启发式元素反映指令与处理单元、功能单元以及指令之间的具体关系,并由启发式元素的影响程度设置各启发式元素的优先级,各启发式元素按优先级从高到低具体为:
①另类处理单元依赖指令:为与处理单元相关的启发式元素类型,且表示为数据依赖由访问处理单元间通道寄存器引起,并且依赖指令由另外一个处理单元来执行;
②通道寄存器依赖指令:为与处理单元相关的启发式元素类型,且表示为数据依赖由访问处理单元间通道寄存器引起的依赖指令;
③下一拍将空闲的关联功能单元:为与功能单元相关的启发式元素类型;
④关联功能单元:为与功能单元相关的启发式元素类型;
⑤另类功能单元依赖指令:为与功能单元相关的启发式元素类型;
⑥所有依赖指令:为与指令有关的启发式元素类型;
⑦指令本身的执行特性:与指令有关的启发式元素类型。
再将上述各启发式元素进行量化以转化为便于比较的量,即得到启发量,由启发量对应各种启发式元素的典型属性,即由启发式元素所对应的指令与处理单元之间的关系量、与功能单元之间的关系量以及与指令之间的关系量作为反映各特性的启发量,与上述各启发式元素对应的启发量定义如下:
①另类处理单元依赖指令启发量:统计在另类处理单元候选集合中的那些依赖指令的数量,得到第一处理单元关系量,即为另类处理单元依赖指令数,将另类处理单元依赖指令数作为另类处理单元依赖指令启发量。
②通道寄存器依赖指令启发量:统计由访问处理单元间通道寄存器造成数据依赖的依赖指令数量,得到第二处理单元关系量,即为通道寄存器依赖指令数,将通道寄存器依赖指令数作为通道寄存器依赖指令启发量。
③下一拍空闲的关联功能单元启发量:在不考虑当前时间点的指令调度的前提下,统计下一拍将会空闲的关联功能单元的数量,得到第一功能单元关系量,即下拍空闲关联功能单元数,将下拍空闲关联功能单元数作为下一拍将空闲的关联功能单元启发量。
④关联功能单元启发量:执行依赖指令的那些功能单元中,统计除被依赖指令所在的功能单元之外的其他功能单元的数量,且其中多条依赖指令属于同一个功能单元时,对此功能单元只计一次,得到第二功能单元关系量,即关联功能单元数,将关联功能单元数作为关联功能单元启发量。
⑤另类功能单元依赖指令启发量:依赖指令中,统计在被依赖指令所在的功能单元之外的其他功能单元的队列中的指令的总数,得到第三功能单元关系量,即另类功能单元依赖指令数,将另类功能单元依赖指令数作为另类功能单元依赖指令启发量。
⑥依赖指令启发量:统计所有依赖指令的总数,得到指令与依赖指令之间的依赖关系量,即依赖指令数,将依赖指令数作为依赖指令启发量。
⑦指令本身执行特性启发量:统计指令本身所需的执行时间或节拍数,得到指令执行节拍数,将指令执行节拍数作为指令本身执行特性启发量。
通过设置分别对应处理单元、功能单元以及指令本身特性的多元启发量,充分考虑了流向量VLIW体系结构同时包含标量处理单元和向量处理单元的硬件特性、指令间数据依赖关系所隐含的功能单元之间的关联性,为后续指令排序提供有效的重排依据。
本实施例中,步骤1)中还包括获取资源状态表步骤,具体实施步骤为:获取目标基本块中当前节拍以及当前节拍前多个节拍中各个功能单元状态的资源状态表,资源状态表的每个结点记录了对应的功能单元在目标时刻执行的目标指令以及完成目标指令还需要的节拍数。 资源状态表中描述了每个节拍每个单元在执行什么指令,以及被执行的指令还需要多少个节拍才能被执行完。根据决定一级指令中作为可发射指令的条件和二级指令中作为准就绪指令的条件,可以知道通过查询资源状态表就能得到相关的信息。如图3所示,资源状态表对应A个功能单元在当前拍至前N-1拍的执行状态,N的值即为指令集中执行节拍数最多的指令所执行的节拍数。
如图2所示,本实施例的指令选择方法要考虑的范围可分为一级指令一级二级指令。一级指令是其所数据依赖的指令全部被发射的那些指令;二级指令是指其所数据依赖的指令是已发射的指令和一级指令,并且其所数据依赖的指令中至少有一条属于一级指令的那些指令。从一级指令中获取可发射指令得到可发射指令集合,从二级指令中获取准就绪指令得到准就绪指令集合。
本实施例中,在指令调度中在每一拍对候选指令排序前,获取各功能单元的候选指令集中所有可发射指令,步骤1)中每个功能单元获取可发射指令的具体实施步骤为:为当前功能单元设置一个存储可发射指令的可发射指令集合并初始化为空;遍历资源状态表中当前功能单元的所有一级就绪指令,如果一条目标指令的所有数据依赖指令已经执行完毕,则将目标指令添加到可发射指令集合中,并将可发射指令数增加1。
本实施例中,步骤1)中还包括为确定指令与功能单元之间的关系量获取每个功能单元准就绪指令获取的具体实施步骤为:为当前功能单元设置一个存储准就绪指令的准就绪指令集合,以及准就绪指令的依赖指令的集合并初始化为空;遍历资源状态表中当前功能单元的二级指令,若一条目标指令的所有依赖指令全部满足只要一拍完成的可发射指令或为在下一拍到来前执行完毕,则将目标指令添加到功能单元相应的准就绪指令集合中,目标指令的所有依赖指令则添加到功能单元相应的准就绪指令的依赖指令集合中。通过可发射指令数量和准就绪指令数量判断各功能单元在下一拍是否空闲,从而确定下一拍空闲的关联功能单元启发量。
本实施例在每一拍的候选指令排序之前先计算可发射就绪指令的上述各种启发量的数值,再对各个功能单元的可发射指令队列,按各启发式元素的优先级从高到低反复对该队列进行排序和分组,得到重排后的新序列。排序时首先将可发射指令队列按优先级最高的启发式元素相应的启发量的数值从高到低进行排序,排序的结果再按启发量的取值数量分成若干子队列,对子队列按下一个低一级的优先级启发式元素相应的启发量的数值进行排序,循环执行直至所有的启发式元素都已经处理。
本实施例流向量VLIW处理器中,一种功能单元只有一个物理实例,即一个功能单元一次只能选择一条指令;每次排序时只需要选择排序结果中的最优先组进行下一次排序选择,将其余组数据全部丢弃以避免不必要的计算,加快处理速度。
如图4所示,步骤3)中每个功能单元可发射指令进行排序的具体实施步骤为:
3.1)取目标功能单元中所有可发射指令作为当前排序序列,并选择优先级最高的启发量作为当前启发量,转入执行步骤3.2);
3.2)将可发射指令根据当前启发量的从大到小进行排序,对排序后的指令按照启发量的值的增长或减小顺序依次分为多个指令子序列,得到排序后的多个指令子序列;
3.3)取步骤3.2)得到的排序后的多个指令子序列中最优启发量值对应的最优指令子序列作为当前排序序列,并选择优先级为下一级的启发量作为当前启发量,返回执行步骤3.2),直至完成根据所有启发量进行的排序。
参见图4,本实施例一个功能单元的可发射指令序列为I1~Iso,当对可发射指令序列进行排序时,首先复制一份指令序列I1~Iso,用以备份排序前的原始序列;按优先级顺序取一个启发量作为当前启发量,将指令序列I1~Iso按各指令对应的当前启发量按从小到大或从大到小的方向的顺序进行排序,得到排序后的指令I1~Is;对排序后的指令I1~Is进行分组,具有相同启发量值的分于一组,取分组后的各组中对应最优启发量值的第一组I1~Im作为新的待排组执行下一次的排序、其余组指令序列丢弃,循环直至按所有的启发量完成排序。
本实施例在各功能单元获取可发射指令后,通过对某个时间点上的候选指令集合中的指令计算各启发式元素带来的收益,得到指令的各启发量,并按按优先级考虑各种启发量的影响大小进行分析,即对可发射指令根据启发量执行带优先级的排序,最终形成适合流向量VLIW处理器体系结构的多个指令队列以供调度,而且对于每一个节拍的执行包的每一个指令槽都能得到一个按优先顺序排好的指令队列。由于各启发量既包含与处理单元之间的硬件特性,也包括与功能单元之间的隐含关联性,因而经过上述排序后能够使得在调度一条指令时尽可能让所有功能单元处于忙碌的状态,达到充分发挥体系结构优势、提高基本块内指令级并行性的目的。
以下以面向对象语言设计实现本发明为例对本发明进行进一步说明。
在面向对象语言程序中,数据和相关的功能模块都封装在类中,因此本实施例首先需要建立一个指令调度器类,而仅对一个基本块进行指令调度所需的全局数据作为此类的数据成员。本实施例基本块和基本块中的指令的基本信息已保存在基本块类对象和指令类对象之中,指令模板信息(其中包含了执行相应指令的候选功能单元是哪些)已保存在指令模板类的对象中,并且指令对象已经确定了对应的指令模板是哪个;体系结构的基本信息则已保存在体系结构类对象中,上述信息都是通过指针或者全局变量名来访问。
本实施例面向对象语言程序设计内容具有依次包括与指令调度过程相关的数据结构的构造、顶层流程控制、以及面向VLIW体系结构的多元启发式指令选择步骤部分,面向VLIW体系结构的多元启发式指令选择步骤部分具体包括更新资源状态表步骤、可发射指令获取步骤、准就绪指令获取步骤、启发量计算步骤以及指令排序等。
㈠数据结构构造部分
本实施基于面向对象语言程序设计,除硬件结构信息和指令集信息外,需要定义相关的数据结构,主要包括:
①资源状态表
资源状态表用于描述某个节拍及其之前的若干节拍中各个功能单元的一些状态信息。它是一个一维数组,元素个数等于物理功能单元数量,每个数组元素是一个链表并且数组元素下标与物理功能单元的编号对应。链表中的节点数量都等于指令集中执行延迟时间最大的指令的执行节拍数,链表的每个结点是一个资源状态类的对象。一个资源状态类对象中记录了对应的功能单元在某个时刻执行的指令及完成此指令仍需要的节拍数。链表的尾结点对应了当前指令节拍,越靠近链表首的结点对应着越早的指令节拍。
②各功能单元的就绪指令集合
就绪指令即为一级指令,各功能单元的就绪指令集合由两类指令构成:一是数据依赖关系都已经解除、正在等待功能单元空闲的指令,二是数据依赖关系虽然未解除,但所依赖的其他指令正在被执行。
③各功能单元的二级指令集合
各功能单元的二级指令集合中的指令具有如下特征:所数据依赖的指令中没有被执行的那些指令是就绪指令或正在执行指令或已经执行指令。
④各功能单元的可发射指令集合
各功能单元的可发射指令集合中的指令具有这样的特征:数据依赖指令都已经执行完毕(数据依赖关系解除),正在等待相应的功能单元空闲。可发射就绪指令集合是就绪指令集合的一个子集。
⑤各功能单元的准就绪指令集合
各功能单元的准就绪指令集合中的指令具有这样的特征:在下一拍可能是可发射指令。
⑥指令间的数据依赖关系的枚举类型
指令间的数据依赖关系类型有一般的数据读写数据依赖关系类型和访存数据依赖关系类型。此外,针对流向量DSP处理器的硬件结构和指令集,数据依赖关系类型还有标量指令与向量指令之间SVR寄存器的访问依赖关系、向量指令之间的行列寄存器访问造成的依赖关系。每种依赖类型用一个与其他依赖类型都不相同的二进制位表示,便于对依赖类型进行判断。该枚举类型定义在指令类中。
⑦功能单元的枚举类型
功能单元的枚举类型包括各个物理功能单元的枚举值,枚举值从0开始增长。该枚举类型应定义在处理器的体系结构信息类中。
⑧每条指令都需要的辅助数据
每条指令都需要的辅助数据包括状态标识:已发射标识、已执行标识,以及其他数据:可能的功能单元代号、最终的功能单元代号、在某个时刻仍需要的执行节拍数、下拍空闲关联单元数、关联单元数。
㈡顶层控制部分
顶层控制过程按如下步骤设计:
(1)更新资源状态表;
(2)从一级指令集合中获取每个功能单元的可发射指令集合;
(3)从二级指令集合中获取每个功能单元的准就绪指令集合;
(4)为各功能单元中的各可发射指令集合中的每条指令计算所有启发量的值;
(5)进行带优先级多元启发式就绪指令排序。
㈢面向VLIW体系结构的多元启发式指令选择步骤
步骤1:更新资源状态表
本实施例通过更新资源状态表模拟将处理器时间向前推进一个指令节拍的过程,从而改变基本块中指令的执行状态,更新资源状态表的步骤如下:
ⅰ. 遍历资源状态表中各个功能单元对应的数组元素,对于数组元素中保存的链表执行步骤ⅱ~ⅴ;
ⅱ. 将链表尾结点中所保存的指令指针值赋值给首结点中所保存的指令指针值;
ⅲ. 将链表尾结点中所保存的指令执行所需节拍数值减去1后赋值给首结点中所保存的指令执行所需节拍数变量;
ⅳ. 如果前一步所得的节拍数小于1,通过首结点中不为空的指令指针找到相应的指令,将其执行状态改为已执行;然后,将首结点中保存的指针值改为空,节拍数强制改为0;
ⅴ. 将首结点移动到链表尾作为尾结点。
步骤2:指令获取
本实施例在指令调度中对每一拍候选指令排序前,获取各功能单元的候选指令集合中所有可发射指令以及准就绪指令,获取可发射指令的作用是为各物理和扩展功能单元获得可发射的指令集合,以便于后面阶段从中选择指令发射到物理功能单元执行。
步骤2.1:可发射指令获取
步骤包括:
ⅰ.清空各功能单元的可发射指令集合,并将当前可发射指令总数值初始化为0;
ⅱ.遍历各功能单元,为每个功能单元执行步骤ⅲ、ⅳ;
ⅲ.遍历当前功能单元的就绪指令集合中的每条指令,对每条指令执行步骤ⅴ处理;
ⅳ.如果指令的所有数据依赖指令已经执行完毕,将此指令添加到当前单元的可发射指令集合中,并对总的可发射指令数加1。
通过上述步骤2.1,为每个功能单元获得一个可发射指令集合。
步骤2.2:准就绪指令获取
步骤包括:
ⅰ. 设置一个标志变量flag,标志变量flag用于标识一条二级指令是否可能在下一成为可发射指令;
ⅱ. 遍历各功能单元的二级指令集合,每个集合中的每条指令按步骤ⅲ~ⅶ.进行处理;
ⅲ. 将当前功能单元对应的准就绪指令集合、准就绪指令的依赖指令集合清空;
ⅳ. 遍历当前二级指令集合中的所有指令,每条指令执行步骤ⅴ~ⅶ;
ⅴ. 令flag为“真”值;
ⅵ. 遍历当前二级指令的所有依赖指令,若有任意一条依赖指令既不是只要一拍的可发射指令、也不是在下一拍前执行完毕的指令,则令flag为“假”并结束遍历;
ⅶ. 步骤ⅵ的处理完成后,若flag的值仍为“真”时,将当前指令添加到功能单元相应的准就绪指令集合中,然后将此指令的所有依赖指令添加到功能单元相应的准就绪指令的依赖指令集合中。
通过上述步骤2.2,为每个功能单元获得一个准就绪指令集合。
步骤3:带优先级的多元启发式指令排序
本实施计算各功能单元中每条可发射指令对应的各启发量,对各功能单元中的可发射指令执行多次排序,每次排序时按照优先级顺序选择一个启发量作为排序比较量,得到选择后的可发射指令序列。
步骤3.1:启发量计算
对每个功能单元(包括扩展功能单元)中的可发射指令集合中的任意一条可发射指令都进行如下处理:
ⅰ. 计算依赖指令数:对数据依赖指令集合中的指令进行计数即得到依赖指令的总数,得到依赖指令启发量;
ⅱ. 计算通道寄存器依赖指令数:遍历数据依赖指令集合中的每条指令,判断两条指令的依赖关系,如果是因访问标量处理单元和向量处理单元的通道寄存器而造成的数据依赖,则对此指令计数,最后得到这种依赖指令的总数,得到通道寄存器依赖指令启发量;
ⅲ. 计算另类处理单元依赖指令数:遍历数据依赖指令集合中的每条指令,如果两条指令中一条是属于标量处理单元而另一条是属于向量处理单元,则对此依赖指令计数。最后得到这种依赖指令的总数,得到另类处理单元依赖指令启发量;
ⅳ. 关联功能单元数:设置一个功能单元编号集合,该集合初始时为空;然后遍历数据依赖指令集合中的每条指令,如果指令与当前指令不是属于同一个功能单元,则将相应的功能单元的编号添加到功能单元编号集合中;在遍历完成后在功能单元编号集合中对重复的功能单元编号只保留一个,集合中最终留下的功能单元编号的数量即为所需的关联功能单元数,得到关联功能单元启发量;
ⅴ. 下拍空闲关联功能单元数:将上述得到的关联功能单元,遍历集合中的每个关联功能单元,判断该单元在下一拍是否可能空闲,如果空闲,则对此单元计数;遍历结束后得到的数量即所需的下拍空闲关联功能单元数,得到下拍空闲关联功能单元启发量;
判断一个功能单元在下一拍是否空闲且与当前指令关联的依据是:该单元在当前拍要么没有一级指令,要么只有一条一级指令且这条指令在当前拍一定会被发射(即是在可发射指令集合中),且该单元的准就绪指令中至少有一条是当前被依赖指令的依赖指令。
ⅵ. 另类功能单元依赖指令数:遍历数据依赖指令集合中的每条指令,如果指令与当前指令不是属于同一个功能单元,则对此指令计数,遍历结束后得到的数量即所需的另类功能单元依赖指令数,得到另类功能单元依赖指令启发量;
ⅶ. 指令执行节拍数:通过指令助记符找到对应的指令模板信息,从中获取指令执行的节拍数,得到指令本身执行特性启发量。
通过上述步骤3.1得到各种启发式元素对应的启发量的值作为指令重排依据。
步骤3.2:指令排序
按优先级顺序根据得到的各启发量对可发射指令序列执行排序的步骤如下:
ⅰ. 遍历各功能单元,为每个单元的可发射指令队列分别按步骤ⅱ~ⅸ进行重排;
ⅱ. 将指令的另类处理单元依赖指令启发量作为当前启发量,按此启发量的值将可发射指令集合中的指令从大到小进行排序,得到一个有序队列;然后将得到的有序队列拆分成多个子队列,每个队列具有相同的启发量数值;
ⅲ. 将通道寄存器依赖指令启发量作为当前启发量,取步骤ⅱ得到的子队列中第一个子队列,并将第一个子队列先按当前启发量从大到小进行排序,更新得到新的有序队列,然后将更新得到的新的有序队列再拆分成多个子队列,每个队列具有相同的启发量数值;
ⅳ. 将下拍空闲关联单元启发量作为当前启发量,取步骤ⅲ得到的第一个子队列中第一个子队列,并将第一个子队列先按当前启发量从大到小进行排序,更新得到新的有序队列,然后将更新得到的新的有序队列再拆分成多个子队列,每个队列具有相同的启发量数值;
ⅴ. 将关联功能单元启发量作为当前启发量,取步骤ⅳ得到的第一个子队列中第一个子队列,并将第一个子队列先按当前启发量从大到小进行排序,更新得到新的有序队列,然后将更新得到的新的有序队列再拆分成多个子队列,每个队列具有相同的启发量数值;
ⅵ将另类功能单元依赖指令启发量作为当前启发量,取步骤ⅴ得到的第一个子队列中第一个子队列,并将第一个子队列先按当前启发量从大到小进行排序,更新得到新的有序队列,然后将更新得到的新的有序队列再拆分成多个子队列,每个队列具有相同的启发量数值;
ⅶ.将依赖指令启发量作为当前的排序启发量,取步骤ⅵ得到的第一个子队列中第一个子队列,并将第一个子队列先按当前启发量从大到小进行排序,更新得到新的有序队列,然后将更新得到的新的有序队列再拆分成多个子队列,每个队列具有相同的启发量数值;
ⅷ.将指令本身执行特性启发量作为启发量,取步骤ⅶ得到的第一个子队列中第一个子队列,并将第一个子队列先按当前启发量按从大到小或从小到大进行排序,其中如果指令的关联单元数非0,则按当前启发量的值从小到大将队列中的各指令排序;否则按当前启发量的值从大到小将队列中的各指令排序;更新得到新的有序队列,然后将更新得到的新的有序队列再拆分成多个子队列,每个队列具有相同的启发量数值,完成对指令序列的排序。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

Claims (9)

1.一种面向VLIW体系结构的多元启发式指令选择方法,其特征在于,步骤包括:
1)获取各功能单元的候选指令集中所有可发射指令,所述可发射指令为所有数据依赖指令均已执行完的指令;
2)分别计算各功能单元中每条可发射指令对应的多个启发量,所述启发量包括指令与依赖指令之间的依赖关系量、指令与处理单元之间的关系量以及指令与功能单元之间的关系量;
3)对各功能单元中的可发射指令执行多次排序,每次排序时按照各所述启发量的优先级顺序选择其中一个启发量作为排序比较量,得到排序后的可发射指令序列作为指令选择对象;
所述步骤3)中每个功能单元中的可发射指令执行多次排序的具体实施步骤为:
3.1)取目标功能单元中所有可发射指令作为当前排序序列,并选择优先级最高的启发量作为当前启发量,转入执行步骤3.2);
3.2)将可发射指令根据当前启发量的值进行排序,对排序后的指令按照启发量的值分为多个指令子序列,得到排序后的多个指令子序列;
3.3)取所述步骤3.2)得到的排序后的多个指令子序列中最优启发量对应的最优指令子序列作为当前排序序列,并选择优先级为下一级的启发量作为当前启发量,返回执行步骤3.2),直至完成根据所有启发量进行的排序。
2.根据权利要求1所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤2)中指令与处理单元之间的关系量具体包括:目标指令中与目标指令对应不同处理单元的数据依赖指令数所对应的第一处理单元关系量,以及目标指令中是由标量处理单元或向量处理单元的通道寄存器引起数据依赖的数据依赖指令数所对应的第二处理单元关系量;所述步骤2)中启发量还包括对应所述第一处理单元关系量的另类处理单元依赖指令启发量、对应所述第二处理单元关系量的通道寄存器依赖指令启发量。
3.根据权利要求2所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤2)中指令与功能单元之间的关系量具体包括:目标指令的数据依赖指令对应的所有功能单元数所对应的第一功能单元关系量,以及目标指令的数据依赖指令对应的所有功能单元中下拍空闲的功能单元数所对应的第二功能单元关系量,以及目标指令中与目标指令对应不同功能单元的数据依赖指令数所对应的第三功能单元关系量;所述步骤2)中启发量还包括对应所述第一功能单元关系量的关联功能单元启发量、对应所述第二功能单元关系量的下拍空闲关联功能单元启发量、以及对应所述第三功能单元关系量的另类功能单元依赖指令启发量。
4.根据权利要求3所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤2)中指令与依赖指令之间的依赖关系量具体是指目标指令的所有数据依赖指令数;所述步骤2)中启发量还包括对应所述数据依赖指令数的依赖指令启发量。
5.根据权利要求4所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤2)中启发量还包括指令本身执行特性启发量,所述指令本身执行特性启发量为执行目标指令所需的节拍数。
6.根据权利要求5所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤3)中各启发量的优先级顺序从高到低依次为:另类处理单元依赖指令启发量、通道寄存器依赖指令启发量、下拍空闲关联功能单元启发量、关联功能单元启发量、另类功能单元依赖指令启发量、依赖指令启发量以及指令执行节拍数。
7.根据权利要求1~6中任意一项所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤1)中还包括获取资源状态表步骤,具体实施步骤为:获取目标基本块中当前节拍以及当前节拍前若干个节拍中各个功能单元状态的资源状态表,所述资源状态表的每个结点记录了对应的功能单元在目标时刻执行的目标指令以及完成所述目标指令还需要的节拍数。
8.根据权利要求7所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤1)中每个功能单元获取可发射指令的具体实施步骤为:为当前功能单元设置一个存储可发射指令的可发射指令集合并初始化为空;遍历所述资源状态表中当前功能单元的所有一级就绪指令,如果一条目标指令的所有数据依赖指令已经执行完毕,则将所述目标指令添加到可发射指令集合中,并将可发射指令数增加1。
9.根据权利要求8所述的面向VLIW体系结构的多元启发式指令选择方法,其特征在于,所述步骤1)还包括为确定所述指令与功能单元之间的关系量获取每个功能单元的准就绪指令的步骤,具体实施步骤为:为当前功能单元设置一个存储准就绪指令的准就绪指令集合,以及存储准就绪指令的依赖指令的集合并分别初始化为空;遍历所述资源状态表中当前功能单元的二级指令,若一条目标指令的所有依赖指令全部满足只要一拍完成的可发射指令或为在下一拍到来前执行完毕,则将所述目标指令添加到功能单元相应的准就绪指令集合中,将所述目标指令的所有依赖指令则添加到功能单元相应的准就绪指令的依赖指令集合中。
CN201510135366.4A 2015-03-26 2015-03-26 一种面向vliw体系结构的多元启发式指令选择方法 Active CN104699466B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510135366.4A CN104699466B (zh) 2015-03-26 2015-03-26 一种面向vliw体系结构的多元启发式指令选择方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510135366.4A CN104699466B (zh) 2015-03-26 2015-03-26 一种面向vliw体系结构的多元启发式指令选择方法

Publications (2)

Publication Number Publication Date
CN104699466A CN104699466A (zh) 2015-06-10
CN104699466B true CN104699466B (zh) 2017-07-18

Family

ID=53346637

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510135366.4A Active CN104699466B (zh) 2015-03-26 2015-03-26 一种面向vliw体系结构的多元启发式指令选择方法

Country Status (1)

Country Link
CN (1) CN104699466B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106020922B (zh) * 2016-05-30 2019-01-08 湖南科技大学 用跳转目标基本块的执行包填充空闲节拍的指令调度方法
CN109918134B (zh) * 2019-03-06 2023-05-30 湖南科技大学 用于vliw基本块调度的组合启发式指令选择优化方法
CN111124500B (zh) * 2019-12-12 2022-03-08 浪潮(北京)电子信息产业有限公司 一种指令执行方法、装置、设备及存储介质
CN111538714B (zh) * 2020-04-24 2023-10-17 咪咕文化科技有限公司 一种指令执行方法、装置、电子设备和存储介质
CN114510267B (zh) * 2022-04-20 2023-03-21 麒麟软件有限公司 基于Linux系统的程序ABI接口兼容性计算方法
CN114579191A (zh) * 2022-04-28 2022-06-03 飞腾信息技术有限公司 一种指令发射方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101710272A (zh) * 2009-10-28 2010-05-19 北京龙芯中科技术服务中心有限公司 指令调度装置和方法
CN102662637A (zh) * 2012-03-30 2012-09-12 中国人民解放军国防科学技术大学 超长指令字处理器指令发射方法
CN104040491A (zh) * 2011-11-22 2014-09-10 索夫特机械公司 微处理器加速的代码优化器
CN104424026A (zh) * 2013-08-21 2015-03-18 华为技术有限公司 一种指令调度方法及装置
CN104461471A (zh) * 2014-12-19 2015-03-25 中国人民解放军国防科学技术大学 分簇vliw处理器上统一的指令调度和寄存器分配方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8412856B2 (en) * 2009-10-26 2013-04-02 Sony Computer Entertainment America Llc. File input/output scheduler using immediate data chunking

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101710272A (zh) * 2009-10-28 2010-05-19 北京龙芯中科技术服务中心有限公司 指令调度装置和方法
CN104040491A (zh) * 2011-11-22 2014-09-10 索夫特机械公司 微处理器加速的代码优化器
CN102662637A (zh) * 2012-03-30 2012-09-12 中国人民解放军国防科学技术大学 超长指令字处理器指令发射方法
CN104424026A (zh) * 2013-08-21 2015-03-18 华为技术有限公司 一种指令调度方法及装置
CN104461471A (zh) * 2014-12-19 2015-03-25 中国人民解放军国防科学技术大学 分簇vliw处理器上统一的指令调度和寄存器分配方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
杨慧 等.一种基于VLIW 结构的高性能变长指令发射机制.《计算机研究与发展》.2013,第50卷(第10期), *
杨旭 等.分簇VLIW结构下利用数据依赖图优化调度的研究.《计算机学报》.2011,第34卷(第1期), *

Also Published As

Publication number Publication date
CN104699466A (zh) 2015-06-10

Similar Documents

Publication Publication Date Title
CN104699466B (zh) 一种面向vliw体系结构的多元启发式指令选择方法
Zhang et al. An effective modified migrating birds optimization for hybrid flowshop scheduling problem with lot streaming
CN103530088B (zh) 分级循环指令
CN104040492B (zh) 微处理器加速的代码优化器和依赖性重排序方法
CN105426160B (zh) 基于sprac v8指令集的指令分类多发射方法
CN104040490B (zh) 用于多引擎微处理器的加速的代码优化器
CN110018850A (zh) 用于可配置空间加速器中的多播的设备、方法和系统
CN104040491B (zh) 微处理器加速的代码优化器
CN109597646A (zh) 具有可配置空间加速器的处理器、方法和系统
CN105164639B (zh) 控制由计算系统执行的任务
CN108197705A (zh) 卷积神经网络硬件加速装置及卷积计算方法及存储介质
CN105808309B (zh) 一种基于申威平台的基础线性代数库blas三级函数gemm的高性能实现方法
CN104239213A (zh) 一种面向航天器自动化测试的并行测试任务两阶段调度方法
CN109583594A (zh) 深度学习训练方法、装置、设备及可读存储介质
CN109885857A (zh) 指令发射控制方法、指令执行验证方法、系统及存储介质
CN106407063B (zh) 一种GPU L1 Cache处访存序列的仿真生成与排序方法
CN106406820A (zh) 一种网络处理器微引擎的多发射指令并行处理方法及装置
Agnesina et al. Improving FPGA-based logic emulation systems through machine learning
CN105139161B (zh) 一种基于Petri网的虚拟企业建模与调度方法
CN109918134B (zh) 用于vliw基本块调度的组合启发式指令选择优化方法
CN109256142A (zh) 语音转换基于扩展内核类网格法处理零散数据建模方法及设备
Barbosa Efficient instantiation techniques in SMT (work in progress)
CN106020922B (zh) 用跳转目标基本块的执行包填充空闲节拍的指令调度方法
CN107066706B (zh) Gpu ffma指令在双发射模式下的通量测试方法
CN108293027A (zh) 数据流送单元和用于操作数据流送单元的方法

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