一种基于全局数据重组的循环倾斜优化方法与流程

文档序号:12122782阅读:598来源:国知局
一种基于全局数据重组的循环倾斜优化方法与流程

本发明属于高性能计算技术领域,特别涉及一种针对循环倾斜变换优化的处理方法。



背景技术:

20世纪90年代中期各大厂商在处理器中集成了一套专用的多媒体扩展指令集。该指令集采用单指令多数据(SIMD:single instruction multiple data)扩展技术,可同时对多个数据进行相同的操作,称为SIMD扩展部件。随着人们对SIMD认识的加深,以及向量寄存器长度的增加,越来越多的研究利用SIMD扩展部件对程序进行加速。

计算机科学中的二八法则表明,程序中20%的代码占据了程序中80%的执行时间,而20%的代码则表示程序中的循环部分,所以对程序的循环部分进行优化会使得程序的执行效率有着很大的提升。而目前,大多数的基于SIMD优化,都是针对循环进行向量化操作的,如循环交换,循环分布,循环剥离,循环倾斜,循环展开,包括SLP算法,均为更好的对循环进行向量操作。

在循环倾斜变换中,并行执行部分的数据在内存中是离散的,影响程序执行效率,所以对其数据的局部性进行优化,循环倾斜变换有一定的优化空间。



技术实现要素:

本发明针对现有技术在循环倾斜变换中,并行执行部分的数据在内存中是离散的,影响程序执行效率等问题提出一种一种基于全局数据重组的循环倾斜优化方法。

本发明的技术方案是:一种基于全局数据重组的循环倾斜优化方法,具体包括以下步骤:

步骤一:循环倾斜,针对循环进行数据依赖分析,分析各个迭代之间的数据依赖关系,确定循环适合进行循环倾斜优化;

步骤二:数据重组,针对循环倾斜对数组重组,首先将二维数组的每一行进行循环右移,右移位数和数组的列号索引值相同,接着将二维数组转置;

步骤三:非满载向量化,针对循环倾斜中尾循环存在非满载向量操作,实现非满载向量读写,向量读时空闲部位填充冗余数据;向量写时首先写入内存的临时向量空间中,在将有效数据写入相应的数组位置中。

所述的基于全局数据重组的循环倾斜优化方法,所述步骤一中的数据依赖分析包括:分析数据之间的真依赖、反依赖和输出依赖,确定阻碍程序向量化的关键因素。

所述的基于全局数据重组的循环倾斜优化方法,所述步骤二中循环右移具体为:将二维数组的每一行进行循环右移,右移位数和数组的列号索引值相同,由于循环右移是连续操作,所以可以进行向量化优化,同时各列之间相互不影响,所以可以进行并行优化。

所述的基于全局数据重组的循环倾斜优化方法,所述步骤二中数组转置:因为数组转置部分离散读写比较多,所以将矩阵分块,改善数组转置局部性,并且利用OpenMP进行并行优化。

所述的基于全局数据重组的循环倾斜优化方法,所述步骤二中还包括:对数组分块,改善数据局部性,利用OpenMP对数组转置并行优化。

所述的基于全局数据重组的循环倾斜优化方法,所述步骤三中非满载向量读:读数据时,读取相应向量长度的数据,不需要计算的数据则为冗余数据,计算时需保存脏数据所在位置。

所述的基于全局数据重组的循环倾斜优化方法,所述步骤三中非满载向量写具体为:将数据写入一个内存中新申请的临时向量空间中,再通过这个新申请的临时空间,将需要写回数组的合法数据写入到计算后数组中数据相应的位置中。

本发明的有益效果是:本发明解决了循环倾斜变换中,并行执行部分的数据离散,数据局部性差,且不易于向量化的问题。针对循环倾斜变化,依次进行数据依赖分析、循环倾斜变换、数据重组、非满载向量操作实现,有效提升循环倾斜变换程序运行效率和执行性能,实现了对循环倾斜变换的优化。最后选择wavefront程序进行测试,优化后,程序计算可以获得平均10.73倍的加速效果。

附图说明

图1为循环倾斜示意图;

图2为数据重组循环右移示意图;

图3为数据重组矩阵转置示意图;

图4为非满载向量读示意图;

图5为非满载向量写示意图。

具体实施方式

实施例1:结合图1-图5,一种基于全局数据重组的循环倾斜优化方法,具体包括以下步骤:

步骤一:循环倾斜,针对循环进行数据依赖分析,分析各个迭代之间的数据依赖关系,确定循环适合进行循环倾斜优化。步骤一中的数据依赖分析包括:分析数据之间的真依赖、反依赖和输出依赖,确定阻碍程序向量化的关键因素。

步骤二:数据重组,针对循环倾斜对数组重组,首先将二维数组的每一行进行循环右移,右移位数和数组的列号索引值相同,接着将二维数组转置;

步骤二中循环右移具体为:将二维数组的每一行进行循环右移,右移位数和数组的列号索引值相同,由于循环右移是连续操作,所以可以进行向量化优化,同时各列之间相互不影响,所以可以进行并行优化。步骤二中数组转置:因为数组转置部分离散读写比较多,所以将矩阵分块,改善数组转置局部性,并且利用OpenMP进行并行优化。

步骤二中还包括:对数组分块,改善数据局部性,利用OpenMP对数组转置并行优化。

步骤三:非满载向量化,针对循环倾斜中尾循环存在非满载向量操作,实现非满载向量读写,向量读时空闲部位填充冗余数据;向量写时首先写入内存的临时向量空间中,在将有效数据写入相应的数组位置中。步骤三中非满载向量读:读数据时,读取相应向量长度的数据,不需要计算的数据则为冗余数据,计算时需保存脏数据所在位置。步骤三中非满载向量写具体为:将数据写入一个内存中新申请的临时向量空间中,再通过这个新申请的临时空间,将需要写回数组的合法数据写入到计算后数组中数据相应的位置中。

实施例2:结合图1-图5,一种基于全局数据重组的循环倾斜优化方法,包含如下步骤:

步骤1、针对循环进行数据依赖分析,分析各个迭代之间的数据依赖关系,确定循环适合进行循环倾斜优化。

步骤2、针对循环倾斜对数组重组,首先将二维数组的每一行进行循环右移,右移位数和数组的列号索引值相同,接着将二维数组转置。

步骤3、针对循环倾斜中尾循环存在非满载向量操作,实现非满载向量读写向量读时,空闲部位填充冗余数据;向量写时首先写入内存的临时向量空间中,在将有效数据写入相应的数组位置中。

本发明解决现有技术中循环倾斜并行部分数据离散,不利于向量化的问题,针对wavefront程序,程序优化从4个方面展开,分别是核循环倾斜优化、数据重组、向量化优化以及非满载向量化优化,实现对wavefront程序执行效率的提升。

依赖分析:对于程序的循环部分进行依赖分析,分析发现循环在i层迭代与j层迭代均存在依赖关系,所以i层与j层循环均不可以并行执行。但程序存在跨迭代并行执行部分,所以适合进行循环倾斜优化。

循环右移:将二维数组的每一行进行循环右移,右移位数和数组的列号索引值相同,由于循环右移是连续操作,所以可以进行向量化优化,同时各列之间相互不影响,所以可以进行并行优化。

数组转置:数组转置部分离散读写比较多,将矩阵分块,改善数组转置局部性,并且利用OpenMP进行并行优化。

非满载向量读:读数据时,读取相应向量长度的数据,不需要计算的数据则为冗余数据,计算时需保存脏数据所在位置。

非满载向量写:将数据写入一个内存中新申请的临时向量空间中,再通过这个新申请的临时空间,将需要写回数组的合法数据写入到计算后数组中数据相应的位置中。

基于全局数据重组的循环倾斜优化可以分为三个阶段,分别是循环倾斜,数据重组和非满载向量化,如图1、图2、图3、图4和图5所示,循环倾斜改变迭代空间,挖掘迭代中数据级并行部分,数据重组改善数据局部性,更便于向量化操作,非满载向量化对尾循环进行向量处理。

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