CN102231118A - 一种基于龙芯3a向量访存的编译优化方法 - Google Patents
一种基于龙芯3a向量访存的编译优化方法 Download PDFInfo
- Publication number
- CN102231118A CN102231118A CN2011102086450A CN201110208645A CN102231118A CN 102231118 A CN102231118 A CN 102231118A CN 2011102086450 A CN2011102086450 A CN 2011102086450A CN 201110208645 A CN201110208645 A CN 201110208645A CN 102231118 A CN102231118 A CN 102231118A
- Authority
- CN
- China
- Prior art keywords
- vector
- intermediate representation
- instruction
- compiler
- expansion
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于龙芯3A向量访存的编译优化方法,特征是新增一条从向量树结构到中间表示的扩展路径,将向量形式的树结构转化为对应的中间表示;在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展;对于含有公共运算变量的循环,将其生成的中间表示建立赋值链,更新赋值链上的操作数;在从树扩展到寄存器传输语言表示后,增加一个寄存器替换的优化遍;在编译器后端指令描述文件中,增加向量指令的后端指令描述,再由编译器自动将生成的中间表示转化为汇编指令。这样,编译器就可以自动生成高性能的向量访存指令,节约了程序员手写汇编的工作,并大幅提高了应用程序运行时的效率。
Description
技术领域
本发明属于计算机编译技术领域,具体涉及基于龙芯3A向量访存的编译优化及后端代码生成方法。
背景技术
根据龙芯3A处理器的用户手册,现有龙芯3A处理器设计了向量访存指令,一次可以从内存中读取128位的数据,放在两个不同的寄存器中。在编译器中对向量访存的优化,传统的方法是采用自动向量化的方法,但这需要硬件有向量寄存器的支持。由于现有龙芯3A处理器中并没有设计向量寄存器,所以不能直接用自动向量化的方法来进行编译优化。
龙芯处理器官方指定的编译器是开源编译器套装(GCC),可以利用GCC现有自动向量化的前端,生成向量形式的树结构,再扩展成向量形式的中间表示,进而生成向量访存指令。
发明内容
本发明提出一种基于龙芯3A向量访存的编译优化方法,以克服现有技术的上述缺陷,达到编译器自动生成龙芯3A特有向量访存指令的目的。
本发明基于龙芯3A向量访存的编译优化方法,利用开源编译器套装(GCC)自动向量化的前端生成向量形式的树结构,进而扩展成对应的中间表示,再转化为向量指令;其特征在于:先将向量形式的树结构转化为对应的中间表示,在该中间表示层次上进行循环语句中间表示层次上的多样性处理,再生成向量形式的汇编指令;具体操作步骤如下:
第一步、向量扩展:在原有路径的基础上新增一条从向量树结构到中间表示的扩展路径;依次遍历树结构的各个节点,将向量形式的树结构扩展成龙芯3A向量指令对应的中间寄存器传输语言表示方式;在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展;
第二步、多样性处理:对于含有公共运算变量的循环,将其生成的中间表示建立赋值链,更新赋值链上的操作数;在从树扩展到寄存器传输语言(RTL)表示后,即GCC中的扩展(expand)遍之后,增加一个寄存器替换(pass_replace_reg)的优化遍,该优化遍的算法如下:
第三步、向量访存指令的生成:在GCC后端指令描述文件中,增加向量指令的后端指令描述,再由GCC自动将生成的中间表示转化为汇编指令。
由于本发明设计了新的扩展路径,并对生成的中间表示进行多样性处理,然后将中间表示转化为对应的龙芯3A向量指令,克服了传统自动向量化方法需要依赖向量寄存器的缺点,从而使得编译器能够自动生成龙芯3A的向量指令,节省了大量手工写汇编指令的时间。并且本发明还利用了现有自动向量化的前端来生成向量形式的树结构,再扩展成向量形式的中间表示,进而生成向量访存指令,从而很好的利用了GCC现有的编译器功能模块,节省了大量实现上的工作量。
具体实施方式
实施例1:
本实施例基于龙芯3A向量访存的编译优化方法,初步的编译优化方案是:先利用开源编译器套装(GCC)自动向量化的前端生成向量形式的树结构,再将该向量形式的树结构扩展成向量形式的中间表示;然后对向量形式的中间表示进行多样性处理;最后将向量形式的中间表示转化成向量访存指令。
具体操作步骤如下:
第一步、向量扩展
龙芯向量128位访存的指令格式为:gsLQC1 fq,ft,offset(base);gsSDC1 fq,ft,offset(base)。自动向量化生成向量形式的树结构,但是此时的树结构中访存和计算都是默认有128位寄存器的,即原操作数和目标操作数都只有一个,为128位模式。而龙芯向量访存的LQ的目的操作数和SD得原操作数都是两个操作数。所有在进行向量扩展的时候,需要进行转化,将128为的操作数变成两个64位操作数,并且模拟向量运算。
正常的向量扩展路径如下所示:
源程序段:
double a[20],b[20];
for(i=0;i<20;i++)
b[i]=b[i]+c[i]
向量形式树结构:
源程序段经过自动向量化后转化为向量形式树结构。表达式都是按照树结构深度优先转换树结点为RTL表示。龙芯3A没有设计128位的向量寄存器,而是通过两个浮点寄存器完成128位数据存放的任务。针对这种模式,本发明在原有龙芯3A向量扩展路径的基础上新增了一条从向量树结构到中间表示的扩展路径:在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展。经过这种处理后,向量化模式的表达式和非向量化的表达式扩展过程仍会共用部分函数接口,避免代码的冗余开销。
第二步、多样性处理
通过对大量应用程序的统计,发现多样性的特点表现为以下几个方面:
(1)语句在循环结构中,并且能自动向量化。
(2)语句中,有公共的运算变量,如示例1的for循环结构中的C[i]。
示例1 for(i=0;i<N;i++)
{
A[i]=B[i]+C[i];
E[i]=D[i]+C[i];
}
示例2 for(i=0;i<N;i++)
{
A[i]=B[i]+C[i];
E[i]=D[i]+C[i];
}
(3)有公共运算变量的某条语句的左值可能是另外一个语句的右值,形成一条赋值链条。如示例2的for循环结构中的A[i]。
在具体的程序中,多样性主要体现在以下3类循环程序上:
多样性1:
多样性2:
多样性3:
这三类程序分别代表的特性是:
(1)公共运算变量是赋值语句的右值,如多样性1中的x变量。
(2)公共运算变量是乘法语句的右值,如多样性2中的b[i]或x。
(3)公共运算变量是加法语句的右值,如多样性3中的c[i]。
多样性1、2、3所示的程序向量化后树结构会出现如下所示的情形:
以上为多样性2生成的树结构代码,a[i]=b[i]*c[i]+d[i]*b[i]语句的向量形式的树表示并不是一条语句,而是分裂成两条语句。其中b[i]被提取出来vect_var_.44=MEM[base:&b+ivtmp.71]。而扩展过程是以单条语句为单位进行扩展的。当对vect_var_.44=MEM[base:&b+ivtmp.71]进行RTL扩展的时候,vect_var_.44只分配一个寄存器,而接下来的语句也只能使用该寄存器,而不是连续的两个变量值。
这种情况可能会被传递,如上面的示例2,虽然A[i]=B[i]+C[i]中的A[i]分配了两个寄存器,但是在接下来的G[i]=H[i]+A[i]依然只能使用其中一个寄存器,出现语义问题。
根据多样性的特点和表现,本发明设计了一个替换算法来解决向量化后树结构的多样性问题。在从树扩展到RTL过程后,即GCC中的expand遍之后,增加一个新的优化遍,取名pass_replace_reg(寄存器替换),加入替换算法。之所以选择在此插入新的优化遍是因为:(1)在树结构上做变换牵涉的内容更多,更复杂。(2)expand遍之后的RTL表示是最原始的RTL表示,语句没有经过变换,更容易处理。算法如下:
该算法中,判断某条语句是否需要修改用到了扩展遍之后原始RTL的位置属性:高位运算总是出现在奇数位置,低位运算总是出现在偶数位置。函数replace_reg_1()是一个类似于replace_reg_for_v2df(void)的递归函数,处理如示例2情形中的赋值链条。
第三步、向量访存指令的生成
在GCC后端指令描述文件中,增加向量指令的后端指令描述,再由GCC自动将生成的中间表示转化为汇编指令。
该优化方案已经在GCC编译器中得到了实现。
由于本发明设计了新的扩展路径,并对生成的中间表示进行多样性处理,然后将中间表示转化为对应的龙芯3A向量指令,克服了传统自动向量化方法需要依赖向量寄存器的缺点,从而使得编译器能够自动生成龙芯3A的向量指令,节省了大量手工写汇编指令的时间。并且本发明还利用了现有自动向量化的前端来生成向量形式的树结构,再扩展成向量形式的中间表示,进而生成向量访存指令,从而很好的利用了GCC现有的编译器功能模块,节省了大量实现上的工作量。
Claims (1)
1.一种基于龙芯3A向量访存的编译优化方法,利用编译器自动向量化的前端生成向量形式的树结构,进而扩展成对应的中间表示,再转化为向量指令;其特征在于:先将向量形式的树结构转化为对应的中间表示,在该中间表示层次上进行循环语句中间表示层次上的多样性处理,再生成向量形式的汇编指令;具体操作步骤如下:
第一步、向量扩展:在原有路径的基础上新增一条从向量树结构到中间表示的扩展路径;依次遍历树结构的各个节点,将向量形式的树结构扩展成龙芯3A向量指令对应的中间寄存器传输语言表示方式;在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展;
第二步、多样性处理:对于含有公共运算变量的循环,将其生成的中间表示建立赋值链,更新赋值链上的操作数;在从树扩展到寄存器传输语言表示后,即编译器中的扩展遍之后,增加一个寄存器替换的优化遍,该优化遍的算法如下:
第三步、向量访存指令的生成:在编译器后端指令描述文件中,增加向量指令的后端指令描述,再由编译器自动将生成的中间表示转化为汇编指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110208645 CN102231118B (zh) | 2011-07-25 | 2011-07-25 | 一种基于龙芯3a向量访存的编译优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110208645 CN102231118B (zh) | 2011-07-25 | 2011-07-25 | 一种基于龙芯3a向量访存的编译优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102231118A true CN102231118A (zh) | 2011-11-02 |
CN102231118B CN102231118B (zh) | 2013-12-18 |
Family
ID=44843685
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110208645 Expired - Fee Related CN102231118B (zh) | 2011-07-25 | 2011-07-25 | 一种基于龙芯3a向量访存的编译优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102231118B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103440229A (zh) * | 2013-08-12 | 2013-12-11 | 浪潮电子信息产业股份有限公司 | 一种基于mic架构处理器的向量化优化方法 |
CN104834532A (zh) * | 2015-06-03 | 2015-08-12 | 星环信息科技(上海)有限公司 | 一种分布式数据向量化处理方法和装置 |
CN105393217A (zh) * | 2013-07-24 | 2016-03-09 | 马维尔国际贸易有限公司 | 用于编译器优化的方法和系统 |
CN108304218A (zh) * | 2018-03-14 | 2018-07-20 | 郑州云海信息技术有限公司 | 一种汇编代码的编写方法、装置、系统和可读存储介质 |
CN115220789A (zh) * | 2022-06-24 | 2022-10-21 | 北京联盛德微电子有限责任公司 | 一种用于多寄存器的操作命令触发调度方法及单元 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016089242A1 (en) * | 2014-12-04 | 2016-06-09 | Huawei Technologies Co., Ltd | Vectorization apparatus |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6151705A (en) * | 1997-10-30 | 2000-11-21 | Hewlett-Packard Company | Efficient use of the base register auto-increment feature of memory access instructions |
JP3730675B2 (ja) * | 1994-12-19 | 2006-01-05 | 富士通株式会社 | 処理装置 |
-
2011
- 2011-07-25 CN CN 201110208645 patent/CN102231118B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3730675B2 (ja) * | 1994-12-19 | 2006-01-05 | 富士通株式会社 | 処理装置 |
US6151705A (en) * | 1997-10-30 | 2000-11-21 | Hewlett-Packard Company | Efficient use of the base register auto-increment feature of memory access instructions |
Non-Patent Citations (3)
Title |
---|
张滇: "基于GCC的中间代码优化技术研究", 《中国优秀硕士学位论文全文数据库》, 30 March 2009 (2009-03-30) * |
朱凯佳等: "基于GCC的VLIW编译系统研究", 《计算机工程与应用》, vol. 37, no. 12, 31 December 2001 (2001-12-31), pages 125 - 128 * |
董峻峰: "基于龙芯2号结构特征对GCC的分析与优化", 《中国优秀硕士学位论文全文数据库》, 31 October 2006 (2006-10-31) * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105393217A (zh) * | 2013-07-24 | 2016-03-09 | 马维尔国际贸易有限公司 | 用于编译器优化的方法和系统 |
CN105393217B (zh) * | 2013-07-24 | 2019-04-19 | 马维尔国际贸易有限公司 | 用于编译器优化的方法和系统 |
CN103440229A (zh) * | 2013-08-12 | 2013-12-11 | 浪潮电子信息产业股份有限公司 | 一种基于mic架构处理器的向量化优化方法 |
CN103440229B (zh) * | 2013-08-12 | 2017-11-10 | 浪潮电子信息产业股份有限公司 | 一种基于mic架构处理器的向量化优化方法 |
CN104834532A (zh) * | 2015-06-03 | 2015-08-12 | 星环信息科技(上海)有限公司 | 一种分布式数据向量化处理方法和装置 |
CN104834532B (zh) * | 2015-06-03 | 2018-01-02 | 星环信息科技(上海)有限公司 | 一种分布式数据向量化处理方法和装置 |
CN108304218A (zh) * | 2018-03-14 | 2018-07-20 | 郑州云海信息技术有限公司 | 一种汇编代码的编写方法、装置、系统和可读存储介质 |
CN115220789A (zh) * | 2022-06-24 | 2022-10-21 | 北京联盛德微电子有限责任公司 | 一种用于多寄存器的操作命令触发调度方法及单元 |
CN115220789B (zh) * | 2022-06-24 | 2023-02-07 | 北京联盛德微电子有限责任公司 | 一种用于多寄存器的操作命令触发调度方法及单元 |
Also Published As
Publication number | Publication date |
---|---|
CN102231118B (zh) | 2013-12-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102231118B (zh) | 一种基于龙芯3a向量访存的编译优化方法 | |
JP5818351B2 (ja) | ヘテロジニアス黙示的及び明示的プロセッシング要素のコンピュータ的一体化のための方法、プログラムおよびコンピュータプログラム | |
US20080294411A1 (en) | Systems and Methods for Logic Verification | |
CN109002659B (zh) | 一种基于超级计算机的流体机械仿真程序优化方法 | |
CN102385524B (zh) | 一种基于混编指令集的编译链指令替换方法 | |
CN102193811B (zh) | 消除内存访问冲突的编译装置及其实现方法 | |
WO2017097160A1 (en) | System and method for caching and parameterizing ir | |
CN103235724A (zh) | 基于原子操作语义描述的多源二进制代码一体化翻译方法 | |
Mavriplis | Parallel performance investigations of an unstructured mesh Navier-Stokes solver | |
CN112527304B (zh) | 基于异构平台的自适应节点融合编译优化方法 | |
CN102662720B (zh) | 一种多发射嵌入式处理器编译器的优化方法 | |
CN100559344C (zh) | 一种支持用规则记录变量访问专用寄存器组的处理方法 | |
US20130080141A1 (en) | Power aware simulation system with embedded multi-core dsp | |
Uddin | High-level simulation of concurrency operations in microthreaded many-core architectures | |
CN116976250A (zh) | 一种面向领域专用加速器的快速原型构建方法 | |
CN103530132A (zh) | 一种cpu串行程序移植到mic平台的方法 | |
CN108427558A (zh) | 一种c编译器的窥孔优化方法 | |
Sharma et al. | Affine loop optimization based on modulo unrolling in chapel | |
Huang et al. | Improving CUDA performance of an unstructured high-order CFD application under OP2 framework | |
Ko et al. | Laminarir: Compile-time queues for structured streams | |
Balasa et al. | Loop transformation methodologies for array-oriented memory management | |
Deng et al. | Back-end porting of FT_MX based on LLVM compilation architecture | |
Becker et al. | Optimizing worst-case execution times using mainstream compilers | |
Ieromnimon et al. | Application of the mosart flow on the wimax (802.16 e) phy layer | |
Maher | Atomic block formation for explicit data graph execution architectures |
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 |
Granted publication date: 20131218 Termination date: 20210725 |
|
CF01 | Termination of patent right due to non-payment of annual fee |