CN102231118A - 一种基于龙芯3a向量访存的编译优化方法 - Google Patents

一种基于龙芯3a向量访存的编译优化方法 Download PDF

Info

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
Application number
CN2011102086450A
Other languages
English (en)
Other versions
CN102231118B (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.)
University of Science and Technology of China USTC
Original Assignee
University of Science and Technology of China USTC
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 University of Science and Technology of China USTC filed Critical University of Science and Technology of China USTC
Priority to CN 201110208645 priority Critical patent/CN102231118B/zh
Publication of CN102231118A publication Critical patent/CN102231118A/zh
Application granted granted Critical
Publication of CN102231118B publication Critical patent/CN102231118B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种基于龙芯3A向量访存的编译优化方法,特征是新增一条从向量树结构到中间表示的扩展路径,将向量形式的树结构转化为对应的中间表示;在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展;对于含有公共运算变量的循环,将其生成的中间表示建立赋值链,更新赋值链上的操作数;在从树扩展到寄存器传输语言表示后,增加一个寄存器替换的优化遍;在编译器后端指令描述文件中,增加向量指令的后端指令描述,再由编译器自动将生成的中间表示转化为汇编指令。这样,编译器就可以自动生成高性能的向量访存指令,节约了程序员手写汇编的工作,并大幅提高了应用程序运行时的效率。

Description

一种基于龙芯3A向量访存的编译优化方法
技术领域
本发明属于计算机编译技术领域,具体涉及基于龙芯3A向量访存的编译优化及后端代码生成方法。
背景技术
根据龙芯3A处理器的用户手册,现有龙芯3A处理器设计了向量访存指令,一次可以从内存中读取128位的数据,放在两个不同的寄存器中。在编译器中对向量访存的优化,传统的方法是采用自动向量化的方法,但这需要硬件有向量寄存器的支持。由于现有龙芯3A处理器中并没有设计向量寄存器,所以不能直接用自动向量化的方法来进行编译优化。
龙芯处理器官方指定的编译器是开源编译器套装(GCC),可以利用GCC现有自动向量化的前端,生成向量形式的树结构,再扩展成向量形式的中间表示,进而生成向量访存指令。
发明内容
本发明提出一种基于龙芯3A向量访存的编译优化方法,以克服现有技术的上述缺陷,达到编译器自动生成龙芯3A特有向量访存指令的目的。
本发明基于龙芯3A向量访存的编译优化方法,利用开源编译器套装(GCC)自动向量化的前端生成向量形式的树结构,进而扩展成对应的中间表示,再转化为向量指令;其特征在于:先将向量形式的树结构转化为对应的中间表示,在该中间表示层次上进行循环语句中间表示层次上的多样性处理,再生成向量形式的汇编指令;具体操作步骤如下:
第一步、向量扩展:在原有路径的基础上新增一条从向量树结构到中间表示的扩展路径;依次遍历树结构的各个节点,将向量形式的树结构扩展成龙芯3A向量指令对应的中间寄存器传输语言表示方式;在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展;
第二步、多样性处理:对于含有公共运算变量的循环,将其生成的中间表示建立赋值链,更新赋值链上的操作数;在从树扩展到寄存器传输语言(RTL)表示后,即GCC中的扩展(expand)遍之后,增加一个寄存器替换(pass_replace_reg)的优化遍,该优化遍的算法如下:
Figure BDA0000078238570000011
Figure BDA0000078238570000021
第三步、向量访存指令的生成:在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]
向量形式树结构:
Figure BDA0000078238570000031
源程序段经过自动向量化后转化为向量形式树结构。表达式都是按照树结构深度优先转换树结点为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:
Figure BDA0000078238570000042
多样性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表示,语句没有经过变换,更容易处理。算法如下:
Figure BDA0000078238570000053
Figure BDA0000078238570000061
该算法中,判断某条语句是否需要修改用到了扩展遍之后原始RTL的位置属性:高位运算总是出现在奇数位置,低位运算总是出现在偶数位置。函数replace_reg_1()是一个类似于replace_reg_for_v2df(void)的递归函数,处理如示例2情形中的赋值链条。
第三步、向量访存指令的生成
在GCC后端指令描述文件中,增加向量指令的后端指令描述,再由GCC自动将生成的中间表示转化为汇编指令。
该优化方案已经在GCC编译器中得到了实现。
由于本发明设计了新的扩展路径,并对生成的中间表示进行多样性处理,然后将中间表示转化为对应的龙芯3A向量指令,克服了传统自动向量化方法需要依赖向量寄存器的缺点,从而使得编译器能够自动生成龙芯3A的向量指令,节省了大量手工写汇编指令的时间。并且本发明还利用了现有自动向量化的前端来生成向量形式的树结构,再扩展成向量形式的中间表示,进而生成向量访存指令,从而很好的利用了GCC现有的编译器功能模块,节省了大量实现上的工作量。

Claims (1)

1.一种基于龙芯3A向量访存的编译优化方法,利用编译器自动向量化的前端生成向量形式的树结构,进而扩展成对应的中间表示,再转化为向量指令;其特征在于:先将向量形式的树结构转化为对应的中间表示,在该中间表示层次上进行循环语句中间表示层次上的多样性处理,再生成向量形式的汇编指令;具体操作步骤如下:
第一步、向量扩展:在原有路径的基础上新增一条从向量树结构到中间表示的扩展路径;依次遍历树结构的各个节点,将向量形式的树结构扩展成龙芯3A向量指令对应的中间寄存器传输语言表示方式;在扩展过程中,如果是正常模式,则沿着原有的路径进行扩展;如果是向量化的模式,则从新的路径进行扩展;
第二步、多样性处理:对于含有公共运算变量的循环,将其生成的中间表示建立赋值链,更新赋值链上的操作数;在从树扩展到寄存器传输语言表示后,即编译器中的扩展遍之后,增加一个寄存器替换的优化遍,该优化遍的算法如下:
Figure FDA0000078238560000011
Figure FDA0000078238560000021
第三步、向量访存指令的生成:在编译器后端指令描述文件中,增加向量指令的后端指令描述,再由编译器自动将生成的中间表示转化为汇编指令。
CN 201110208645 2011-07-25 2011-07-25 一种基于龙芯3a向量访存的编译优化方法 Expired - Fee Related CN102231118B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016089242A1 (en) * 2014-12-04 2016-06-09 Huawei Technologies Co., Ltd Vectorization apparatus

Citations (2)

* Cited by examiner, † Cited by third party
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 富士通株式会社 処理装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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