基于异构平台的常量数据访问优化方法技术

技术编号:27740545 阅读:17 留言:0更新日期:2021-03-19 13:33
本发明专利技术公开一种基于异构平台的常量数据访问优化方法,包括以下步骤:S1、进行中间表示降级,即结合目标后端信息对中间表示进行降级处理,将常量节点降级为目标相关的节点;S2、分析中间表示,寻找常量节点,即进行常量数据分析,对常量数据的类型、大小及范围进行计算,且根据不同的架构后端采用不用的算法进行代价评估,生成降级节点;S3、生成汇编代码,即将生成的降级中间表示翻译为指令,并建立相应的数据段。本发明专利技术实现了精细化、自动化的常量数据访问优化选择,保证程序能最大限度的利用内存,优化常量数据内存使用,使常量数据访问的性能得到进一步的提升,从而提升国产异构从核平台的性能。

【技术实现步骤摘要】
基于异构平台的常量数据访问优化方法
本专利技术涉及一种基于异构平台的常量数据访问优化方法,属于常量数据访问

技术介绍
在异构计算系统上进行的并行计算通常称为异构计算。人们已从不同角度对异构计算进行定义,综合起来我们给出如下定义:异构计算是一种特殊形式的并行和分布式计算,它或是用能同时支持SIMD方式和MIMD方式的单个独立计算机,或是用由高速网络互连的一组独立计算机来完成计算任务。它能协调的使用性能、结构各异的机器以满足不同的计算需求,并使代码能以获取最大总体性能方式来执行。目前异构众核是高性能计算硬件平台发展的趋势,但是主从设备之间的数据访问已逐渐成为制约性能提升的瓶颈。目前主从设备之间的数据传输是DMA方式,这种方式在一定程度上提高了数据传输效率,但是对于常量数据的访问却无能为力。再者通过DMA方式的数据传送方式需要用户调用DMA接口来完成数据的传送,增加了用户程序开发的复杂度。目前,在国产异构众核平台上,GCC和LLVM等基础编译器中的常量数据访问主要有两种方式:通过访存指令到只读数据段去取出常量数据,或通过指令拼出所要访问的常量数据。比如对于非零的浮点常量,无论是GCC还是LLVM都会通过访存的方式访问常量数据,但是访存的方式是否比用指令拼常量的效率高,得看常量数据的大小、cache大小以及目标后端信息。访问常量数据在异构平台下,硬件资源的差异导致这两种方式各有优缺点,若以一种统一的标准去判断和选择将带来性能副作用。
技术实现思路
本专利技术的目的是提供一种基于异构平台的常量数据访问优化方法,该基于异构平台的常量数据访问优化方法实现了精细化、自动化的常量数据访问优化选择,保证程序能最大限度的利用内存,优化常量数据内存使用,使常量数据访问的性能得到进一步的提升,从而提升国产异构从核平台的性能。为达到上述目的,本专利技术采用的技术方案是:一种基于异构平台的常量数据访问优化方法,包括以下步骤:S1、编译器对源程序进行编译处理,生成编译器的中间表示,转到S2;S2、分析中间表示,寻找常量节点,若找到的常量节点为向量类型,则转到S3,否则转到S8;S3、若S2中获得的向量类型的常量节点能拆分成多个相同的标量类型的常量节点,则转到步骤S4,否则使用访存指令从内存中取得向量类型的常量数据,转到S7;S4、获取S3中拆分前的向量类型的常量节点的任意一个分量,若该分量标量类型的常量数据可用32位比特进行表示,则转到S5,否则转到S6;S5、编译器使用立即数指令拼出标量类型的常量数据,然后使用向量拷贝指令,将拼出的标量类型的常量数据复制为向量类型的向量数据,转到S9;S6、编译器使用访存指令从内存中取得标量类型的常量数据,然后使用向量拷贝指令,将标量类型的常量数据复制为向量类型的常量数据,转到S7;S7、编译器获取当前只读数据段的大小和后端信息,若只读数据段大小未超过局存大小且后端为从核后端,则将常量数据放到从核的只读数据段,否则将常量数据放到主核的只读数据段,转到S9;S8、若步骤S2中找到的标量类型的常量节点中的常量数据可用32位比特进行表示,则使用立即数指令拼出该标量类型的常量数据,否则使用访存指令从内存中取得标量类型的常量数据,转到S7;S9、编译器将步骤S3、S5、S6、S8得到的指令生成汇编代码,并根据S7的常量数据信息,建立相应的数据段,用于程序运行时常量数据的访问。上述技术方案中进一步改进的方案如下:1.上述方案中,在S2中,编译器遍历中间表示的每一条语句,若语句的输入操作数为常量,则该输入操作数为常量节点。由于上述技术方案的运用,本专利技术与现有技术相比具有下列优点:本专利技术基于异构平台的常量数据访问优化方法,其在保持兼容性的基础之上,在基于异构众核平台的编译器中,针对国产异构平台主从核常量数据访问的特点,提出自适应的访存代价评估方法,通过分析本地程序代码和数据信息流,结合后端架构特征,选择最适合本地架构的数据访问和生成模式,减少立即数访问所需资源和性能代价,实现精细化、自动化的常量数据访问优化选择,保证程序能最大限度的利用内存,优化常量数据内存使用,使常量数据访问的性能得到进一步的提升,从而提升国产异构从核平台的性能。附图说明附图1为本专利技术基于异构平台的常量数据访问优化方法流程示意图。具体实施方式实施例:一种基于异构平台的常量数据访问优化方法,包括以下步骤:S1、编译器对源程序进行编译处理,生成编译器的中间表示,转到S2;S2、分析中间表示,寻找常量节点,若找到的常量节点为向量类型,则转到S3,否则转到S8;每一个常量节点都有一个值类型,比如i64,f64都是标量类型,而v4i64(4个i64),v4f64(4个f64)等都是向量类型,对于每一个常量(不限于常量)节点都可以获取其值类型,根据其值类型可以区分标量类型节点和向量类型节点;S3、若S2中获得的向量类型的常量节点能拆分成多个相同的标量类型的常量节点,则转到步骤S4,否则使用访存指令从内存中取得向量类型的常量数据,常量节点是编译器内部的一种数据结构,用来存放常量数据,转到S7;对于一个常量来说每一个bit都是可以确定的,比如v4i32类型的常量数据0x00000001000000010000000100000001,空格用于区分每一个分量,其每一个分量都为i32类型(标量类型)的0x00000001,即v4i32可以拆分为4个相同的标量类型的常量节点,每一个标量类型的常量节点对应向量类型的常量节点的一个分量,判断方法为将v4i32类型的常量数据的每一个分量取出来,判断分量之间是否相等;S4、获取S3中拆分前的向量类型的常量节点的任意一个分量,若该分量标量类型的常量数据可用32位比特进行表示,则转到S5,否则转到S6;S5、编译器使用立即数指令拼出标量类型的常量数据,然后使用向量拷贝指令,将拼出的标量类型的常量数据复制为向量类型的向量数据,转到S9;S6、编译器使用访存指令从内存中取得标量类型的常量数据,然后使用向量拷贝指令,将标量类型的常量数据复制为向量类型的常量数据,转到S7;S7、编译器获取当前只读数据段的大小和后端信息,若只读数据段大小未超过局存大小且后端为从核后端,则将常量数据放到从核的只读数据段,否则将常量数据放到主核的只读数据段,转到S9;S8、若步骤S2中找到的标量类型的常量节点中的常量数据可用32位比特进行表示,则使用立即数指令拼出该标量类型的常量数据,否则使用访存指令从内存中取得标量类型的常量数据,转到S7;S9、编译器将步骤S3、S5、S6、S8得到的指令生成汇编代码,并根据S7的常量数据信息,建立相应的数据段,用于程序运行时常量数据的访问。在S2中,编译器遍历中间表示的每一条语句,若语句的输入操作数为常量,则该输入操作数为常量节点。实施例进一步解释如下:本专利技术具体流程本文档来自技高网...

【技术保护点】
1.一种基于异构平台的常量数据访问优化方法,其特征在于:包括以下步骤:/nS1、编译器对源程序进行编译处理,生成编译器的中间表示,转到S2;/nS2、分析中间表示,寻找常量节点,若找到的常量节点为向量类型,则转到S3,否则转到S8;/nS3、若S2中获得的向量类型的常量节点能拆分成多个相同的标量类型的常量节点,则转到步骤S4,否则使用访存指令从内存中取得向量类型的常量数据,转到S7;/nS4、获取S3中拆分前的向量类型的常量节点的任意一个分量,若该分量标量类型的常量数据可用32位比特进行表示,则转到S5,否则转到S6;/nS5、编译器使用立即数指令拼出标量类型的常量数据,然后使用向量拷贝指令,将拼出的标量类型的常量数据复制为向量类型的向量数据,转到S9;/nS6、编译器使用访存指令从内存中取得标量类型的常量数据,然后使用向量拷贝指令,将标量类型的常量数据复制为向量类型的常量数据,转到S7;/nS7、编译器获取当前只读数据段的大小和后端信息,若只读数据段大小未超过局存大小且后端为从核后端,则将常量数据放到从核的只读数据段,否则将常量数据放到主核的只读数据段,转到S9;/nS8、若步骤S2中找到的标量类型的常量节点中的常量数据可用32位比特进行表示,则使用立即数指令拼出该标量类型的常量数据,否则使用访存指令从内存中取得标量类型的常量数据,转到S7;/nS9、编译器将步骤S3、S5、S6、S8得到的指令生成汇编代码,并根据S7的常量数据信息,建立相应的数据段,用于程序运行时常量数据的访问。/n...

【技术特征摘要】
1.一种基于异构平台的常量数据访问优化方法,其特征在于:包括以下步骤:
S1、编译器对源程序进行编译处理,生成编译器的中间表示,转到S2;
S2、分析中间表示,寻找常量节点,若找到的常量节点为向量类型,则转到S3,否则转到S8;
S3、若S2中获得的向量类型的常量节点能拆分成多个相同的标量类型的常量节点,则转到步骤S4,否则使用访存指令从内存中取得向量类型的常量数据,转到S7;
S4、获取S3中拆分前的向量类型的常量节点的任意一个分量,若该分量标量类型的常量数据可用32位比特进行表示,则转到S5,否则转到S6;
S5、编译器使用立即数指令拼出标量类型的常量数据,然后使用向量拷贝指令,将拼出的标量类型的常量数据复制为向量类型的向量数据,转到S9;
S6、编译器使用访存指令从内存中取得标量类型的常量数据,然后使用向量拷贝指...

【专利技术属性】
技术研发人员:尉红梅沈莉王飞吴伟武文浩胡浩
申请(专利权)人:无锡江南计算技术研究所
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1