1)Model-driven transformations for multi- and many-core CPUs
现代多面体编译器擅长使用静态控制部分积极优化代码,但寻找高性能多面体变换的实践状态,特别是针对不同硬件目标的实践状态仍然很大程度上涉及自动调优。在这项工作中,我们提出了一种新的可定制多面体调度技术,旨在为多个硬件目标提供高性能。我们设计约束和目标,对性能的几个关键方面进行建模,如步幅优化或并行性和重用之间的权衡,同时考虑目标机器的重要架构特征。我们使用PolyBench/C基准套件评估我们的工作,并在3种代表性架构上用Pluto编译器生成的大型优化空间对其进行实验验证:IBM Power9、Intel Xeon Phi和Intel Core-i9。我们的结果表明,在大多数基准测试中,我们可以实现与Pluto相当或更优的性能,而无需在源代码中实现平铺,也不需要使用实验性的自动调谐。
2)Polyhedral auto-transformation with no integer linear programming
用于并行化和局部优化的自动多面体变换的最新算法通常依赖于整数线性规划(ILP)。当扩展到数十或数百条语句时,这会带来可扩展性问题,并且在生产编译器设置中可能会令人不安。在这项工作中,我们考虑放松Pluto算法ILP公式中的完整性,Pluto算法是一种用于寻找良好仿射变换的流行算法。我们证明,从松弛LP公式中获得的有理解可以很容易地缩放为有效的积分解,以获得所需的解,尽管有一些注意事项。我们首先展示了将松弛LP的解与原始冥王星ILP联系起来的正式结果。然后,我们证明了在实践中实现上述理论结果存在困难,并提出了一种替代方法来克服这些困难,同时仍然利用线性规划。我们的新方法在一系列大型基准测试中获得了显著的编译时加速。在实现这些编译时改进的同时,我们表明转换后的代码的性能没有受到牺牲。我们的自动转换方法在NAS PB、SPEC CPU 2006和PolyBench套件的相关挑战性基准测试中,平均编译时间比最新水平提高了5.6倍。我们还遇到了以前的框架未能在合理的时间内找到转换的情况,而我们的新方法却能立即找到。
3)Sub-polyhedral scheduling using (unit-)two-variable-per-inequality polyhedra
多面体编译在复杂循环嵌套优化器和并行编译器的设计和实现中取得了成功。算法的复杂性和可扩展性限制仍然是一个重要弱点。我们在仿射调度问题产生的约束系统的近似下使用子多面体来解决这个问题。我们提出了一种使用(单位)双变量每不等式或(U)TVPI多面体的子多面体调度技术。该技术依赖于简单的多项式时间算法,将一般多面体近似为(U)TVPI多面体。我们使用我们的调度技术修改了最先进的PLuTo编译器,并表明对于大多数Polybench(2.0)内核,上述欠近似产生了非空的多面体。求解欠近似系统会导致复杂性的渐近增益,并且与传统的LP求解器相比,显示出实际的显著改进。我们还验证了当欠近似保持可行性时,我们的子多面体并行化原型生成的代码与PLuTo优化代码的性能相匹配。
4)The Pluto+ Algorithm: A Practical Approach for Parallelization and Locality Optimization of Affine Loop Nests
仿射变换已被证明对循环重构非常强大,因为它们能够对非常广泛的变换进行建模。单个多维仿射函数可以表示一个长而复杂的简单变换序列。现有的仿射变换框架,如Pluto算法,包括现代多核架构的成本函数,粗粒度并行性和局部性对其至关重要,只考虑变换的子空间,以避免在寻找变换时出现组合爆炸。随后的实际权衡导致某些有用的转换被排除在外:特别是涉及循环反转和负因素导致的循环偏斜的转换组合。此外,目前还没有证据表明该算法成功地为所有仿射环巢找到了可置换环带树。在这篇文章中,我们提出了一种解决这两个问题的方法:(1)通过结合Pluto的现有成本函数对更大的实际有用的仿射变换空间进行建模,以及(2)通过扩展Pluto算法,以证明其对所有仿射环巢的合理性和完整性。我们对编译时间和生成代码的性能的影响进行了实验评估。评估表明,我们的新框架Pluto+对Polybench的任何基准测试都没有性能下降。对于具有周期性边界条件的格子玻尔兹曼方法(LBM)模拟,它在冥王星上提供了1.33倍的平均加速。我们还证明Pluto+不会显著增加编译时间。Polybench上的实验结果表明,Pluto+仅将整体多面体源到源的优化时间增加了15%。在显著提高执行时间的情况下,它仅将多面体优化时间增加了2.04倍。
5)Modeling the conflicting demands of parallelism and Temporal/Spatial locality in affine scheduling
尽管在该领域进行了数十年的工作,但构建有效的循环嵌套优化器和并行化器仍然具有挑战性。由于循环密集型应用程序的多样性日益增加,以及现代处理器中复杂的内存/计算层次结构,优化启发式方法被拉向相互冲突的目标,突显出缺乏优化局部性和并行性的系统方法。考虑到这些对循环嵌套优化的冲突要求,我们提出了一种算法模板,能够对多处理器和加速器的多级并行性和时间/空间局部性进行建模。该算法模板在语义保持变换的多面体空间上编排了一组可参数化的线性优化问题。虽然整体问题不是凸的,但可以从这个模板中得出有效的算法,在GPU和多核CPU上提供前所未有的性能可移植性。我们讨论了这种算法模板的基本原理,并在代表性的计算内核/基准上进行了验证。
6)When polyhedral transformations meet SIMD code generation
开始SIMD啦,
数据局部性和并行性是现代多核机器性能的关键优化目标。粗粒度并行性(如多核)和细粒度并行性(例如向量SIMD)都必须得到有效利用,但尽管双方都取得了数十年的进展,但目前试图解决数据局部性和这两种并行性的编译器优化方案往往无法实现三个目标之一。
我们通过提出一个3步框架来解决这个问题,该框架旨在实现集成数据局部性、多核并行性和程序的SIMD执行。我们定义了可矢量化小代码的概念,并定制了属性,以实现小代码的有效SIMD代码生成。我们利用现代高级转换框架的强大功能来重构程序,以公开良好的独立于ISA的可矢量化小代码,利用多维数据重用。然后,我们使用一组较低级别的以SIMD为中心的优化,为小代码生成ISA特定的定制代码。
我们在一组数字内核上演示了我们的方法,这些内核可以自动平铺、并行化和矢量化,与现有的编译器相比,性能有了显著提高。
7)Polyhedral-Model Guided Loop-Nest Auto-Vectorization
优化编译器应用了许多相互依存的优化,导致了众所周知的困难的阶段排序问题——决定应用哪些转换以及以何种顺序应用。幸运的是,多面体编译框架等新的基础设施承载了各种转换,促进了对多个转换序列的有效探索和配置。然而,许多强大的优化仍然存在于多面体框架之外,包括矢量化。到目前为止,细粒度SIMD矢量化的低级、特定目标方面已经将其排除在多面体框架之外。在本文中,我们研究了多面体框架的循环变换与后续矢量化之间的相互作用。我们模拟了不同循环变换和矢量化策略对性能的影响,然后展示了如何将此成本模型无缝集成到多面体表示中。这种预测建模有助于有效的探索和有根据的决策,以最好地应用各种多面体循环变换,同时考虑不同矢量化方案的后续影响。我们的工作证明了在矢量化背景下调整多面体模型的可行性和益处。实验结果证实,我们的模型具有准确的预测能力,在PowerPC970和Cell SPU SIMD平台上,与传统的最内环矢量化相比,平均速度提高了2.0倍以上。
8)
3286

被折叠的 条评论
为什么被折叠?



