CN116893850B - 一种硬件循环指令转换方法及编译器 - Google Patents
一种硬件循环指令转换方法及编译器 Download PDFInfo
- Publication number
- CN116893850B CN116893850B CN202310837973.XA CN202310837973A CN116893850B CN 116893850 B CN116893850 B CN 116893850B CN 202310837973 A CN202310837973 A CN 202310837973A CN 116893850 B CN116893850 B CN 116893850B
- Authority
- CN
- China
- Prior art keywords
- loop
- circulation
- node
- hardware
- instruction
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 13
- 238000004364 calculation method Methods 0.000 claims description 4
- 125000004122 cyclic group Chemical group 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 12
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 238000013507 mapping Methods 0.000 description 4
- 238000012937 correction Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种硬件循环指令转换方法及编译器,所述方法包括以下步骤:S1、递归处理标量控制流循环语句获取循环节点链层结构,标志各个循环节点嵌套深度、最内层循环节点嵌套深度,建立循环层级模型;S2、根据硬件处理器循环嵌套层数最大值,计算各个循环节点硬件循环指令嵌套层数,并在不能转换为硬件循环指令时,修正循环层级模型,将标量控制流循环语句转换为硬件循环指令形式。有益效果是将标量控制流循环语句转换为处理器硬件循环指令。
Description
【技术领域】
本发明涉及计算机技术领域,具体涉及一种硬件循环指令转换方法及编译器。
【背景技术】
编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序。
递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
现存的许多硬件架构,在实现程序中的循环语句时,往往采用基于控制流的循环语句。基于控制流的循环语句,需要执行循环次数的修改指令,循环条件的判断指令,循环语句的分支跳转指令,执行指令条数较多。在循环嵌套层数较多时,控制流的分支跳转比较多。在分支跳转预测失败时,也会浪费指令周期。
因此许多硬件架构(NPU(Neural-network Processing Units)、DSP(DigitalSignal Processing)等)采用硬件循环指令来改进控制流循环语句的执行效率,提高指令发射效率、减少分支跳转预测失败时的指令周期浪费。编程人员在编写循环语句时,往往还是基于通用的标量控制流的方式。因此需要识别标量控制流循环语句,并将其转换为硬件支持的硬件循环指令。
例如,骁龙处理器中世界级的Qualcomm Hexagon数字信号处理器(DSP)支持多种多媒体功能,并且经过优化可实现高性能和高能效。Hexagon DSP能够卸载CPU任务,利用异构计算支持始终在线任务,例如音频和显示,Hexagon DSP架构的核心是在低功耗的情况下能高性能的处理各种应用,追求较高的能效比;Hexagon的硬件循环实现方案最多只能嵌套两层的硬件循环指令。Hexagon实现的DSP架构下的标量控制流循环语句转换为硬件循环指令的编译方案:从最内层循环开始,由内而外,执行硬件循环指令转换;对于嵌套循环,硬件指令loop0作为内循环,硬件指令loop1作为外循环;如果程序中存在多个嵌套的循环,只能将最内层的两个标量循环转换为硬件循环指令,其他外层循环使用控制流方式实现循环语句。Hexagon的硬件循环实现方案适用于DSP(Digital Signal Processor)应用领域中程序循环嵌套层级不多的场景。
在深度学习领域的应用场景中循环嵌套层级较多。对于类似NPU的深度学习处理器架构,硬件循环指令只支持嵌套两层循环,其他外层循环仍然采用控制流方式实现循环语句,性能并不能得到充足的提升。
对于循环嵌套层级较多的场景,硬件处理器(NPU等)需要尽可能多的将标量控制流循环语句转换为硬件循环指令,仅仅支持嵌套两层的硬件循环指令远远达不到性能要求。当然,不同的硬件架构由于处理能力、应用场景不同,能够支持的硬件循环指令的嵌套层数不同,硬件循环指令生成方案需要支持不同硬件架构的硬件循环指令嵌套层数。
公布号为CN115185524A,名称《向量指令的识别方法、装置、电子设备及计算机可读存储介质》的中国发明专利,公开识别方法包括:获取标量指令;根据向量指令维度映射规则以及指令配置表将所述标量指令映射为向量指令;根据向量指令维度有效性规则判断所述向量指令的有效性;其中,所述向量指令维度有效性规则包括验证指令映射结果的有效性的规则;如果所述向量指令有效,则所述向量指令识别成功;通过向量指令维度映射规则、指令配置表以及向量指令维度有效性规则识别向量指令,解决了现有技术中将标量指令转换为向量指令时复杂、通用性不高且无法区分向量指令的技术问题。
本发明针对将标量控制流循环语句受限于硬件处理器循环嵌套层级、不能完全转换为硬件循环指令,处理器执行性能不能得到充足提升的技术问题,对硬件循环指令转换方法及编译器进行了技术改进。
【发明内容】
本发明的目的是,提供一种将标量控制流循环语句转换为处理器硬件循环指令的方法。
为实现上述目的,本发明采取的技术方案是一种硬件循环指令转换方法,包括以下步骤:
S1、递归处理标量控制流循环语句获取循环节点链层结构,标志各个循环节点嵌套深度、最内层循环节点嵌套深度,建立循环层级模型;
S2、根据硬件处理器循环嵌套层数最大值,计算各个循环节点硬件循环指令嵌套层数,并在不能转换为硬件循环指令时,修正循环层级模型,将标量控制流循环语句转换为硬件循环指令形式。
优选地,所述硬件循环指令嵌套层数最大值为MaxIndex,所述硬件循环指令为loop,所述硬件循环指令参数包括循环变量初始值start_value、循环变量终止值end_value、循环变量增长步长step_value、循环体包含的指令数目loop_size。
优选地,所述的一种硬件循环指令转换方法,步骤S1具体包括以下子步骤:
S11、从标量控制流循环语句最内层的循环节点开始,由子循环节点到父循节点环递归处理,获取循环节点链层结构;
S12、标志每个循环节点L在循环节点链层结构中的嵌套深度Depth[L];
S13、标志每个循环节点L在循环节点链层结构中最内层循环节点嵌套深度MaxLfDepth[L],如果循环节点L有多个子循环节点,MaxLfDepth[L]为多个子循环节点最内层循环节点嵌套深度中的最大值。
优选地,所述的一种硬件循环指令转换方法,步骤S2具体包括以下子步骤:
S21、从Depth最大的循环节点开始迭代,将标量控制流循环语句循环节点转换为硬件循环指令;
S22、获取当前循环节点L信息,得到硬件循环指令循环变量初始值start_value,循环变量终止值end_value,循环变量增长步长step_value;
S23、如果当前循环节点L不能转换为硬件循环指令,当前循环节点MaxLfDepth[L]减一,并递归修正循环节点MaxLfDepth,执行步骤S26;
S24、计算当前循环节点L的硬件循环指令嵌套层数LoopIndex,计算公式为LoopIndex=MaxLfDepth[L]–Depth[L],并在当前循环节点L结束位置添加Endloop#LoopIndex;
S25、根据当前循环节点L的LoopIndex和Endloop#LoopIndex计算循环体包含的指令数目loop_size,将当前循环节点L转换为硬件循环指令中间表示loop#LoopIndexstart_value,end_value,step_value,loop_size;
S26、如果当前循环节点L是最外层循环节点或者硬件循环指令嵌套层数LoopIndex已经达到硬件循环指令嵌套层数最大值MaxIndex,迭代结束;否则,迭代处理Depth减一后的循环节点,执行步骤S22。
优选地,所述的一种硬件循环指令转换方法,步骤S2具体还包括以下子步骤:
S27、将硬件循环指令中间表示loop#LoopIndex替换为硬件循环指令loop。
优选地,所述的一种硬件循环指令转换方法,步骤S23修正循环节点MaxLfDepth具体包括以下子步骤:
S231、从当前循环节点L开始,由子循环节点到父循环节点执行步骤S232、S233递归处理,一直到循环节点没有父循环节点为止;
S232、获得当前循环节点L的父循环节点ParentL;
S233、获取父循环节点ParentL中所有子循环节点SubL对应的MaxLfDepth[SubL]中的最大值,并将最大值赋值给父循环节点ParentL的MaxLfDepth[ParentL]。
本发明的又一目的是,提供一种将标量控制流循环语句转换为处理器硬件循环指令的编译器。
为实现上述又一目的,本发明采取的技术方案是一种硬件循环指令转换编译器,用于执行上述的一种硬件循环指令转换方法。
本发明一种硬件循环指令转换方法及编译器有益效果如下:在满足处理器硬件循环指令嵌套层级约束的条件下,1、能够将标量控制流循环语句转换为任意硬件处理器架构支持的硬件循环指令;2、能够支持任意硬件处理器架构的硬件循环指令嵌套层级最大LoopIndex限制。
【附图说明】
图1是一种硬件循环指令转换方法步骤图。
图2是实施例2标量控制流循环语句循环层级模型示意图。
图3是实施例2依据循环层级模型得到的硬件循环指令LoopIndex示意图。
图4是实施例3标量控制流循环语句循环层级模型示意图。
图5是实施例3标量控制流循环语句修正循环MaxLfDepth后的循环层级模型示意图。
图6是实施例3依据循环层级模型得到的硬件循环指令LoopIndex示意图。
说明书和附图中涉及的英文及英文缩写解释如下:
L:标量控制流循环语句循环节点;
For XXX:循环层级模型循环节点;
Depth:循环节点在循环层级模型中嵌套深度标记,Depth[L]指循环节点L在循环层级模型中嵌套深度;
MaxLfDepth:循环节点所在循环层级模型最内层循环节点嵌套深度标记,MaxLfDepth[L]指循环节点L所在循环层级模型最内层循环节点嵌套深度;
MaxIndex:硬件处理器循环嵌套层数最大值;
loop:硬件循环指令;
LoopIndex:硬件循环指令嵌套层数,范围为Loop0-LoopMaxIndex,其中Loop0为硬件循环指令最内嵌套层;
loop#LoopIndex:中间表示,第LoopIndex嵌套层硬件循环指令;
Endloop#LoopIndex:中间表示,第LoopIndex嵌套层硬件循环指令结束;
start_value:硬件循环指令参数,循环变量初始值;
end_value:硬件循环指令参数,循环变量终止值;
step_value:硬件循环指令参数,循环变量增长步长;
loop_size:硬件循环指令参数,循环体包含的指令数目。
【具体实施方式】
下面将详细描述本发明的各个方面的特征和示例性实施例。在下面的详细描述中,提出了许多具体细节,以便提供对本发明的全面理解。但是对于本领域技术人员来说很明显的是,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过发明的示例来提供对本发明的更好的理解。本发明决不限于下面所提出的任何具体配置和方法,而是在不脱离本发明构思的前提下覆盖了元素、部件和方法的任何修改、替换和改进。在附图和下面的描述中,没有示出公知的结构和技术,以便避免对本发明造成不必要的模糊。
实施例1
本实施例实现一种硬件循环指令转换方法。
本实施例方法实现将标量控制流循环语句转换为硬件循环指令。不同硬件处理器支持的硬件循环指令嵌套层级往往不同,本实施例需要在满足处理器硬件循环指令嵌套层级约束的条件下,识别标量循环语句,并将其转换为硬件支持的硬件循环指令。
本实施例方法的核心在于:
1.循环层级模型建立方法:包括循环的MaxLfDepth建立方法;
2.硬件循环指令生成方法:包括循环的LoopIndex计算方法和MaxLfDepth修正方法。
本实施例方法实现将如下所示的标量循环语句转换为硬件循环指令。本实施例标量控制流循环语句,需要执行循环次数的修改指令,循环条件的判断指令,循环语句的分支跳转指令,执行指令条数较多。
本实施例硬件循环指令的形式如下所示。硬件循环指令共四个参数:循环变量初始值,循环变量终止值,循环变量增长步长,循环体包含的指令数目。
图1是一种硬件循环指令转换方法步骤图。如附图1所示,本实施方法包括以下步骤:
1、建立循环层级模型
根据标量控制流循环语句循环的嵌套层级,建立循环层级模型。
具体步骤如下:
(1)从最内层的循环节点开始,由子循环节点到父循节点环递归处理。
(2)将每个循环节点L的深度标记Depth[L]=LoopDepth。
(3)将每个循环节点L的最内层循环节点的深度标记MaxLfDepth[L]=Depth ofInnerLoop。如果循环节点有多个子节点,其最内层循环节点的深度为所有子节点的最内层循环节点深度中最大值。
2、按照循环Depth从大到小顺序生成硬件循环指令
根据循环层级模型,将标量控制流循环语句转换为硬件循环指令形式。
步骤如下:
(1)从标量控制流循环语句最大Depth的循环开始迭代转换为硬件循环指令,最大Depth的循环处理完之后,处理标量控制流循环语句Depth减一后的循环,一直到标量控制流循环语句最外层的循环或者循环生成的硬件循环指令LoopIndex超过硬件支持的硬件循环嵌套层数最大值MaxIndex。
(2)获取循环信息:循环变量初始值start_value,循环变量终止值end_value,循环变量增长步长step_value,并依据特定硬件架构的硬件循环指令的约束条件和循环信息判断循环节点L能否转换为硬件循环指令。
(3)如果当前循环节点L不能转换为硬件循环指令,那么MaxLfDepth[L]减一,并修正循环的MaxLfDepth。修正完以后,继续从当前Depth迭代处理下一个循环。
(4)如果当前循环节点L能转换为硬件循环指令,那么计算当前循环节点L的LoopIndex,计算公式为:LoopIndex=MaxLfDepth[L]–Depth[L]。并在循环结束位置添加Endloop#LoopIndex。
(5)根据循环的LoopIndex和Endloop#LoopIndex计算每个循环体包含的指令数目loop_size,即循环体包含的指令数目,指令数目不包含指令Endloop#LoopIndex。将循环节点L转换为硬件循环指令:
loop#LoopIndex start_value,end_value,step_value,loop_size
loop#LoopIndex在生成真正的硬件循环指令时,可以转换为loop。
修正循环MaxLfDepth的步骤如下:
(1)从当前Depth的循环节点L开始,由子循环节点到父循环节点递归处理。一直到循环节点没有父循环节点为止。
(2)获得当前Depth的循环节点L的父循环节点ParentL。
(3)获取父循环节点中所有子循环节点SubL对应的MaxLfDepth[SubL]中的最大值,并将最大值赋值给ParentL的MaxLfDepth[ParentL]。
本本实施例方法有益效果:
1.能够将标量循环语句转换为任意硬件架构支持的硬件循环指令。
2.能够支持任意硬件架构的硬件循环指令嵌套层级最大LoopIndex限制。
实施例2
本实施例实现一种硬件循环指令转换方法。本实施例是实施例1的具体实施。
本实施具体分析如下所示的标量控制流循环语句转换为硬件循环指令。
本实施例硬件处理器支持的硬件循环指令嵌套层数最大值MaxIndex为8。
1、建立循环层级模型
图2是实施例2标量控制流循环语句循环层级模型示意图。如附图2所示,首先按照实施例1所述循环的MaxLfDepth建立方法建立的循环层级模型。
2、按照循环Depth从大到小顺序生成硬件循环指令
图3是实施例2依据循环层级模型得到的硬件循环指令LoopIndex示意图。如附图3所示,本实施例生成LoopIndex的过程如下:
1)For k满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=0,For k转换为Loop0,并在For k结束位置添加Endloop0。
2)For j满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=1,For j转换为Loop1,并在For j结束位置添加Endloop1。
3)For kk满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=0,For kk转换为Loop0,并在For kk结束位置添加Endloop0。
4)For i满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=2,For i转换为Loop2,并在For i结束位置添加Endloop2。
5)按照循环的LoopIndex和Endloop#LoopIndex计算每个硬件循环指令的loop_size,即循环体包含的指令数目。
最终转换为硬件循环指令如下所示。
实施例3
本实施例实现一种硬件循环指令转换方法。本实施例是实施例1的具体实施。
本实施具体分析如下所示的标量控制流循环语句转换为硬件循环指令。
本实施例硬件处理器结构支持的硬件循环指令嵌套层数最大值MaxIndex为8。
1、建立循环层级模型
图4是实施例3标量控制流循环语句循环层级模型示意图。如附图4所示,首先按照实施例1所述循环的MaxLfDepth建立方法建立的循环层级模型。
2、按照循环Depth从大到小顺序生成硬件循环指令
图6是实施例3依据循环层级模型得到的硬件循环指令LoopIndex示意图。如附图6所示,本实施例生成LoopIndex的过程如下:
1)For i9满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=0,For i9转换为Loop0,并在For i9结束位置添加Endloop0。
2)For i8不满足硬件循环指令约束条件。图5是实施例3标量控制流循环语句修正循环MaxLfDepth后的循环层级模型示意图。如附图5所示,本实施例需要调用MaxLfDepth修正方法修正循环层级模型,那么MaxLfDepth[For i8]减一,并修正循环的MaxLfDepth。
3)For i7满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=1,For i7转换为Loop1,并在For i7结束位置添加Endloop1。
4)For j3满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=0,For j3转换为Loop0,并在For j3结束位置添加Endloop0。
5)For i6满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=2,For i6转换为Loop2,并在For i6结束位置添加Endloop2。
6)For j2满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=1,For j2转换为Loop1,并在For j2结束位置添加Endloop1。
7)For i5满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=3,For i5转换为Loop3,并在For i5结束位置添加Endloop3。
8)For j1满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=2,For j1转换为Loop2,并在For j1结束位置添加Endloop2。
9)For i4满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=4,For i4转换为Loop4,并在For i4结束位置添加Endloop4。
10)For j0满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=3,For j0转换为Loop3,并在For j0结束位置添加Endloop3。
11)For i3满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=5,For i3转换为Loop5,并在For i3结束位置添加Endloop5。
12)For i2满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=6,For i2转换为Loop6,并在For i2结束位置添加Endloop6。
13)For i1满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=7,For i1转换为Loop7,并在For i1结束位置添加Endloop7。
14)For i0满足硬件循环指令约束条件,生成硬件循环指令,获取循环信息。其LoopIndex为MaxLfDepth–Depth=8,8等于硬件支持的嵌套层数最大值MaxIndex,退出。
按照循环的LoopIndex和Endloop#LoopIndex计算每个硬件循环指令的loop_size,即循环体包含的指令数目。
最终转换为硬件循环指令如下所示。
本领域普通技术人员可以理解,实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和补充,这些改进和补充也应视为本发明的保护范围。
Claims (5)
1.一种硬件循环指令转换方法,其特征在于包括以下步骤:
S1、递归处理标量控制流循环语句获取循环节点链层结构,标志各个循环节点嵌套深度、最内层循环节点嵌套深度,建立循环层级模型;
S2、根据硬件处理器循环嵌套层数最大值,计算各个循环节点硬件循环指令嵌套层数,并在不能转换为硬件循环指令时,修正循环层级模型,将标量控制流循环语句转换为硬件循环指令形式;
所述步骤S1具体包括以下子步骤:
S11、从标量控制流循环语句最内层的循环节点开始,由子循环节点到父循节点环递归处理,获取循环节点链层结构;
S12、标志每个循环节点L在循环节点链层结构中的嵌套深度Depth[L];
S13、标志每个循环节点L在循环节点链层结构中最内层循环节点嵌套深度MaxLfDepth[L],如果循环节点L有多个子循环节点,MaxLfDepth[L]为多个子循环节点最内层循环节点嵌套深度中的最大值;所述
步骤S2具体包括以下子步骤:
S21、从Depth最大的循环节点开始迭代,将标量控制流循环语句循环节点转换为硬件循环指令;
S22、获取当前循环节点L信息,得到硬件循环指令循环变量初始值start_value,循环变量终止值end_value,循环变量增长步长step_value;
S23、如果当前循环节点L不能转换为硬件循环指令,当前循环节点MaxLfDepth[L]减一,并递归修正循环节点MaxLfDepth,执行步骤S26;
S24、计算当前循环节点L的硬件循环指令嵌套层数LoopIndex,计算公式为LoopIndex=MaxLfDepth[L]–Depth[L],并在当前循环节点L结束位置添加Endloop#LoopIndex;
S25、根据当前循环节点L的LoopIndex和Endloop#LoopIndex计算循环体包含的指令数目loop_size,将当前循环节点L转换为硬件循环指令中间表示loop#LoopIndex start_value,end_value,step_value,loop_size;
S26、如果当前循环节点L是最外层循环节点或者硬件循环指令嵌套层数LoopIndex已经达到硬件循环指令嵌套层数最大值MaxIndex,迭代结束;否则,迭代处理Depth减一后的循环节点,执行步骤S22。
2.根据权利要求1所述的一种硬件循环指令转换方法,其特征在于:所述硬件循环指令嵌套层数最大值为MaxIndex,所述硬件循环指令为loop,所述硬件循环指令参数包括循环变量初始值start_value、循环变量终止值end_value、循环变量增长步长step_value、循环体包含的指令数目loop_size。
3.根据权利要求1所述的一种硬件循环指令转换方法,其特征在于步骤S2具体还包括以下子步骤:
S27、将硬件循环指令中间表示loop#LoopIndex替换为硬件循环指令loop。
4.根据权利要求1所述的一种硬件循环指令转换方法,其特征在于步骤S23修正循环节点MaxLfDepth具体包括以下子步骤:
S231、从当前循环节点L开始,由子循环节点到父循环节点执行步骤S232、S233递归处理,一直到循环节点没有父循环节点为止;
S232、获得当前循环节点L的父循环节点ParentL;
S233、获取父循环节点ParentL中所有子循环节点SubL对应的MaxLfDepth[SubL]中的最大值,并将最大值赋值给父循环节点ParentL的MaxLfDepth[ParentL]。
5.一种硬件循环指令转换编译器,其特征在于:用于执行权利要求1至权利要求4任一权利要求所述的一种硬件循环指令转换方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310837973.XA CN116893850B (zh) | 2023-07-10 | 2023-07-10 | 一种硬件循环指令转换方法及编译器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310837973.XA CN116893850B (zh) | 2023-07-10 | 2023-07-10 | 一种硬件循环指令转换方法及编译器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116893850A CN116893850A (zh) | 2023-10-17 |
CN116893850B true CN116893850B (zh) | 2024-05-24 |
Family
ID=88314394
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310837973.XA Active CN116893850B (zh) | 2023-07-10 | 2023-07-10 | 一种硬件循环指令转换方法及编译器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116893850B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508635A (zh) * | 2011-10-19 | 2012-06-20 | 中国科学院声学研究所 | 一种处理器装置及其循环处理方法 |
CN104969179A (zh) * | 2013-03-15 | 2015-10-07 | 英特尔公司 | 用于将具有循环承载的依赖的标量计算机程序循环向量化的方法和系统 |
CN112000370A (zh) * | 2020-08-27 | 2020-11-27 | 北京百度网讯科技有限公司 | 循环指令的处理方法、装置、设备和存储介质 |
CN114443142A (zh) * | 2022-01-29 | 2022-05-06 | 上海阵量智能科技有限公司 | 循环指令处理方法、装置、芯片、电子设备及存储介质 |
CN115185524A (zh) * | 2021-04-01 | 2022-10-14 | 北京希姆计算科技有限公司 | 向量指令的识别方法、装置、电子设备及计算机可读存储介质 |
CN115495155A (zh) * | 2022-11-18 | 2022-12-20 | 北京数渡信息科技有限公司 | 一种适用于通用处理器的硬件循环处理装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10649777B2 (en) * | 2018-05-14 | 2020-05-12 | International Business Machines Corporation | Hardware-based data prefetching based on loop-unrolled instructions |
-
2023
- 2023-07-10 CN CN202310837973.XA patent/CN116893850B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508635A (zh) * | 2011-10-19 | 2012-06-20 | 中国科学院声学研究所 | 一种处理器装置及其循环处理方法 |
CN104969179A (zh) * | 2013-03-15 | 2015-10-07 | 英特尔公司 | 用于将具有循环承载的依赖的标量计算机程序循环向量化的方法和系统 |
CN112000370A (zh) * | 2020-08-27 | 2020-11-27 | 北京百度网讯科技有限公司 | 循环指令的处理方法、装置、设备和存储介质 |
KR20210039358A (ko) * | 2020-08-27 | 2021-04-09 | 베이징 바이두 넷컴 사이언스 테크놀로지 컴퍼니 리미티드 | 순환 명령의 처리 방법, 장치, 기기와 저장매체 |
CN115185524A (zh) * | 2021-04-01 | 2022-10-14 | 北京希姆计算科技有限公司 | 向量指令的识别方法、装置、电子设备及计算机可读存储介质 |
CN114443142A (zh) * | 2022-01-29 | 2022-05-06 | 上海阵量智能科技有限公司 | 循环指令处理方法、装置、芯片、电子设备及存储介质 |
CN115495155A (zh) * | 2022-11-18 | 2022-12-20 | 北京数渡信息科技有限公司 | 一种适用于通用处理器的硬件循环处理装置 |
Non-Patent Citations (1)
Title |
---|
一种VLIW循环指令的预取和优化策略;琚魁 等;微电子学与计算机;20130505(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116893850A (zh) | 2023-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104106049B (zh) | 计算着色器的栅格化 | |
CN113031966B (zh) | 一种智能选择编译加速库的深度学习编译优化方法 | |
CN116301904B (zh) | 一种用于深度学习编译器的算子优化加速方法及装置 | |
CN114461221A (zh) | 编译方法、编译装置、电子设备、存储介质 | |
Hidaka et al. | Webdnn: Fastest dnn execution framework on web browser | |
CN110334436B (zh) | 一种数据处理方法以及设备 | |
CN113157917B (zh) | 基于OpenCL的优化分类模型的建立、优化分类方法及系统 | |
EP4258175A1 (en) | Node fusion method for computational graph, and device | |
CN112527262A (zh) | 深度学习框架编译器宽度非一致自动向量优化方法 | |
CN107330014A (zh) | 一种数据表的创建方法与设备 | |
CN116893850B (zh) | 一种硬件循环指令转换方法及编译器 | |
CN110929850A (zh) | 基于申威处理器的深度学习算子自动优化系统及方法 | |
CN112558977B (zh) | 面向异构众核后端基于代价模型的多面体优化方法 | |
Luo et al. | Adjustable memory-efficient image super-resolution via individual kernel sparsity | |
He et al. | HOME: A holistic GPU memory management framework for deep learning | |
CN107203406B (zh) | 一种面向分布式存储结构的处理方法 | |
CN111967247A (zh) | 基于函数声明的自然语言语义表示方法、装置和电子设备 | |
Leben et al. | Polyhedral Compilation for Multi-dimensional Stream Processing | |
Yang et al. | M2Coder: A Fully Automated Translator from Matlab M-functions to C/C++ Codes for ACS Motion Controllers | |
Bai et al. | Gtco: Graph and tensor co-design for transformer-based image recognition on tensor cores | |
CN116991428B (zh) | 一种编译方法、装置、编译器、计算设备及存储介质 | |
CN116974729B (zh) | 大数据作业的任务调度方法、装置及电子设备和存储介质 | |
CN115630646B (zh) | 一种抗体序列预训练模型的训练方法及相关设备 | |
Zeng et al. | Aware: Adaptive Distributed Training with Computation, Communication and Position Awareness for Deep Learning Model | |
Lu et al. | Enhancing the MOGA optimization process at ALS-U with Machine Learning |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |