一种基于数据流分析的访存合并优化方法技术

技术编号:2843193 阅读:213 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种基于数据流分析的访存合并优化方法,通过对全局访存指令的访存信息进行数据流分析,将地址相邻或者相近的两个或多个访存指令合并为一条多字节的访存指令。合并后的访存数据存放在寄存器或局部存储器中,原先的访存指令被替换为对寄存器或局部存储器的直接访问。由于该方法通过编译时的静态程序分析方法来优化程序,因此不需要占用额外的存储空间,也不需要硬件支持,实现代价小。通过该方法,可以减少程序中访存指令的数目,减少程序运行时对主存储器的访问次数和访问带宽,从而减少访存时间,提高了程序性能。该方法可应用于通用处理器以及嵌入式处理器体系结构。

【技术实现步骤摘要】

本专利技术涉及通用及嵌入式编译的访存优化
,是。
技术介绍
在计算机技术中,计算机处理器的速度增长远远高于存储器访问速度的增长,而计算机处理器的速度也远远高于存储器的访问速度,因此,在计算机运行过程中,处理器花费大量时间等待访存数据,这使得访存操作日益成为计算机性能的瓶颈。与访存相关的优化技术是一类重要的编译优化技术,该技术通过各种方法减少访存的延迟,提高访存带宽的利用率。访存优化技术在硬件上主要采用多级缓存的方法减少访存延迟,而实现线程级的轻量级切换的多线程技术也有助于隐藏各个线程访存的延迟。访存优化技术在软件上主要采用数据预取、软件控制的数据缓存、数据映射、访存合并等技术来减少访存延迟。在嵌入式处理器上,存储器往往分为多个存储层次,硬件上没有数据缓存,数据在各个存储层次间的分配需要程序员自己指定,这样做显然不利于访存优化的实现。因此,软件的访存优化技术在嵌入式处理器上尤为重要。对嵌入式处理器的详细说明请参见参考文献1.。访存合并技术是访存优化技术在软件上的一种应用,访存合并技术最先在参考文献2.中提出,它针对通用处理器的64位访存指令,通过循环展开,将同一循环相邻几个迭代中对数组元素的窄访存指令合并为一条双字的(64位)宽访存指令,从而减少了总的访存延迟。在合并的同时,它需要对访存指令做一些安全性和合并代价的检查,保证合并操作不会改变程序的语义并且能够提高程序性能。在必要时,它还提供了运行时的数据对齐和别名检查。该方法的不足在于它仅仅针对程序循环中对数组元素的递增或递减式访问,数据访问的宽度也受限于64位的指令宽度;它缺乏对整个程序的访问操作的位信息的精确描述;同时对于嵌入式处理器而言,程序的性能瓶颈并不在于循环的数组访问,而在于对特定数据的操作和访问,这种操作与访问常常遍布于整个程序。
技术实现思路
本专利技术的目的是提供一种能够减少访存次数和访存总带宽的方法,以减轻嵌入式处理器和通用处理器上的访存瓶颈问题,从而有效提高应用程序的性能。为了实现上述目的,本专利技术提供了,包括以下步骤1)、利用编译器收集整个程序的访存操作信息,将所得信息存入一个映射表;2)、由编译器对程序中的所有基本块构造支配图和后支配图;3)、对程序中的所有读操作做反向数据流分析,更新基本块的输入数据集和输出数据集;4)、对程序中的所有写操作,进行正向数据流分析,更新基本块的输入数据集和输出数据集;5)、根据步骤3)和步骤4)所得到的基本块的输入数据集和输出数据集,对每一个访存操作,判断该访存操作所在基本块的输入数据集合中的访存操作是否可与该访存操作合并,并为输入数据集中所有可以与当前访存操作做合并的访存操作建立一个集合;6)、判断用于保存可合并的访存操作的集合是否为空,若为空,则跳转到步骤10),否则,执行下一步;7)、对步骤5)所得集合中的所有元素,分别计算各个元素对应的访存操作与当前访存操作之间的合并密度;8)、从步骤7)所得到的结果中,选择合并密度最大的访存操作,将该访存操作与当前访存操作进行合并,生成新的访存操作;9)、判断所合并的访存操作的类型,若访存操作为读操作,则将访存操作所在基本块的读操作替换为对临时寄存器的读操作,并跳转到步骤13),若访存操作为写操作,执行下一步; 10)、访存操作为写操作,将访存操作所在基本块的写操作替换为对源操作数寄存器的写;11)、在写操作合并时,如果两个写操作的数据位置相邻,则到步骤13);否则,执行下一步;12)、两个写操作的数据位置不相邻,则遍历支配图中一个写操作原来所在基本块的所有祖先节点,寻找位于这些节点中的一个读操作,使得该读操作读取中间间隔部分的数据,如果找到该读操作,则在合并的写操作之前插入指令,将中间间隔部分的数据写入源操作数寄存器,如果找不到这样的读操作,则在支配图上该写操作原来所在基本块的父节点对应的基本块处,插入这样的读操作;13)、转步骤3);14)、结束。上述技术方案中,所述步骤3)的对读操作做反向数据流分析的具体实现步骤如下3-1、将所有基本块的输入输出数据集初始化为空;3-2、对每一个基本块,如果一个基本块有多个后继块,则将这些后继块的输出数据集合并为该基本块的输入数据集;否则,该基本块的输入数据集等于它的直接后继块的输出数据集;3-3、对每一个基本块,如果该基本块中是读操作,则将该读操作加入到数据集中;3-4、对每一个基本块,如果该基本块中是写操作,则将数据集中与该写操作相关的数据位都置为无效;3-5、对每一个基本块,如果新产生的数据集不等于该基本块原来的输出数据集,则将新产生的数据集设为该基本块的输出数据集,3-6、判断程序中是否还有未被处理的基本块,若有,转步骤3-2,否则,转下一步;3-7、判断程序中所有基本块的输出数据集与上一次计算相比是否都没有变化,若是,结束反向数据流分析过程,否则,转步骤3-2。上述技术方案中,所述步骤4)的对写操作做正向数据流分析的具体实现步骤如下4-1、所有基本块的输入输出数据集初始化为空; 4-2、对每一个基本块,如果一个基本块有多个前驱块,则将这些前驱块的输出数据集合并为该基本块的输入数据集;否则,该基本块的输入数据集等于它的直接前驱块的输出数据集;4-3、对每一个基本块,如果该基本块中是读操作,则将数据集中与该读操作相关的数据位都置为无效;4-4、对每一个基本块,如果该基本块中是写操作,则将该写操作加入数据集中,并将数据集中与该写操作相关的数据位都置为无效;4-5、对每一个基本块,如果新产生的数据集不等于该基本块原来的输出数据集,则将新产生的数据集设为该基本块的输出数据集;4-6、判断程序中是否还有未被处理的基本块,若有,转步骤4-2,否则,转下一步;4-7、判断程序中所有基本块的输出数据集与上一次计算相比是否都没有变化,若是,结束正向数据流分析过程,否则,转步骤4-2。所述的数据集合并的具体实现步骤包括如果所要合并的两个数据集中有相同的元素,即该元素表示的访存操作所在的基本块相同,则对这两个元素代表的访存操作的数据位进行“与”操作,所得结果存入合并后的新的数据集中;如果两个集合中有不相同的元素,则直接将这些元素存入合并后的新的数据集中。所述的将与写操作相关的数据位置为无效的方法是将写操作的有效数据位先取反,然后再与数据集中所有操作的数据位进行“与”操作,其中有效数据用1表示,无效数据用0表示。所述的将与读操作相关的数据位都置为无效的方法是将该读操作的有效数据位先取反,然后再与数据集中所有操作的数据位进行“与”操作,其中有效数据用1表示,无效数据用0表示。上述技术方案中,所述步骤5)中,所述合并的判断条件根据访存操作的类型而异读操作合并必须满足2个条件一个读操作在被合并读操作所在基本块处必须要活跃;被合并读操作所在基本块必须支配所述读操作原来所在的基本块;写操作合并必须要满足2个条件一个写操作在被合并写操作所在基本块处必须要活跃;被合并写操作所在基本块必须与所述写操作原来所在的基本块控制等价,即所述写操作原来所在的基本块支配被合并写操作所在基本块,并且被合并写操作所在基本块后支配所述写操作原来所在的基本块。所述的活跃的判断方法为如果该访存操作在该基本块处的相对偏移量和数据宽度与在它所属的基本块处的相本文档来自技高网
...

【技术保护点】
一种基于数据流分析的访存合并优化方法,包括以下步骤:1)、利用编译器收集整个程序的访存操作信息,将所得信息存入一个映射表;2)、由编译器对程序中的所有基本块构造支配图和后支配图;3)、对程序中的所有读操作做反向数据流 分析,更新基本块的输入数据集和输出数据集;4)、对程序中的所有写操作,进行正向数据流分析,更新基本块的输入数据集和输出数据集;5)、根据步骤3)和步骤4)所得到的基本块的输入数据集和输出数据集,对每一个访存操作,判断该访存操 作所在基本块的输入数据集合中的访存操作是否可与该访存操作合并,并为输入数据集中所有可以与当前访存操作做合并的访存操作建立一个集合;6)、判断用于保存可合并的访存操作的集合是否为空,若为空,则跳转到步骤10),否则,执行下一步;   7)、对步骤5)所得集合中的所有元素,分别计算各个元素对应的访存操作与当前访存操作之间的合并密度;8)、从步骤7)所得到的结果中,选择合并密度最大的访存操作,将该访存操作与当前访存操作进行合并,生成新的访存操作;9)、判断 所合并的访存操作的类型,若访存操作为读操作,则将访存操作所在基本块的读操作替换为对临时寄存器的读操作,并跳转到步骤13),若访存操作为写操作,执行下一步;10)、访存操作为写操作,将访存操作所在基本块的写操作替换为对源操作数寄存器的 写;11)、在写操作合并时,如果两个写操作的数据位置相邻,则到步骤13);否则,执行下一步;12)、两个写操作的数据位置不相邻,则遍历支配图中一个写操作原来所在基本块的所有祖先节点,寻找位于这些节点中的一个读操作,使得该读操 作读取中间间隔部分的数据,如果找到该读操作,则在合并的写操作之前插入指令,将中间间隔部分的数据写入源操作数寄存器,如果找不到这样的读操作,则在支配图上该写操作原来所在基本块的父节点对应的基本块处,插入这样的读操作;13)、转步骤3) ;14)、结束。...

【技术特征摘要】

【专利技术属性】
技术研发人员:刘弢吴承勇
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1