一种基于依赖网格的指令级并行调度方法_3

文档序号:8380727阅读:来源:国知局
的指令划分为一组指令子组,以描述指令与功能单元之间的相关性。
[0034]本实施例通过虚拟功能单元表示机制描述指令与硬件结构之间的相关性,虚拟功能单元不仅包含硬件体系结构包含的物理功能单元,同时也包含多种物理功能单元构成的各种可能的组合而形成的组合功能单元,这些可能的组合来自指令集中部分指令的候选功能单元组合。将虚拟功能单元按一定的顺序编排,物理功能单元在前、组合功能单元在后,如图3所示,分别根据物理功能单元、组合功能单元将指令组划分为指令子组,在进行指令子组划分时,考虑的是NPEjPNEEU的总和,即Nteu= Npeu + NEEU,其中Nteu为总执行功能单元数。
[0035]本实施例通过定义一个存储指令子组信息的二维表结构存储各指令子组,二维表的第一维(行)和第二维(列)的长度分别为指令组的数量和总执行单元数Nteu,由二维表构成一个网格,每个网格单元为一个指令集合,保存一个指令子组。指令子组也是一个指令集合,只是这些指令属于同一个功能单元。网格的行号对应数据依赖优先级值,表示指令的逻辑发射时间,网格的列号对应指令所在的功能单元,列号较小和较大部分分别对应指令的物理功能单元以及组合功能单元。划分得到指令组后,遍历每个指令组中的每条指令,分析其应该处于哪个物理功能单元或组合功能单元,再将指令填写到上述建立二维表中相应网格的指令子组中。二维表格所构成的指令子组网格即为依赖网格,依赖网格反映了某个时刻各执行单元在未来的各指令节拍中有哪些指令需要处理。
[0036]本实施例中依赖网格如图3所示,在指令的数据依赖优先级和虚拟功能单元两种表示下建立二维表格,表格中η表示物理功能单元数量,m表示组合功能单元数量,一个ο表示一条指令,ο..ο则表示多条指令,二维表格的行号对应数据依赖优先级值,前η列表示处理器的η个物理功能单元,后m列则表示可能的m种候选功能单元组合。表格的各行对应各数据依赖优先级值,各列对应各虚拟功能单元,网格中一个格子(单元格)所存储的内容即是在数据依赖优先值对应的某个逻辑时刻某个虚拟功能单元的候选指令构成的集合。
[0037]基于上述得到的依赖网格,可以非常直观地获得VLIW体系结构下基本块内指令之间的静态并行性,包括:①指令之间的逻辑并行关系,即哪些指令可以并行执行;②指令间因功能单元产生的并行关系,即哪些指令可以在某个功能单元中并行执行。基于依赖网格,还可以方便地获得VLIW体系结构下基本块内指令之间的如下动态并行关系,包括指令之间动态的逻辑并行关系,以及未来功能单元间的关联性。
[0038]本实施例中,步骤3)中并行性分析具体包括识别指令之间逻辑并行性步骤,具体实施步骤为:获取依赖网格中处于目标数据依赖优先级的所有指令,得到与目标数据依赖优先级对应逻辑时间点的所有并行指令。通过依赖网格可以方便的实现识别指令的逻辑并行性,具有相同数据依赖优先级值的指令都是在依赖网格中的同一行,这些指令在逻辑上(即不考虑硬件的限制)是可以同时发射的。如果在优化过程中指令移到新的行中,它就具有相应的数据依赖优先级值,从而与相应行中的指令自然地构成逻辑并行关系,不需要在下一个时间点重新分析。
[0039]本实施例中,步骤3)中并行性分析具体还包括识别功能单元候选指令集合步骤,具体实施步骤为:获取依赖网格中对应目标功能单元且处于目标数据依赖优先级的所有指令,得到目标功能单元在目标数据依赖优先级所对应的逻辑时间点的候选指令集合。通过依赖网格可以方便的实现为某个功能单元可并行执行指令的识别,在依赖网格的一行中,不同的列表示不同的功能单元。这一方面可以直观地获得不同功能单元的候选指令集合,即在当前时间点哪些指令可以在哪些单元中执行这一并行性,另一方面可以获得功能单元之间因指令间数据依赖而产生的关联,可用于进一步分析功能单元之间的关联关系所引起的并行性问题。
[0040]本实施例中,步骤3)中并行性分析具体还包括获取目标执行单元工作量步骤,具体实施步骤为:统计依赖网格中对应目标功能单元处于各数据依赖优先级的所有指令,得到目标执行单元在各逻辑时间点的工作量;统计依赖网格中对应目标功能单元的所有指令,得到目标执行单元的总工作量。通过遍历依赖网格中的各单元格,对单元格中的指令计数,然后遍历依赖网格的各列,计算出列的指令总数,即可获得各逻辑节拍上各执行单元的工作量以及总的工作量。
[0041]本实施例通过依赖网格还能够识别未来一个节拍的并行性,根据前后两个数据依赖优先级值对应的指令间的数据依赖关系,可以由功能单元间的关联性分析出某个功能单元的指令执行时对其他功能单元在未来的候选指令集合的内容的影响。
[0042]本实施例还可以通过依赖网格获取某个功能单元因某条候选指令而与其他功能单元产生的关联关系,步骤3)中并行性分析还包括关联功能单元分析步骤,具体实施步骤为:在依赖网络中,查找所有与目标功能单元对应的指令具有依赖关系的依赖指令,将查找到的依赖指令对应的功能单元作为与目标功能单元具有关联关系的关联功能单元;统计查找到的关联功能单元的数量,得到目标功能单元的关联功能单元量。通过依赖网格中对指令所从属的功能单元的描述,可以直接确定由数据依赖相关联的两个功能单元,在此基础上,通过对各候选指令所引起的关联单元计数,可以获得它们所引起的关联单元的数量信息,进而计算出与之有关的关联单元数。
[0043]本实施例中,步骤3)后还包括依赖网格动态调整步骤4),具体实施步骤为:
4.1)当依赖网格中处于最高数据依赖优先级的待移除指令在本拍将被移除时,将待移除指令作为当前目标指令,并将待移除指令所对应的数据依赖优先级作为当前参照数据依赖优先级,转入执行步骤4.2);
4.2)在依赖网络的数据依赖优先级比参照数据依赖优先级低一级的对应行中,查找出与当前目标指令有依赖关系的所有依赖指令作为待调整指令,并分别获取每条待调整指令对应的依赖指令中最大数据依赖优先级值,将获取得到的各最大数据依赖优先级值加I后分别作为对应待调整指令调整后的数据依赖优先级值;然后将待调整指令按照调整后的数据依赖优先级值调整到依赖网格中对应的单元格中,转入执行步骤4.3);
4.3)以调整后的指令作为当前目标指令,并将调整后的指令的优先级作为当前参照数据依赖优先级,返回执行步骤4.2),直至执行到没有指令被调整或者到达最小的数据依赖优先级对应的那一行。如图4所示,Oa,Ob, Oc表示某三条存在传送依赖关系的指令,图中虚线箭头表示数据依赖关系,且所虚线箭头指向的方向被依赖方,若依赖网格中处于第一行(数据依赖优先级最高)的指令Oa被移除,经过动态调整后,将依赖指令Oa的指令Ob的数据依赖优先级增加一级并调整位置,相应的,依赖指令Ob的指令Oc的数据依赖优先级增加一级并调整位置。
[0044]本实施例针对具有多功能单元(多条流水线)特性的VLIW体系结构,通过依赖网格将指令间与数据和硬件有关的相关性清晰地表现出来,为相关的代码优化过程中识别并行性提供数据和相关信息,能够为充分发挥硬件体系结构优势、提高基本块内指令级并行度提供新的思路。
[0045]以下以面向对象语言设计实现本发明基于依赖网格的指令级并行调度方法为例进行进一步说明。
[0046]本实施例中,为了实现依赖网格表示,需要相关数据结构的支持,所构造的数据结构包括:
基本块的指令序列(instns):用于提供按顺序访问基本块中各指令的途径,它可以是一个链表或其他支持顺序访问的数据结构,其中保存的是指令对象的指针。
[0047]指令的数据依赖优先级值表:该表的长度与指令序列的长度相同,每项为一个非负整数,用于存储指令的数据依赖优先级值。
[0048]指令组:用于存储数据依赖优先级值相同指令(或指令指针)的集合,即存储逻辑上可以同时发射指令(或指令指针)的集合。实际应用时,可以专门设计指令组类,然后通过相应的对象来保存指令组中的指令,也可以将其中的指令保存在链表等常规数据结构中。
[0049]指令组序列(instnGroups):用于存储按指令的数据依赖优先级值划分得到的各指令组所构成的序列,该序列中,后一组中的指令必须在其前一组中相应的数据依赖指令执行完毕之后才能执行。
[0050]指令子组二维表(instnGroupsForUnits):该表即依赖网格,定义一个二维矩阵存储,每个矩阵元(网格)存储一个指令子组。该表的第一维的大小是数据依赖优先级的数量,第二维的大小是总的执行单元数量,该表也可为动态变化的表。
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1