初始多面体优化

初识多面体优化

什么是多面体优化

多面体优化通常是基于线性代数和整数规划技术,把一个深度为n的循环嵌套结构的迭代建模为n维多面体

为什么研究多面体优化

多核架构与云计算的飞速发展奠定了现在主流处理器设备皆是多核架构,如何提高并行性(相互独立的代码在不同的处理器上执行)和利用数据的局部性(需要再多核执行的基础上尽量减小相互之间的通信,往往通信时间是读写时间的两倍),给传统单核架构应用开发移植到多核架构带来了挑战性。这要求程序员不仅得十分了解机器的硬件结构,甚至还得了解不同硬件框架下模型。对此,提出了多面体优化,让程序员从并行代码编写的任务解放出来。

多面体优化的优点

多面体优化应用范围更广

相对于传统的幺模矩阵只能处理完美的循环嵌套,多面体还能处理非循环嵌套。

表示能力更强

多面体在能处理循环嵌套、倾斜、翻转优化的前提下,还能自动实现循环的分块和合并,分布等循环变换技术。

优化空间大

多面体能够同时实现多个循环变化。

多面体优化的特点

迭代空间

迭代空间是指一次动态执行实例的集合,通俗来说就是各个循环下下标的取值

for(int i=1;i<=10;i++){
    for(int j=1;j<=10;j++){
        a++;
    }
}
对应的就是{{i=1,j=1},{i=1,j=2},......{i=10,j=10}};

访存映射

使用仿射函数将原迭代空间的实例映射到各个处理器上

依赖关系

表示访存相同元素的两个语句实例的偏序关系,通俗来讲就是后面执行的语句中会不会使用到前面更改后的值

调度

满足所有依赖关系的前提下的执行顺序。

分块

将原始的迭代空间进行分块计算。

为什么要分块?
for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
        z[i][j]=0.0
    }
    for(int k=0;k<n;k++){
        z[i][j]=z[i][j]+x[i][k]*y[k][j];
    }
}
在该程序中,若为串行执行

在这里插入图片描述
如图所示,我们在假设c是高速缓存线的数组元素个数并且假设其为4,数组元素为12。
访问X矩阵的时候,逐行访问,X的一行如图所示将分布在n/c(12/4=3)个缓存线中,因此针对下标i,会访存脱靶(n/c)3次。因此n个行,会出现n * * 2 / c次脱靶。
访问Y矩阵的时候,逐列访问(因为矩阵乘法的缘故),该列所有元素存放在n个高速缓存线中,当高速缓存能达到存放这n个高速缓存线时候,会出现n * * 2 / c次脱靶,如果不能,最坏的情况即是无高速缓存线出现n * * 2次脱靶,因此脱靶次数居于两种情况之间。(仅为i=0的情况)因此总的脱靶率将在n * * 3/ c次

X+Y的脱靶则为n * * 2 / c+n * * 3/ c到n * * 2 / c+n * * 3之间

若为并行运行

我们假设p个处理器,我们将Z的各行分配给不同处理器,每个处理只需要访问X的n/p行和Z的n/p行,和Y矩阵的全部。每个处理器将计算n * * 2/p个Z元素,计算量为n * * * 3 /p次
而通信量因为每个处理器要读取n * * 2/p个X的元素和Y的所有元素。所以导致通信量为n * * 2/c+pn* *2/c次。虽然利用了数据的局部性,但性能仍然未能提高。

分块运行

在这里插入图片描述

根据分块

矩阵
for(int ii=0;ii<n;ii+=B){
	for(int jj=0;jj<n;jj+=B){
		for(int kk=0;kk<n;kk+=B){
			for(int i=ii;i<ii+B;i++){
				for(int j=jj;j<jj+B;j++){
					for(int k=kk;k<kk+B;k++){
						Z[i][j]=Z[i][j]+X[i][k]*y[k][j];
					}
				}
			}
		}
	}
}

于是每个小分块需要B * * 2/c次脱靶,对于确定的块一共加载了B * * 3次,整个矩阵执行了 n * * 3次 于是加载进缓存的次数是n * * 3/B * * 3次,每次加载X和Y用了2B * * 2/c,于是总共2 n * *3/bc次,当B足够大的时候,效率最好。

多面体优化方向

多面体优化目前主要集中在3个方向分别是抽象分析–计算迭代空间和访存映射和依赖分析(线性整数规划)。调度变换–通过调用线性规划计算一个充分利用目标语言和体系结构的调度(如循环变换)
代码生成–通过抽象分析和调度变换生成抽象语法树,并变换成最终代码。

线性规划贯穿于整个多面体编译中,而线性规划有启发式研究和一般式解法(NP-H)。

参考资料 龙书第十一章
基于多面体模型的编译“黑魔法”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值