步骤为:在所述依赖网络中,查找所有与目标功能单元对应的指令具有依赖关系的依赖指令,将查找到的依赖指令对应的功能单元作为与所述目标功能单元具有关联关系的关联功能单元;统计查找到的所述关联功能单元的数量,得到所述目标功能单元的关联功能单元量。
[0015]与现有技术相比,本发明的优点在于:
I)本发明结合数据依赖优先级以及功能单元分配关系建立依赖网格,将指令按照数据依赖优先级以及对应的功能单元进行划分,能够同时描述指令间的并行性以及与硬件结构之间的相关性,从而能够帮助相关编译优化过程更为充分地发挥硬件体系结构优势,同时提高基本块内指令级并行度。
[0016]2)本发明通过依赖网格能够方便的实现指令的逻辑并行性识别、功能单元可并行执行指令的识别以及各功能单元的工作量的获取等,还能够通过指令与功能单元的关系获取得到指令间因功能单元不同而造成的各功能单元之间的相关性;
3)本发明的依赖网格进一步包括组合功能单元,融入指令具有多候选功能单元的指令集特征,能够有效反映各功能单元在各逻辑时间点的工作总量,从而有利于将基本块的调度与功能单元分配有机结合起来。
【附图说明】
[0017]图1是本实施例基于依赖网格的指令级并行调度方法的实现流程示意图。
[0018]图2是本实施例中数据依赖优先级值的计算原理示意图。
[0019]图3是本实施例中依赖网格的结构原理示意图。
[0020]图4是本实施例中依赖网格动态调整的原理示意图。
【具体实施方式】
[0021]以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
[0022]如图1所示,本实施例基于依赖网格的指令级并行调度方法,步骤包括:
1)获取目标基本块中指令之间的数据依赖关系以及各指令所对应的功能单元的信息,根据数据依赖关系设置并计算各指令的数据依赖优先级值;
2)按数据依赖优先级值以及功能单元划分各指令,将划分得到的结果按网格形式进行存储,建立得到指令与数据依赖优先级、功能单元之间依赖关系的依赖网格;
3)按照步骤2)得到的依赖网格中指令的数据依赖优先级、指令与功能单元之间的关系进行指令间的并行性分析。
[0023]本实施例针对具有多功能单元(多条流水线)特性的VLIW体系结构,通过建立指令与数据依赖优先级、功能单元之间依赖关系的依赖网格来描述指令与数据、硬件结构之间的相关性,能够充分发挥硬件体系结构优势,为提高基本块内指令级并行度提供支持。
[0024]需要说明的是,本实施例基本块中所指的指令序列为还没有确定指令并行以及执行指令的功能单元的汇编指令序列;VLIW体系结构的一个功能单元对应的一个指令槽,部分指令只能在某个指定的功能单元中执行,但有些指令可以在两个或两个以上功能单元中的任意一个中执行。
[0025]本实施例中,通过指令间逻辑执行顺序的优先级描述指令间的并行关系,指令的优先级代表着在某个时刻一条指令可能的最早逻辑发射时机,具有相同优先级的指令之间不具有数据依赖关系,数据依赖优先级值为指令对应的数据依赖优先级的表示值。步骤
1.0中计算各指令的数据依赖优先级值的具体实施步骤为:
1.1)分别为各指令定义一个数据依赖优先级值并初始化为O ;
1.2)从第二条指令开始,依次遍历基本块中各条指令计算对应的数据依赖优先级值,每条指令计算时,按逆序遍历当前指令的前一条指令与首条指令之间的所有目标指令,判断目标指令中是否存在与当前指令有依赖关系的被依赖指令,如果有这样的被依赖指令,将查找到的所有被依赖指令中最大的数据依赖优先级值加I后作为当前指令的数据依赖优先级值。
[0026]本实施例中,步骤1.2)中查找出所有与当前指令有依赖关系的指令的具体实施步骤为:
1.21)将当前指令中任意一个源变量作为目标源变量,在当前指令之前的所有指令中查找出对目标源变量进行最后一次定值的指令,得到目标源变量的最后一次定值指令,并将最后一次定值指令作为一条与当前指令有依赖关系的依赖指令;
1.22)取下一个源变量作为目标源变量,重复执行步骤1.21),直至完成对当前指令中所有源变量的最后一次定值指令的查找,得到所有与当前指令有依赖关系的依赖指令。
[0027]如图2所示,假设指令M分别与指令X、Y、Z具有数据依赖关系(如图中虚线箭头所示),则指令M的数据依赖优先级值为指令X、Y、Z中数据依赖优先级值最大的那一个再加I,即指令M的数据依赖优先级值=Max ( a, b, c)+l,其中a, b, c分别为指令X、Y、Z的数据依赖优先级值,Max表示求集合中的最大值。
[0028]本实施例具体是首先为基本块内的每条指令定义一个数据依赖优先级的属性,其值(数据依赖优先级值)为一个整数,通过该整数的值描述一条指令的最早发射时机(以拍为单位),且仅考虑指令间的数据相关性,而不考虑机器的最大指令并发能力和具体指令的执行延迟时间,即认为机器有足够多的功能单元来并行执行无数据相关的那些指令,且硬件对所有指令的处理时间相同。数据依赖优先级值从O开始增长,并且值越小,所对应的数据依赖优先级越高,指令间的数据相关性分析也即是计算出基本块内每条指令相应的数据依赖优先级值。
[0029]然后计算各指令的数据依赖优先值,详细实现步骤为:定义一个保存数据依赖优先级值的数组并根据基本块内的指令数量设定数组的大小,初始化该数组的每个元素的值为O;正序遍历基本块内的各指令,对于其中一条指令I,从指令I之前的那条指令开始向基本块的首指令逆序遍历分析,找出其中哪些指令确定了指令I的源变量的最后一次定值,直到指令I的所有源变量均查找到对应最后一次定值的指令,指令全部确定或者到达基本块开始处时终止逆序遍历分析过程,所有查找到的指令构成集合S ;如果集合S不为空,将集合S指令中的最大的数据依赖优先级值加I后作为指令I的数据依赖优先级值。由各数据依赖优先值即可得到指令的硬件无关执行延迟时机,硬件无关执行延迟时机即为各指令中最大的数据依赖优先级值。
[0030]本实施例中,步骤I)中获取各指令所对应的功能单元的信息的具体实施步骤为:查询目标基本块中所有已确定对应物理功能单元的第一目标指令,并获取每条第一目标指令对应的物理功能单元的信息;查找基本块中所有未确定对应物理功能单元的第二目标指令,并获取每条第二目标指令对应的多种组合功能单元的信息,组合功能单元为第二目标指令对应的所有物理功能单元所构成的可能组合。组合功能单元具体是根据基本块中指令集的规定由物理功能单元构成可能组合。
[0031]指令集特征决定了一条指令可以在哪些执行单元中执行,这由该指令对应的指令模板决定,在某些指令集中,有部分指令可能有两个或两个以上的候选功能单元。本实施例将所有的可能候选功能单元组合用“组合功能单元”序列来描述,一个组合功能单元是两个或两个以上物理功能单元的组合(不分先后),组合功能单元的数量计为NEEU,处理器的物理功能单元数量(一般对应着指令执行包的指令槽数量)计为npeu。
[0032]本实施例中,步骤2)的具体实施步骤为: 2.1)遍历各指令,并将各指令按照数据依赖优先级划分为多个指令组;
2.2)遍历步骤2.1)得到的各指令组,将各指令组中所有已确定对应物理功能单元的第一目标指令按照所对应的物理功能单元进行划分,得到多个第一指令子组;将各指令组中所有未确定对应物理功能单元的第二目标指令按照所对应的组合功能单元进行划分,得到多个第二指令子组;
2.3)构建一个用于存储指令子组的二维表结构,二维表中行向量对应指令的各数据依赖优先级,每行的行号对应数据依赖优先级值,列向量分为对应各物理功能单元的第一部分、对应各组合功能单元的第二部分,每个数据依赖优先级值与一个物理功能单元或组合功能单元对应二维表的一个网格单元格;将各第一指令子组按照数据依赖优先级值、物理功能单元分别保存至二维表的第一部分各网格单元格中,将各第二指令子组按照数据依赖优先级、组合功能单元分别保存至二维表的第二部分各网格单元格中,由二维表的第一部分、第二部分构成指令与数据依赖优先级、功能单元之间依赖关系的依赖网格。
[0033]本实施例将指令按数据依赖优先级划分为多个指令组以描述指令间的并行性,同一个指令组中的指令具有相同的逻辑发射时间,再将各指令组按照功能单元进行划分,将具有相同功能单元