CN102830954A - 指令调度方法及装置 - Google Patents
指令调度方法及装置 Download PDFInfo
- Publication number
- CN102830954A CN102830954A CN2012103071809A CN201210307180A CN102830954A CN 102830954 A CN102830954 A CN 102830954A CN 2012103071809 A CN2012103071809 A CN 2012103071809A CN 201210307180 A CN201210307180 A CN 201210307180A CN 102830954 A CN102830954 A CN 102830954A
- Authority
- CN
- China
- Prior art keywords
- instruction
- assembly level
- assembly
- dfd
- scheduling
- 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.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例涉及一种指令调度方法及装置。根据汇编指令建立汇编级数据流图和汇编级控制流图;根据所述汇编级数据流图找出伪相关指令,并根据所述汇编级控制流图将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的汇编级数据流图;在所述新的汇编级数据流图中加入汇编指令序,并从所述新的汇编级数据流图中查找最佳路径,根据所述最佳路径进行指令调度。由此,给出了指令调度与寄存器分配执行顺序的最优方案,并提高了指令执行的并行度。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种指令调度方法及装置。
背景技术
指令调度是编译器挖掘程序潜在的指令级并行的有效手段。它是在不改变程序语义,满足目标机器的相关性和资源依赖性的前提下,通过重新调整指令顺序来提高一个周期内目标机器能够执行的指令数目(IPC)。指令调度是现代高性能编译器的一项关键技术,它决定各操作的相对执行顺序,具体执行时间及使用哪些硬件资源等。从代码块划分角度来看,指令调度可以分为局部指令调度和全局指令调度,其中局部指令调度是指基本块内的指令调度,而全局调度是指基本块间的指令调度。
局部指令调度算法是指基本块内的相关指令调度算法。其中,基本块被定义成只有一个入口点和一个出口点的代码段,且没有转移、跳转分支。因此局部指令调度算法避免了转移相关,其难点在于数据相关和资源相关问题。
列表调度算法(List Scheduling)是一种典型的局部指令调度算法。Fisher等提出了基本块内实现带有优先级的列表调度算法,即根据带有优先级的拓扑排序,来访问数据依赖图的各个结点,并根据每个结点和已调度的结点之间的数据依赖关系,计算出能够执行该结点的最早时间位置,并根据一个资源预约表将当前结点安排在最早能够获得所需资源的时间位置上。列表调度算法不会回溯,它对每个结点进行有且仅有一次的指令调度,并使用一个启发式的优先级函数从已经就绪的结点中选择下一个调度的结点。然而,列表调度算法中的拓扑排序的最优选择问题,是难点所在,即该算法不能有效保证被选择的拓扑排序一定是所有可能的拓扑排序中的最优选择。
与指令调度随之而来的是寄存器分配与指令调度的时序问题。从某种意义上讲,虽然二者都是为了提高程序的并行度,但其相互作用是负面的:一方面,寄存器分配尽量减少正在使用的寄存器数目,但这可能会导致更多的相互依赖关系,限制了可能的指令调度;另一方面,指令调度通常会需要更多的寄存器来消除伪相关,进而增大了寄存器分配的压力,以至于寄存器溢出会抵消指令级并行所带来的好处。由于指令调度与寄存器分配实现十分复杂,大多数ILP(Instruction Level Parallelism)编译器的后端设计中,仍采用两个或多个分离的阶段来处理。例如MIPS编译器先进行寄存器分配再进行指令调度,而在IBM RI SC S/7000中正好相反。编译器在权衡指令调度和寄存器分配的执行顺序上很难给出最优方案。
发明内容
本发明的目的是针对现有技术的缺陷,提供一种指令调度方法及装置,从而解决指令调度和寄存器分配的执行顺序上很难给出最优方案,无法高效提高指令执行的并行度问题。
在第一方面,本发明实施例提供了一种指令调度方法,所述方法包括:
根据汇编指令建立汇编级数据流图和汇编级控制流图;
根据所述汇编级数据流图找出伪相关指令,并根据所述汇编级控制流图将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的汇编级数据流图;
在所述新的汇编级数据流图中加入汇编指令序,并从所述新的汇编级数据流图中查找最佳路径,根据所述最佳路径进行指令调度。
在第二方面,本发明实施例提供了一种指令调度装置,所述装置包括:
建立单元,用于根据汇编指令建立汇编级数据流图和汇编级控制流图;
分配单元,用于根据所述汇编级数据流图找出伪相关指令,并根据所述汇编级控制流图将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的汇编级数据流图;
调度单元,用于在所述新的汇编级数据流图中加入汇编指令序,并从所述新的汇编级数据流图中查找最佳路径,根据所述最佳路径进行指令调度。
本发明实施例中,根据汇编指令建立汇编级数据流图(Assembly DataDependence Graph,ADDG)和汇编级控制流图(Assembly Control Flow Graph,ACFG);根据所述ADDG找出伪相关指令,并根据所述ACFG将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的ADDG;在所述新的ADDG中加入汇编指令序,并从所述新的ADDG中查找最佳路径,根据所述最佳路径进行指令调度,由此给出了指令调度与寄存器分配执行顺序的最优方案,并提高了指令执行的并行度。
附图说明
图1是本发明实施例提供的指令调度方法流程图;
图2是本发明实施例提供的ADDG的生成方法流程图;
图3是本发明实施例提供的汇编代码片段及其ADDG;
图4是本发明实施例提供的实现ADDG的伪代码;
图5是本发明实施例提供的汇编代码片段及其真值表;
图6是本发明实施例提供的ACFG的生成方法流程图;
图7是本发明实施例提供的循环体判断方法流程图;
图8是本发明实施例提供的判断循环体的汇编代码片段;
图9是本发明实施例提供的图5中汇编代码片段的ACFG;
图10是本发明实施例提供的对图3中的代码片段进行寄存器重新分配后的代码片段及其ADDG;
图11是本发明实施例提供的利用ACFG寻找可用寄存器的方法流程图;
图12是本发明实施例提供的实现利用ADDG查找最佳并行度Hamilton路径的代码片段;
图13是本发明实施例提供的利用ADDG查找最佳并行度Hamilton路径的方法流程图;
图14是本发明实施例提供的添加了汇编指令序的ADDG;
图15是本发明实施例提供的指令调度装置示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明具体实施例作进一步的详细描述。
本发明实施例中,根据汇编指令建立ADDG和ACFG;根据所述ADDG找出伪相关指令,并根据所述ACFG将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的ADDG;在所述新的ADDG中加入汇编指令序,并从所述新的ADDG中查找最佳路径,根据所述最佳路径进行指令调度,由此给出了指令调度与寄存器分配执行顺序的最优方案,并提高了指令执行的并行度。
下述实施例描述的为一种指令调度方法的执行流程,图1是本发明实施例提供的指令调度方法流程图。如图1所示,本发明实施例提供的方法包括以下步骤:
步骤101,根据汇编指令建立ADDG和ACFG。
具体地,ADDG可用于分析基本块内各指令间的相关性。如果某两个运算操作不同时作用于同一变量,或对同一变量有写操作,则这两个运算的执行顺序的改变不会影响其执行结果。只有当一个运算对某个变量执行写操作,而另一个运算对这个变量执行读或写运算时,改变他们的执行顺序才会改变它们的结果。这样的一对运算操作被认为存在数据依赖关系。数据依赖关系具体包括:写后写(WAW),写后读(WAR),读后写(RAW)以及内存访问。对于连续两条存储指令而言,通常默认它们之间是存在依赖关系的。这是因为即使在程序静态分析时两条存储指令中的目的地址寄存器存储的内存地址之间不存在相关性,仍不能保证运行时二者的目的地址寄存器里是否存放同一内存值。
数据依赖图(Data Dependence Graph,DDG)正是根据上述依赖关系而建立的。只要不存在所有的数据依赖关系,基本块内的指令可以在块内任意重新排序。汇编指令格式包含具体指令对处理器资源使用的各种信息,包括:指令描述符,寄存器描述符以及寄存器索引号。根据上述信息可在汇编级对各指令建立ADDG。
图2是本发明实施例提供的ADDG的生成方法流程图。如图2所示,ADDG的生成方法包括以下步骤:
步骤201,按序遍历基本块中的每条指令i,并逐个分析所述指令i的所有前驱指令p于所述指令i的关系。
具体地,在对目标块中的指令建立ADDG时,需要分析该指令和其之前所有指令之间的数据依赖关系,且这种依赖关系并不只有一种的。图3是本发明实施例提供的汇编代码片段及其ADDG。如图3中图(a)所示,假设谓词寄存器pr0代表该指令必须执行,则指令a’和a中关于寄存器a1的数据相关有WAR;指令b和a中关于寄存器a1的数据相关有WAW;指令c和b中关于寄存器a1的数据相关有WAR、WAW;指令b’和a’中关于寄存器a2的数据相关有WAW;指令c’和b’中关于寄存器a2的数据相关有WAR、WAW;指令c’和a’中关于寄存器a2的数据相关有WAR、WAW。
步骤202,当所述指令i和所述指令p是连续存储指令,或是有依赖关系的指令时,在ADDG中添加从i到p的边,其中,当所述指令i不是存储指令并且寄存器的绝对依赖关系已经完全建立时,则ADDG构建完成。
具体地,将步骤201中确定的指令间的依赖关系添加到ADDG中,然而,并非所有的依赖关系都需要添加到ADDG中,冗余信息会增加遍历ADDG的代价。图3是本发明实施例提供的汇编代码片段及其ADDG,图3中的图(a)代码片段中,指令c和a的依赖关系包括关于寄存器a1的WAR相关,指令c和b也依赖关系也包括a1的WAR相关,而指令a和b是关于寄存器a1的WAW相关。当指令a对寄存器a1有写入操作时,并不影响指令c对其的写入。这是由于指令a、b的谓词寄存器均为pr0,且指令b执行后才能执行指令c。因此,我们认为指令c和a是关于寄存器a1的伪相关。。而由于谓词寄存器pr1的值不确定,指令a’和c’关于寄存器a2的依赖关系需要加入ADDG中。图3中的图(b)为图(a)中汇编代码片段的ADDG,通过ADDG可以清楚的看出各个指令之间的相关性。图4是本发明实施例提供的实现ADDG的伪代码。
汇编代码是经过编译器通过编译优化,代码块合并等操作后生成的,因此各基本块不完全对应于高级语言中代码片段。指令调度通常是静态调度的,因此,基于分支指令建立的基本块之间的控制关系仅限于语义层面,并不能尽量准确的描述它们在运行时的情况。如:在某些路径下分支指令的谓词寄存器永不成立,引入谓词分析时要尽量避免这种情况。例如,图5是本发明实施例提供的汇编代码片段及其真值表。如图5中(a)所示,代码块A中的指令a决定谓词寄存器pr1和pr2的值(该值是唯一确定的)。路径:A→B→C意味着pr1=0,pr2=1,因此代码块C和D不存在控制相关,然而现有的谓词分析技术并不能分析出这种情况。在编译优化领域,谓词分析系统通常是基于二叉决策图(DDB)设计的。而本发明实施例提出了基于具有三值逻辑真值表的汇编级的谓词分析系统。在汇编级进行处理时,一方面,可以准确获取具体分支指令所使用的谓词寄存器索引号;另一方面,通过分析基本块的ADDG、ACFG,可明确获取修改谓词寄存器的具体指令。图6是本发明实施例提供的ACFG的生成方法流程图,如图6所示,本发明实施例提供的方法包括以下步骤:
步骤601,对汇编代码建立关于谓词寄存器的三值逻辑真值表。
具体地,对汇编代码建立三值逻辑真值表时需要注意一下几点:
a.真值表中的各变量为目标机器的所有谓词寄存器;
b.在真值表中,谓词寄存器值为false时用0表示,值为true时用1表示,值不确定时用-1表示;
c.在生成ACFG之前,对真值表中确定执行的项初始化为1,其余项全部初始化为-1;
d.在分析片段间的调用关系时,需存储目标基本块或函数段内对具体推断寄存器值的修改,并判断分支指令是否执行。如果是,则将当前真值表的副本传递给下一次判断,否则进行下一次判断。
以图5(a)中的代码为例,其对应的真值表即为图5中(b)所示。
步骤602,通过基本块内的跳转目标地址或基本块的标识来判断函数中可能出现的循环体。
为了避免程序出现死循环,在提取有效路径时,需要通过基本块内的跳转目标地址或基本块的标识来判断函数中可能出现的循环,包括基本块内循环以及基本块间的循环。图7是本发明实施例提供的死循环判断方法流程图。如图7所示,本发明实施例提供的方法包括以下步骤:
步骤701,判断基本块内的循环。
具体地,判断本块内的跳转目标地址是否为当前块的首部,如果是,则断定该基本块为一循环体,否则进行下一步;
步骤702,判断基本块间的循环。
该步骤用于判断多个基本块构成的循环体,假定变量Path表示存储每个基本块唯一表示id的队列,则需要通过逐次向前查找是否存在相同的id片段。其中变量cursor表示每次向前查找、比较的长度,其取值范围为[2~size-1](size是队列Path的长度),当存在某一cursor的值使得存在重复的id片段,则该id片段代表的多个函数片段构成循环体。图8是本发明实施例提供判断循环的汇编代码片段。
步骤603,沿着分支指令进行有效路径提取,根据所述有效据路径标识对ACFG进行边着色,其中,当沿着分支指令进行有效路径提取时,检查所述分支指令的谓词寄存器的当前值是否与真值表中对应的值冲突,并保存真值表的副本,再进行下一个搜索。
具体地,以图5为例,从真值表(b)中可以看出,当d1>d3时,pr1=1,pr2=0,则可知存在路径:A→B→E;当d1<d3时,pr1=0,pr2=1,则可知存在路径:A→B→C→E;另外,当图5中(a)所示的代码段前面的代码使寄存器pr1为1时,则有路径D→E。根据上述分析出的路径,对ACFG进行边着色。如图9所示,图9是本发明实施例提供的图5中汇编代码片段的ACFG。共存在三个路径:A→B→C→E;A→B→E;D→E。
步骤102,根据所述ADDG找出伪相关指令,并根据所述ACFG将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的ADDG。
具体地,由于基本块的汇编代码是由一些在完成寄存器分配后编译级的块构成,这些块含有较多的指令,但指令间的并行度会受限于编译器。因此,需要重新分配寄存器来提高并行性,可以利用ADDG找出伪相关的指令。如图3(a)中的代码片段所示,指令a和b是关于寄存器a1的WAW相关,因此不能并行,但实际上,无论a中对寄存器a1写回任何值,都不会对b的后续指令有任何影响。因此,我们可以将a及其后续指令中的寄存器a1替换为其他地址寄存器ax。同理,可以将指令a’中寄存器a2替换为其他寄存器ay,并在ADDG中删除从a到b的边和a’到b’的边。则新的ADDG如图10所示,图10是本发明实施例提供的对图3中的代码片段进行寄存器重新分配后的代码片段及其ADDG。
通过汇编级控制流图(Assembly Control Flow Graph,ACFG)可以查找所述可用的寄存器。具体地,基于各块中的分支指令目标地址及目标函数中的块序列生成的ACFG,可以反映基本块之间的调用关系。编译器在权衡指令调度和寄存器分配时很难给出最优方案:过度分配寄存器将限制指令调度,而过度的指令调度又会给寄存器分配带来压力,且当寄存器不够用时,插入的溢出代码可能会影响程序的整体性能。这是一个NP完全问题,即编译器生成的汇编代码一般并不是最适合用于指令调度。因此,为了获取更好的指令并行度,需要分析汇编代码生成的ACFG,来充分挖掘可以重新分配的寄存器。本发明实施例中提到的寄存器的重分配策略是基于栈结构的分析,当有函数调用时,栈结构会保存将会用到的临时寄存器的值,函数返回时会再次保存它们。图11是本发明实施例提供的利用ACFG寻找可用寄存器的方法流程图。如图11所示,本发明实施例提供的方法包括以下步骤:
步骤1101,统计该函数中入栈的临时寄存器的使用情况。
步骤1102,通过分析ACFG,获取以目标函数入口代码块到该基本块的全部路径,分析这些路径上对相同类型寄存器的使用情况。
步骤1103,如果这些路径上涉及到的同类型寄存器全部都属于步骤1101中已获取的入栈的临时寄存器,那么,需修改目标函数的栈结构,添加额外的可用寄存器,并用这个寄存器作为可用寄存器。否则进行步骤1104。
步骤1104,从入栈的临时寄存器中选取一个并未在所述路径中使用的同类型寄存器,并用这个寄存器作为可用寄存器。
步骤1105,将目标汇编指令中涉及到的寄存器替换为可用寄存器。
以图3(a)中汇编代码为例,需要被替换的寄存器为汇编指令中a、b的a1寄存器,以及a’、b’的a 2寄存器。
步骤103,在所述新的ADDG中加入汇编指令序,并从所述新的ADDG中查找最佳路径,根据所述最佳路径进行指令调度。
具体地,编译器进行局部指令调度时一般采用列表调度算法。列表调度算法不会回溯,对每条指令,或ADDG中的每个节点的调度有且仅有一次。它通常选用基本块中指令数最多的路径为关键路径,并根据关键路径对基本块内指令序列进行带优先级的拓扑排序,以便从已就绪的节点中选择下一个待调度节点。列表调度算法在空间中可认为是线性查找,忽略了路径之间的调度,当基本块中路径数大于目标机器可并行的最大数目时,无法取得更优的局部并行度。
优选地,本发明实施例中查找Hamiltonian路径,并以此路径作为最佳路径,对指令进行调度。
具体地,Hamiltonian路径是指在给定无向图或有向图中,经过无向图或有向图的每个顶点有且仅有一条路径(有向路径)L,且并非所有的图都存在这种路径。而如果在ADDG中加入汇编文件中指令的序关系,那么ADDG中必然存在一条Hamiltonian路径。基于Hamiltonian最短路径搜索的局部指令调度算法,将线性空间扩充至平面,从更抽象的层面对指令进行重排序,可以获得汇编级的近似最优解。图12是本发明实施例提供的实现利用ADDG查找最佳并行度Hamiltonian路径的代码片段。图13是本发明实施例提供的利用ADDG查找最佳并行度Hamiltonian路径的方法流程图,如图13所示,本发明实施例提供的方法包括以下步骤:
步骤1301,在ADDG中添加头节点和尾节点。
步骤1302,在ADDG中加入汇编指令序关系,对ADDG中存在数据相关的节点加入两条Hamiltonian边。图14是本发明实施例提供的添加了汇编指令序的ADDG,如图14所示,有数据相关的节点在图中用虚线表示,从而可以使ADDG中必然存在一条Hamiltonian路径。
步骤1303,利用评估函数逐个评估ADDG中节点的并行性,查找出最佳并行度Hamiltonian路径。
其中,评估ADDG中节点的并行性的方法现有技术中有很多方法,本技术领域人员可以根据实际情况选用其中一种,在此不复赘述。
本发明实施例中,根据ADDG找出伪相关指令,并将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的ADDG,在所述新的ADDG中加入汇编指令序,并从所述新的ADDG中查找最佳路径,根据所述最佳路径进行指令调度,由此给出了指令调度与寄存器分配执行顺序的最优方案,并提高了指令执行的并行度。通过建立ACFG来分析各基本块之间的调用关系,可以很容易找出可用寄存器从而对寄存器进行重新分配,通过搜索加入汇编指令序的ADDG,很容易查找出Hamiltonian最短路从而获得最佳路径,以便对指令进行调度。
下述实施例描述的为一种指令调度装置的工作流程,图15本发明实施例提供的指令调度装置示意图。如图15所示,本发明实施例提供的装置包括以下单元:
建立单元1501,用于根据汇编指令建立ADDG和ACFG。
分配单元1502,用于根据ADDG找出伪相关指令,根据ACFG将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的ADDG。
调度单元1503,用于在所述新的ADDG中加入汇编指令序,并从所述新的ADDG中查找最佳路径,根据所述最佳路径进行指令调度。
本发明实施例中,根据汇编指令建立ADDG和ACFG;根据所述ADDG找出伪相关指令,并根据所述ACFG将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的ADDG;在所述新的ADDG中加入汇编指令序,并从所述新的ADDG中查找最佳路径,根据所述最佳路径进行指令调度,由此给出了指令调度与寄存器分配执行顺序的最优方案,并提高了指令执行的并行度。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种指令调度方法,其特征在于,所述方法包括:
根据汇编指令建立汇编级数据流图和汇编级控制流图;
根据所述汇编级数据流图找出伪相关指令,并根据所述汇编级控制流图将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的汇编级数据流图;
在所述新的汇编级数据流图中加入汇编指令序,并从所述新的汇编级数据流图中查找最佳路径,根据所述最佳路径进行指令调度。
2.如权利要求1所述的方法,其特征在于,所述最佳路径是指最佳哈密尔顿路径。
3.如权利要求1所述的方法,其特征在于,所述根据汇编指令建立汇编级数据流图具体包括:
按序遍历基本块中的每条指令i,并逐个分析所述指令i的所有前驱指令p与所述指令i的关系;
当所述指令i和所述前驱指令p是连续存储指令,或是有依赖关系的指令时,在所述汇编级数据流图中添加从i到p的边,其中,当所述指令i不是存储指令并且寄存器的绝对依赖关系已经完全建立时,则所述汇编级数据流图构建完成。
4.如权利要求1所述的方法,其特征在于,所述根据汇编指令建立汇编级控制流图具体包括:
对汇编代码建立关于谓词寄存器的三值逻辑真值表;
通过基本块内的跳转目标地址或基本块的标识来判断函数中可能出现的循环体;
沿着分支指令进行有效路径提取,根据所述有效据路径标识对汇编级控制流图进行边着色,其中,当沿着分支指令进行有效路径提取时,检查所述分支指令的谓词寄存器的当前值是否与真值表中的对应值冲突,并保存真值表的副本。
5.如权利要求1所述的方法,其特征在于,所述在新的汇编级数据流图中加入汇编指令序,并从所述新的汇编级数据流图中查找最佳路径,根据所述最佳路径进行指令调度具体为:
在所述新的汇编级数据流图中添加头节点和尾节点;
对所述新的汇编级数据流图中不存在数据相关的节点加入两条边;
逐个评估所述新的汇编级数据流图中节点的并行性,查找出最佳路径。
6.一种指令调度装置,其特征在于,所述装置包括:
建立单元,用于根据汇编指令建立汇编级数据流图和汇编级控制流图;
分配单元,用于根据所述汇编级数据流图找出伪相关指令,并根据所述汇编级控制流图将可用的寄存器分配给所述伪相关指令,根据寄存器重新分配后的指令建立新的汇编级数据流图;
调度单元,用于在所述新的汇编级数据流图中加入汇编指令序,并从所述新的汇编级数据流图中查找最佳路径,根据所述最佳路径进行指令调度。
7.如权利要求6所述的装置,其特征在于,所述最佳路径是指最佳哈密尔顿路径。
8.如权利要求6所述的装置,其特征在于,所述建立单元具体用于:
按序遍历基本块中的每条指令i,并逐个分析所述指令i的所有前驱指令p于所述指令i的关系;
当所述指令i和所述前驱指令p是连续存储指令,或是有依赖关系的指令时,在汇编级数据流图中添加从i到p的边,其中,当所述指令i不是存储指令并且寄存器的绝对依赖关系已经完全建立时,则所述汇编级数据流图构建完成。
9.如权利要求6所述的装置,其特征在于,所述建立单元具体用于:
对汇编代码建立关于谓词寄存器的三值逻辑真值表;
通过基本块内的跳转目标地址或基本块的标识来判断函数中可能出现的循环体;
沿着分支指令进行有效路径提取,根据所述有效据路径标识对汇编级数据流图进行边着色,其中,当沿着分支指令进行有效路径提取时,检查所述分支指令的谓词寄存器的当前值是否与真值表中的对应值冲突,并保存真值表的副本。
10.如权利要求6所述的装置,其特征在于,所述调度单元具体用于:
在所述新的汇编级数据流图中添加头节点和尾节点;
对所述新的汇编级数据流图中存在数据相关的节点加入两条边;
逐个评估所述新的汇编级数据流图中节点的并行性,查找出最佳路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210307180.9A CN102830954B (zh) | 2012-08-24 | 2012-08-24 | 指令调度方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210307180.9A CN102830954B (zh) | 2012-08-24 | 2012-08-24 | 指令调度方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102830954A true CN102830954A (zh) | 2012-12-19 |
CN102830954B CN102830954B (zh) | 2014-10-29 |
Family
ID=47334106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210307180.9A Expired - Fee Related CN102830954B (zh) | 2012-08-24 | 2012-08-24 | 指令调度方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102830954B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915180A (zh) * | 2014-03-10 | 2015-09-16 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN106445678A (zh) * | 2016-07-21 | 2017-02-22 | 天津大学 | 一种降低指令级并行处理器功耗的并行度调整算法 |
CN107239260A (zh) * | 2017-05-11 | 2017-10-10 | 中国电子科技集团公司第三十八研究所 | 一种面向数字信号处理器的多谓词控制及编译优化方法 |
CN107679221A (zh) * | 2017-10-19 | 2018-02-09 | 武汉大学 | 面向减灾任务的时空数据获取与服务组合方案生成方法 |
CN109685453A (zh) * | 2018-12-07 | 2019-04-26 | 武汉金思路科技发展有限公司 | 智能识别工作流有效路径的方法 |
CN112540750A (zh) * | 2019-09-23 | 2021-03-23 | 无锡江南计算技术研究所 | 自适应内建函数与指令操作选择翻译方法 |
CN113296788A (zh) * | 2021-06-10 | 2021-08-24 | 上海东软载波微电子有限公司 | 指令调度方法、装置、设备、存储介质及程序产品 |
CN116841592A (zh) * | 2023-08-31 | 2023-10-03 | 腾讯科技(深圳)有限公司 | 指令管理方法、装置、计算机、存储介质及程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030145313A1 (en) * | 2002-01-30 | 2003-07-31 | Sun Microsystems, Inc. | Enhanced instruction scheduling after register allocation by employing traces |
US20030200540A1 (en) * | 2002-04-18 | 2003-10-23 | Anoop Kumar | Method and apparatus for integrated instruction scheduling and register allocation in a postoptimizer |
CN101506774A (zh) * | 2006-08-29 | 2009-08-12 | 高通股份有限公司 | 相依指令线程调度 |
-
2012
- 2012-08-24 CN CN201210307180.9A patent/CN102830954B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030145313A1 (en) * | 2002-01-30 | 2003-07-31 | Sun Microsystems, Inc. | Enhanced instruction scheduling after register allocation by employing traces |
US20030200540A1 (en) * | 2002-04-18 | 2003-10-23 | Anoop Kumar | Method and apparatus for integrated instruction scheduling and register allocation in a postoptimizer |
CN101506774A (zh) * | 2006-08-29 | 2009-08-12 | 高通股份有限公司 | 相依指令线程调度 |
Non-Patent Citations (2)
Title |
---|
WOLFRAM AMME等: "Data Dependence Analysis of Assembly Code", 《INTERNATIONAL JOURNAL OF PARALLEL PROGRAMMING》, vol. 28, no. 5, 1 October 2000 (2000-10-01), pages 431 - 467 * |
沈立等: "通过寄存器队列模型实现寄存器分配和指令调度", 《小型微型计算机系统》, vol. 25, no. 4, 21 April 2004 (2004-04-21), pages 757 - 761 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915180B (zh) * | 2014-03-10 | 2017-12-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN104915180A (zh) * | 2014-03-10 | 2015-09-16 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN106445678B (zh) * | 2016-07-21 | 2020-02-07 | 天津大学 | 一种降低指令级并行处理器功耗的并行度调整算法 |
CN106445678A (zh) * | 2016-07-21 | 2017-02-22 | 天津大学 | 一种降低指令级并行处理器功耗的并行度调整算法 |
CN107239260A (zh) * | 2017-05-11 | 2017-10-10 | 中国电子科技集团公司第三十八研究所 | 一种面向数字信号处理器的多谓词控制及编译优化方法 |
CN107239260B (zh) * | 2017-05-11 | 2020-07-24 | 中国电子科技集团公司第三十八研究所 | 一种面向数字信号处理器的多谓词控制及编译优化方法 |
CN107679221A (zh) * | 2017-10-19 | 2018-02-09 | 武汉大学 | 面向减灾任务的时空数据获取与服务组合方案生成方法 |
CN107679221B (zh) * | 2017-10-19 | 2021-03-16 | 武汉大学 | 面向减灾任务的时空数据获取与服务组合方案生成方法 |
CN109685453A (zh) * | 2018-12-07 | 2019-04-26 | 武汉金思路科技发展有限公司 | 智能识别工作流有效路径的方法 |
CN109685453B (zh) * | 2018-12-07 | 2023-07-04 | 中交第二公路勘察设计研究院有限公司 | 智能识别工作流有效路径的方法 |
CN112540750A (zh) * | 2019-09-23 | 2021-03-23 | 无锡江南计算技术研究所 | 自适应内建函数与指令操作选择翻译方法 |
CN113296788A (zh) * | 2021-06-10 | 2021-08-24 | 上海东软载波微电子有限公司 | 指令调度方法、装置、设备、存储介质及程序产品 |
CN113296788B (zh) * | 2021-06-10 | 2024-04-12 | 上海东软载波微电子有限公司 | 指令调度方法、装置、设备及存储介质 |
CN116841592A (zh) * | 2023-08-31 | 2023-10-03 | 腾讯科技(深圳)有限公司 | 指令管理方法、装置、计算机、存储介质及程序产品 |
CN116841592B (zh) * | 2023-08-31 | 2023-11-24 | 腾讯科技(深圳)有限公司 | 指令管理方法、装置、计算机、存储介质及程序产品 |
Also Published As
Publication number | Publication date |
---|---|
CN102830954B (zh) | 2014-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102830954B (zh) | 指令调度方法及装置 | |
Senge et al. | On the problem of error propagation in classifier chains for multi-label classification | |
KR101754462B1 (ko) | 동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치 | |
EP4040290A1 (en) | Arithmetic logic unit layout for a processor | |
CN103250131B (zh) | 包括用于早期远分支预测的影子缓存的单周期多分支预测 | |
CN104781786B (zh) | 使用延迟重构程序顺序的选择逻辑 | |
US10430191B2 (en) | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption | |
US9582321B2 (en) | System and method of data processing | |
US8943484B2 (en) | Code generation method and information processing apparatus | |
CN103645930B (zh) | 汇编级跨文件调度框架的构建方法 | |
US9195444B2 (en) | Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction | |
CN103377035A (zh) | 针对粗颗粒度流应用的流水并行化方法 | |
US9395986B2 (en) | Compiling method and compiling apparatus | |
CN104699464A (zh) | 一种基于依赖网格的指令级并行调度方法 | |
CN104111818A (zh) | 用于批量线程处理的处理器、处理方法和代码生成设备 | |
CN103116485A (zh) | 一种基于超长指令字专用指令集处理器的汇编器设计方法 | |
CN102156634B (zh) | 一种实现值关联间接跳转预测的方法 | |
Wang et al. | A speculative parallel simulated annealing algorithm based on Apache Spark | |
EP2799986B1 (en) | Apparatus and method for translating multithread program code | |
CN103268223A (zh) | 在编译过程中改善乘加类指令执行性能的方法 | |
Xie et al. | Adaptive preshuffling in Hadoop clusters | |
Popov et al. | Piecewise holistic autotuning of compiler and runtime parameters | |
CN104035825A (zh) | 跳转源列表处理方法、装置及编译器 | |
US11694129B2 (en) | Parallel solution generation | |
Cohen et al. | RAPPORT: running scientific high-performance computing applications on the cloud |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141029 Termination date: 20210824 |