CN117407060A - 一种指令处理方法和装置 - Google Patents

一种指令处理方法和装置 Download PDF

Info

Publication number
CN117407060A
CN117407060A CN202210853206.3A CN202210853206A CN117407060A CN 117407060 A CN117407060 A CN 117407060A CN 202210853206 A CN202210853206 A CN 202210853206A CN 117407060 A CN117407060 A CN 117407060A
Authority
CN
China
Prior art keywords
node
instruction
directed acyclic
acyclic graph
current node
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.)
Pending
Application number
CN202210853206.3A
Other languages
English (en)
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.)
Glenfly Tech Co Ltd
Original Assignee
Glenfly Tech Co Ltd
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 Glenfly Tech Co Ltd filed Critical Glenfly Tech Co Ltd
Priority to CN202210853206.3A priority Critical patent/CN117407060A/zh
Publication of CN117407060A publication Critical patent/CN117407060A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请涉及一种指令处理方法和装置。所述方法包括:根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;针对所述有向无环图中的当前结点,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点;将所述目标结点和所述当前结点合并为组合结点,将所述当前结点的下一个结点作为所述当前结点,并返回所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集。采用本方法能够提高指令执行效率。

Description

一种指令处理方法和装置
技术领域
本申请涉及计算机技术领域,特别是涉及一种指令处理方法和装置。
背景技术
图形处理器(Graphics Process Unit,GPU),可用用于屏幕显示、三维场景绘制、视频编解码、虚拟现实VR、增强显示AR、人工智能AI、并行深度神经网络等,是一种重要的智能并行计算芯片。无论是在传统的计算机,还是在各种移动设备,例如平板电脑、手机、智能电视、车载显示设备,都能见到GPU的身影,因此,设计一款高效的GPU以适应于并行计算的需求十分重要。
在GPU上执行的程序一般称为着色器(Shader),GPU编译器负责将着色器转换成可在目标GPU硬件平台上执行的一系列机器指令。然而,由于指令数量繁多且不同指令还间存在一系列依赖关系,这使得GPU在执行指令时往往需要花费较长时间且运行能耗较高,不利于提升GPU的指令执行效率。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高指令执行效率的指令处理方法和装置。
一种指令处理方法,所述方法包括:
根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;所述有向无环图用于表征所述待处理指令集中各待处理指令之间的依赖关系;所述有向无环图包括表征各所述待处理指令的结点,以及表征各所述依赖关系的边;
针对所述有向无环图中的当前结点,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点;
将所述目标结点和所述当前结点合并为组合结点,将所述当前结点的下一个结点作为所述当前结点,并返回所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;
基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集;所述目标指令集包括至少一个组合指令;所述组合指令由所述新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
在其中一个实施例中,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤之前,所述方法还包括:
判定所述当前结点为有效结点或者无效结点;
若所述当前结点为有效结点,则执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤。
在其中一个实施例中,在所述判定所述当前结点为有效结点或者无效结点的步骤之后,所述方法还包括:
若所述当前结点为无效结点,则将所述当前结点的下一个结点作为所述当前结点,并执行所述判定所述当前结点为有效结点或者无效结点的步骤。
在其中一个实施例中,所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点,包括:
在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点;
若所述候选结点具有一个,则将所述候选结点作为所述目标结点;若所述候选结点具有多个,则按照预设的结点选择规则,从多个所述候选结点中选择其中一个结点,作为所述目标结点。
在其中一个实施例中,在所述将所述目标结点和所述当前结点合并为组合结点的步骤之前,所述方法还包括:
获取待处理指令集所属目标平台的指令流水线特征;
若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间不能进行组合,则将所述当前结点的下一个结点作为所述当前结点,并执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点的步骤。
在其中一个实施例中,所述方法还包括:
若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间能进行组合,则执行所述将所述目标结点和所述当前结点合并为组合结点的步骤。
一种指令处理装置,所述装置包括:
生成模块,用于根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;所述有向无环图用于表征所述待处理指令集中各待处理指令之间的依赖关系;所述有向无环图包括表征各所述待处理指令的结点,以及表征各所述依赖关系的边;
确定模块,用于针对所述有向无环图中的当前结点,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点;
组合模块,用于将所述目标结点和所述当前结点合并为组合结点,将所述当前结点的下一个结点作为所述当前结点,并返回所述确定模块,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;
重排模块,用于基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集;所述目标指令集包括至少一个组合指令;所述组合指令由所述新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
在其中一个实施例中,所述装置还用于判定所述当前结点为有效结点或者无效结点;若所述当前结点为有效结点,则执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤。
在其中一个实施例中,所述装置还用于若所述当前结点为无效结点,则将所述当前结点的下一个结点作为所述当前结点,并执行所述判定所述当前结点为有效结点或者无效结点的步骤。
在其中一个实施例中,所述确定模块,具体用于在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点;若所述候选结点具有一个,则将所述候选结点作为所述目标结点;若所述候选结点具有多个,则按照预设的结点选择规则,从多个所述候选结点中选择其中一个结点,作为所述目标结点。
在其中一个实施例中,所述确定模块,具体还用于获取待处理指令集所属目标平台的指令流水线特征;若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间不能进行组合,则将所述当前结点的下一个结点作为所述当前结点,并执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点的步骤。
在其中一个实施例中,所述确定模块,具体还用于若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间能进行组合,则执行所述将所述目标结点和所述当前结点合并为组合结点的步骤。
上述指令处理方法和装置,通过根据待处理指令集的定值引用链,生成用于表征待处理指令集中各待处理指令之间的依赖关系的有向无环图;其中,有向无环图包括表征各待处理指令的结点,以及表征各依赖关系的边;然后,针对有向无环图中的当前结点,在有向无环图中确定与当前结点具有依赖关系的目标结点;将目标结点和当前结点合并为组合结点,将当前结点的下一个结点作为当前结点,并返回在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤,直至当前结点为有向无环图中的最后一个结点,得到新的有向无环图;再基于新的有向无环图对待处理指令集进行重新排序,得到目标指令集;目标指令集包括至少一个组合指令;组合指令由新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成;如此,可以实现从编译技术角度来解决指令合并问题,通过利用用于表征待处理指令集中各待处理指令之间的依赖关系的有向无环图来精确判断各待处理指令之间能否合并,避免了硬件平台的局限性;同时,可以组合所有存在依赖关系的指令,无需局限组合相邻指令,使得有效提高待处理指令集的指令组合率和安全性,使得得到的目标指令集更为简洁,进而有效提高了GPU执行指令的效率。
附图说明
图1为一个实施例中一种指令处理方法的流程示意图;
图2为一个实施例中一种像素着色器伪码的示意图;
图3为一个实施例中一种中间形式代码的示意图;
图4为一个实施例中一种像素着色器伪码的基本块标识的示意图;
图5为一个实施例中一种中间形式代码对应的DU链的示意图;
图6为一个实施例中一种有向无环图;
图7(a)为一个实施例中一种指令替换操作的效果示意图;
图7(b)为一个实施例中一种指令组合操作的效果示意图;
图8为一个实施例中另一种有向无环图;
图9为另一个实施例中一种有向无环图;
图10为另一个实施例中另一种有向无环图;
图11为一个实施例中一种目标指令集的示意图;
图12为另一个实施例中一种指令处理方法的流程示意图;
图13为一个实施例中一种指令组合策略流程图;
图14为一个实施例中一种指令处理装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
为了更好的描述本发明的实施例,下面先对本申请中用到的专用名词及相关概念进行解释说明。
DU链(define-use-chain,定值引用链)是一种关于变量数据流信息的稀疏表示,一个变量的DU链连接该变量的定值(define)到它的所有可能流经到的使用(usages)。
依赖关系(dependence)是一种约束代码中指令执行顺序的关系,这种关系是代码正确执行所必须遵循的。
其中,依赖关系主要分为控制依赖(control dependence)和数据依赖(datadependence);其中,控制依赖是程序控制流导致的一种约束,数据依赖是指令间数据流造成的一种约束。一组依赖关系可以用一个称为依赖图(dependence graph)的有向图来表示,在这种图中结点表示指令,边表示指令间的依赖关系。
在一个基本块中,由于不存在循环,因此它的依赖图总是一个有向无环图(DAG),称为基本块依赖DAG。基本块依赖DAG适用于任意层次的语言代码,如源代码、中间代码、目标指令。
在一个实施例中,如图1所示,提供了一种指令处理方法,以该方法应用于编译器为例进行说明,包括以下步骤:
步骤S110,根据待处理指令集的定值引用链,生成针对待处理指令集的有向无环图。
其中,待处理指令集可以是由至少两条待合并的指令所组成的指令集合。实际应用中,待处理指令集可以是一段MIR(中间形式代码),也可以是一段LIR(低级形式代码)。
其中,有向无环图用于表征待处理指令集中各待处理指令之间的依赖关系。该有向无环图包括表征各待处理指令的结点,以及表征各依赖关系的边。
具体实现中,编译器可以将某一程序(如,着色器(Shader))的伪码转化为中间形式代码或低级形式代码等待优化代码;然后,编译器将该待优化代码,作为上述的待处理指令集。
然后,编译器可以标识基本块。针对任一基本块中的待处理指令集,编译器可以获取该待处理指令集的定值引用链,并根据该待处理指令集的定值引用链,构建针对该待处理指令集的有向无环图(DAG)。
为了便于本领域技术人员的理解,下面使用像素着色器(PS,Pixel Shader)伪码为例来阐述具体实施方式。如图2所示,图2实例性地示出了一段像素着色器伪码。编译器可以对该段像素着色器伪码进行编译和一系列优化,即将该段像素着色器伪码转换为对应的一段中间形式代码(MIR)即待处理指令集。请参见图3,图3实例性地示出了一段像素着色器伪码对应的中间形式代码。其中,该中间形式代码中的每一条MIR指令写(define)一个符号寄存器,其中R#为通用寄存器,P#为预测寄存器,R811008~R811009表示PS的输入变量color,R811012~R811013表示PS的输入变量cond,R815104表示PS的输出变量gl_FragColor.x,R815106表示PS的输出变量gl_FragColor.z。PS片段中的操作转换成MIR中的指令码,如“+”转换成FADD,“*”转换成FMUL,比较符“<”转换成ICMP_LT等。需要说明的是,各指令前的数字代表当前指令的编号,由于一些优化删除了冗余指令,因此图3中的各条指令对应的编号并不连续。
然后,编译器则标识基本块,由于图2所示的像素着色器伪码中的所有MIR指令均位于同一基本块,即Block1。因此,该段像素着色器伪码的基本块标识如图4所示。针对Block1中的待处理指令集,编译器可以获取该待处理指令集对应的DU链。请参见图5,图5实例性地示出了一段中间形式代码对应的DU链。其中,图5中的DU链中的每一个定值(define)有一个使用(usage)。
编译器可以根据该DU链为图3所示的中间形式代码构建对应的依赖DAG,如图6所示的有向无环图。该有向无环图用于表征待处理指令集中各待处理指令之间的依赖关系。其中,该有向无环图包括表征各待处理指令的结点,以及表征各依赖关系的边。
具体来说,如图6所示,有向无环图中的一个结点Node包含一条指令,结点Node编号代表了结点Node内指令在指令片段内出现的先后顺序,编号越小指令出现越早,边代表指令间的依赖关系,图6中仅存在一种依赖关系,即数据依赖,前一条指令写寄存器,后一条指令使用这个寄存器。例如,这里指令8写R97632,指令12使用R97632,意味着指令12需在指令8执行若干个时钟周期之后才能执行,即这两条指令之间存在等待时间(latency),此依赖DAG图省略了latency标记。
步骤S120,针对有向无环图中的当前结点,在有向无环图中确定与当前结点具有依赖关系的目标结点。
具体实现中,编译器在确定该待处理指令的有向无环图后,编译器则可以依次开始处理每个结点,直至遍历完有向无环图中的所有结点;具体来说,编译器针对有向无环图中的当前结点,可以在有向无环图中确定出与该当前结点具有依赖关系的目标结点。其中,该依赖关系可以包括控制依赖和数据依赖等。实际应用中,目标结点也可以命名为该当前结点的使用(usages)结点。
实际应用中,与该当前结点具有依赖关系的结点可能是一个或多个。当与该当前结点具有依赖关系的结点为一个时,则该结点为该当前结点的使用(usages)结点。当与该当前结点具有依赖关系的结点为多个时,编译器则可以根据目标平台的一些特性在多个结点中选取一个最优的节点,作为该当前结点的使用(usages)结点。
步骤S130,将目标结点和当前结点合并为组合结点,将当前结点的下一个结点作为当前结点,并返回在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤,直至当前结点为有向无环图中的最后一个结点,得到新的有向无环图。
具体实现中,编译器确定该当前结点的最优使用结点后,编译器则可以根据目标平台的指令流水线特征,确定是否能够组合当前的定值(define)和usage Node。若可以进行组合,则将目标结点和当前结点合并为组合结点。然后,在进行下一个结点的判断,即将当前结点的下一个结点作为当前结点,并返回在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤。循环执行上述步骤,直至当前结点为有向无环图中的最后一个结点,得到新的有向无环图。
仍接上例,如图6中的Node0,该Node当前只包含指令8,并且还没有被组合过,是一个有效的Node,根据DU链,找到其define R97632的usage,即指令12,对应Node2。这里R97632只存在一个usage,因此认为Node2就是最优的usage node。Node0中只包含一条乘法指令FMUL,该指令属于ALG指令,写寄存器R97632。Node2中只包含一条格式转换指令,该指令使用R97632,即将R97632从浮点转换为整型,并将转换结果赋给R97640。若组合Node0和Node2,满足目标平台特征1和特征2,用SFWD替换组合中第一条指令所写寄存器R97632,并替换第二条指令中所读寄存器R97632,替换效果如图7(a)所示,图中符号+表示当前指令与后一条指令进行了组合,该组合中读R811008/R811009两个通用寄存器,写一个通用寄存器R97640,满足特征3,因此Node0和Node2满足组合条件。值得注意的是,如果指令8的R97632存在多个usage,则不能用SFWD替换指令8的R97632,假设最优的usage Node仍然为Node2,得到组合效果如图7(b)所示,指令8写R97632供其他usage node使用,同时也会写SFWD供指令12使用,但此组合需写两个寄存器R97632/R97640,违背了特征3,不能进行组合。
对满足组合条件的结点进行组合。由于组合用SFWD替代部分通用寄存器,使得数据流信息发生改变,所以需要及时更新DU链。组合时将usage Node里的指令合并到defineNode,让指向usage Node的边改为指向define Node,去除define和usage Node之间的边,将从usage Node出发的边改为从define Node出发,并将usage Node标为无效。
组合Node0和Node2。首先更新DU链,从图7(a)可以看出,R97632已完全被SFWD替代,需从图5所示的DU链中移除R97632对应的链。其次合并nodes的边和指令,将Node2中的指令并入Node0,让指向Node2的边指向Node0,从Node2发出的边改为从Node0发出,并将Node2标记为无效的Node,去除Node0和Node2之间的边,Node0和Node2的合并示意图如图8所示,由图可见,合并后Node0中存在两条指令,而Node2中不存在指令,两条虚线边是被去除的边。
至此Node0处理完毕,用相同的方法依次处理Node1,Node2,Node3,…,直到将所有Node处理完毕,图6所示的依赖DAG最终变成图9所示的依赖DAG,即新的有向无环图。
步骤S140,基于新的有向无环图对待处理指令集进行重新排序,得到目标指令集。
其中,目标指令集包括至少一个组合指令;组合指令由新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
具体实现中,编译器在获取到新的有向无环图后,则基于该新的有向无环图对对待处理指令集进行重新排序,得到包括至少一个组合指令的目标指令集。其中,该组合指令可以是指由至少两个待处理指令组合而成的指令。
仍接上例,编译器对对基本块block1内的指令进行重排,让组合中的第二条指令紧挨着组合中的第一条指令,两条指令在EUDP流水线上被当成一个操作。首先清空当前基本块内的指令,然后根据当前DAG依次选取合适的Node,并将Node内的指令加入基本块。DAG根结点集合中的Node互相没有依赖,因此每次可选取该集合中的任意一个Node,但为了保持大致的原始指令顺序,这里每次选取编号最小的那个Node,将所选Node包含的指令加入基本块,然后裁剪DAG,即将所选Node从DAG上删除,根结点集合也会随之改变,重复Node选取过程,直到根结点集合为空。
从图9可以看出,当前DAG的根集合为Node0,Node1,Node5,选取编号最小的Node0,将其包含的指令8和指令12加入基本块,然后从DAG上删除Node0,此时的DAG如图10所示,由图可见,根结点集合变为Node1,Node5,重复此过程直到根集合为空。
最终得到基本块的指令形式和顺序如图11所示,由图可见,图3所示的指令片段最终组合了3对指令,在后续优化和编译过程中,一个组合内的指令始终被捆绑在一起作为一个整体。图3中存在8条指令,即8个独立的指令操作,而图11中仅存在5个指令操作,能减少指令发射时间,并提高指令级并行。此外,每个组合都使用了SFWD,不需要给SFWD额外分配寄存器,在一定程度上能节约寄存器资源。
上述指令处理方法中,通过根据待处理指令集的定值引用链,生成用于表征待处理指令集中各待处理指令之间的依赖关系的有向无环图;其中,有向无环图包括表征各待处理指令的结点,以及表征各依赖关系的边;然后,针对有向无环图中的当前结点,在有向无环图中确定与当前结点具有依赖关系的目标结点;将目标结点和当前结点合并为组合结点,将当前结点的下一个结点作为当前结点,并返回在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤,直至当前结点为有向无环图中的最后一个结点,得到新的有向无环图;再基于新的有向无环图对待处理指令集进行重新排序,得到目标指令集;目标指令集包括至少一个组合指令;组合指令由新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成;如此,可以实现从编译技术角度来解决指令合并问题,通过利用用于表征待处理指令集中各待处理指令之间的依赖关系的有向无环图来精确判断各待处理指令之间能否合并,避免了硬件平台的局限性;同时,可以组合所有存在依赖关系的指令,无需局限组合相邻指令,使得有效提高待处理指令集的指令组合率和安全性,使得得到的目标指令集更为简洁,进而有效提高了GPU执行指令的效率。
在另一个实施例中,在有向无环图中确定与当前结点具有依赖关系的目标结点,包括:在有向无环图中确定与当前结点具有依赖关系的候选结点;若候选结点具有一个,则将候选结点作为目标结点;若候选结点具有多个,则按照预设的结点选择规则,从多个候选结点中选择其中一个结点,作为目标结点。
具体实现中,在有向无环图中确定与当前结点具有依赖关系的目标结点的过程中,编译器可以根据DU链,在有向无环图中确定与当前结点具有依赖关系的候选结点即在有向无环图中寻找该当前结点所赋值(define)的所有使用(usages)对应的Nodes即候选结点。然后,选取最优使用Node即目标结点,若只存在一个候选结点,则该候选结点就是最优的,编译器将候选结点作为目标结点;若存在多个候选结点,编译器则根据目标平台的一些特征或规则来挑选最佳的候选结点,作为目标结点。
本实施例的技术方案,编译器在有向无环图中确定与当前结点具有依赖关系的目标结点的过程中,若编译器在有向无环图中确定与当前结点具有依赖关系的候选结点具有多个时则按照目标平台的特征或规则来挑选最佳的候选结点,作为目标结点,使得可以为各个当前结点挑选出合适的目标结点进行结合,进而可以实现便于后续有效地对当前结点所表征的指令和目标结点所表征的指令进行组合。
在另一个实施例中,在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤之前,方法还包括:判定当前结点为有效结点或者无效结点;若当前结点为有效结点,则执行在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤。若当前结点为无效结点,则将当前结点的下一个结点作为当前结点,并执行判定当前结点为有效结点或者无效结点的步骤。
具体实现中,编译器在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤之前,还需要判定当前结点为有效结点或者无效结点;若当前结点为有效结点,则执行在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤。若当前结点为无效结点,则将当前结点的下一个结点作为当前结点,并执行判定当前结点为有效结点或者无效结点的步骤。需要说明的是,编译器执行在有向无环图中确定与当前结点具有依赖关系的目标结点的具体限定可以参见上文,在此不再赘述。
再接上例如,编译器在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤之前,编译器则判定当前结点是否被标记为无效结点。编译器组合图6中的Node0和Node2后,编译器则将该Node2标记为无效的Node,此时Node0处理完毕,编译器则利用上述相同的方法依次处理Node1,Node2,Node3,…,当编译器处理到Node2时,发现该Node无效即该Node2无效节点,编译器则无需处理直接跳过,继续处理后续Node,直到将所有Node处理完毕。
本实施例的技术方案,通过在有向无环图中确定与当前结点具有依赖关系的目标结点的步骤之前,判断当前结点为有效结点或者无效结点,若当前结点为无效结点,则直接跳过该无效结点,从而避免编译器该无效结点寻找对应的目标结点,有效减少编译器的数据处理量,提高了编译器处理指令集的效率。
在另一个实施例中,在将目标结点和当前结点合并为组合结点的步骤之前,方法还包括:获取待处理指令集所属目标平台的指令流水线特征;若根据指令流水线特征,判定目标结点所表征的待处理指令与当前结点所表征的待处理指令间不能进行组合,则将当前结点的下一个结点作为当前结点,并执行在有向无环图中确定与当前结点具有依赖关系的候选结点的步骤。
若根据指令流水线特征,判定目标结点所表征的待处理指令与当前结点所表征的待处理指令间能进行组合,则执行将目标结点和当前结点合并为组合结点的步骤。
具体实现中,编译器在将目标结点和当前结点合并为组合结点之前,编译器还可以预先判断该目标结点和当前结点是否可以进行合并,具体来说,编译器可以获取待处理指令集所属目标平台的指令流水线特征;并根据该指令流水线特征,判断目标结点所表征的待处理指令与当前结点所表征的待处理指令间是否能进行组合;
其中,目标平台可以具有以下一些指令组合方面的特征:
1.最多可两条指令进行组合;
2.支持组合:ALG+FMT,ALG+LGC,ALG+SEL,ALG+Branch,FMT+LGC,FMT+SEL,FMT+Branch,LGC+SEL,LGC+Branch,SEL+Branch。
其中,ALG代表计算指令,FMT代表格式转换指令,LGC代表逻辑指令,SEL代表选择指令,Branch条件分支指令。
3.一个组合最多可写1个通用寄存器R#,读3个通用寄存器R#;
4.组合里的所有指令被当作一个操作,在EUDP流水线的不同stage执行,流水线结束,所有指令均执行完毕。
5.支持特殊寄存器SFWD,用于存放组合中第一条指令的执行结果,第二条指令可快速读取该寄存器里的值而无需等待。需要说明的是,本公开并未列出目标平台的所有特征,不限于此。
当判定目标结点所表征的待处理指令与当前结点所表征的待处理指令间不能进行组合,则将当前结点的下一个结点作为当前结点,并执行在有向无环图中确定与当前结点具有依赖关系的候选结点的步骤。即编译器跳过当前结点,采用相同的处理方法对当前结点的下一个结点进行处理。当判定目标结点所表征的待处理指令与当前结点所表征的待处理指令间能进行组合,则执行将目标结点和当前结点合并为组合结点的步骤。需要说明的是,编译器执行将目标结点和当前结点合并为组合结点的步骤的具体限定可以参见上文,在此不再赘述。
在另一个实施例中,如图12所示,提供了一种指令处理方法,以该方法应用于编译器为例进行说明,包括以下步骤:
步骤S1210,根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;所述有向无环图用于表征所述待处理指令集中各待处理指令之间的依赖关系;所述有向无环图包括表征各所述待处理指令的结点,以及表征各所述依赖关系的边。
步骤S1220,针对所述有向无环图中的当前结点,判定所述当前结点为有效结点或者无效结点;
步骤S1230,若所述当前结点为有效结点,则在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点;
步骤S1240,若所述候选结点具有多个,则按照预设的结点选择规则,从多个所述候选结点中选择其中一个结点,作为所述目标结点。
步骤S1250,获取待处理指令集所属目标平台的指令流水线特征;
步骤S1260,若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间能进行组合,将所述目标结点和所述当前结点合并为组合结点;
步骤S1270,将所述当前结点的下一个结点作为所述当前结点,并返回所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;
步骤S1280,基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集;所述目标指令集包括至少一个组合指令;所述组合指令由所述新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
需要说明的是,上述步骤的具体限定可以参见上文对一种指令处理方法的具体限定。
在另一个实施例中,如图13所示,示例性地提供了一种指令组合策略流程图。其中,编译器标识基本块,得到基本块集合;针对基本块集合中的每个基本块的待处理指令集,编译器可以获取该待处理指令集的定值引用链,并根据该待处理指令集的定值引用链,构建针对该待处理指令集的有向无环图(DAG)。针对有向无环图中的每一个当前结点,编译器判定当前结点为有效结点或者无效结点。
若当前结点为有效结点,则在有向无环图中确定与当前结点具有依赖关系的目标结点即最优使用结点。编译器确定该当前结点的最优使用结点后,编译器则可以根据目标平台的指令流水线特征,确定是否能够组合当前的定值(define)和usage Node。若可以进行组合,则将目标结点和当前结点合并为组合结点,将当前结点的下一个结点作为当前结点即继续处理后续结点。
若当前结点为无效结点,则将当前结点的下一个结点作为当前结点即继续处理后续结点,直到有向无环图中所有结点处理完毕,得到新的有向无环图。编译器在获取到新的有向无环图后,则基于该新的有向无环图对对待处理指令集进行重新排序,得到包括至少一个组合指令的目标指令集。其中,该组合指令可以是指由至少两个待处理指令组合而成的指令。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的指令处理方法的指令处理装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个指令处理装置实施例中的具体限定可以参见上文中对于指令处理方法的限定,在此不再赘述。
在一个实施例中,如图14所示,提供了一种指令处理装置,包括:
生成模块1410,用于根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;所述有向无环图用于表征所述待处理指令集中各待处理指令之间的依赖关系;所述有向无环图包括表征各所述待处理指令的结点,以及表征各所述依赖关系的边;
确定模块1420,用于针对所述有向无环图中的当前结点,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点;
组合模块1430,用于将所述目标结点和所述当前结点合并为组合结点,将所述当前结点的下一个结点作为所述当前结点,并返回所述确定模块,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;
重排模块1440,用于基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集;所述目标指令集包括至少一个组合指令;所述组合指令由所述新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
在其中一个实施例中,所述装置还用于判定所述当前结点为有效结点或者无效结点;若所述当前结点为有效结点,则执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤。
在其中一个实施例中,所述装置还用于若所述当前结点为无效结点,则将所述当前结点的下一个结点作为所述当前结点,并执行所述判定所述当前结点为有效结点或者无效结点的步骤。
在其中一个实施例中,所述确定模块,具体用于在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点;若所述候选结点具有一个,则将所述候选结点作为所述目标结点;若所述候选结点具有多个,则按照预设的结点选择规则,从多个所述候选结点中选择其中一个结点,作为所述目标结点。
在其中一个实施例中,所述确定模块,具体还用于获取待处理指令集所属目标平台的指令流水线特征;若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间不能进行组合,则将所述当前结点的下一个结点作为所述当前结点,并执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点的步骤。
在其中一个实施例中,所述确定模块,具体还用于若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间能进行组合,则执行所述将所述目标结点和所述当前结点合并为组合结点的步骤。
上述指令处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (12)

1.一种指令处理方法,其特征在于,所述方法包括:
根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;所述有向无环图用于表征所述待处理指令集中各待处理指令之间的依赖关系;所述有向无环图包括表征各所述待处理指令的结点,以及表征各所述依赖关系的边;
针对所述有向无环图中的当前结点,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点;
将所述目标结点和所述当前结点合并为组合结点,将所述当前结点的下一个结点作为所述当前结点,并返回所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;
基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集;所述目标指令集包括至少一个组合指令;所述组合指令由所述新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
2.根据权利要求1所述的方法,其特征在于,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤之前,所述方法还包括:
判定所述当前结点为有效结点或者无效结点;
若所述当前结点为有效结点,则执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤。
3.根据权利要求2所述的方法,其特征在于,在所述判定所述当前结点为有效结点或者无效结点的步骤之后,所述方法还包括:
若所述当前结点为无效结点,则将所述当前结点的下一个结点作为所述当前结点,并执行所述判定所述当前结点为有效结点或者无效结点的步骤。
4.根据权利要求1所述的方法,其特征在于,所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点,包括:
在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点;
若所述候选结点具有一个,则将所述候选结点作为所述目标结点;若所述候选结点具有多个,则按照预设的结点选择规则,从多个所述候选结点中选择其中一个结点,作为所述目标结点。
5.根据权利要求4所述的方法,其特征在于,在所述将所述目标结点和所述当前结点合并为组合结点的步骤之前,所述方法还包括:
获取待处理指令集所属目标平台的指令流水线特征;
若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间不能进行组合,则将所述当前结点的下一个结点作为所述当前结点,并执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点的步骤。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间能进行组合,则执行所述将所述目标结点和所述当前结点合并为组合结点的步骤。
7.一种指令处理装置,其特征在于,所述装置包括:
生成模块,用于根据待处理指令集的定值引用链,生成针对所述待处理指令集的有向无环图;所述有向无环图用于表征所述待处理指令集中各待处理指令之间的依赖关系;所述有向无环图包括表征各所述待处理指令的结点,以及表征各所述依赖关系的边;
确定模块,用于针对所述有向无环图中的当前结点,在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点;
组合模块,用于将所述目标结点和所述当前结点合并为组合结点,将所述当前结点的下一个结点作为所述当前结点,并返回所述确定模块,直至所述当前结点为所述有向无环图中的最后一个结点,得到新的有向无环图;
重排模块,用于基于所述新的有向无环图对所述待处理指令集进行重新排序,得到目标指令集;所述目标指令集包括至少一个组合指令;所述组合指令由所述新的有向无环图中的至少一个组合结点所表征的至少两个待处理指令组合而成。
8.根据权利要求7所述的装置,其特征在于,所述装置还用于判定所述当前结点为有效结点或者无效结点;若所述当前结点为有效结点,则执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的目标结点的步骤。
9.根据权利要求8所述的装置,其特征在于,所述装置还用于若所述当前结点为无效结点,则将所述当前结点的下一个结点作为所述当前结点,并执行所述判定所述当前结点为有效结点或者无效结点的步骤。
10.根据权利要求7所述的装置,其特征在于,所述确定模块,具体用于在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点;若所述候选结点具有一个,则将所述候选结点作为所述目标结点;若所述候选结点具有多个,则按照预设的结点选择规则,从多个所述候选结点中选择其中一个结点,作为所述目标结点。
11.根据权利要求10所述的装置,其特征在于,所述确定模块,具体还用于获取待处理指令集所属目标平台的指令流水线特征;若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间不能进行组合,则将所述当前结点的下一个结点作为所述当前结点,并执行所述在所述有向无环图中确定与所述当前结点具有依赖关系的候选结点的步骤。
12.根据权利要求11所述的装置,其特征在于,所述确定模块,具体还用于若根据所述指令流水线特征,判定所述目标结点所表征的待处理指令与所述当前结点所表征的待处理指令间能进行组合,则执行所述将所述目标结点和所述当前结点合并为组合结点的步骤。
CN202210853206.3A 2022-07-07 2022-07-07 一种指令处理方法和装置 Pending CN117407060A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210853206.3A CN117407060A (zh) 2022-07-07 2022-07-07 一种指令处理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210853206.3A CN117407060A (zh) 2022-07-07 2022-07-07 一种指令处理方法和装置

Publications (1)

Publication Number Publication Date
CN117407060A true CN117407060A (zh) 2024-01-16

Family

ID=89487678

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210853206.3A Pending CN117407060A (zh) 2022-07-07 2022-07-07 一种指令处理方法和装置

Country Status (1)

Country Link
CN (1) CN117407060A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140082330A1 (en) * 2012-09-14 2014-03-20 Qualcomm Innovation Center, Inc. Enhanced instruction scheduling during compilation of high level source code for improved executable code
CN108345937A (zh) * 2017-01-06 2018-07-31 谷歌有限责任公司 循环与库融合
US20210248445A1 (en) * 2020-02-07 2021-08-12 Google Llc Computational graph optimization
US20220172058A1 (en) * 2020-11-30 2022-06-02 International Business Machines Corporation Weight-based local modulation of weight update in neural networks

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140082330A1 (en) * 2012-09-14 2014-03-20 Qualcomm Innovation Center, Inc. Enhanced instruction scheduling during compilation of high level source code for improved executable code
CN108345937A (zh) * 2017-01-06 2018-07-31 谷歌有限责任公司 循环与库融合
US20210248445A1 (en) * 2020-02-07 2021-08-12 Google Llc Computational graph optimization
US20220172058A1 (en) * 2020-11-30 2022-06-02 International Business Machines Corporation Weight-based local modulation of weight update in neural networks

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
任坤;严晓浪;秦兴;孙玲玲;: "一个新型ASIP编译器的设计和实现", 浙江大学学报(工学版), no. 04, 15 April 2008 (2008-04-15), pages 553 - 557 *

Similar Documents

Publication Publication Date Title
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
CN112579063B (zh) 一种用于深度学习编译器中探索优化空间的加速方法
US9407287B2 (en) Parallel history search and encoding for dictionary-based compression
JP6938229B2 (ja) クリークを介してグラフィックスを圧縮するシステム及び方法
CN113703775B (zh) 一种编译方法、装置、设备及存储介质
RU2629440C2 (ru) Устройство и способ для ускорения операций сжатия и распаковки
JP2009116854A (ja) スキャン演算を遂行するシステム、方法、及びコンピュータ・プログラムプロダクト
CN112835627B (zh) 用于单指令多线程或单指令多数据类型处理器的近似最近邻域搜索
JP5846005B2 (ja) プログラム、コード生成方法および情報処理装置
US7386843B2 (en) Method and system for register allocation
JP6432450B2 (ja) 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム
Bisson et al. High performance exact triangle counting on gpus
US9137336B1 (en) Data compression techniques
US11226798B2 (en) Information processing device and information processing method
JP2013206291A (ja) プログラム、コード生成方法および情報処理装置
CN116368494A (zh) 一种神经网络编译优化方法和相关装置
US20190278574A1 (en) Techniques for transforming serial program code into kernels for execution on a parallel processor
Kerbl et al. Revisiting the vertex cache: Understanding and optimizing vertex processing on the modern gpu
Boyer et al. GBLA: Gröbner basis linear algebra package
CN117407060A (zh) 一种指令处理方法和装置
US11714619B2 (en) Method and apparatus for retaining optimal width vector operations in arbitrary/flexible vector width architecture
CN104025042A (zh) 编码以增加指令集密度
US11947941B2 (en) Dynamic computation offloading to graphics processing unit
JP2012014526A (ja) プログラムコードの構造変換装置、並びにコード構造変換プログラム
CN115563116A (zh) 一种数据库表扫描方法、装置以及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Country or region after: China

Address after: 200135, 11th Floor, Building 3, No. 889 Bibo Road, China (Shanghai) Pilot Free Trade Zone, Pudong New Area, Shanghai

Applicant after: Granfei Intelligent Technology Co.,Ltd.

Address before: 200135 Room 201, No. 2557, Jinke Road, China (Shanghai) pilot Free Trade Zone, Pudong New Area, Shanghai

Applicant before: Gryfield Intelligent Technology Co.,Ltd.

Country or region before: China