面向数据访存和程序并行优化的循环分块技术 · 14...

13
14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术 刘松 伍卫国 赵博 西安交通大学 电子与信息工程学院 西安 710049 [email protected] 摘要: 循环分块是一种广泛用于改善数据局部性和开发并行性的程序变换优化技术,主要分为两 类:固定因子的分块技术和参数化分块技术,系统的总结了这两类技术,并分析了其优缺点。 由于分块因子的选择会严重影响分块代码的性能,总结了优化分块因子选择的各种方法。此 外,总结了循环分块技术在多级分块、并行性开发和不完美嵌套循环应用等方面提出的各种技 术。通过对循环分块技术当前研究现状的分析,得出如下结论:a) 循环分块技术中的计算复杂 度和生成代码效率问题还未得到完全解决,如何利用循环边界有效地约束迭代空间并提高数据 局部性还需要更深入的研究;b) 最优分块因子的选择依然是一个开放式难题,研究清楚分级存 储架构中每级分块对性能的影响具有重要的意义;c) 从循环分块的应用角度,如何有效地构建 面向任意嵌套循环集的自动分块代码生成系统,同时充分利用深度存储资源和多核架构实现细 粒度并行性,也是一个需要深入研究的方面。 关键词:循环分块,最优分块因子,程序变换,并行性,性能 多级Cache 系统利用数据局部性原理为程序的高 速运行提供了有效的支持。随着主流多核架构的兴 起,Cache 的层次深度逐步提高,片上高层次Cache 数据访问速度越来越接近处理器,而由于工艺的局 限,高层次的Cache 容量却难以满足需求,如何让程 序最大程度的利用多级Cache 架构的资源受到越来越 多的关注。随着CMP 技术的发展,处理器中核数不断 增加,即将迎来众核时代,然而并行程序的简单高 效开发仍然是一个开放式难题,如何自动改写串行 程序挖掘现有处理器架构和加速器(如Cell 处理器 [1] GPGPUs [2] )的并行性能依然是一个热门研究的课题。 同时,研究发现,许多计算密集型应用程序,特别 是科学和工程计算应用程序中的嵌套循环会花费大 部分的运行时间,嵌套循环已成为亟需解决的程序 热点 [3] 。为了有效利用多级Cache 架构资源,增强数 据局部性,开发带嵌套循环程序的并行性,最大程 度地发掘多核架构性能,循环分块技术 [4-10] 已经得 到广泛的研究和应用。一方面,利用循环分块技术 可以把较大程序工作集划分成适应高层次Cache 容量 的小工作集,使数据得到充分重用,以减少Cache [4-6] ,增加程序局部性。另一方面,利用循环分块 技术可以把程序特征和硬件特征进行匹配 [10] ,充分开 发硬件架构的潜在性能,同时可以为串行程序生成 具有较好粒度的并行分块代码,使其适用于具有广 泛应用背景的线性代数库函数(如BLAS [11] 中的矩阵 相乘,LU分解,三角矩阵求解等)和模板计算(如时域 有限差分,雅各比迭代,高斯赛德尔方程等)。 循环分块技术通过对带嵌套循环的程序进行 变换,重新构建代码,对迭代空间实行分块重新排 序访问,以实现改善数据局部性和分块并行性的目 的。循环分块技术主要分为两大类: (1) 固定分块技术。针对固定分块因子的分块技 术,利用基于Cache 行为分析的方法静态分析数组引 用的依赖关系 [5] ,运用扫描多面体方法 [7] 生成循环边 界的约束不等式系统,而基于循环分解的方法 [13] 则提 供了全新的解决自动分块代码生成问题的思路。 (2) 参数化分块技术。利用边界框方法 [10] 、Outset 集方法 [10] 和符号的傅里叶莫茨消除法SFME [14] ,把 分块因子作为符号参数进行分块,可以更加有效的 生成分块代码,使得程序的运行时反馈和动态自适 基金项目:国家自然科学基金(91330117) 和国家高技术研究发展计划(863)(2012AA010901 ,2012AA01A306)

Upload: others

Post on 18-Jun-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

14 《高性能计算发展与应用》 2013年第三期 总第四十四期

面向数据访存和程序并行优化的循环分块技术 刘松 伍卫国 赵博

西安交通大学 电子与信息工程学院 西安 710049 [email protected]

摘要:

循环分块是一种广泛用于改善数据局部性和开发并行性的程序变换优化技术,主要分为两

类:固定因子的分块技术和参数化分块技术,系统的总结了这两类技术,并分析了其优缺点。

由于分块因子的选择会严重影响分块代码的性能,总结了优化分块因子选择的各种方法。此

外,总结了循环分块技术在多级分块、并行性开发和不完美嵌套循环应用等方面提出的各种技

术。通过对循环分块技术当前研究现状的分析,得出如下结论:a)循环分块技术中的计算复杂

度和生成代码效率问题还未得到完全解决,如何利用循环边界有效地约束迭代空间并提高数据

局部性还需要更深入的研究;b)最优分块因子的选择依然是一个开放式难题,研究清楚分级存

储架构中每级分块对性能的影响具有重要的意义;c)从循环分块的应用角度,如何有效地构建

面向任意嵌套循环集的自动分块代码生成系统,同时充分利用深度存储资源和多核架构实现细

粒度并行性,也是一个需要深入研究的方面。

关键词:循环分块,最优分块因子,程序变换,并行性,性能

多级Cache系统利用数据局部性原理为程序的高

速运行提供了有效的支持。随着主流多核架构的兴

起,Cache的层次深度逐步提高,片上高层次Cache的

数据访问速度越来越接近处理器,而由于工艺的局

限,高层次的Cache容量却难以满足需求,如何让程

序最大程度的利用多级Cache架构的资源受到越来越

多的关注。随着CMP技术的发展,处理器中核数不断

增加,即将迎来众核时代,然而并行程序的简单高

效开发仍然是一个开放式难题,如何自动改写串行

程序挖掘现有处理器架构和加速器(如Cell处理器[1]和

GPGPUs[2])的并行性能依然是一个热门研究的课题。

同时,研究发现,许多计算密集型应用程序,特别

是科学和工程计算应用程序中的嵌套循环会花费大

部分的运行时间,嵌套循环已成为亟需解决的程序

热点[3]。为了有效利用多级Cache架构资源,增强数

据局部性,开发带嵌套循环程序的并行性,最大程

度地发掘多核架构性能,循环分块技术[4-10]已经得

到广泛的研究和应用。一方面,利用循环分块技术

可以把较大程序工作集划分成适应高层次Cache容量

的小工作集,使数据得到充分重用,以减少Cache失

效[4-6],增加程序局部性。另一方面,利用循环分块

技术可以把程序特征和硬件特征进行匹配[10],充分开

发硬件架构的潜在性能,同时可以为串行程序生成

具有较好粒度的并行分块代码,使其适用于具有广

泛应用背景的线性代数库函数(如BLAS库[11]中的矩阵

相乘,LU分解,三角矩阵求解等)和模板计算(如时域

有限差分,雅各比迭代,高斯赛德尔方程等)。

循环分块技术通过对带嵌套循环的程序进行

变换,重新构建代码,对迭代空间实行分块重新排

序访问,以实现改善数据局部性和分块并行性的目

的。循环分块技术主要分为两大类:

(1)固定分块技术。针对固定分块因子的分块技

术,利用基于Cache行为分析的方法静态分析数组引

用的依赖关系[5],运用扫描多面体方法[7]生成循环边

界的约束不等式系统,而基于循环分解的方法[13]则提

供了全新的解决自动分块代码生成问题的思路。

(2)参数化分块技术。利用边界框方法[10]、Outset

集方法[10]和符号的傅里叶莫茨消除法SFME[14],把

分块因子作为符号参数进行分块,可以更加有效的

生成分块代码,使得程序的运行时反馈和动态自适

基金项目:国家自然科学基金(91330117)和国家高技术研究发展计划(863)(2012AA010901,2012AA01A306)

Page 2: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

15高性能计算技术

应成为可能。另外,鉴于迭代空间是多面体集的特

性,利用成熟的代码生成器[15-16],可以有效的生成参

数化分块代码。

由于分块因子的选择[17]对分块后代码的执行性

能有重要的影响,一些研究者提出了基于模型驱动

的分析方法、经验搜索和二者混合的方法来确定分

块因子的形状和大小。另外,多级分块技术可以更

好的利用现代计算机层次存储系统资源,开发出具

有较好粒度的程序并行性。因为很多应用程序属于

不完美嵌套循环的范畴,一些研究者提出了面向任

意嵌套循环程序的分块方法[37,47,77]。

基于研究现状,还有一些需要深入研究的方

面,比如,如何在保证分块代码质量的前提下,降

低分块技术本身的算法复杂度,如何明确各级分块

对性能的影响从而更好的选择分块因子,如何细化

分块并行粒度,如何提出有效解决面向任意嵌套循

环的一般化方法,等等。

本文第1节讨论固定分块因子情况下的各项分块

技术,分析了各技术的优缺点和适用性。第2节讨论

了参数化分块的三类方法及其特点。第3节介绍了有

效选择最优分块因子的各种方法。第4节讨论了循环

分块技术在多级分块、并行性和不完美嵌套循环应

用等三方面的扩展性研究,介绍了所采用的方法及

其特点。第5节对本文进行总结。

1. 固定分块技术循环分块技术的应用对象是具有嵌套循环的程

序,嵌套循环主要分为完美嵌套循环和不完美嵌套

循环两类。完美嵌套循环是指循环体不包含任何出

口分支,所有的循环体都必须在相同的循环层内的

嵌套循环层。不完美嵌套循环的循环体可能出现在

不同的循环层内。图1是一个模板计算的完美嵌套循

环示例。本文介绍的分块方法均以图1示例为参照。

完美嵌套循环的上下界是线性的,线性数组引用把

循环体包围在中间,也就是循环下标表达式是程序

语言整数变量的线性表达式,循环的初始执行顺序

是索引值的词典顺序。

图1 模板计算的完美嵌套循环

固定分块是指分块因子在编译时期是固定常量

的分块方法,这类方法需要通过不断的重新编译代

码来改变或调试分块大小。

1.1 基于Cache行为分析的分块方法

Cache行为分析是对给定带循环的数值计算程序

用数学方法分析确定Cache执行性能的技术。这类方

法首先对给定的循环体进行数据依赖分析[5],利用

循环变换(如互换、斜交等)、幺模变换等技术[18]改变

循环结构消除依赖关系,采用Strip-mining[19]使得原

来循环深度增加,然后对变化后的迭代空间进行分

块,根据迭代空间数组引用的footprints[6]调整分块大

小,使得原本较大的工作集划分成若干满足分级存

储容量的子集,充分利用数据重用性,减少Cache的

干扰和失效,提高程序的局部性和分级存储体系的

利用率。

文献[4]介绍一些对迭代空间进行合法分块的方

法。文献[5]提出的数据重用性和局部性数学形式化

方法在SUIF[20]编译器上得到成功应用,有效的提高了

数值计算程序的执行性能。同时一些研究[6]表明问题

规模和循环基址的轻微变化会导致预测的Cache性能

出现极大的差异。为了满足对Cache数据访问准确估

算的需求,文献[22]建立了一套精确的Cache失效方程

模型来分析Cache行为。另外,基于Cache行为分析的

分块方法在多处理器上具有良好的并行性[21,22,23],

启发式技术也得到应用[24]。

由于Cache行为分析技术要求非常详细的数据映

射和引用模式,预测的性能不够稳定,因此很难精

准估算Cache的干扰行为。另外,这种方法主要适用

于完美循环的数值计算,不能有效解决诸多广泛应

用的计算类型。

1.2 扫描多面体技术

由于当分块因子是固定常数时分块后的迭代空

间是一个多面体的理论得到证明[7],生成扫描多面体

的循环技术得到广泛研究和应用[8,12,20,26,29,34]。

一个完美嵌套循环的迭代空间是有限凸多面体

ZN,N是嵌套循环的层数,也是迭代空间的维数。

迭代空间的每一个元素是循环体的一次迭代,由迭

代向量的值来确定,称为凸多面体的一个点。根据

多面体模型可以精确描述点和点之间的依赖关系[12,

25],利用线性代数和线性规划的机制进行一系列复杂

的循环变换,改变多面体扫描顺序,从而生成具有

较好Cache局部性和循环并行性的分块代码。多面体

模型适用于数据访问函数和循环边界是循环内下标

变量和参数的仿射组合的嵌套循环。

文献[8]提出一种经典的扫描单一多面体技术,

通过对原始迭代空间的约束不等式系统采用傅里叶-

莫茨消去法(FME),计算出仿射变换后新的循环边

界。采用这种固定分块方法生成的代码如图2所示。

由于FME对绝大部分循环变换具有一般性,这种方法

得到广泛的研究。文献[26]通过扩展[8]的方法,并运

用一系列精致的优化技术扫描联合多面体,解决了

Page 3: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

16 《高性能计算发展与应用》 2013年第三期 总第四十四期

为仿射控制循环生成通用代码的问题,利用该方法

开发了广泛分布的Omega库[27],而SUIF[20]也包含了类

似的算法。尽管如此,FME的复杂度是循环维数的双

指数函数,这将导致基于FME的扫描多面体方法效率

较低。

图2 采用经典多面体方法生成固定分块循环

为了解决FME复杂度问题,文献[28]提出一

种双表征算法,递归建立联合多面体的抽象语法

树AST,用AST生成代码。该算法虽然能够保证避

免冗余控制,但有着代码量爆炸、较高复杂度和

控制开销大的局限性。文献[29,31]对该算法进行

改进,减小了生成代码长度和代码生成的处理时

间。这些算法在开源工具CLooG[29-30]中得到实现,

CLooG利用PolyLib库[32]进行核心的多面体计算,采

用Chernikova算法[33],使得代码生成比基于FME的

方法更为高效。另外,WRAP-IT项目[34-35]使用了由

CLooG衍生的WLoog。

由于扫描多面体技术的发展,大批基于多面

体模型的代码生成器不断涌现。文献[29]比较了三

种典型代表的代码生成器CodeGen[36]、LoopGen[28]和

ClooG[29-30],在Intel PentiumⅢ架构上对SPECfp2000和

PerfectClub benchmarks进行测试,比较分析了三种

代码生成器在代码生成时间和相对于原始代码的

生成代码扩展量上的性能。如图3所示,CLooG和

CodeGen、LoopGen相比,平均代码生成时间加速比

分别为4.05和2.57。同时CLooG生成的代码量相对原

始代码增加最低,平均增加量为6%。由于LoopGen以

代码量为代价清除了更多的控制开销,在代码生成

时间上较CodeGen有明显改善,但是生成代码量比

CodeGen平均增加38%。

这些代码生成器也有一定的局限性,如只适用

于计算密集型的带完美嵌套循环的程序,最坏情况

下CLooG的复杂度仍然是双指数函数。另外,这些代

码生成器都需要人为参与手动开发。鉴于CLooG的高

效性,文献[37]设计实现了一个全自动多面体模型优

化系统,该系统提出基于statement-wise的仿射变换

提供给CLooG作为散射函数,使其能够扫描任意循环

代码(包含不完美嵌套循环的代码)的联合多面体,并

能完全自动生成分块代码,为程序的并行性和数据

局部性提供源到源source-to-source的优化。该系统的

实现框架如图4所示。

图3 CodeGen、LoopGen和CLooG在分块代码生成时间和代码量上的性能比较

图4 全自动源到源转换的多面体程序优化系统

多面体模型架构下,串行程序的并行化代码自

动生成主要分为三个步骤:(1)输入程序数据依赖关

系的静态分析;(2)对抽象多面体模型的循环变换;

(3)变换后有效的循环代码生成。文献[37]的实验表明

该系统不仅能为不完美嵌套循环的模板函数自动生

成分块代码,而且在多核架构上也能获得较高的加

速比。但是该系统只适用固定分块的情况。

1.3 分块嵌套循环的分解方法

文献[13]提出一种全新的分块思路,其主要贡

献在于把分块代码生成问题分解成两个子问题:一是

枚举所有分块,二是扫描每个分块内的点。对第一

Page 4: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

17高性能计算技术

个子问题,通过非幺模变换扩展迭代空间的循环边

界,精确的枚举所有分块的源点;对第二个子问题,

利用非幺模变换矩阵及其埃尔米特范式,把原始的

平行六面体迭代空间转换成超矩形空间,扫描所有

块内点。

这种分解的方法,有效降低了应用FME时的约

束不等式的数量,使得分块代码生成的编译时间和

执行时间大幅下降。文献[13]把该方法与文献[8]和

[27]提出的方法在时间和分块开销上进行性能比较,

实验验证了该分解方法的优势。尽管这种方法只适

用于分块因子固定的情况,但是为后来的研究提供

了明确的方向。

1.4 小结

由 上 述 分 析 可 知 , 固 定 分 块 技 术 可 以 避 免

Cache失效行为,改善数据局部性,有效利用层次存

储架构,实现程序中的循环体并行执行,但是这类

方法仍具有明显的局限性:(1)基于Cache行为分析

的方法难以精确模拟Cache行为对循环程序的性能影

响,同时存在分块效率和适用范围的问题;(2)基于

多面体扫描的方法虽然可以应用到任意循环程序,

但其基于FME计算迭代空间边界的算法具有较高的算

法复杂度,分块代码的生成和执行时间较长;(3)虽

然循环分解的思想有效的改善了之前方法的空间、

时间复杂度及分块开销,但是这种方法具有所有固

定分块方法共同的局限性,即分块因子是固定常

数,导致分块代码无法动态调整,每次改变分块大

小都需要重新编译代码,而相关研究表明找到最优

分块因子十分困难[38],这就意味着固定分块方法需要

一直不停的重新编译代码,使得该方法十分耗时、

低效,很难在实际需求中得到高效的应用。

2. 参数化分块技术参数化分块是指应用分块变换时不固定分块

因子,把分块因子当做符号参数,只在运行时才会

被确定下来。参数化分块不仅可以适用于迭代编译

器、自动调优器(auto-tuners)[16]和一些代码生成器[30],而且支持运行时反馈和程序动态适应。与固定分

块方法需要不断重新编译代码不同,参数化分块方

法对所有的分块因子只需一次编译生成分块代码。

目前,一些源到源转换的分块变换系统,如TLoG[10,

39]、HiTLoG[40-41]、PrimeTile[42-43]和Pluto[37,44],已经发

布使用。

2.1 边界框方法

几何学上的边界框(Bounding box)方法可以作

为参数化分块代码生成问题的一种简单解决方案[10]:

首先生成分块循环(tile-loops)计算迭代空间的边界

框内每个分块的源点(origin),接着利用点循环(

point-loops)检查每个分块是否包含有效的迭代空间

内的点。图5显示使用边界框方法生成的分块嵌套循

环。

图5 采用边界框方法生成分块循环

边界框方法把分块问题分解成两组循环生成的

问题,一组循环边界把循环变量约束在分块边界框

内的点,另外一组则把循环变量约束在迭代空间内

的点。

图6 二维模板计算迭代空间的边界框,采用2×2分块

图1示例嵌套循环的二维平行四边形迭代空间及

其边界框如图6所示,循环边界是方形分块和迭代空

间的交集。观察可以发现分块有三种类型:完整分

块(full tile),分块内的点全部属于迭代空间;局部

分块(partial tile),分块内部分点属于迭代空间;

空分块(empty tile),分块和迭代空间的交集为空。

边界框的方法和文献[13]提供了类似的分解思路,

而且分块因子无需在循环生成时固定,可以作为符

号参数使用,这些特性使得参数化分块循环成为可

能。尽管边界框方法适合很多应用,但是由于分块

循环可能会计算很多空分块,将会导致该方法效率

较低,特别是对非矩形的迭代空间,用该方法分块

带来的计算开销可能达到50%[10]。另外,根据迭代空

间约束条件计算边界框可能会引起指数级复杂度。

Page 5: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

18 《高性能计算发展与应用》 2013年第三期 总第四十四期

2.2 基于SFME的方法

FME算法中重要的一步是判断循环变量系数的

正负符号。当系数是固定常数时,对线性约束条件

的判断就简单明确,但是对于参数化分块,变量系

数是符号参数,将难以判断正负。文献[14]提出的符

号傅里叶莫茨消去算法SFME算法利用约束不等式集

的双线性性质,消除冗余的约束条件。由该算法生

成的分块循环代码如图7所示。

图7 采用符号傅里叶莫茨消去法SFME生成分块循环

SFME方法可以生成精准的分块循环,为解决

分块代码生成面临的绝大部分问题提供了完整的方

案。但是该算法具有非常高的计算复杂度,而且算

法的每一步都需要进行符号运算,导致运行时的低

效和代码生成时间过长[10]。另外,SFME算法不能支

持并行分块,文献[45]提出的一种松弛的SFME算法对

分块计算实现了波阵面的并行性。

2.3 Outset集方法

构建Outset集是该方法的关键[10]。Outset集是包

含所有非空分块源点origins的集合。Outset集与文献

[13]构建的分块源点空间(Tile Origin Space)类似,

但有两个明显的不同点:一是Outset集包含的参数中

分块因子可以是符号参数也可以是固定常数,另一

点是Outset集可以供应给任何能够扫描多面体的代码

生成器。

Outset集由分块因子进行参数化,具有边界框

的全部优点,同时只计算非常少的空分块。图8显示

了二维模板计算的Outset集,其中包括2×2大小的分

块,可以看出Outset集只包含一个空分块,远小于边

界框要计算的空分块数目。

从几何图形上来看,Outset集的构建可以看做是

对迭代空间中循环下界进行超平面移位,以图8的二

维迭代空间为例,对左边垂直边界和上下两条45°边

界进行向外移位,这样得到的Outset集将会包含所有

与迭代空间有非空交集的分块的源点。其中左边垂

直边界和顶部45°边界组成了循环变量k的下界,底

部45°边界形成了循环变量i的下界。对扫描Outset集

的循环进行一定的后处理,得到分块循环,代码如

图9所示。

图8 二维模板计算迭代空间的Outset集和边界框

图9 采用Outset集生成参数化分块循环

为了保证点循环最终扫描的点都是有效的,其

边界由分块边界和迭代空间边界组成,但是对于原

始迭代空间中的完整分块,迭代边界成为多余,这

将造成过多的资源开销。文献[8]建议对完整分块和

局部分块分别处理来优化分块代码,文献[46]通过拆

分索引集划分迭代空间。由所有完整分块的源点构

建的Inset集[40,47]是一种简单有效的区分完整分块和

局部分块的方法。和Outset集一样,Inset集也是一个

多面体,可以应用于扫描多面体的代码生成器。一

旦构建好Inset集,就可以通过判断分块源点是否属于

Inset集或从Outset集中划分Inset集这两种方法,消除

多余的边界约束条件,从而减小循环开销。

表1 四种方法在分块循环生成时间上的比较(单位毫秒),fClassis,fDecom,pBbox,pOutset分别表示固定多面体方法,固定循环分解方法,参数化边界框方法和参数化Outset集方法

LUD SSYRK STRMM 3D Stencil

fclassic 32.4 28.6 29.0 26.0

fDecom 55.2 51.0 50.4 45.0

pBbox 53.5 53.2 51.2 54.0

pOutset 52.0 5.8 52.1 54.1

Page 6: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

19高性能计算技术

Outset集方法具有边界框算法和[13]的循环结

构分解的简单思路,生成的代码具有固定分块方法

的良好品质,同时受益于参数化分块代码生成的优

势,使其成为目前最为有效的参数化循环分块方法

之一。文献[10]把参数化Outset集方法和边界框方

法、经典的固定分块方法进行比较,如表1所示,实

验结果表明Outset集方法在代码生成效率和生成代码

质量上和现有最好的固定分块方法一样好。另外,

基于Outset集方法,文献[48]发展了一套完整的参数

化循环分块的形式理论。

2.4 小结

本节介绍了三种参数化循环分块方法。边界

框方法提供了一种简单的参数化思想,但对非矩形

迭代空间会导致较低的分块效率,使其适用范围受

限。与边界框方法不同,基于SFME的方法运用分块

迭代空间复杂的形式化特征,提供计算非空分块源

点的精准算法,使得该方法计算复杂度过高,代码

生成时间漫长。Outset集方法则在代码生成效率和生

成代码质量上达到了与经典固定分块方法可比的性

能。这归功于Outset集的重要特性:不仅可以由符

号参数和固定常数分别构建,也适合于固定常数和

符号参数混合的情况:Outset集在时间和空间复杂度

上是循环边界数目的线性关系,使得其构建十分高

效:Outset集是一个多面体,可以利用现有的代码生

成器实现参数化循环分块。另外,在Outset集的基础

上提出了一种利用Inset集消除多余边界条件的优化方

法。

文献[10]介绍的Outset集方法仅适用于可以进行

矩形分块的单一的完美嵌套循环,但文献[40,42]对

Outset集方法进行扩展,使其可以应用于不完美循环

嵌套和多级分块,详细内容将在第4节介绍。由于参

数化分块技术的研究工作开展较晚,针对参数化循

环分块方法的算法复杂度、代码生成效率、应用范

围、多级存储架构映射、分块并行性等方面,仍需

要深入的研究。

3. 理解继承反常现象开发数据局部性是实现软硬件高水平性能的关

键问题,分块因子的选择对性能有着重要的影响,

然而随着处理器分级存储体系的复杂度和深度增

长,有效选择最优分块因子成为一个更具有挑战性

的开放问题。

3.1 基于分析的方法

早期研究者通过对程序循环嵌套和硬件存储特

征进行静态分析,为编译器选择合适的分块因子[6,

49,50]。这类方法主要用来解决容量失效、自干扰失

效、交叉干扰失效导致的Cache不命中和局部性优化

问题。

文献[5]首次对重用和局部性提出了精确的数学

定义,并据此开发一系列程序变换,考虑Cache组相

联导致的数据冲突,提出一种LRW算法[6]来确定最大

正方形分块大小,以提高数据局部性。文献[51]设计

了一个估算不同高速缓存线(Distinct Cache Lines)

模型,关于DL的定义如下:

一个包含在完美嵌套循环内的m维矩阵A,下标

变量为i1,⋯,in,fj(i1,⋯,in)是一个仿射函数,

可表示为:A[fm(i1,⋯,in)] ⋯[f1(i1,⋯,in)]。矩阵

A单维下标表达式f(i1,⋯,in)单一数组引用会访问

到不同高速缓存线数目的上限为:

其中g是下标表达式f系数的最大公约数,L是以

数组元素大小为单位的高速缓存线尺寸,fhi和flo分

别是下标表达式f在整个循环过程中的最大值和最小

值。由单维推广至多维数组引用A(f1,⋯,fm),访问

DL上限的估值为:

这样根据估算循环访问不同的高速缓存线的数

目,建立更为精确的Cache失效估算模型,指导用户

程序变换,实现较高的Cache命中性能。另外一些

Cache估计模型也被提出并用于指导数据局部性优

化[5,52]。

另外一些研究者提出针对降低自干扰失效的分

块因子选择方法[17,6]。文献[22]提出Cache失效方程,

选择合适的分块大小来消除自干扰,同时计算适应

Cache容量的最大分块。文献[49]的分块方法不仅可以

把容量失效和交叉干扰失效减少到最小,而且能够

避免自干扰失效的发生,提高Cache利用率。另外,

数组padding作为一种有效的数据布局优化技术,与

上述一些算法合并使用,可以避免计算病态矩阵时

循环分块技术的不稳定性[53]。

虽然基于分析的分块因子选择方法得到广泛

的研究,在减少干扰失效和提高数据局部性上有较

好表现,但是这类方法在实际应用中存在一定的缺

陷:(1)理论分析不能完全反应实际存储的复杂过

程,影响程序分块性能的潜在因素较多,导致实际

最优分块的性能和分析方法选择分块的性能差距较

大:(2)分析建模过程复杂,成本较高,对硬件和程

序布局严重依赖,不具有通用性。

Page 7: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

20 《高性能计算发展与应用》 2013年第三期 总第四十四期

3.2 基于经验搜索的方法

基于经验搜索的分块选择方法是把循环嵌套看

做一个黑盒子,根据经验选择一系列不同分块因子

组合,在目标机器上对这些分块组合执行自动调优

(auto-tuning),并从这些较好的分块因子组合中选择

执行性能最优的分块因子[54-57]。

利用ATLAS系统[57,15]为不同规模的问题执行

经验调试,找到最优性能的分块大小,调试只需在

BLAS库[10]安装时进行一次就能完成。尽管ATLAS系

统在性能优化上十分成功,但它只适用解计算密集

的线性代数方程,对一般代码,如模板函数不适

用。经验调试方法面临的最大困难是对多层循环进

行分块时,要遍历庞大的搜索空间,这是因为随着

循环维数增多,每层循环分块因子不同的组合搜索

空间将爆炸式的增长,使得这种方法时间成本过

高。ATLAS系统为了降低时间和空间复杂度,采用一

个简单的分块选择模型,每一维的候选分块大小不

超过L1 Cache大小的平方根,并且只采用正方形分块

因子。然而一些实验表明,线性代数和模板函数的

实际最优分块因子是非正方形分块[58-59],也就是说每

一维循环的分块大小都不应该相同。这种非正方形

分块相对于正方形分块因子在代码执行上可以获得

更好的性能。

3.3 基于分析和经验混合的方法

由于经验调试在分块因子空间上进行全局搜

索,这种低效的方法难以满足实际应用需求,目前

结合利用分析模型的方法,特征化较好的分块因子

和减少分块因子的搜索空间,成为研究的热点[60-62]。

文献[62]利用两个分析模型:DL(Distinct Cache

Lines)模型[51]和ML(Minimum Working Set Lines)模型来

约束分块因子的搜索空间。ML模型为分块内数据重

用假设最优的Cache块替换策略和TLB容量约束,它

是一个为估算分块大小提供上界的积极模型。DL模

型则是提供下界的保守模型,它忽略分块内Cache块

替换策略。DL/ML为单层分块的容量约束条件表示如

下:

CSk表示k级Cache的高速缓存线数目或TLB目录

的数目。基于DL/ML模型限制搜索空间的算法在编译

器架构上已经得到实现,如图10所示。

图10 DL/ML限界方法在编译器架构上的实现

文献[62]在三种不同机器架构上,选取了一些经

典的线性代数和模板函数,采用DL/ML分析方法在

限制的搜索空间上进行经验调试,并对DL和正方形

分块算法进行了性能比较。通过对比实验发现,DL/

ML技术搜索空间缩小了45倍至11879倍,优化后的搜

索空间包含了95%以上最佳性能的分块因子。从图

11的实验数据还可以看出,非正方形分块较正方形

分块具有更好的性能。

图11 不分块,DL限界,最优正方形分块,最优DL/ML限界的一级分块结果

这种方法虽然可以适用于不完美的循环嵌套,

但是目前只能解决单级分块,无法进行多级分块,

也不能处理循环迭代访问为非均匀步长的情况。

Active Harmony项目[55]采用了别的算法(如Nelder-

Mead单纯型算法)来减小搜索空间。同时,有研究认

为,随着自动调优器能力的增强,将面临的一个重

Page 8: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

21高性能计算技术

要挑战是如何在不同自动调优器的选择中进行可扩

展的搜索[56]。还有一些混合的方法采用了启发式思

想来预测复杂体系结构对性能的影响[59,63-65]。文献

[63]为优化矩阵乘法建立一个学习分类器系统,该系

统根据目标平台特点确定分块的级数和每级的分块

大小。文献[64]为程序提取有效的特征值进行神经网

络训练,在此基础上构建一种自动选择最优分块因

子的架构。文献[65]则侧重于用机器学习的方法对分

块因子的差异建立一个精准的性能分布模型,从而

降低随机搜索分块空间时的性能变化。而文献[54]采

用不同的技术,如遗传算法和模拟退火算法管理搜

索空间的大小。这些方法有可能得到较好性能的分

块因子,更适用于一些特定的程序或内核机构。

3.4 小结

本节介绍了分块因子选择技术,利用以上各种

方法可以使循环分块技术获得更好的性能,但每种

方法都有其特点和不足。基于分析的方法存在效性

的问题,基于经验调试的方法存在时间复杂度高和

适用范围的问题,而混合方法存在如何平衡算法精

确度和成本开销的问题。

分析目前的研究现状,可以得出如下结论:

(1)三种基本方法在成本开销、适用范围、性能上

各有优势,但是尚无一种技术同时具有这些优势,

如何在一种方法上同时实现这些特点将是一个研究

难点;(2)多级循环分块技术是目前和将来的研究

主流,而现在大部分研究是针对单级分块因子选择

进行的,如何打破当前技术局限,发展面向任意循

环代码的多级分块因子选择方法,还需要进一步研

究;(3)相对于前两种方法,基于混合的方法在时间

空间复杂度、性能上都有明显的提升,新的理论优

化技术和有效的模型不断涌现,如何引用新的技术

更好的优化分块搜索空间和选择各级分块因子,仍

需要深入的研究。

4. 循环分块技术的扩展研究由于现代计算机存储架构层次的深度和并行处

理单元数目的发展,利用多级分块技术开发深层次

存储资源,运用循环分块提高程序并行性,成为近

来的研究热点。为了让更多的应用能够享受循环分

块带来的性能优势,研究者们对面向不完美嵌套循

环的应用和任意带循环体程序提出了一些解决方案。

4.1 多级分块技术

分块技术可以有效开发层次存储架构的机器资

源。两级分块技术不仅成功应用于线性代数程序的

ATLAS[15-16]和PHiPAC[66],使其开发Cache和寄存器性

能,实现指令级并行性[47],而且在模板计算上也获得

了高性能的实现[67]。随着多核架构和存储深度的发

展,两级Cache分块或寄存器分块已经不能满足对更

高层次粒度并行性的要求。多级分块技术已经成为

高性能应用的设计模板。

传统的多级分块技术[68]通过逐级分块的方法实

现,使得其复杂性是多级分块代码中循环数目的双

指数关系,导致这种方法在处理非矩形迭代空间时

的代价过高。文献[69]提出一种同时多级分块算法

SMLT,计算精确的多级分块空间的循环边界,该方

法的计算复杂度仅依赖于原始循环的数目,因此可

以用于高效的生成任意级数的多级分块代码,但是

这种方法受到固定分块因子的局限。

随着参数化分块方法的开发,文献[40]利用

Outset集和Inset集实现参数化多级分块方法。基于

Outset集的多级分块方法,是在对迭代空间进行第

k级分块的基础上进行k+1级分块。由第k级的分块边

界和原始迭代空间边界,组成第k+1级分块的原始迭

代空间,几何图示如图12。对于第k级的完整分块,

采用Inset集消除多余的边界条件。实验表明该多级分

块方法在和单级分块方法具有相同开销的情况下,

提高了分块代码的性能。然而,为了简单性,该方

法只适用于正方形分块大小。

图12 采用Outset集和Inset集的多级分块

另 外 一 些 研 究 利 用 循 环 边 界 的 抽 象 语 法 树

AST[71]和线性不等式系统变形[45]的方法把单级分块扩

展成多级分块技术。

4.2 循环分块并行性研究

循环分块不仅可以增强数据局部性,而且能够

实现分块代码的并行性。文献[9]介绍了为分布式存

储架构的并行计算机运用循环分块的方法减少通信

开销和改善并行性,并且为循环变换提供了一套数

学理论基础。文献[45]开发了一个为串行程序自动生

成参数化并行分块代码的PTile系统,该系统基于松

弛FME算法实现了波阵面并行性,生成的并行代码和

Pluto系统[37]相比在多核架构上有明显的性能提升。文

献[71-73]则研究了多面体模型下循环变换的并行优

化问题。另外,文献[74-76]对GPU架构上循环分块的

Page 9: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

22 《高性能计算发展与应用》 2013年第三期 总第四十四期

并行优化方法进行了研究。相对于上述研究在粗粒

度并行性上的贡献,寄存器分块技术[46-47]则改善了程

序的指令级并行性ILP。随着多核架构甚至众核架构

的发展,实现细粒度并行性,减小片上通信,将成

为研究的趋势。

4.3 面向不完美嵌套循环的分块技术

许多带嵌套循环的应用不属于完美嵌套循环分

块技术的适用范畴,因此研究者们对面向不完美嵌

套循环和任意循环的分块技术展开了深入的研究。

文献[77-78]最早提出解决不完美嵌套循环分块的方

法,对每个循环主体进行仿射嵌入,使不完美嵌套

循环变换成单一的完美嵌套循环。文献[79]开发了

一个基于脚本构成的循环变换框架,可以用于不完

美循环分块。另一个用于对任意不完美嵌套循环集

进行分块的Pluto系统[37,44]则采用了基于多面体集的

一般性方法。这些方法都要求固定分块因子,另外

一些研究则是针对参数化分块而展开。文献[42]描

述了一种PrimeTile技术,沿着每一维把循环划分成

prolog、full、epilog循环,分别计算完整分块和局部

分块。PrimeTile虽然能够对不完美嵌套循环集进行参

数化多级分块,但会造成分块后代码长度激增。文

献[37]采用扫描多面体集的方法实现参数化不完美嵌

套循环的分块,而文献[45]采用了对系统约束不等式

组变换消去循环变量的非多面体方法。文献[47]则从

不完美嵌套循环的抽象语法树AST上提取紧凑的可展

开内核,解决了寄存器分块的问题。

4.4 小结

通过上述对循环分块技术在多级分块、并行性

和任意应用范围的研究介绍可知,仍有不少问题需

要深入研究:(1)如何利用多级分块技术最大化的开

发利用深度存储资源和多核架构的性能,同时有效

控制多级分块带来的开销,还需要进一步研究,同

时存储系统中每级分块对整体性能的影响尚未明确

解决;(2)多级分块能够有效的暴露程序粗粒度并行

性,而细粒度并行性的开发工作仍需要深入的研究

开展;(3)目前面向任意嵌套循环应用的分块方法仍

受到算法复杂度过高、耗时较长和生成代码不够紧

凑等问题的困扰,这些问题仍需要研究开发更为有

效的优化方法来改善解决。

5. 总结随着多核处理器架构和Cache层次存储系统的

发展,循环分块技术在数据局部性、代码并行化和

编译性能方面存在着可探究的空间。针对Cache失效

的情况,研究者提出利用静态分析访存行为解决循

环体中数据依赖关系的问题,扫描迭代空间的多面

体集生成循环分块的边界约束条件,并对分块过程

进行分解来降低计算复杂度,虽然这些方法可以建

立精准的分块模型获取程序性能提升,但是实现过

程复杂困难,时间开销较大,难以得到实际应用。

于是,研究者又提出了基于参数化分块因子的循环

分块方法,并将其扩展为多级分块和面向任意嵌套

循环程序的分块技术,结合成熟的代码生成工具可

以将程序循环体并行化,实现较好粒度的并行性,

这类方法把分块因子作为符号参数处理,不仅可以

灵活的编译生成分块代码,而且在硬件资源开发和

程序性能上有了提升,但是在计算复杂度和细粒度

并行性还有改善的空间。与此同时,因为分块因子

对循环分块代码的性能有着重要影响,一些研究者

对最优分块因子的形状和大小的选择方法进行了研

究。在此基础上,本文综合分析了循环分块各项技

术的研究现状,探讨了循环分块的发展趋势。

从目前的研究来看,我们可以得出如下结论:

(1)循环分块技术中的计算复杂度、代码生成时间和

生成效率问题还未得到统一的解决,如何快速而准

确的生成分块代码,同时具有较低的算法复杂度,

仍然存在着可探究的空间。(2)如何更加有效的约

束循环边界的迭代空间,进一步开发程序局部性,

同时平衡分块开销,还需要进行全面深入的研究。

(3)最优分块因子的选择依然是一个开放式难题,研

究清楚层次存储架构中每级分块对性能的影响,从

而更好的指导确定分块因子,对性能的提升具有重

要的意义。(4)如何从目前线性代数库函数和模板

计算的应用范围扩展到一般的带嵌套循环的任意代

码,并且有效地构建面向任意嵌套循环集的自动分

块代码生成系统,具有重要的现实意义。(5)随着多

核处理器的普及以及众核架构的来临,如何充分利

用深度存储资源,开发细粒度并行程序,减小片上

通信,与多核甚至众核架构资源进行性能匹配,是

一个需要深入研究的方面。

参考文献:

[1] Kahla JA, Day MN, Hofstee HP, Johns CR, Maeurer TR, Shippy D. Introduction to the cell multiprocessor. IBM Journal of

Research and Development, 2005, 49(4-5): 589-604.

[2] Owens JD, Luebke D, Govindaraju N, Harris M, Kruger J, Lefohn AE, Purcell TJ. A survey of general-purpose computation

Page 10: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

23高性能计算技术

on graphics hardware. In Eurographics State of the Art Reports, 2005: 21-51.

[3] Kris Kaspersky. Code Optimization: Effective Memory Usage. A-List Pub, 2003.

[4] Louis-Noël Pouchet, Uday Bondhugula, Cédric Bastoul, Albert Cohen, J. Ramanujam, P. Sadayappan and Nicolas Vasilache.

Loop Transformations: Convexity, Pruning and Optimization. In 38th ACM SIGACT-SIGPLAN Symposium on Principles of

Programming Languages (POPL’11). Austin: 2011: 549--562.

[5] M.S.Lam and M.E.Wolf. A data locality optimizing algorithm. In Proceedings of the ACM SIGPLAN Conference on

Programming Language Design and Implementation(PLDI’91), ACM press, 1991: 30-44.

[6] M.D.Lam, E.E.Rothberg, and M.E.Wolf. The cache performance and optimizations of blocked algorithms. Proceedings of the

4th International Conference on Architectural Support for Programming Languages and Operating Systems, 1991(25): 63-74.

[7] F.Irigoin and R.Triolet. Supernode partitioning. In 15th ACM Symposium on Principles of Programming Languages, ACM,

1988: 319-328.

[8] C.Ancourt and F.Irigoin. Scanning polyhedra with DO loops. In Proceedings of the 3rd ACM SIGPLAN Symposium on

Principles and Practice of Parallel Programming, 1991: 39-50.

[9] J.Xue. Loop Tiling For Parallelism. Norwell MA USA: Kluwer Academic Publishers, 2000.

[10] L.Renganarayana, D. Kim, S. Rajopadhye, and M. Strout. Parameterized tiled loops for free. In PLDI’07, 2007: 405-414.

[11] BLAS: Basic Linear Algebra Subprograms. http://www.netlib.org/blas/.

[12] Eunjung Park, Louis-Noël Pouchet, John Cavazos, Albert Cohen and P. Sadayappan. Predictive Modeling in a Polyhedral

Optimization Space. In 9th IEEE/ACM International Symposium on Code Generation and Optimization (CGO’11). Chamonix,

France: 2011, 119--129.

[13] G.Goumas, M.Athanasaki, and N.Koziris. An efficient code generation technique for tiled iteration spaces. IEEE Transactions

on Parallel and Distributed Systems, 2003, 14-10, 1021-1034.

[14] L.Renganarayana. Scalable and efficient tools for multi-level tiling. PhD thesis, Fort Collins: Colorado State University,

2008.

[15] R.C.Whaley and J.J.Dongarra. Automatically Tuned Linear Algebra Software. In Supercomputing’98: Proceedings of the

1998 ACM/IEEE conference on Supercomputing(CDROM), 1998: 1-27.

[16] ATLAS: Automatically Tuned Linear Algebra Software. http://www.netlib.org/atlas/.

[17] Sanket Tavarageri, Louis-Noël Pouchet, Ramanujam, Atanas Rountev and P. Sadayappan. Dynamic Selection of Tile Sizes.

In 18th IEEE International Conference on High Performance Computing (HiPC’11). Bangalore, 2011.

[18] M.Wolfe. More iteration space tiling. In Proceedings of the 1989 ACM /IEEE conference on Supercomputing, 1989: 655-

664.

[19] David B. Loveman. Program improvement by source-to-source transformation. In Proceeding of the 3rd ACM SIGACT-

SIGPLAN symposium on Principles on programming languages, 1976: 140-152.

[20] R.P.Wilson, R.S.French, C.S.Wilson, S.P.Amarasinghe, J.M.Anderson, S.W.K.Tjiang, S-W. Liao, C-W. Tseng, M.W.Hall,M.

S.Lam, and J.L.Hennessy. SUIF: An infrastructure for research on parallelizing and optimizing compilers. SIGPLAN Notices, 1994,

29(12):31-37.

[21] Kevin Stock, Louis-Noël Pouchet and P. Sadayappan. Automatic Transformations for Effective Parallel Execution on Intel

Many Integrated Core. Austin: TACC-Intel Highly Parallel Computing Symposium, 2012.

[22] Jun Liu , Yuanrui Zhang , Wei Ding , Mahmut Kandemir, On-chip cache hierarchy-aware tile scheduling for multicore

machines. Proceedings of the 9th Annual IEEE/ACM International Symposium on Code Generation and Optimization, 2011:

161-170.

[23] Wang Miao. Parallel Compilation and Optimization for Multi-core Processors. PhD thesis, Changsha: National University of

Defense Technology, 2010.

[24] Kevin Stock, Louis-Noël Pouchet and P. Sadayappan. Using Machine Learning to Improve Automatic Vectorization. ACM

Transactions on Architecture and Code Optimization (TACO). Special issue on high-performance and embedded architectures and

compilers, 2012 (8-4).

[25] N.Vasilache, C.Bastoul, A.Cohen, S. Girbal. Violated dependence analysis. In Proceedings of the 20th annual international

conference on Supercomputing, 2006: 335-344.

Page 11: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

24 《高性能计算发展与应用》 2013年第三期 总第四十四期

[26] Mohamed-Walid Benabderrahmane, Louis-Noël Pouchet, Albert Cohen, Cédric Bastoul. The Polyhedral Model Is More

Widely Applicable Than You Think. In ETAPS International Conference on Compiler Construction (CC’2010). Springer

Verlag, 2010: 283--303.

[27] W.Pugh. Omega test: A practical algorithm for exact array dependency analysis. Communications of the ACM, 1992,

35(8):102.

[28] F.Quilleré, S.Rajopadhye, and D.Wilde. Generation of efficient nested loops from polyhedral. International Journal Parallel

Programming, 2000, 28(5):469-498.

[29] C.Bastoul. Code generation in the polyhedral model is easier than you think. In Proceedings of the 13th International Conference

on Parallel Architectures and Compilation Techniques, 2004: 7-16.

[30] CLooG: The Chunky Loop Generator. http://www.cloog.org.

[31] N.Vasilache, C.Bastoul, A.Cohen. Polyhedra code generation in the real world. In Proceedings of the 15th international

conference on Compiler Construction, 2006: 185-201.

[32] Polylib: A library of polyhedral functions. http://www.irisa.fr/polylib/.

[33] D.K.Wilde. A library for doing polyhedral operations. Parallel Algorithms and Applications, 2000, 137-166.

[34] A.Cohen, M.Sigler, S.Girbal, O.Temam, D.Parello, N.Vasilache. Facilitating the search for compositions of program

transformations. In Proceedings of the 19th annual international conference on Supercomputing, 2005: 151-160.

[35] S.Girbal, N.Vasilache, C.Bastoul, A.Cohen, D.Parello, M.Sigler, O.Temam. Semi-automatic composition of loop transformations

for deep parallelism and memory hierarchies. International Journal of Parallel Programming, 2006, 34(3): 261-317.

[36] W.Kelly, W.Pugh, E.Rosser. Code generation for multiple mappings. In Frontiers’95: The 5th Symposium on the Frontiers

of Massively Parallel Computation, 1995.

[37] U.Bondhugula, J.Ramanujam, P.Sadayappan. PLuTo: A practical and fully automatic polyhedral program optimization system[J].

ACM SIGPLAN Notices-PLDI’08, 2008, 43(6): 101-113.

[38] S.Kamil, K. Datta, S.Williams, L.Oliker, J.Shalf, K.Yelick. Implicit and explicit optimizations for stencil computations. In

Proceedings of the 2006 workshop on Memory system performance and correctness, 2006: 51-60.

[39] TLoG: A parameterized tiled loop generator. http://www.cs.colostate.edu/MMAlpha/tiling/.

[40] D.Kim, L.Renganarayanan, D.Rostron, S.Rajopadhye, M.M.Strout. Multilevel tiling: M for the price of one. In Proceedings

of the ACM/IEEE Conference on Supercomputing (SC’07). NewYork : ACM Press, 2007.

[41] HiTLoG: Hierarchical tiled loop generator. http://www.cs.colostate.edu/MMAlpha/tiling/.

[42] A.Hartono, M.M.Baskaran, C.Bastoul, A.Cohen,S.Krishnamoorthy, B.Norris, J.Ramanujam, P.Sadayappan. Parametric multi-

level tiling of imperfectly nested loops. In Proceedings of the 23rd international conference on Supercomputing, 2009: 147-157.

[43] PrimeTile: a parametric multi-level tiler for imperfect loop nests. http://www.cse.ohio-state.edu/~hartonoa/primetile/.

[44] Pluto:a polyhedral automatic parallelizer and locality optimizer for multicores. http://pluto-compiler.sourceforge.net.

[45] M.M.Baskaran, A.Hartono, S.Tavarageri, T.Henretty, J.Ramanujam, P.Sadayappan. Parameterized tiling revisited. In

Proceedings of the 8th annual IEEE/ACM international symposium on Code Generation and Optimization, 2010: 200-209.

[46] Marta Jiménez, José M. Llabería, Agustín Fernández. Register tiling in nonrectangular iteration spaces. ACM Transactions

on Programming Languages and Systems(TOPLAS), 2002, 24(4): 409-453.

[47] L.Renganarayana, U.Bondhugula, S.Derisavi, A.E.Eichenberger, K.O’Brien. Compact multi-dimensional kernel extraction

for register tiling. In Proceedings of the Conference on High Performance Computing Networking, Storage and Analysis, 2009.

[48] L.Renganarayanan, D.Kim, M.M.Strout, S.Rajopadhye. Parameterized Loop Tiling. ACM Transactions on Programming

Languages and Systems (TOPLAS), 2012, 34(1): article 3.

[49] J.Chame, S.Moon. A tile selection algorithm for data locality and cache interference. In ICS, 1999: 492-499.

[50] V.Sarkar, N.Megiddo. An analytical model for loop tiling and its solutions. In IEEE ISPASS, 2000: 146-153.

[51] J.Ferrante, V.Sarkar, W.Thrash. On estimating and enhancing cache effectiveness. In Proceedings of the 4th International

Workshop on Languages and Compilers for Parallel Computing, 1991: 328-343.

[52] F.Bodin, W.Jalby, D.Windheiser, C.Eisenbeis. A quantitative algorithm for data locality. In workshop on Code Generation,

1992: 119-145.

[53] C.Hsu, U.Kremer. A quantitative analysis of tile size selection algorithms. The Journal of Supercomputing, 2004, 27(3): 279-

Page 12: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

25高性能计算技术

294.

[54] T.Kisuki, P.M.W.Knijnenburg, M.F.P.O’Boyle. Combined selection of tile sizes and unroll factors using iterative compilation.

The Journal of Supercomputing, 2003, 24(1): 43-67.

[55] C.Tapus, I-H.Chung, K.J.Hollingsworth. Active harmony: towards automated performance tuning. In : Supercomputing

Conference, 2002: 1-11.

[56] A.Tiwari, C.Chen, J.Chame, M.Hall, J.K.Hollingsworth. A scalable auto-tuning framework for compiler optimization. In

Proceedings of the 2009 IEEE International Symposium on Parallel&Distributed Processing, 2009: 1-12.

[57] R.C.Whaley, A.Petitet, J.J.Dongarra. Automated empirical optimization of software and the ATLAS project. Parallel Computing,

2002, 27(1-2): 3-35.

[58] K.Goto, R. van de Geijn. High-performance implementation of the level-3 BLAS. ACM Transactions on Mathematical

Software, 2008, 35(1): article 4.

[59] K.Datta. Auto-tuning stencil codes for cache-based multicore platforms. Technical report, University of California, Berkeley,

2009.

[60] C.Chen, J.Chame, M.Hall. Combining models and guided empirical search to optimize for multiple levels of the memory

hierarchy. In Prceedings of the international symposium on Code generation and optimization, 2005: 111-122.

[61] K.Yotov, K.Pingali, P. Stodghill. Think globally, search locally. In Proceedings of the 19th annual international conference on

Supercomputing, New York, ACM, 2005: 141-150.

[62] J.Shirako, K.Sharma, N.Fauzia, L-N.Pouchet, J.Ramanujam, P.Sadayappan, V.Sarkar. Analytical bounds for optimal tile size

selection. In ETAPS international conference on Compiler Construction, 2012: 101-121.

[63] J.Ramanujam, P.Sadayappan. Tiling multidimensional iteration spaces for multicomputers. Journal of Parallel and Distributed

Computing, 1992, 16(2): 108-120.

[64] T.Yuki, L.Renganarayanan, S.Rajopadhye, C.Anderson, A.E.Eichenberger, K.O’Brien. automatic creation of tile size

selection models. In Proceedings of the 8th annual IEEE/ACM international symposium on Code generation and optimization,

2010: 190-199.

[65] M.Rahman, L-N.Pouchet, P.Sadayappan. Neural network assisted tile size selection. In 5th International Workshop on

Automatic Performance Tuning, 2010.

[66] PHiPAC: Portable High Performance ANSI C. http://www1.icsi.berkeley.edu/~bilmes/phipac/.

[67] L.Renganarayanan, M.H.Matha, R.Dewri, S.Rajopadhye. Towards optimal multi-level tiling for stencil computations. In

Proceedings of the 21th IEEE International Parallel and Distributed Processing Symposium, 2007: 1-10.

[68] Marta Jiménez. Multilevel tiling for non-rectangular iteration spaces. Ph.D. thesis, France: University of Politècnica de

Catalunya, 1999.

[69] Marta Jiménez, José M. Llabería, and Agustin Fernández. A cost-effective implementation of multilevel tiling. IEEE

Trans. Parallel Distrib. Syst., 2003, 14(10): 1006-1020.

[70] D.G.Kim, S.Rajopadhye. Efficient tiled loop generation: D-Tiling. In Languages and Compiler for Parallel Computing, 2010:

293-307.

[71] U.Bondhugula, M.Baskaran, S.Krishnamoorthy, J.Ramanujam, A.Rountev, P.Sadayappan. automatic transformations for

communication-minimized parallelization and locality optimization in the polyhedral model. In CC’08/ETAPS’08, 2008: 132-

146.

[72] A.Hartono, M.M.Baskaran, J.Ramanujam, and P.Sadayappan. DynTile: Parametric tiled loop generation for parallel execution

on multicore processors. In IPDPS(IPPS), 2010: 1-12.

[73] M.Baskaran, U.Bondhugula, S.Krishnamoorthy, J.Ramanujam, A.Rountev, P.Sadayappan. Automatic data movement and

computation mapping for multi-level parallel architectures with explicitly managed memories. In PPoPP’08, Salt Lake City:

ACM, 2008.

[74] M.Baskaran, U.Bondhugula, S.Krishnamoorthy, J.Ramanujam, A.Rountev, P.Sadayappan. A compiler framework for

optimization of affine loop nests for GPGPUs. In ICS’08, 2008: 225-234.

[75] P.Di, H.Wu, J.Xue, F.Wang, C.Yang. Parallelizing SOR for GPGPUs using alternate loop tiling. Parallel Computing, 2012,

38(6-7): 310-328.

Page 13: 面向数据访存和程序并行优化的循环分块技术 · 14 《高性能计算发展与应用》 2013年第三期 总第四十四期 面向数据访存和程序并行优化的循环分块技术

26 《高性能计算发展与应用》 2013年第三期 总第四十四期

[76] J.Holewinski, L-N.Pouchet, P.Sadayappan. High-performance code generation for stencil computations on GPU architectures.

In ICS’12, 2012: 311-320.

[77] N.Ahmed, N.Mateev, K.Pingali. Tiling imperfectly-nested loop nests. In Proceedings of the 2000 ACM/IEEE conference on

Supercomputing, 2000.

[78] N.Ahmed, N.Mateev, K.Pingali. Synthesizing transformations for locality enhancement of imperfectly-nested loop nests.

International Journal of Parallel Programming, 2001, 29(5): 493-544.

[79] C.Chen, J.Chame, M.Hall. Chill: a framework for composing high-level loop transformations. Technical report, USC,

2008.

要 闻 集 锦

虚拟化、云计算、大数据以及万物互联的兴起并

没有让大型机消亡,实际上,全球还有大量的IT主管将

大型机作为企业IT战略中一个强大的、长期的解决方

案。

一直以来大型机被用于需要更高可用性和安全性

的大规模计算环境,大型机确实很“大”,第一代大型

机占地高达2000~10000平方英尺,新的主机尺寸大幅虽

小,但也和一台大号冰箱相差无几。

大型机在上世纪80年代开始流行,在90年代末到

新千年的开始,很多人预言大型机即将消亡,因为它缺

乏可扩展性,并且缺乏专业的IT维护人员。

但是在BMC软件进行的第八届年度全球主机用户

调查中发现,大型机平台依旧发挥着关键作用。参与调

查的欧洲、美国和亚太地区的IT专业人士表示,大型机

不仅坚守在传统IT领域,在不断发展的企业IT环境中也

将扮演更加重要的角色。

几乎所有的受访者(93%)表示,大型机是一个强大

的解决方案,是他们长期IT战略中的一部分;一半受访

者认为,大型机将在企业中承担新的IT负载。令人惊讶

的,没有大型企业的受访者表示,将在IT基础架构中去

除大型机,只有6%的小型企业受访者表示在计划取消

大型机。

三分之二的受访者还表示,大型机还将纳入他们

的大数据或者云战略中。

“大型机还将在IT转型中发挥巨大作用,特别是

在前所未有的变革时代”,BMC软件数据管理总经理

Jonathan Adams表示。特别是在金融、银行和保险环

境,核心数据库大多运行在大型机上。

IBM是大型机的主要提供商,现在仍然在开发大

型机产品。在2012年,IBM大型机在前三个季度营收下

滑10%~20%,但是在第四季度大涨56%。Adams认为,

前所未有的技术变革让用户更加需要具有更高可用性、

安全性和性能的平台,这促进了大型机的增长。

可用性优势和安全性优势被认为是企业持续投资

大型机的两个主要原因,能够支持遗留应用、低数据中

心成本以及集中的IT特性是选择大型机的另外几个原

因。

调研还发现,当前IT人员缺乏部署和运营大型机

环境的技能,为克服这些难题,有半数的企业更多地投

入内部技能培训,并聘用有经验的管理员,还有一些是

采取外包的形式进行管理。

报告还指出,近一半的大型机预算是在软件方

面。

约62%的受访者工作在营收超过10亿美元的企业,

有45%工作在金融和保险行业,20%是属于政府行业。

调研:大型企业仍旧青睐大型机

(陈继军)