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

多面体模型-学习笔记2

1)

多面体模型被应用于解决程序变换问题,并有效地推动了程
序自动并行化等技术的发展。与传统的解决程序变换的方法相比,多面体模型
具有许多优势[5]。多面体模型提供了一种强大的抽象,将每个语句的动态语句执
行实例视作一个多面体中的一个整数坐标点,来推测需要执行的程序变换。利
用这样的语句表示和准确的语句间依赖关系,可以依赖于线性代数和线性规划
的数学语言来推断程序变换是否满足正确性。这种变换体现在代码生成中对语
句执行实例之间的顺序重排,可以提升程序的数据局部性或程序并行性。

2)

在源到源编译过程中,多面体模型是实现循环变换的一种高效的数学抽象
模型,其中包括循环分块、循环合并等多种程序变换优化手段,用于优化程序
性能、实现自动并行化和代码生成。对于许多计算密集型应用程序中,嵌套循
环占用了大部分的运行时间。

多面体模型是一种针对循环嵌套的优化模型,实现程序并行性和局部性优

3)

。1967 年,Karp 等人首先提出了多面体模型[7]。为了应用调度变换,Feautrier[8,9]
主要针对程序循环结构中的迭代依赖关系进行分析,确定计算实例之间的依赖
关系。Lim 等人[10,11]提出了基于划分平面的调度算法。以最大限度地提高程序的
并行度和最小化同步度为目的,找到最佳仿射调度。

4)

Bondhugula 等人[12]设计了
Pluto 模型,它以最小通信数据量为目的,基于代价模型对多面体划分平面,进
行调度变换。Pluto 算法实现了通信数据量最小化。Acharya[13,14]等人在Pluto 算
法基础上实现了Pluto+算法,解决了Pluto 算法无法计算带有负数的划分平面,

5)

https://github.com/Meinersbur/isl

Verdoolaege S. Isl: an integer set library for the polyhedral model[C]. In Proceedings of the Third international congress Conference on Mathematical software (ICMS'10).
Springer-Verlag, Berlin, Heidelberg, 2010.299–302.

ISL库,

目前,在多面体编译领域,Pluto 及相关算法被广泛应用。Sven
等人在ISL 库[15]中实现了Pluto 算法的一个变种,该算法广泛应用于多种传统编
译框架[16,17]和DSL 编译器中[18,19]。除ISL 之外,Polylib[20]、Omega[21]、PPL[22]
以及PIP[23]等也是线性整数规划工具,这些工具的共同点是,它们都是基于数学
建模的方法,通过将程序分析为多面体表示,并使用线性整数规划技术进行求
解。

Polly[24,25]是由Tobias 等人开发的多面体优化框架。它可以根据输入的多面
体程序和优化目标自动生成优化代码,并与现有的编译器集成,从而提高程序
性能。

,Bastoul[29]实现了一个名为CLooG 的代码生成工具,该工具被多个多面体编
译工具如PPCG 作为其代码生成阶段的算法。Grosser[30]等人提出了一种基于多
面体的AST 生成的方法,无需编写专门的代码生成器,实现了对特定区域的AST
生成,优化了PPCG 的代码生成模块。

并行性和局部性问题,循环分块技术也到广泛的应用

不同的分块
大小与形状也对程序性能有着重要的影响。Pluto 算法使用形状为平行四边形进
行分块。多面体模型中的钻石分块[35]是一种常见的优化方法,将多维循环迭代
空间划分为一个网格,每个点都是多面体的顶点,形成一个钻石形状。这种划
分技术可以帮助程序员将循环结构转换为基于块的迭代,从而可以更好地利用
现代处理器的并行计算能力和缓存层次结构。Tobias[36]提出了混合六角形分块,
将沿时间维度和一个空间维度的六边形分块形状用于与其他维度的经典分块相
结合,有利于全局内存合并访问和利用不同内存层次中的数据重用。李颖颖[37]
提出了一种基于平行四边形的分裂分块算法,解决了传统分裂分块算法依赖非
仿射表达式的问题。另外,赵捷[38]基于多面体编译实现了一种重叠分块,将其
重新转换为可与任何仿射调度算法组合的计划树上的仿射变换。

多面体编译优化技术

在编译领域,多面体模型被成功地应用于解决程序变换问题,并有效的推
动了程序自动并行化等技术的发展。基于多面体模型的编译优化技术是编译器
优化的一个重要研究方向。目前,已经出现了多种自动变换的代码生成工具,
如C-to-CUDA[2]、CUDA-Chill[3]和PPCG[4]等。这些工具面向GPU 平台生成CUDA
并行代码,以最大限度利用GPU 的计算和内存带宽。

多面体计算调度策略方面,Khaled[39]提出了一种新技术来计算仿射程序的
资源分块大小。以交叉编译器的方式使用整数线性规划ILP 约束和目标,以有
效地模拟基于多面体的GPU 编译器PPCG 中的应用转换。Jun[40]提出了一种新的
GPU 并行性编译器优化算法。基于多面体模型,通过叠加的思想将多面体调度
扩展到实现两级并行化,它集成了线程块级和线程级的单独并行调度。与最先
进的多面体并行代码生成器(PPCG)相比,得到了很大的性能提升。Metha[41]
提出了一种在多面体框架中实现的循环合并算法,基于两个目标函数来选择循
环合并区域,分别是实现良好的数据重用和保持源代码中固有的并行性,在大
型基准程序SPEC 中得到好的性能。Acharya[42]在Pluto-lp-dfp 中提出了一种称为
合并冲突图(FCG)的数据结构,能够在其他仿射循环变换存在的情况下有效地
对循环融合进行建模,提出不同的循环合并策略,找到性能最高的调度变换。
胡伟方等人[43,44]在LLVM 的Polly 模块中提出了一种数据重用分析的循环合并策
略,实现了面向不同并行层次的并行性合并限制,以找到循环语句最优合并方
案。

针对传统多面体模型难以表示多层级并行性与内存分配的问题,在面向
GPU 的调度映射方面,Patwardhan 等人[45]基于多面体编译框架PPCG,提出了
使用纹理内存、表面内存等多层次存储结构,并修改对应的抽象语法生成树。
Alexander[46]等人提出了一种数据自动分区方法将GPU 代码编译为多内核应用的
概念。Abhishek[47]使用多面体模型对特定种类的GPU 缓存进行盈利能力建模,
自动利用GPU 缓存/内存层次结构。

同时,循环分块大小的选择影响程序的性能。Juega[48]提出了一种代码映射的技术,依赖于内存资源的估计来探索映射空间,并为每个线程块的线程数和分块大小计算适当的值。Albert 提出了DynTile 算法[49],用于将未分块的包含仿射不完美嵌套循环的C 代码转换为参数化分块代码,用于在多核处理器上并行执行的系统。Nirmal[50]为模板计算开发了一个模型用于预测生成的代码的执行时

间,目标是建模和参数选择产生高度调优的代码并预测分块大小。Jangda 和Bondhugula[51]提出了一种动态规划算法来有效地搜索分块和合并变换空间。利用线性/仿射约束将调度系数之间的关系建模为指数。Jangda 和Guha[52]引入了一种图像处理管道执行技术,该技术可以生成符合线程束的重叠瓦片,以减少同步开销。

多面体编译技术在深度学习编译器方面也有广泛的研究。TVM[53]是一个开
源的深度学习编译器,它基于多面体模型进行循环嵌套优化和并行化。MLIR[54]
是一个基于多面体模型的中间表示语言,它可以用于优化和转换深度学习模型。
PolyMage[55]是一个基于多面体模型的图像处理和机器学习编译器,它可以将算
法转换为多面体表示,然后进行循环嵌套优化和并行化。Halide[56]是一种基于多
面体模型的图像处理语言和编译器,支持基于多面体模型的循环嵌套优化和并
行化技术。Halide 提供了一些高级优化方法,例如自动调度和自动并行化,可用
于优化和加速各种图像处理应用。TensorFlow XLA 是TensorFlow[57]的一个加速
器,它基于多面体模型进行编译优化,提高了TensorFlow 模型的计算效率。
Bastoul 等人[58]提出了在AI/DL 框架中使用多面体调度约束优化深度学习算子,
为GPU 生成有效的代码。William 介绍了Polygeist[59],它是一个由C,C++前端
组成的编译工具,能够将各种代码转换为适用于多面体的MLIR。

当前,已有的多面体编译优化技术是面向GPU 平台的CUDA 编程模型。如
何针对不同体系结构如国产加速器件DCU 改进现有的多面体编译技术是一个紧
迫需要解决的问题。

相关文章:

  • Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术点解析
  • 全链游戏模式:自治世界与AI增强型交互
  • Unity UGUI Button事件流程
  • 2025.6.9总结(利与弊)
  • ADS-B态势显示 ASD-View
  • GPIO(通用输入输出)与LPUART(低功耗通用异步收发传输器)简述
  • 【案例篇】为什么设置了 ulimit 但 nofile 限制仍不生效?
  • SpringCloudGateway 自定义局部过滤器
  • Android屏幕刷新率与FPS(Frames Per Second) 120hz
  • 博科Brocade FC交换机常用操作命令
  • 具身智能之人形机器人核心零部件介绍
  • 本地部署drawDB结合内网穿透技术实现数据库远程管控方案
  • 判断是否是润年
  • 从0开始学习R语言--Day20--Wilcoxon秩和检验
  • 企业如何一键复制 DolphinScheduler 项目到新项目服务器?全套自动化方案来了!(企业不外传的实用工具)
  • Python网页自动化Selenium中文文档
  • 走进离线语音:安信可 VC‑01 智能模块全面拆解与 MCU 实战
  • 爬虫基础学习day2
  • Electron简介(附电子书学习资料)
  • day030-Shell自动化编程-函数
  • 营销型网站开发制作/营销推广公司
  • 顺德区网站设计建设企业/怎么让网站被百度收录
  • 安庆网站建设专业制/长沙百度seo代理
  • 免费开源的网站系统/媒介星软文平台官网
  • java 视频网站开发/域名备案查询系统
  • 网站的push运营怎么做/搜索引擎优化的主要特征