当前位置: 首页 > news >正文

多面体编译的循环分块

1)循环分块,是性能优化的重要步骤

2)

基于多面体模型的循环变换是程序自动并行化的热点,是解决程序自动并
行变换的一种有效手段。循环变换将循环的迭代空间表示成空间多面体,并通
过多面体上的几何操作达到分析和优化程序的目的。循环变换包括循环分块,
循环交换,循环倾斜,循环合并等。

3)

循环分块是提升高速缓存命中率的一种有效变换策略,通过将大块的循环
迭代拆解成若干较小的循环迭代块,减少内存单元的数据重用周期,进而减少
片外访存开销。在多面体模型中使用ISL 算法进行程序变换。使用一维stencil
计算实例来说明循环分块,如图3.2 所示为一维stencil 计算实例和原始迭代空间。

4)

这个不是二维Stencil吗?

图3.2 表示原始调度的空间多面体,图中每个黑点表示一次循环迭代,表示
一个语句实例,箭头表示循环迭代之间的依赖。沿i 轴方向上的循环迭代之间不
存在依赖。在?0(?, ?) −> (?, ?)方向上对循环索引变量分别进行循环分块,实际上
是在计算一个新的调度。通过2.1.2 节中调度变换算法对程序进行循环变换,得
到如图3.3 所示循环分块图。

论文写得很好,很清楚 。

5)

沿坐标轴方向进行分块会导致分块后分块之间依旧存在依赖,所以,沿着
左上方向进行循环分块,图3.3 中绿色部分为各个分块,该方法不会导致任意方
向相邻两个分块之间的依赖环,分块在左上方向为并行的。多面体编译优化通
过ISL 算法中循环分块等循环变换方法对程序进行重调度的计算,提高了数据
的局部性。

在调度变换后,对于计算出的具有并行性的循环,为了实现将程序映射到
块和线程这两个层次上,对循环索引变量进行分块来确保循环中至少有两级并
行性。例如图3.4 中的矩阵乘实例。

6)

测试示例:

PolyBench 中并行计算性能测试差的实例

为了挖掘程序中存在的并行性,在多面体编译中使用基于Pluto 算法的ISL
算法进行调度变换。将计算出的调度表示为调度树(Schedule Tree)的形式,调
度树的构造是一个整数仿射函数,规定了实例的执行顺序,这些仿射函数可以
组合成带节点,使用仿射调度将循环嵌套转换为可分块的并行循环,这样的并
行循环为一个并行带,并行带中对应调度维度的循环是并行的,一个带节点中
至少有一个循环是并行的。

7)

感谢《基于多面体模型的国产DCU源源编译优化技术研究_牛靖钰》

相关文章:

  • 字符串方法_indexOf() +_trim()+_split()
  • 定制化平板电脑在各行业中有哪些用途与作用?
  • CppCon 2015 学习:Give me fifteen minutes and I’ll change your view of GDB
  • 【Java多线程从青铜到王者】懒汉模式的优化(九)
  • 【GESP真题解析】第 2 集 GESP 四级样题卷编程题 1:绝对素数
  • IK分词器
  • 模型训练-关于token【低概率token, 高熵token】
  • Q: dify的QA分段方式,question、answer和keywords哪些内容进入向量库呢?
  • Python主动抛出异常详解:掌握raise关键字的艺术
  • 力扣HOT100之堆:347. 前 K 个高频元素
  • TDengine 快速体验(云服务方式)
  • 对3D对象进行形变分析
  • 3D扫描技术赋能汽车零部件尺寸测量效率提升
  • win11本地Docker部署腾讯云Docker部署若依前后端分离版
  • 关于前端常用的部分公共方法(三)
  • Spring boot应用监控集成
  • 基于算法竞赛的c++编程(28)结构体的进阶应用
  • 渗透靶场PortSwigger Labs指南:规范链接的反射XSS
  • JavaScript 核心对象深度解析:Math、Date 与 String
  • CPP基础(2)
  • 嘉兴网站建设系统/考研培训
  • 如何自己建一个微网站/2345网址导航删除办法
  • 赣榆哪里有做网站的/百度风云榜官网
  • 免费自助建网站软件/百度推广登录平台官网
  • 宁波宇丰建设有限公司网站/aso优化平台有哪些
  • wordpress+dns预读/武汉seo人才