一种指令调度方法及装置制造方法
【专利摘要】本发明实施例提供一种指令调度方法及装置,涉及通信领域,能够使得处理器或流水线正常运行,提高了调度的正确性。包括:构建数据依赖图;分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。本发明实施例提供一种指令调度方法及装置用于指令的调度。
【专利说明】一种指令调度方法及装置
【技术领域】
[0001] 本发明涉及通信领域,尤其涉及一种指令调度方法及装置。
【背景技术】
[0002] 现有技术中,CPU (Central Processing Unit,中央处理器)中的各功能部件通常 是独立并行的,因此编译器基于CPU结构采用指令调度方法提高指令级并行。其中,指令调 度是一种指令并行执行的技术,编译器或者机器硬件通过调整指令的顺序来提高每拍内机 器执行指令的数量,所述拍为编译器在编译源程序时所模拟的机器执行指令的时钟周期。 现有编译技术中通常采用表调度算法来实现指令调度,通常采用一个候选指令队列。具体 的,在进行指令调度时,首先对需要调度的指令构建数据依赖图,该数据依赖图由若干个节 点组成,每个节点代表一条指令,该数据依赖图可以用来表示指令之间的依赖关系。然后计 算各条指令的优先级,接着逐拍对数据依赖图中的指令进行调度。指令调度初始时刻,从 所述数据依赖图中找出入度为零的指令加入到候选指令队列;并将其他候选指令队列置为 空;具体的,每拍的调度方法为:按照指令优先级依次从候选指令队列中选择指令填入指 令槽,并更新候选指令队列;对于未能选择到指令填入的指令槽,填入空操作指令;当调度 完一拍内的指令槽后,更新拍,更新所述候选指令队列,重复上述步骤进行一拍内的调度, 直到数据依赖图中的所有指令都完成调度则结束。
[0003] 随着多核处理器的出现,多核处理器是由多个单核处理器组成的,其中单核的结 构趋于简单,出现了串行的功能部件的组织形式,甚至是功能部件阵列。如果使用现有技术 中表调度的指令调度方法完成在多核处理器上的指令调度,在执行指令时就可能出现具有 依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况 发生,这些情况可能导致处理器运行错或者流水线的停顿,调度的正确性较低。
【发明内容】
[0004] 本发明的实施例提供一种信息显示方法及设备,能够
[0005] 为达到上述目的,本发明的实施例采用如下技术方案:
[0006] 第一方面,提供一种指令调度方法,应用于指令调度装置,包括:
[0007] 构建数据依赖图;
[0008] 分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字, 使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字 的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依 赖关系;
[0009] 其中,0彡k彡mXn,所述n表示一个超长指令字中指令槽的个数,所述n为大于 等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t 为大于等于1小于等于n-1的整数。
[0010] 结合第一方面,在第一种可实现方式中,在所述分别从所述数据依赖图中提取k 个指令进行调度得到每一拍的m个超长指令字之后,所述方法还包括:
[0011] 按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
[0012] 结合第一方面、第一种可实现方式,在第二种可实现方式中,
[0013] 在构建数据依赖图之后,所述方法还包括:
[0014] 建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指 令队列;
[0015] 初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
[0016] 结合第二种可实现方式,在第三种可实现方式中,所述分别从所述数据依赖图中 提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是 并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的 任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系包括:
[0017] 在进行第0拍调度时,
[0018] 在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度 为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
[0019] 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指 令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中 尚未填充的指令槽中放入空操作指令,0 < h < m ;
[0020] 从所述第1候选指令队列中删除所述h个指令;
[0021] 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
[0022] 执行下述步骤,q初始化为2 ;
[0023] a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每 个超长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依 赖关系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依 赖关系,但优先级最高且同时满足时间延迟和资源需求,〇 < h < m ;
[0024] b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
[0025] c.从所有候选指令队列中删除所述h个指令;
[0026] d.使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令 队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调 度的指令或第n+1候选指令队列中的指令被更新。
[0027] 结合第三种可实现方式,在第四种可实现方式中,所述分别从所述数据依赖图中 提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是 并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的 任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系还包括:
[0028] 在进行第P拍调度时,p为大于0的整数,
[0029] 从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选 指令队列中的指令放入前一个候选指令队列中;
[0030] 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指 令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中 尚未填充的指令槽中放入空操作指令,〇 < h < m ;
[0031] 从所述第1候选指令队列中删除所述h个指令;
[0032] 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
[0033] 执行下述步骤:
[0034] 执行下述步骤,q初始化为2 ;
[0035] a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每 个超长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依 赖关系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依 赖关系,但优先级最高且同时满足时间延迟和资源需求,〇 < h < m ;
[0036] b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
[0037] c.从所有候选指令队列中删除所述h个指令;
[0038] d.使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令 队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调 度的指令或第n+1候选指令队列中的指令被更新。
[0039] 结合第三、四种可实现方式,在第五种可实现方式中,
[0040] 所述与第q-1个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源 需求包括:
[0041] 与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需 求。
[0042] 第二方面,提供一种指令调度装置,包括:
[0043] 构建单元,用于构建数据依赖图;
[0044] 调度单元,用于分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m 个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的 任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指 令之间不存在依赖关系;
[0045] 其中,0彡k彡mXn,所述n表示一个超长指令字中指令槽的个数,所述n为大于 等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t 为大于等于1小于等于n-1的整数。
[0046] 结合第二方面,在第一种可实现方式中,所述指令调度装置还包括:
[0047] 执行单元,用于按照所述超长指令字中各个指令的排列顺序执行所述超长指令字 中的各个指令。
[0048] 结合第二方面、第一种可实现方式,在第二种可实现方式中,
[0049] 所述指令调度装置还包括:
[0050] 建立单元,用于建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至 第n+1候选指令队列;
[0051] 初始化单元,用于初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均 为空。
[0052] 结合第二种可实现方式,在第三种可实现方式中,所述调度单元具体用于:
[0053] 在进行第0拍调度时,
[0054] 在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度 为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
[0055] 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指 令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中 尚未填充的指令槽中放入空操作指令,〇 < h < m ;
[0056] 从所述第1候选指令队列中删除所述h个指令;
[0057] 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
[0058] 执行下述步骤,q初始化为2 ;
[0059] a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每 个超长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依 赖关系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依 赖关系,但优先级最高且同时满足时间延迟和资源需求,〇 < h < m ;
[0060] b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令; [0061] c.从所有候选指令队列中删除所述h个指令;
[0062] d.使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令 队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调 度的指令或第n+1候选指令队列中的指令被更新。
[0063] 结合第三种可实现方式,在第四种可实现方式中,所述调度单元具体用于:
[0064] 在进行第P拍调度时,p为大于0的整数,
[0065] 从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选 指令队列中的指令放入前一个候选指令队列中;
[0066] 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指 令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中 尚未填充的指令槽中放入空操作指令,〇 < h < m ;
[0067] 从所述第1候选指令队列中删除所述h个指令;
[0068] 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
[0069] 执行下述步骤:
[0070] 执行下述步骤,q初始化为2 ;
[0071] a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每 个超长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依 赖关系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依 赖关系,但优先级最高且同时满足时间延迟和资源需求,〇 < h < m ;
[0072] b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
[0073] c.从所有候选指令队列中删除所述h个指令;
[0074] d.使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令 队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调 度的指令或第n+1候选指令队列中的指令被更新。
[0075] 结合第三、四种可实现方式,在第五种可实现方式中,
[0076] 所述与第q_l个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源 需求包括:
[0077] 与第q_l个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需 求。
[0078] 本发明实施例提供一种指令调度方法及装置,包括:构建数据依赖图;分别从所 述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超 长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽 的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;其中, 0彡k彡mXn,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数, 所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小 于等于n-1的整数。这样一来,使得同一拍内的超长指令字之间是并行执行的关系,相邻两 拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1 个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令 时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本 条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
【专利附图】
【附图说明】
[0079] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0080] 图1为本发明实施例提供的一种指令调度方法流程示意图;
[0081] 图2为本发明实施例提供的一种数据依赖图的示意图;
[0082] 图3为本发明实施例提供的另一种指令调度方法流程示意图;
[0083] 图4为本发明实施例提供的另一种数据依赖图的示意图;
[0084] 图5为本发明实施例提供的一种指令发射执行示意图;
[0085] 图6为本发明实施例提供的一种指令调度装置结构示意图;
[0086] 图7为本发明实施例提供的另一种指令调度装置结构示意图;
[0087] 图8为本发明实施例提供的又一种指令调度装置结构示意图;
[0088] 图9为本发明实施例提供的又再一种指令调度装置结构示意图。
【具体实施方式】
[0089] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0090] 本发明实施例提供一种指令调度方法,应用于指令调度装置,如图1所示,包括:
[0091] 步骤101、构建数据依赖图。
[0092] 在本发明实施例中,所述数据依赖图可以为DAG (Directed acyclic graph,有向 无环图),所述数据依赖图的构建方法与现有技术相同,本发明对此不做赘述。
[0093] 步骤102、分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长 指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超 长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间 不存在依赖关系。
[0094] 所述依赖关系可以包括:正相关、反相关及输出相关,所述正相关的依赖关系也 称为真依赖关系,所述真依赖关系包括一对一依赖关系、多对一依赖关系、一对多依赖关系 以及多对多依赖关系。所述一对一依赖关系为存在先后顺序的两条指令,前一条的结果数 仅为后面一条指令所使用,而所述后面一条指令的某一个操作数确定是由前面一条所定义 的。所述多对一依赖关系为存在先后顺序的多条指令,前面多条的结果数仅为后面一条指 令所使用,而所述后面一条指令的某一个操作数确定是由前面多条所定义的。所述一对多 依赖关系为存在先后顺序的多条指令,前面一条的结果数为后面多条指令所使用,而所述 后面多条指令的某一个操作数确定是由前面一条所定义的。所述多对多依赖关系为存在先 后顺序的多条指令,前面多条的结果数为后面多条指令所使用,而所述后面多条指令的某 一个操作数是由前面多条指令所定义的。
[0095] 其中,0彡k彡mXn,所述n表示一个超长指令字中指令槽的个数,所述n为大于 等于1的整数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。 [0096] 需要说明的是,所述指令调度装置可以为编译器,该指令调度方法适用于具有串 行功能部件处理器的编译器的指令调度。该指令调度装置以拍为单位进行指令调度,每拍 包含m个超长指令字,即所述指令调度装置的发射宽度为m,每个超长指令字包括n个指令 槽,即能放入n个指令。本实施例中的超长指令字为VLIW(Very Long Instruction Word, 超长指令字),是利用指令级并行的一种体系架构。
[0097] 这样一来,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一 拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽 的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不 会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令 执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
[0098] 特别的,本发明实施例提供的指令调度方法,为了使得同一拍内的超长指令字之 间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一 拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,可以通过建立多个候 选指令队列来实现指令的调度,示例的,在构建数据依赖图之后,可以建立n+1个候选指令 队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列;然后初始化所述n+1个 候选指令队列,使所述n+1个候选指令队列均为空。
[0099] 其中,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱 结点已被调度。在本实施例中,所述已被调度的指令指的是已放入超长指令字的指令槽中 的指令。示例的,指令a的前驱结点为数据依赖图上所有指向指令a的有向箭头的反向端 的结点。所述指令a入度为零指指令a在数据依赖图上没有前驱结点或者其前驱结点已被 调度。如图2所示,本实施例中,数据依赖图为有向无环图,由一组节点和连接节点的有向 无环边组成。在该指令调度方法的数据依赖图中,各节点可以表示机器指令,有向无环边代 表指令之间的依赖关系。所述依赖关系有正相关、反相关及输出相关,所述正相关也称真依 赖关系。所述各节点的边上标有表示依赖的权值信息,即延迟,该延迟信息表示前一条指 令发射到后一条指令发射必须间隔的时间。如图2中所示的1表示指令al发射到指令a2 发射必须间隔的时间为1个时钟周期。同理可知图2中2表示指令aO发射到指令a2发射 必须间隔的时间为2个时钟周期,图2中3表示指令a2发射到指令a3发射必须间隔的时 间为3个时钟周期。同时,所述有向无环边为有向箭头形式时,所述有向箭头表示指令间的 依赖关系,该有向ftr头由如驱指令指向后继指令,即后继指令的执彳丁依赖于如驱指令,如aO 为a2的前驱指令,a2为aO的后继指令。
[0100] 在进行第〇拍调度时,
[0101] 在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度 为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
[0102] 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指 令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中 尚未填充的指令槽中放入空操作指令,0 < h < m ;
[0103] 从所述第1候选指令队列中删除所述h个指令;
[0104] 需要说明的是,由于在进行第0拍调度时,调度了所述h个指令,并且从所述第1 候选指令队列中删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖 图中出现了在所述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新 增的入度为零的指令不在第1候选队列中,因此可以在所述数据依赖图中提取新增的入度 为零的指令得到第2候选指令队列。
[0105] 执行下述步骤,q初始化为2 ;
[0106] al.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入 每个超长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真 依赖关系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真 依赖关系,但优先级最高且同时满足时间延迟和资源需求,〇 < h < m ;
[0107] bl.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
[0108] cl.从所有候选指令队列中删除所述h个指令;
[0109] dl.使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指 令队列,重复步骤al至dl,直至所述第1候选指令队列至所述第q候选指令队列中不存在 未调度的指令或第n+1候选指令队列中的指令被更新。其中,所述第n+1候选指令队列中 的指令被更新表示在q=n+l时,在所述数据依赖图中提取新增的入度为零的指令得到了第 n+1候选指令队列,这样一拍的调度就结束了。
[0110] 需要说明的是,由于步骤al调度了所述h个指令,步骤cl从所有候选指令队列中 删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖图中出现了在所 述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新增的入度为零的 指令不在第q候选队列中,因此,在步骤dl中使q=q+l,在所述数据依赖图中提取新增的入 度为零的指令得到第q候选指令队列。
[0111] 在进行第P拍调度时,P为大于〇的整数,
[0112] 从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选 指令队列中的指令放入前一个候选指令队列中;
[0113] 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指 令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中 尚未填充的指令槽中放入空操作指令,0 < h < m ;
[0114] 从所述第1候选指令队列中删除所述h个指令;
[0115] 需要说明的是,由于在进行第〇拍调度时,调度了所述h个指令,并且从所述第1 候选指令队列中删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖 图中出现了在所述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新 增的入度为零的指令不在第1候选队列中,因此可以在所述数据依赖图中提取新增的入度 为零的指令得到第2候选指令队列。
[0116] 执行下述步骤:
[0117] 执行下述步骤,q初始化为2 ;
[0118] a2.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入 每个超长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有的 真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有 的真依赖关系,但优先级最高且同时满足时间延迟和资源需求,〇 < h < m ;
[0119] b2.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
[0120] c2.从所有候选指令队列中删除所述h个指令;
[0121] d2.使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指 令队列,重复步骤a2至d2,直至所述第1候选指令队列至所述第q候选指令队列中不存在 未调度的指令或第n+1候选指令队列中的指令被更新。其中,所述第n+1候选指令队列中 的指令被更新表示在q=n+l时,在所述数据依赖图中提取新增的入度为零的指令得到了第 n+1候选指令队列。
[0122] 需要说明的是,由于步骤a2调度了所述h个指令,步骤c2从所有候选指令队列中 删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖图中出现了在所 述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新增的入度为零的 指令不在第q候选队列中,因此,在步骤d2中使q=q+l,在所述数据依赖图中提取新增的入 度为零的指令得到第q候选指令队列。
[0123] 特别的,在步骤al和a2中按照所述h个指令满足:与第q_l个指令槽中的指令具 有一对一的真依赖关系且同时满足时间延迟和资源需求来调度指令时,可以节省存放前一 指令槽中指令的结果数的寄存器,节省硬件资源,提高性能。
[0124] 计算所述数据依赖图中各指令的优先级可以根据一定的启发式规则进行计算,所 述启发式规则可以包括指令的最大距离、指令的执行延迟、指令的最早开始时间、指令的最 晚开始时间、是否关键路径上的指令等,不同的编译器可能选择不同的启发式规则。
[0125] 所述真依赖关系包括一对一依赖关系、多对一依赖关系、一对多依赖关系以及多 对多依赖关系。所述一对一依赖关系为存在先后顺序的两条指令,前一条的结果数仅为后 面一条指令所使用,而所述后面一条指令的某一个操作数确定是由前面一条所定义的。示 例的,如图2所示,指令a2与指令a3满足一对一依赖关系,即指令a2的结果数仅被a3所使 用,指令a3的某个操作数确定由a2所定义。指令a0与指令a2满足一对一依赖关系,指令 a0的结果数仅被a2所使用,指令a2的某个操作数确定由a0所定义。指令al与指令a2满 足一对一依赖关系,指令al的结果数仅被a2所使用,指令a2的另一个操作数确定由al所 定义。需要说明的是,在本发明实施例中,进行指令调度时,判断所述h个指令满足的条件 中所述与第q_l个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求包括: 与第q_l个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。这样, 在存在多个指令满足真依赖关系时,可以优先调度与前一指令槽的指令满足一对一依赖关 系的指令,这样可以节省一个存放所述前一指令槽的指令的结果数的寄存器,简化指令调 度的过程。
[0126] 特别的,在每调度完一个指令之后,指令调度装置中的可用资源都会发生变化,所 述可用资源包括CPU中执行指令的功能部件、寄存器、指令窗口等。在对每个指令进行调度 前,调度器需要查询资源使用表来得到适合的下一个指令的调度,所述资源使用表中包括 了当前机器的可用资源,该资源使用表是实时变化的,反映了各资源被释放的时间。因此, 在执行步骤102时,指令调度装置不但需要判断所述存在依赖关系的两条指令之间是否满 足延迟时间,而且需要判断当前CPU提供的资源是否满足被调度的各条指令的资源需求。
[0127] 在步骤102之后,所述方法还包括:
[0128] 按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
[0129] 本发明实施例提供另一种指令调度方法,应用于指令调度装置,假设该指令调度 装置以拍为单位进行指令调度,每拍包含1个或2个超长指令字,即m=l或m=2,每个超长指 令字包括4个指令槽。如图3所示,所述方法包括:
[0130] 步骤301、构建数据依赖图。
[0131] 数据依赖图中的指令为:13〇、131、匕2、〇0、〇1、〇2、〇3及〇4。假设根据上述指令的各 指令间的依赖关系构建得到的数据依赖图如图4所示。
[0132] 步骤302、计算所述数据依赖图中所有指令的优先级。
[0133] 如图4所示,假设按照图4所示的数据依赖图以及各指令间的延迟来计算各指令 的优先级。假设指令c4需要1个时钟周期完成,则其余指令的优先级可以为:
[0134] P (c4) =1 ;
[0135] P (c3) =2+P (c4) =3 ;
[0136] P (b2) =2+P (c4) =3 ;
[0137] P (c2) =3+P (c3) =6 ;
[0138] P (bl) =1+P (b2) =4 ;
[0139] P (cO) =1+P (c2) =7 ;
[0140] P (cl) =1+P (c2) =7 ;
[0141] P (bO) =1+P (bl) =5。
[0142] 需要说明的是P为代表指令的优先级。
[0143] 步骤303、建立5个候选指令队列。
[0144] 所述5个候选指令队列分别为第1至第5候选指令队列。
[0145] 步骤304、初始化所述5个候选指令队列,使所述5个候选指令队列均为空。
[0146] 步骤305、通过所述5个候选指令队列,根据数据依赖图进行指令调度。
[0147] 为了描述的简便,本发明实施例假设所有指令均满足资源需求。
[0148] 当m=l,即指令调度装置以拍为单位进行指令调度,每拍包含1个超长指令字,所 述指令调度装置的发射宽度为1时,具体步骤如下:
[0149] 如表1所示,在进行第0拍调度时,所述候选指令队列中的指令为b0、bl、b2、cO、 cl、c2、c3及c4,结合数据依赖图可以得到所述候选指令队列中当前入度为零的指令为b0、 c0及cl,所述第1候选指令队列包括指令b0、cO及cl,优先级分别为5, 7, 7。即第1候选 指令队列1〇0,(:1,13〇},第2,3,4,5候选指令队列都设置为空。
[0150] 对于第1个指令槽,从第1候选指令队列中按照优先级,可以选择调度c〇或者cl, 且都满足时间延迟要求,需要说明的是,当所述指令调度装置为具体的编译器时,可能会考 虑不同指令需要的功能部件的特征或其他因素,从而进一步判定cO和cl之间的优先级,本 实施例假设这里选择调度cO。调度完cO后,从所有候选指令队列中删除cO。检查数据依 赖图,cO的后继指令为c2,由于c2还依赖于cl,而cl尚未被调度,于是c2尚不能加入候 选队列。此时的候选指令队列依次为:Icl,b0},空,空,空,空。
[0151] 对于第2个指令槽,从第1,第2候选指令队列中选择指令,按照优先级优先调度 Cl,并且没有与Cl优先级相同的未调度指令,且Cl满足时间延迟要求,填入第2个指令槽。 调度完cl之后,从所有候选指令队列中删除cl。检查数据依赖图,cl的后继指令为c2,由 于c2所依赖的cO和cl都已经被调度,则将c2加入第3候选指令队列,为第3指令槽的调 度做好准备。候选指令队列依次为:{b0},空,{c2},空,空。
[0152] 对于第3个指令槽,从第1,第2,第3候选指令队列中选择指令,按照优先级优先 调度c2,并且没有与c2优先级相同的未调度指令,且由于c2依赖于cl和c0,需要在c0, cl 后一拍执行,c2填入第3个指令槽满足此延迟要求,因此c2满足时间延迟要求,填入第3个 指令槽。调度完c2之后,从所有候选指令队列中删除c2。检查数据依赖图,依赖于c2的 c3指令此时前驱已经被调度,而将c3指令加入第4候选指令队列,候选指令队列依次为: {b0},空,空,{c3},空。
[0153] 对于第4个指令槽,从第1,第2,第3,第4候选指令队列中选择指令,按照优先级 优先调度b0,并且没有与b0优先级相同的未调度指令,且由于b0不依赖于其他指令,b0填 入第4个指令槽满足此延迟要求,因此b0满足时间延迟要求,填入第4个指令槽。调度完 b0之后,从所有候选指令队列删除b0。检查数据依赖图,依赖于b0的bl指令此时前驱已 经被调度而将bl指令加入第5候选指令队列,候选指令队列依次为:空,空,空,{c3},{bl}。
[0154] 当第0拍结束时,第1,2, 3,4, 5候选指令队列依次为:空,空,空,{c3},{bl}。
[0155] 表 1
[0156]
【权利要求】
1. 一种指令调度方法,应用于指令调度装置,其特征在于,包括: 构建数据依赖图; 分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得 同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第 t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关 系; 其中,0 < k < mXn,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于 1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于 等于1小于等于n-1的整数。
2. 根据权利要求1所述的方法,其特征在于,在所述分别从所述DAG数据依赖图中提取 k个指令进行调度得到每一拍的m个超长指令字之后,所述方法还包括: 按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
3. 根据权利要求1或2所述的方法,其特征在于, 在构建数据依赖图之后,所述方法还包括: 建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队 列; 初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
4. 根据权利要求3所述的方法,其特征在于,所述分别从所述数据依赖图中提取k个指 令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的 关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指 令字的第t+1个指令槽的指令之间不存在依赖关系包括: 在进行第〇拍调度时, 在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零 的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度; 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分 别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 从所述第1候选指令队列中删除所述h个指令; 在所述数据依赖图中提取新增入度为零的指令得到第2候选指令队列; 执行下述步骤,q初始化为2 ; a. 从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超 长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依赖关 系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依赖关 系,但优先级最高且同时满足时间延迟和资源需求,〇 < m ; b. 在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令; c. 从所有候选指令队列中删除所述h个指令; d. 使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列, 重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指 令或第n+1候选指令队列中的指令被更新。
5. 根据权利要求4所述的方法,其特征在于,所述分别从所述数据依赖图中提取k个指 令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的 关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指 令字的第t+1个指令槽的指令之间不存在依赖关系还包括: 在进行第P拍调度时,P为大于〇的整数, 从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令 队列中的指令放入前一个候选指令队列中; 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分 别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 从所述第1候选指令队列中删除所述h个指令; 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列; 执行下述步骤: 执行下述步骤,q初始化为2 ; a. 从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超 长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依赖关 系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依赖关 系,但优先级最高且同时满足时间延迟和资源需求,〇 < m ; b. 在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令; c. 从所有候选指令队列中删除所述h个指令; d. 使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列, 重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指 令或第n+1候选指令队列中的指令被更新。
6. 根据权利要求4或5所述的方法,其特征在于, 所述与第q_l个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求包 括: 与第q_l个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
7. -种指令调度装置,其特征在于,包括: 构建单元,用于构建数据依赖图; 调度单元,用于分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超 长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一 超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之 间不存在依赖关系; 其中,0 < k < mXn,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于 1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于 等于1小于等于n-1的整数。
8. 根据权利要求7所述的指令调度装置,其特征在于,所述指令调度装置还包括: 执行单元,用于按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的 各个指令。
9. 根据权利要求7或8所述的指令调度装置,其特征在于, 所述指令调度装置还包括: 建立单元,用于建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第 n+1候选指令队列; 初始化单元,用于初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为 空。
10. 根据权利要求9所述的指令调度装置,其特征在于,所述调度单元具体用于: 在进行第〇拍调度时, 在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零 的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度; 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分 别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 从所述第1候选指令队列中删除所述h个指令; 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列; 执行下述步骤,q初始化为2 ; a. 从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超 长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依赖关 系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依赖关 系,但优先级最高且同时满足时间延迟和资源需求,〇 < m ; b. 在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令; c. 从所有候选指令队列中删除所述h个指令; d. 使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列, 重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指 令或第n+1候选指令队列中的指令被更新。
11. 根据权利要求10所述的指令调度装置,其特征在于,所述调度单元具体用于: 在进行第P拍调度时,P为大于〇的整数, 从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令 队列中的指令放入前一个候选指令队列中; 从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分 别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未 填充的指令槽中放入空操作指令,〇 < h < m ; 从所述第1候选指令队列中删除所述h个指令; 在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列; 执行下述步骤: 执行下述步骤,q初始化为2; a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超 长指令字的第q个指令槽中,所述h个指令满足:与第q_l个指令槽中的指令具有真依赖关 系且同时满足时间延迟和资源需求,或,不与所述第q_l个指令槽中的指令具有真依赖关 系,但优先级最高且同时满足时间延迟和资源需求,0 < m ; b. 在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令; c. 从所有候选指令队列中删除所述h个指令; d. 使q=q+l,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列, 重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指 令或第n+1候选指令队列中的指令被更新。
12.根据权利要求10或11所述的指令调度装置,其特征在于, 所述与第q_l个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源需求 包括: 与第q_l个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
【文档编号】G06F9/48GK104424026SQ201310367751
【公开日】2015年3月18日 申请日期:2013年8月21日 优先权日:2013年8月21日
【发明者】黄磊, 连瑞琦 申请人:华为技术有限公司, 中国科学院计算技术研究所