基于异构平台的常量数据访问优化方法与流程

文档序号:24350460发布日期:2021-03-19 12:35阅读:86来源:国知局
基于异构平台的常量数据访问优化方法与流程

本发明涉及一种基于异构平台的常量数据访问优化方法,属于常量数据访问技术领域。



背景技术:

在异构计算系统上进行的并行计算通常称为异构计算。人们已从不同角度对异构计算进行定义,综合起来我们给出如下定义:异构计算是一种特殊形式的并行和分布式计算,它或是用能同时支持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所示。

编译器在处理常量时,会根据不同的后端架构和只读数据段的大小,进行访存代价评估,根据访存代价的大小来决定访问常量数据的方式,达到一种自适应常量数据访问的效果。

(1)编译器对源程序进行编译处理,生成编译器的中间表示,转到步骤(2);

(2)分析中间表示,寻找常量节点,若找到的常量节点为向量类型,则转到步骤(3),否者转到步骤(8);

(3)若步骤(2)的向量常量节点能拆分成多个相同的标量类型的常量节点,则转到步骤(4)否者使用访存指令从内存中取得向量类型的常量数据,转到步骤(7);

(4)获取步骤(3)向量常量节点的任意一个分量,若该分量标量类型的常量数据可用32位比特进行表示,则进行步骤(5),否则进行步骤(6);

(5)使用立即数指令拼出标量类型的常量数据,然后使用向量拷贝指令,将拼出的标量类型的常量数据复制为向量类型的向量数据,转到步骤(9);

(6)使用访存指令从内存中取得标量类型的常量数据,然后使用向量拷贝指令将标量类型的常量数据复制为向量类型的常量数据,转到步骤(7);

(7)若只读数据段(存储常量数据的数据段)未超过局存大小且后端为从核后端,则将常量数据放到从核只读数据段,否则将常量数据放到主核只读数据段,转到步骤(9);

(8)若该标量类型的常量数据可用32位比特表示,则使用立即数指令拼出该标量类型的常量数据,否则使用访存指令从内存中取得标量类型的常量数据,转到步骤(7);

(9)将步骤(3)(5)(6)(8)得到的指令生成汇编代码,并根据步骤(7)的常量数据信息,建立相应的数据段,用于程序运行时常量数据的访问。

采用上述基于异构平台的常量数据访问优化方法时,其在保持兼容性的基础之上,在基于异构众核平台的编译器中,针对国产异构平台主从核常量数据访问的特点,提出自适应的访存代价评估方法,通过分析本地程序代码和数据信息流,结合后端架构特征,选择最适合本地架构的数据访问和生成模式,减少立即数访问所需资源和性能代价,实现精细化、自动化的常量数据访问优化选择,保证程序能最大限度的利用内存,优化常量数据内存使用,使常量数据访问的性能得到进一步的提升,从而提升国产异构从核平台的性能。

为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:

异构:一个包含或者组成“异构网络”的产品,所谓的“异构网络”通常指不同厂家的产品所组成的网络。

从核只读数据段:只读数据段,该段只有读权限,没有写权限和执行权限,该段会被加载到ldm中,用来存储常量数据。

主核只读数据段:只读数据段,该段只有读权限,没有写权限和执行权限,该段会被加载到主存中,用来存储常量数据。

simd:单指令多数据流。

mimd:多指令多数据流。

常量节点:常量数据节点。

上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1