CN104424026B - 一种指令调度方法及装置 - Google Patents

一种指令调度方法及装置 Download PDF

Info

Publication number
CN104424026B
CN104424026B CN201310367751.2A CN201310367751A CN104424026B CN 104424026 B CN104424026 B CN 104424026B CN 201310367751 A CN201310367751 A CN 201310367751A CN 104424026 B CN104424026 B CN 104424026B
Authority
CN
China
Prior art keywords
instruction
candidate
slots
queue
word
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
CN201310367751.2A
Other languages
English (en)
Other versions
CN104424026A (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.)
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Original Assignee
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
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 Huawei Technologies Co Ltd, Institute of Computing Technology of CAS filed Critical Huawei Technologies Co Ltd
Priority to CN201310367751.2A priority Critical patent/CN104424026B/zh
Priority to PCT/CN2014/083603 priority patent/WO2015024432A1/zh
Publication of CN104424026A publication Critical patent/CN104424026A/zh
Application granted granted Critical
Publication of CN104424026B publication Critical patent/CN104424026B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Abstract

本发明实施例提供一种指令调度方法及装置,涉及通信领域,能够使得处理器或流水线正常运行,提高了调度的正确性。包括:构建数据依赖图;分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n‑1的整数。本发明实施例提供一种指令调度方法及装置用于指令的调度。

Description

一种指令调度方法及装置
技术领域
本发明涉及通信领域,尤其涉及一种指令调度方法及装置。
背景技术
现有技术中,CPU(Central Processing Unit,中央处理器)中的各功能部件通常是独立并行的,因此编译器基于CPU结构采用指令调度方法提高指令级并行。其中,指令调度是一种指令并行执行的技术,编译器或者机器硬件通过调整指令的顺序来提高每拍内机器执行指令的数量,所述拍为编译器在编译源程序时所模拟的机器执行指令的时钟周期。现有编译技术中通常采用表调度算法来实现指令调度,通常采用一个候选指令队列。具体的,在进行指令调度时,首先对需要调度的指令构建数据依赖图,该数据依赖图由若干个节点组成,每个节点代表一条指令,该数据依赖图可以用来表示指令之间的依赖关系。然后计算各条指令的优先级,接着逐拍对数据依赖图中的指令进行调度。指令调度初始时刻,从所述数据依赖图中找出入度为零的指令加入到候选指令队列;并将其他候选指令队列置为空;具体的,每拍的调度方法为:按照指令优先级依次从候选指令队列中选择指令填入指令槽,并更新候选指令队列;对于未能选择到指令填入的指令槽,填入空操作指令;当调度完一拍内的指令槽后,更新拍,更新所述候选指令队列,重复上述步骤进行一拍内的调度,直到数据依赖图中的所有指令都完成调度则结束。
随着多核处理器的出现,多核处理器是由多个单核处理器组成的,其中单核的结构趋于简单,出现了串行的功能部件的组织形式,甚至是功能部件阵列。如果使用现有技术中表调度的指令调度方法完成在多核处理器上的指令调度,在执行指令时就可能出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,这些情况可能导致处理器运行错或者流水线的停顿,调度的正确性较低。
发明内容
本发明的实施例提供一种信息显示方法及设备,能够
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供一种指令调度方法,应用于指令调度装置,包括:
构建数据依赖图;
分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;
其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。
结合第一方面,在第一种可实现方式中,在所述分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字之后,所述方法还包括:
按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
结合第一方面、第一种可实现方式,在第二种可实现方式中,
在构建数据依赖图之后,所述方法还包括:
建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列;
初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
结合第二种可实现方式,在第三种可实现方式中,所述分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系包括:
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
结合第三种可实现方式,在第四种可实现方式中,所述分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系还包括:
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤:
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
结合第三、四种可实现方式,在第五种可实现方式中,
所述与第q-1个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源需求包括:
与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
第二方面,提供一种指令调度装置,包括:
构建单元,用于构建数据依赖图;
调度单元,用于分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;
其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。
结合第二方面,在第一种可实现方式中,所述指令调度装置还包括:
执行单元,用于按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
结合第二方面、第一种可实现方式,在第二种可实现方式中,
所述指令调度装置还包括:
建立单元,用于建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列;
初始化单元,用于初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
结合第二种可实现方式,在第三种可实现方式中,所述调度单元具体用于:
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
结合第三种可实现方式,在第四种可实现方式中,所述调度单元具体用于:
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤:
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
结合第三、四种可实现方式,在第五种可实现方式中,
所述与第q-1个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源需求包括:
与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
本发明实施例提供一种指令调度方法及装置,包括:构建数据依赖图;分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。这样一来,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种指令调度方法流程示意图;
图2为本发明实施例提供的一种数据依赖图的示意图;
图3为本发明实施例提供的另一种指令调度方法流程示意图;
图4为本发明实施例提供的另一种数据依赖图的示意图;
图5为本发明实施例提供的一种指令发射执行示意图;
图6为本发明实施例提供的一种指令调度装置结构示意图;
图7为本发明实施例提供的另一种指令调度装置结构示意图;
图8为本发明实施例提供的又一种指令调度装置结构示意图;
图9为本发明实施例提供的又再一种指令调度装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种指令调度方法,应用于指令调度装置,如图1所示,包括:
步骤101、构建数据依赖图。
在本发明实施例中,所述数据依赖图可以为DAG(Directed acyclic graph,有向无环图),所述数据依赖图的构建方法与现有技术相同,本发明对此不做赘述。
步骤102、分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系。
所述依赖关系可以包括:正相关、反相关及输出相关,所述正相关的依赖关系也称为真依赖关系,所述真依赖关系包括一对一依赖关系、多对一依赖关系、一对多依赖关系以及多对多依赖关系。所述一对一依赖关系为存在先后顺序的两条指令,前一条的结果数仅为后面一条指令所使用,而所述后面一条指令的某一个操作数确定是由前面一条所定义的。所述多对一依赖关系为存在先后顺序的多条指令,前面多条的结果数仅为后面一条指令所使用,而所述后面一条指令的某一个操作数确定是由前面多条所定义的。所述一对多依赖关系为存在先后顺序的多条指令,前面一条的结果数为后面多条指令所使用,而所述后面多条指令的某一个操作数确定是由前面一条所定义的。所述多对多依赖关系为存在先后顺序的多条指令,前面多条的结果数为后面多条指令所使用,而所述后面多条指令的某一个操作数是由前面多条指令所定义的。
其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。
需要说明的是,所述指令调度装置可以为编译器,该指令调度方法适用于具有串行功能部件处理器的编译器的指令调度。该指令调度装置以拍为单位进行指令调度,每拍包含m个超长指令字,即所述指令调度装置的发射宽度为m,每个超长指令字包括n个指令槽,即能放入n个指令。本实施例中的超长指令字为VLIW(Very Long Instruction Word,超长指令字),是利用指令级并行的一种体系架构。
这样一来,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
特别的,本发明实施例提供的指令调度方法,为了使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,可以通过建立多个候选指令队列来实现指令的调度,示例的,在构建数据依赖图之后,可以建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列;然后初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
其中,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度。在本实施例中,所述已被调度的指令指的是已放入超长指令字的指令槽中的指令。示例的,指令a的前驱结点为数据依赖图上所有指向指令a的有向箭头的反向端的结点。所述指令a入度为零指指令a在数据依赖图上没有前驱结点或者其前驱结点已被调度。如图2所示,本实施例中,数据依赖图为有向无环图,由一组节点和连接节点的有向无环边组成。在该指令调度方法的数据依赖图中,各节点可以表示机器指令,有向无环边代表指令之间的依赖关系。所述依赖关系有正相关、反相关及输出相关,所述正相关也称真依赖关系。所述各节点的边上标有表示依赖的权值信息,即延迟,该延迟信息表示前一条指令发射到后一条指令发射必须间隔的时间。如图2中所示的1表示指令a1发射到指令a2发射必须间隔的时间为1个时钟周期。同理可知图2中2表示指令a0发射到指令a2发射必须间隔的时间为2个时钟周期,图2中3表示指令a2发射到指令a3发射必须间隔的时间为3个时钟周期。同时,所述有向无环边为有向箭头形式时,所述有向箭头表示指令间的依赖关系,该有向箭头由前驱指令指向后继指令,即后继指令的执行依赖于前驱指令,如a0为a2的前驱指令,a2为a0的后继指令。
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
需要说明的是,由于在进行第0拍调度时,调度了所述h个指令,并且从所述第1候选指令队列中删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖图中出现了在所述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新增的入度为零的指令不在第1候选队列中,因此可以在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列。
执行下述步骤,q初始化为2;
a1.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b1.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c1.从所有候选指令队列中删除所述h个指令;
d1.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a1至d1,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。其中,所述第n+1候选指令队列中的指令被更新表示在q=n+1时,在所述数据依赖图中提取新增的入度为零的指令得到了第n+1候选指令队列,这样一拍的调度就结束了。
需要说明的是,由于步骤a1调度了所述h个指令,步骤c1从所有候选指令队列中删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖图中出现了在所述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新增的入度为零的指令不在第q候选队列中,因此,在步骤d1中使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列。
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
需要说明的是,由于在进行第0拍调度时,调度了所述h个指令,并且从所述第1候选指令队列中删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖图中出现了在所述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新增的入度为零的指令不在第1候选队列中,因此可以在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列。
执行下述步骤:
执行下述步骤,q初始化为2;
a2.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有的真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b2.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c2.从所有候选指令队列中删除所述h个指令;
d2.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a2至d2,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。其中,所述第n+1候选指令队列中的指令被更新表示在q=n+1时,在所述数据依赖图中提取新增的入度为零的指令得到了第n+1候选指令队列。
需要说明的是,由于步骤a2调度了所述h个指令,步骤c2从所有候选指令队列中删除所述h个指令,相应的,所述h个指令为已调度指令,因此在数据依赖图中出现了在所述h个指令被调度后入度为零的指令,即新增的入度为零的指令,这些新增的入度为零的指令不在第q候选队列中,因此,在步骤d2中使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列。
特别的,在步骤a1和a2中按照所述h个指令满足:与第q-1个指令槽中的指令具有一对一的真依赖关系且同时满足时间延迟和资源需求来调度指令时,可以节省存放前一指令槽中指令的结果数的寄存器,节省硬件资源,提高性能。
计算所述数据依赖图中各指令的优先级可以根据一定的启发式规则进行计算,所述启发式规则可以包括指令的最大距离、指令的执行延迟、指令的最早开始时间、指令的最晚开始时间、是否关键路径上的指令等,不同的编译器可能选择不同的启发式规则。
所述真依赖关系包括一对一依赖关系、多对一依赖关系、一对多依赖关系以及多对多依赖关系。所述一对一依赖关系为存在先后顺序的两条指令,前一条的结果数仅为后面一条指令所使用,而所述后面一条指令的某一个操作数确定是由前面一条所定义的。示例的,如图2所示,指令a2与指令a3满足一对一依赖关系,即指令a2的结果数仅被a3所使用,指令a3的某个操作数确定由a2所定义。指令a0与指令a2满足一对一依赖关系,指令a0的结果数仅被a2所使用,指令a2的某个操作数确定由a0所定义。指令a1与指令a2满足一对一依赖关系,指令a1的结果数仅被a2所使用,指令a2的另一个操作数确定由a1所定义。需要说明的是,在本发明实施例中,进行指令调度时,判断所述h个指令满足的条件中所述与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求包括:与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。这样,在存在多个指令满足真依赖关系时,可以优先调度与前一指令槽的指令满足一对一依赖关系的指令,这样可以节省一个存放所述前一指令槽的指令的结果数的寄存器,简化指令调度的过程。
特别的,在每调度完一个指令之后,指令调度装置中的可用资源都会发生变化,所述可用资源包括CPU中执行指令的功能部件、寄存器、指令窗口等。在对每个指令进行调度前,调度器需要查询资源使用表来得到适合的下一个指令的调度,所述资源使用表中包括了当前机器的可用资源,该资源使用表是实时变化的,反映了各资源被释放的时间。因此,在执行步骤102时,指令调度装置不但需要判断所述存在依赖关系的两条指令之间是否满足延迟时间,而且需要判断当前CPU提供的资源是否满足被调度的各条指令的资源需求。
在步骤102之后,所述方法还包括:
按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
本发明实施例提供另一种指令调度方法,应用于指令调度装置,假设该指令调度装置以拍为单位进行指令调度,每拍包含1个或2个超长指令字,即m=1或m=2,每个超长指令字包括4个指令槽。如图3所示,所述方法包括:
步骤301、构建数据依赖图。
数据依赖图中的指令为:b0、b1、b2、c0、c1、c2、c3及c4。假设根据上述指令的各指令间的依赖关系构建得到的数据依赖图如图4所示。
步骤302、计算所述数据依赖图中所有指令的优先级。
如图4所示,假设按照图4所示的数据依赖图以及各指令间的延迟来计算各指令的优先级。假设指令c4需要1个时钟周期完成,则其余指令的优先级可以为:
P(c4)=1;
P(c3)=2+P(c4)=3;
P(b2)=2+P(c4)=3;
P(c2)=3+P(c3)=6;
P(b1)=1+P(b2)=4;
P(c0)=1+P(c2)=7;
P(c1)=1+P(c2)=7;
P(b0)=1+P(b1)=5。
需要说明的是P为代表指令的优先级。
步骤303、建立5个候选指令队列。
所述5个候选指令队列分别为第1至第5候选指令队列。
步骤304、初始化所述5个候选指令队列,使所述5个候选指令队列均为空。
步骤305、通过所述5个候选指令队列,根据数据依赖图进行指令调度。
为了描述的简便,本发明实施例假设所有指令均满足资源需求。
当m=1,即指令调度装置以拍为单位进行指令调度,每拍包含1个超长指令字,所述指令调度装置的发射宽度为1时,具体步骤如下:
如表1所示,在进行第0拍调度时,所述候选指令队列中的指令为b0、b1、b2、c0、c1、c2、c3及c4,结合数据依赖图可以得到所述候选指令队列中当前入度为零的指令为b0、c0及c1,所述第1候选指令队列包括指令b0、c0及c1,优先级分别为5,7,7。即第1候选指令队列{c0,c1,b0},第2,3,4,5候选指令队列都设置为空。
对于第1个指令槽,从第1候选指令队列中按照优先级,可以选择调度c0或者c1,且都满足时间延迟要求,需要说明的是,当所述指令调度装置为具体的编译器时,可能会考虑不同指令需要的功能部件的特征或其他因素,从而进一步判定c0和c1之间的优先级,本实施例假设这里选择调度c0。调度完c0后,从所有候选指令队列中删除c0。检查数据依赖图,c0的后继指令为c2,由于c2还依赖于c1,而c1尚未被调度,于是c2尚不能加入候选队列。此时的候选指令队列依次为:{c1,b0},空,空,空,空。
对于第2个指令槽,从第1,第2候选指令队列中选择指令,按照优先级优先调度c1,并且没有与c1优先级相同的未调度指令,且c1满足时间延迟要求,填入第2个指令槽。调度完c1之后,从所有候选指令队列中删除c1。检查数据依赖图,c1的后继指令为c2,由于c2所依赖的c0和c1都已经被调度,则将c2加入第3候选指令队列,为第3指令槽的调度做好准备。候选指令队列依次为:{b0},空,{c2},空,空。
对于第3个指令槽,从第1,第2,第3候选指令队列中选择指令,按照优先级优先调度c2,并且没有与c2优先级相同的未调度指令,且由于c2依赖于c1和c0,需要在c0,c1后一拍执行,c2填入第3个指令槽满足此延迟要求,因此c2满足时间延迟要求,填入第3个指令槽。调度完c2之后,从所有候选指令队列中删除c2。检查数据依赖图,依赖于c2的c3指令此时前驱已经被调度,而将c3指令加入第4候选指令队列,候选指令队列依次为:{b0},空,空,{c3},空。
对于第4个指令槽,从第1,第2,第3,第4候选指令队列中选择指令,按照优先级优先调度b0,并且没有与b0优先级相同的未调度指令,且由于b0不依赖于其他指令,b0填入第4个指令槽满足此延迟要求,因此b0满足时间延迟要求,填入第4个指令槽。调度完b0之后,从所有候选指令队列删除b0。检查数据依赖图,依赖于b0的b1指令此时前驱已经被调度而将b1指令加入第5候选指令队列,候选指令队列依次为:空,空,空,{c3},{b1}。
当第0拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,空,{c3},{b1}。
表1
如表2所示,在进行第1拍调度时,当第1拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,于是,第1,2,3,4,5候选指令队列依次为:空,空,{c3},{b1},空。
对于第1个指令槽,从第1候选指令队列中按照优先级选择指令做调度,由于第1候选指令队列为空,没有指令可供调度,于是填入空操作(nop),候选指令队列不需要更新。
对于第2个指令槽,从第1,第2候选指令队列中按照优先级选择指令做调度,由于第1,第2候选指令队列为空,没有指令可供调度,于是填入空操作,候选指令队列不需要更新。
对于第3个指令槽,从第1,第2,第3候选指令队列中按照优先级选择指令做调度,其中第1,第2候选指令队列为空,第3候选指令队列包含c3指令,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第三个指令槽c3与c2的时间间隔为1,小于3拍,不满足时间延迟,因此不能调度c3,于是填入空操作,候选指令队列不需要更新。
对于第4个指令槽,从第1,第2,第3,第4候选指令队列中按照优先级选择指令做调度,其中第1,第2候选指令队列为空,第3候选指令队列包含c3指令,第4候选指令队列包含b1指令,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第四个指令槽c3与c2的时间间隔为2,小于3拍,因此c3不满足时间延迟,这里不能调度c3,而b1需要在b0之后一拍执行,因此b1满足延迟要求,于是填入b1指令。从所有候选指令队列删除b1。检查数据依赖图,依赖于b1的指令b2此时前驱已经被调度而将b2指令加入到第5候选指令队列。候选指令队列依次为:空,空,{c3},空,{b2}。
当第1拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,{c3},空,{b2}。
表2
如表3所示,在进行第2拍调度时,当第2拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,于是,第1,2,3,4,5候选指令队列依次为:空,{c3},空,{b2},空。
对于第1个指令槽,从第1候选指令队列中按照优先级选择指令做调度,由于第1候选指令队列为空,没有指令可供调度,于是填入空操作,候选指令队列不需要更新。
对于第2个指令槽,从第1,第2候选指令队列中按照优先级选择指令做调度,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第二个指令槽c3与c2的时间间隔为1,小于3拍,因此c3指令不满足时间延迟,这里不能调度c3,于是填入空操作,候选指令队列不需要更新。
对于第3个指令槽,从第1,第2,第3候选指令队列中按照优先级选择指令做调度,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第三个指令槽c3与c2的时间间隔为2,小于3拍,c3指令不满足时间延迟,这里不能调度c3,于是填入空操作,候选指令队列不需要更新。
对于第4个指令槽,从第1,第2,第3,第4候选指令队列中按照优先级选择指令做调度,第2候选指令队列包含c3指令,第4候选指令队列包含b2指令,按照依赖关系,c3必须在c2执行后的第三拍之后才能执行,而放在第四个指令槽c3与c2的时间间隔恰好为3拍,c3指令满足延迟要求,同时,按照依赖关系,b2必须在b1执行的下一拍及之后才能执行,而放在第四个指令槽b2与b1的时间间隔恰好为1拍,因此b2指令也满足延迟要求,按照优先级来选择一条指令,b2和c3优先级都为3,可任意选择一条填入第四个指令槽。在同等优先级情况下,考虑这2条指令是否有与前一指令槽具有一对一真依赖关系的指令,如果有则优先调度这样的指令到当下的指令槽,因为前一指令槽填入的是空操作,所以也不存在真依赖关系。假定这里调度了b2。于是填入b2指令,从所有候选指令队列中删除b2。检查数据依赖图,依赖于b2的指令c4由于也依赖于c3指令,而c3尚未被调度,于是c4指令尚不能加入到第5候选指令队列。候选指令队列依次为:空,{c3},空,空,空。
当第2拍结束时,第1,2,3,4,5候选指令队列依次为:空,{c3},空,空,空。
表3
如表4所示,在进行第3拍调度时,当第3拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,第1,2,3,4,5候选指令队列依次为:{c3},空,空,空,空。
对于第1个指令槽,第1候选指令队列包含c3指令,从第1候选指令队列中按照优先级选择指令做调度,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第一个指令槽c3与c2的时间间隔为1,小于3拍,c3指令不满足时间延迟,这里不能调度c3,于是填入空操作,候选指令队列不需要更新。
对于第2个指令槽,从第1,第2候选指令队列中按照优先级选择指令做调度,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第二个指令槽c3与c2的时间间隔为2,小于3拍,c3指令不满足延迟要求,这里不能调度c3,于是填入空操作,候选指令队列不需要更新。
对于第3个指令槽,从第1,第2,第3候选指令队列中按照优先级选择指令做调度,按照依赖关系,c3必须在c2执行的第三拍之后才能执行,而放在第三个指令槽c3与c2的时间间隔恰好为3,c3指令满足延迟要求,于是调度c3指令,从所有候选指令队列删除c3。检查数据依赖图,依赖于c3的指令c4因此前驱已经被调度,于是c4指令加入到第4候选指令队列。候选指令队列依次为:空,空,空,{c4},空。
对于第4个指令槽,从第1,第2,第3,第4候选指令队列中按照优先级选择指令做调度,按照依赖关系,c4必须在b2执行后的第二拍之后才能执行,也必须在c3执行后的第二拍之后才能执行,而放在第四个指令槽c4与b2的时间间隔为1拍,与c3的时间间隔也为1拍,,c4指令不满足延迟要求,,这里不能调度c4,于是填入空操作,候选指令队列不需要更新。
当第3拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,空,{c4},空。
表4
如表5所示,在进行第4拍调度时,当第4拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,于是,第1,2,3,4,5候选指令队列依次为:空,空,{c4},空,空。
对于第1个指令槽,从第1候选指令队列中按照优先级选择指令做调度,由于第1候选指令队列为空,没有指令可供调度,于是填入空操作,候选指令队列不需要更新。
对于第2个指令槽,从第1,第2候选指令队列中按照优先级选择指令做调度,由于第1,第2候选指令队列为空,没有指令可供调度,于是填入空操作,候选指令队列不需要更新。
对于第3个指令槽,从第1,第2,第3候选指令队列中按照优先级选择指令做调度,按照依赖关系,c4必须在b2执行后的第二拍之后才能执行,也必须在c3执行后的第二拍之后才能执行,而放在第三个指令槽c4与b2的时间间隔为1拍,与c3的时间间隔也为1拍,c4指令不满足延迟要求,这里不能调度c4,于是填入空操作,候选指令队列不需要更新。
对于第4个指令槽,从第1,第2,第3,第4候选指令队列中按照优先级选择指令做调度,其中第1,第2候选指令队列为空,第3候选指令队列包含c4指令,按照依赖关系,c4必须在b2执行后的第二拍及之后才能执行,也必须在c3执行后的第二拍及之后才能执行,而放在第四个指令槽c4与b2的时间间隔为2拍,与c3的时间间隔也为2拍,c4指令满足时间延迟,于是填入c4。从所有候选队列删除c4。检查数据依赖图,由于没有其他未调度指令,所以候选指令队列没有新指令加入。
当第4拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,空,空,空。数据依赖图上的指令都已经被调度了,此时调度结束。
表5
当m=2,即指令调度装置以拍为单位进行指令调度,每拍包含2个超长指令字,所述指令调度装置的发射宽度为2时,具体步骤如下:
如表6所示,在进行第0拍调度时,第1,2,3,4,5候选指令队列内容依次为:{c0,c1,b0},空,空,空,空。
对于2个超长指令字的第一个指令槽,从第1候选指令队列中按照优先级,可以选择调度c0或者c1,且都满足时间延迟要求,假设这里选择调度c0和c1分别放在两个超长指令字的第一个指令槽内。调度完c0和c1后,从所有候选指令队列中删除c0和c1,并检查数据依赖图将依赖前驱已经被调度的c2加入第2候选指令队列,为调度第2个指令槽做好准备。此时的候选指令队列依次为:{b0},{c2},空,空,空。
对于2个超长指令字的第二个指令槽,从第1,第2候选指令队列中选择指令。按照指令的优先级,优先调度c2,由于c2指令的一个操作数必定来自c0的结果数,具有一对一依赖关系,且满足时间延迟要求,因此,调度在第一个超长指令字的第二个指令槽;然后调度b0,满足时间延迟要求,调度在第二个超长指令字的第二个指令槽。调度完c2和b0之后,从所有候选指令队列中删除c2和b0,并检查数据依赖图将依赖前驱已经被调度的b1和c3加入第3候选指令队列,为调度第三个指令槽做好准备。候选指令队列依次为:空,空,{b1,c3},空,空。
对于2个超长指令字的第三个指令槽,从第1,第2,第3候选指令队列中选择指令。按照指令的优先级,优先调度b1,满足时间延迟要求,可以放在本拍内任一超长指令字的第三个指令槽,考虑到b1的操作数必定来自于b0的结果数,且具有一对一依赖关系,调度b1在第二个超长指令字的第三个指令槽,这样可以节省一个存放b0结果数的寄存器;然后考虑调度c3,c3依赖于c2,需要间隔c2的执行至少3拍,这里不满足时间延迟要求,不能调度在本指令槽,于是为第一个超长指令字的第三个指令槽填空操作。调度完之后,从所有候选指令队列中删除b1,并检查数据依赖图将依赖前驱已经被调度的b2加入第4候选指令队列,为调度第四个指令槽做好准备。候选指令队列依次为:空,空,{c3},{b2},空。
对于2个超长指令字的第四个指令槽,从第1,第2,第3,第4候选指令队列中选择指令。按照指令的优先级,b2和c3优先级相同。先考虑调度c3,c3必须在c2执行至少3拍后执行,这里不满足时间延迟要求,不能放在本指令槽。考虑b2,满足时间延迟要求,考虑到b2的操作数必定来自于b1的结果数,且具有一对一的依赖关系,于是调度b2在第二个超长指令字的第四个指令槽,这样可以节省一个存放b1结果数的寄存器。然后为第一个超长指令字的第四个指令槽填空操作。调度完之后,从所有候选指令队列中删除b2,尚未被调度的指令有c3和c4,c3已经在候选队列中,而c4由于其一前驱c3尚未被调度,故不能加入候选队列。于是,候选指令队列依次为:空,空,{c3},空,空。
当第0拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,{c3},空,空。
表6
如表7所示,在进行第1拍调度时,当第1拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,于是,第1,2,3,4,5候选指令队列内容依次为:空,{c3},空,空,空。
对于2个超长指令字的第一个指令槽,从第1候选指令队列中按照优先级选择,第1候选指令队列为空,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,{c3},空,空,空。
对于2个超长指令字的第二个指令槽,从第1,第2候选指令队列中选择指令,由于c3距离c2执行一拍,不满足时间延迟要求,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,{c3},空,空,空。
对于2个超长指令字的第三个指令槽,从第1,第2,第3候选指令队列中选择指令,考察c3,不满足时间延迟要求(此时距离c2执行二拍),于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,{c3},空,空,空。
对于2个超长指令字的第四个指令槽,从第1,第2,第3,第4候选指令队列中选择指令,考察c3,满足时间延迟要求(此时距离c2执行三拍),于是调度c3在第一个超长指令字第四个指令槽。然后为第二个超长指令字的第四个指令槽填入空操作。从所有候选队列中删除c3,并检查数据依赖图,c3的后继指令c4此时前驱都已经被调度,故而加入第5个候选指令队列。此时的候选指令队列依次为:空,空,空,空,{c4}。
当第1拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,空,空,{c4}。
表7
如表8所示,在进行第2拍调度时,当第2拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,于是,第1,2,3,4,5候选指令队列内容依次为:空,空,空,{c4},空。
对于2个超长指令字的第一个指令槽,从第1候选指令队列中按照优先级选择,第1候选指令队列为空,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,空,{c4},空。
对于2个超长指令字的第二个指令槽,从第1,第2候选指令队列中按照优先级选择,第1,第2候选指令队列为空,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,空,{c4},空。
对于2个超长指令字的第三个指令槽,从第1,第2,第3候选指令队列中按照优先级选择,第1,第2,第3候选指令队列为空,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,空,{c4},空。
对于2个超长指令字的第四个指令槽,从第1,第2,第3,第4候选指令队列中选择指令,指令c4距离c3执行一拍,距离b2执行2拍,不满足时间延迟要求,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,空,{c4},空。
当第2拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,空,{c4},空。
表8
如表8所示,在进行第3拍调度时,当第3拍开始时,各候选指令队列之间移动指令,即从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中,于是,第1,2,3,4,5候选指令队列内容依次为:空,空,{c4},空,空。
对于2个超长指令字的第一个指令槽,从第1候选指令队列中按照优先级选择,第1候选指令队列为空,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,{c4},空,空。
对于2个超长指令字的第二个指令槽,从第1,第2候选指令队列中按照优先级选择,第1,第2候选指令队列为空,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,{c4},空,空。
对于2个超长指令字的第三个指令槽,从第1,第2,第3候选指令队列中按照优先级,指令c4距离c3执行一拍,距离b2执行2拍,而c4需要距离c3执行后至少2拍,距离b2执行后至少2拍,因此不满足时间延迟要求,于是填入空操作。候选指令队列不变化,此时的候选指令队列依次为:空,空,{c4},空,空。
对于2个超长指令字的第四个指令槽,从第1,第2,第3,第4候选指令队列中选择指令,指令c4此时距离c3执行二拍,满足时间延迟要求于是填入第一超长指令字的第四个指令槽。这时候选队列为空,于是给第二超长指令字的第四个指令槽填入空操作。
当第3拍结束时,第1,2,3,4,5候选指令队列依次为:空,空,空,空,空。
至此,数据依赖图上所有指令都被调度,指令调度结束。
表9
步骤306、按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
示例的,假定一拍发射4个超长指令字,即m=4,一个超长指令字有4个指令槽,即n=4。
假定根据上述指令调度方法得到的指令序列为:
第0拍:{a0,b0,c0,d0}{e0,f0,g0,h0}{i0,j0,k0,l0}{m0,n0,o0,p0};
第1拍:{a1,b1,c1,d1}{e1,f1,g1,h1}{i1,j1,k1,l1}{m1,n1,o1,p1};
第2拍:{a2,b2,c2,d2}{e2,f2,g2,h2}{i2,j2,k2,l2}{m2,n2,o2,p2};
第3拍:{a3,b3,c3,d3}{e3,f3,g3,h3}{i3,j3,k3,l3}{m3,n3,o3,p3}。
则指令发射执行情况如图5所示:其中,FU(Function Unit功能部件)为超长指令字的部件,在第0拍,发射了4个超长指令字,当前拍在执行各自的第1个指令槽的指令,即a0、e0、i0和m0并行执行,在第1拍,又发射了4个超长指令字,前一拍发射的超长指令字,当前在执行各自的第2个指令槽的指令,即并行执行b0、f0、j0和n0,当前拍发射的四条超长指令字,当前在执行各自的第1个指令槽的指令,即并行执行a1、e1、i1和m1,但是b0、f0、j0和n0,以及a1、e1、i1和m1,彼此之间并行执行,不能存在依赖关系。即后一拍的超长指令字的第t个指令槽的指令与前一拍的超长指令字的第t+1个指令槽的指令之间不存在依赖关系。第2、3拍的执行方法与第1拍原理相同,本发明对此不做赘述。需要说明的是,图5中的中一组串行的FU,可以为相同或不同的功能部件,示例的,一组串行的FU可能有2个加法器、1个乘法器、1个访存部件。
本发明实施例提供的指令调度方法,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。依然以图4为例,假设该指令调度装置以拍为单位进行指令调度,每拍包含1个超长指令字,即m=1,每个超长指令字包括4个指令槽。若采用现有技术的指令调度方法,编译器生成的指令序列如下:
第0拍:{b0,c0,c1,空操作};
第1拍:{b1,c2,空操作,空操作};
第2拍:{b2,空操作,空操作,空操作};
第3拍:{空操作,空操作,空操作,空操作};
第4拍:{c3,空操作,空操作,空操作};
第5拍:{空操作,空操作,空操作,空操作};
第6拍:{c4,空操作,空操作,空操作};
第2拍:{b2,c3,空操作,空操作};
则指令发射执行情况如下:在第0拍,执行b0;在第1拍并行执行b1、c0,在第2拍并行执行b2、c2和c1。这里存在依赖关系的c2和c1在同一时刻执行,这可能会导致运行出错或者流水线停顿,影响指令执行的性能或正确性。通常,指令发射执行也需要执行空操作,只是它没有操作数、结果数也没有实际的操作,但同样进入处理器进行取址、译码、执行的过程。
采用本发明实施例提供的指令调度方法,编译器生成的指令序列如下:
第0拍:{c0,c1,c2,b0};
第1拍:{空操作,空操作,空操作,b1};
第2拍:{空操作,空操作,空操作,b2};
第3拍:{空操作,空操作,c3,空操作};
第4拍:{空操作,空操作,空操作,c4}。
则指令发射执行情况如下:在第0拍,执行c0;在第1拍执行空操作、c1,在第2拍并行执行空操作、空操作和c2,在第3拍并行执行空操作、空操作、空操作和b0,在第4拍执行空操作、空操作、空操作和b1。在第4拍执行空操作、c3和b2。在第5拍执行空操作、空操作。在第6拍执行c4。因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
本发明实施例提供一种指令调度装置60,如图6所示,包括:
构建单元601,用于构建数据依赖图。
调度单元602,用于分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系。
其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。
这样一来,调度单元使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
进一步的,如图7所示,所述指令调度装置60还可以包括:
执行单元603,用于按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
如图8所示,所述指令调度装置60还可以包括:
建立单元604,用于建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列。
初始化单元605,用于初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
所述调度单元602具体用于:
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列,;
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有的真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列。
执行下述步骤:
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有的真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的当前入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
特别的,所述与第q-1个指令槽中的指令具有的真依赖关系且同时满足时间延迟和资源需求包括:与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
本发明实施例提供一种指令调度装置中,调度单元使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
本发明实施例提供一种指令调度装置60,如图9所示,包括:
处理器901,用于构建数据依赖图;
所述处理器901还用于分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;
其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。
这样一来,处理器使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
所述处理器901还用于:
按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
所述处理器901还用于:
在构建数据依赖图之后,所述方法还包括:
建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列;
初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取当前入度为零的指令得到第2候选指令队列;
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤:
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
特别的,所述处理器901具体用于:
与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
本发明实施例提供的指令调度装置中,处理器使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系,因此在具有串行功能部件的多核处理器上执行指令时,就不会出现具有依赖关系的指令在同一拍执行或者依赖本条指令的下一条指令先于本条指令执行的情况发生,能够使得处理器或流水线正常运行,提高了调度的正确性。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (12)

1.一种指令调度方法,应用于指令调度装置,其特征在于,包括:
构建数据依赖图;
分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;
其中,0≤k≤m×n,所述n表示一个超长指令字中指令槽的个数,所述n为大于等于1的整数,所述m表示每拍中超长指令字的个数,所述m为大于等于1的整数,所述t为大于等于1小于等于n-1的整数。
2.根据权利要求1所述的方法,其特征在于,在所述分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字之后,所述方法还包括:
按照所述超长指令字中各个指令的排列顺序执行所述超长指令字中的各个指令。
3.根据权利要求1或2所述的方法,其特征在于,
在构建数据依赖图之后,所述方法还包括:
建立n+1个候选指令队列,所述n+1个候选指令队列分别为第1至第n+1候选指令队列;
初始化所述n+1个候选指令队列,使所述n+1个候选指令队列均为空。
4.根据权利要求3所述的方法,其特征在于,所述分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系包括:
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增入度为零的指令得到第2候选指令队列;
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
5.根据权利要求4所述的方法,其特征在于,所述分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系还包括:
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤:
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
6.根据权利要求4或5所述的方法,其特征在于,
所述与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求包括:
与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
7.一种指令调度装置,其特征在于,包括:
构建单元,用于构建数据依赖图;
调度单元,用于分别从所述数据依赖图中提取k个指令进行调度得到每一拍的m个超长指令字,使得同一拍内的超长指令字之间是并行执行的关系,相邻两拍中后一拍的任一超长指令字的第t个指令槽的指令与前一拍的任一超长指令字的第t+1个指令槽的指令之间不存在依赖关系;
其中,0≤k≤m×n,所述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所述的指令调度装置,其特征在于,所述调度单元具体用于:
在进行第0拍调度时,
在所述数据依赖图中提取当前入度为零的指令得到第1候选指令队列,所述入度为零的指令在所述数据依赖图中的没有前驱结点或者其所有前驱结点已被调度;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
11.根据权利要求10所述的指令调度装置,其特征在于,所述调度单元具体用于:
在进行第P拍调度时,p为大于0的整数,
从所述第2候选指令队列开始,依次将所述第2候选指令队列至所述第n+1候选指令队列中的指令放入前一个候选指令队列中;
从所述第1候选指令队列中提取优先级最高且满足时间延迟和资源需求的h个指令分别放入每个超长指令字的第1个指令槽中,在每个所述超长指令字的第1个指令槽中尚未填充的指令槽中放入空操作指令,0≤h≤m;
从所述第1候选指令队列中删除所述h个指令;
在所述数据依赖图中提取新增的入度为零的指令得到第2候选指令队列;
执行下述步骤:
执行下述步骤,q初始化为2;
a.从所述第1候选指令队列至所述第q候选指令队列中提取h个指令分别放入每个超长指令字的第q个指令槽中,所述h个指令满足:与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求,或,不与所述第q-1个指令槽中的指令具有真依赖关系,但优先级最高且同时满足时间延迟和资源需求,0≤h≤m;
b.在每个超长指令字的第q个指令槽中的未填充的指令槽中放入空操作指令;
c.从所有候选指令队列中删除所述h个指令;
d.使q=q+1,在所述数据依赖图中提取新增的入度为零的指令得到第q候选指令队列,重复步骤a至d,直至所述第1候选指令队列至所述第q候选指令队列中不存在未调度的指令或第n+1候选指令队列中的指令被更新。
12.根据权利要求10或11所述的指令调度装置,其特征在于,
所述与第q-1个指令槽中的指令具有真依赖关系且同时满足时间延迟和资源需求包括:
与第q-1个指令槽中的指令具有一对一依赖关系且同时满足时间延迟和资源需求。
CN201310367751.2A 2013-08-21 2013-08-21 一种指令调度方法及装置 Active CN104424026B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201310367751.2A CN104424026B (zh) 2013-08-21 2013-08-21 一种指令调度方法及装置
PCT/CN2014/083603 WO2015024432A1 (zh) 2013-08-21 2014-08-04 一种指令调度方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310367751.2A CN104424026B (zh) 2013-08-21 2013-08-21 一种指令调度方法及装置

Publications (2)

Publication Number Publication Date
CN104424026A CN104424026A (zh) 2015-03-18
CN104424026B true CN104424026B (zh) 2017-11-17

Family

ID=52483045

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310367751.2A Active CN104424026B (zh) 2013-08-21 2013-08-21 一种指令调度方法及装置

Country Status (2)

Country Link
CN (1) CN104424026B (zh)
WO (1) WO2015024432A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104699464B (zh) * 2015-03-26 2017-12-26 中国人民解放军国防科学技术大学 一种基于依赖网格的指令级并行调度方法
CN104699466B (zh) * 2015-03-26 2017-07-18 中国人民解放军国防科学技术大学 一种面向vliw体系结构的多元启发式指令选择方法
US11275590B2 (en) 2015-08-26 2022-03-15 Huawei Technologies Co., Ltd. Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory
CN108228242B (zh) * 2018-02-06 2020-02-07 江苏华存电子科技有限公司 一种可配置且具弹性的指令调度器
CN112579272B (zh) * 2020-12-07 2023-11-14 海光信息技术股份有限公司 微指令分发方法、装置、处理器和电子设备
CN117827287A (zh) * 2022-09-29 2024-04-05 深圳市中兴微电子技术有限公司 指令级并行调度方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7114058B1 (en) * 2001-12-31 2006-09-26 Apple Computer, Inc. Method and apparatus for forming and dispatching instruction groups based on priority comparisons
CN102799418A (zh) * 2012-08-07 2012-11-28 清华大学 融合了顺序和vliw的处理器体系结构及指令执行方法
CN102880449A (zh) * 2012-09-18 2013-01-16 中国科学院声学研究所 一种超长指令字结构下延迟槽调度方法及其系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6157988A (en) * 1997-08-01 2000-12-05 Micron Technology, Inc. Method and apparatus for high performance branching in pipelined microsystems
US9274793B2 (en) * 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7114058B1 (en) * 2001-12-31 2006-09-26 Apple Computer, Inc. Method and apparatus for forming and dispatching instruction groups based on priority comparisons
CN102799418A (zh) * 2012-08-07 2012-11-28 清华大学 融合了顺序和vliw的处理器体系结构及指令执行方法
CN102880449A (zh) * 2012-09-18 2013-01-16 中国科学院声学研究所 一种超长指令字结构下延迟槽调度方法及其系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向VLIW处理器的分支调度优化算法;时磊等;《计算机工程与应用》;20121231;第48卷(第21期);第41页右栏第二段-第43页左栏倒数第2段及图1 *

Also Published As

Publication number Publication date
CN104424026A (zh) 2015-03-18
WO2015024432A1 (zh) 2015-02-26

Similar Documents

Publication Publication Date Title
CN104424026B (zh) 一种指令调度方法及装置
KR102228501B1 (ko) 컴파일러 방법
TWI758770B (zh) 靜止可重組態的資料處理器
Pal et al. Optimizing multi-GPU parallelization strategies for deep learning training
CN101706713B (zh) 改善乱序超纯量执行单元的微处理器及方法
CN109697082A (zh) 指令组
CN103377035A (zh) 针对粗颗粒度流应用的流水并行化方法
CN109697185A (zh) 多瓦片处理阵列中的同步
KR20220145848A (ko) 집적 회로 아키텍처 내에서 최적화된 데이터흐름을 위한 지능형 버퍼 추적 시스템 및 방법
CN111666151B (zh) 拓扑图转换系统及其方法
EP2372587B1 (en) Apparatus and method for simulating a reconfigurable processor
US6813703B2 (en) Emulation system for data-driven processor
KR20200136468A (ko) 작업 스케줄링
Elwasif et al. A dependency-driven formulation of parareal: parallel-in-time solution of PDEs as a many-task application
Girkar et al. Partitioning programs for parallel execution
CN104361182A (zh) 基于Petri网的微处理器微体系结构参数优化方法
WO2013101114A1 (en) Later stage read port reduction
US20150339256A1 (en) Inter-processor synchronization system
CN108415740A (zh) 一种应用于数据分析任务的工作流调度方法
TWI689946B (zh) 用於元組圖形程式之類型推論之系統及跨越網路執行元組圖形程式之方法
CN103136032B (zh) 一种多核体系并行仿真系统
KR102145457B1 (ko) 방향 인디케이터
US11561926B2 (en) Data exchange pathways between pairs of processing units in columns in a computer
Bai et al. From clock-driven to data-driven models
Rafique et al. Synthesis of heterogeneous dataflow models from synchronous specifications

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