Fully integrating the Flang Fortran compiler with standard MLIR

TL;DR

通过将Flang与标准MLIR完全集成,实现高达三倍的性能提升。

cs.DC 🔴 高级 2024-09-27 12 次浏览
Nick Brown
Flang Fortran MLIR LLVM 高性能计算

核心发现

方法论

本文提出了一种将Flang Fortran编译器与标准MLIR完全集成的方法。通过将Flang的MLIR方言降低到标准MLIR方言,并利用现有的MLIR转换和优化来生成LLVM-IR,本文展示了这种方法的性能优势。研究原型在ARCHER2超级计算机上进行了测试。

关键结果

  • 与现有Flang方法相比,在多个基准测试中实现了高达三倍的性能提升。
  • 在Jacobi迭代和PW对流等基准测试中,新的方法显著优于GNU和Cray编译器。
  • 通过使用标准MLIR流,减少了代码冗余并提高了编译效率。

研究意义

该研究通过优化Flang编译器的性能,推动了开源Fortran编译器的发展。这不仅提高了HPC应用的效率,还促进了MLIR生态系统的利用,避免了技术锁定。

技术贡献

本文的技术贡献在于开发了一种将Flang的MLIR方言映射到标准MLIR方言的新方法,并展示了这种方法在性能和代码维护上的优势。

新颖性

这是首次将Flang与标准MLIR完全集成,显著提升了编译器的性能和灵活性。

局限性

  • 目前的实现仅在特定的基准测试上进行了验证,可能不适用于所有Fortran应用。
  • 对MLIR的依赖可能导致与快速发展的MLIR生态系统同步的挑战。

未来方向

未来的研究方向包括扩展该方法以支持更广泛的Fortran特性,以及在更多的HPC应用中验证其性能。

AI 总览摘要

Fortran作为高性能计算(HPC)的主要编程语言,其编译器性能对于科学计算至关重要。然而,现有的Flang编译器在与标准MLIR的集成上存在不足,导致性能未能充分发挥。本文提出了一种将Flang与标准MLIR完全集成的方法,通过将Flang的MLIR方言降低到标准MLIR方言,并利用现有的MLIR转换和优化来生成LLVM-IR。实验结果表明,该方法在多个基准测试中实现了高达三倍的性能提升,尤其是在Jacobi迭代和PW对流等计算密集型任务中表现突出。这一研究不仅提高了开源Fortran编译器的性能,还促进了MLIR生态系统的利用,避免了技术锁定。未来的研究将致力于扩展该方法以支持更广泛的Fortran特性,并在更多的HPC应用中验证其性能。

深度分析

研究背景

Fortran在科学计算领域有着近70年的历史,是HPC应用的主要编程语言。LLVM项目中的Flang是一个开源的Fortran编译器,旨在支持Fortran语言的完整规范。MLIR作为LLVM的一部分,提供了可组合的中间表示,促进了编译器基础设施的共享。

核心问题

Flang虽然利用了MLIR,但并未与其完全集成,导致需要开发专有的翻译和优化流程。这不仅增加了代码冗余,还可能影响性能,因为无法利用MLIR社区的进展。

核心创新

本文的创新在于提出了一种将Flang的MLIR方言降低到标准MLIR方言的方法,利用现有的MLIR转换和优化来生成LLVM-IR。这种方法减少了代码冗余,提高了编译效率,并显著提升了性能。

方法详解

  • �� 开发了一个研究原型,将Flang的MLIR方言降低到标准MLIR方言。
  • �� 利用现有的MLIR转换和优化来生成LLVM-IR。
  • �� 在ARCHER2超级计算机上进行性能测试。

实验设计

实验在ARCHER2超级计算机上进行,使用了Polyhedron Fortran基准测试套件和其他代表性HPC工作负载。对比了Flang、Cray和GNU Gfortran编译器的性能。

结果分析

实验结果表明,与现有Flang方法相比,新方法在多个基准测试中实现了高达三倍的性能提升。尤其是在Jacobi迭代和PW对流等计算密集型任务中表现突出。

应用场景

该方法可直接应用于需要高性能Fortran编译的HPC应用中,尤其是在科学计算和工程模拟领域。

局限与展望

当前实现仅在特定基准测试上验证,可能不适用于所有Fortran应用。对MLIR的依赖可能导致与快速发展的MLIR生态系统同步的挑战。

通俗解读 非专业人士也能看懂

想象你在厨房里做饭。Flang编译器就像一个厨师,他有自己的食谱(编译流程),但这些食谱不太高效。MLIR就像一个共享的食谱库,里面有很多经过验证的高效食谱。本文的方法就是让Flang这个厨师去使用MLIR的食谱库,从而做出更美味的菜肴(生成更高效的可执行文件)。这样一来,Flang不仅能提高做菜的速度,还能减少重复劳动。

简单解释 像给14岁少年讲一样

想象一下你在玩一个游戏,Flang是你的角色,他有自己的技能树(编译流程)。但有一个更大的技能树(MLIR),里面有很多厉害的技能。本文的方法就是让Flang去学习这个更大的技能树,从而变得更强大。这样,你的角色不仅能打败更多的敌人(生成更高效的代码),还可以节省技能点数(减少代码冗余)!

术语表

Flang (弗兰)

LLVM项目中的Fortran前端编译器,旨在支持Fortran语言的完整规范。

本文中,Flang用于生成LLVM-IR。

MLIR (多级中间表示)

一种可重用的编译器基础设施,提供了可组合的中间表示。

本文中,MLIR用于优化Flang的编译流程。

LLVM (低级虚拟机)

一个用于开发编译器的工具链,支持多种编程语言和硬件架构。

本文中,LLVM用于生成最终的可执行文件。

HPC (高性能计算)

使用超级计算机和并行处理技术解决复杂计算问题的领域。

本文中,HPC应用是Flang编译器的主要目标。

Fortran

一种主要用于科学计算的编程语言,已有近70年的历史。

本文中,Fortran是Flang编译器处理的目标语言。

开放问题 这项研究留下的未解疑问

  • 1 如何将该方法扩展到支持更广泛的Fortran特性?
  • 2 在更多HPC应用中验证其性能的具体步骤是什么?

应用场景

近期应用

科学计算

提高科学计算应用的编译效率和性能,特别是在需要高性能计算的领域。

远期愿景

工程模拟

在工程模拟中应用该方法,提升模拟精度和速度,推动工程技术的发展。

原文摘要

Fortran is the lingua franca of HPC code development and as such it is crucial that we as a community have open source Fortran compilers capable of generating high performance executables. Flang is LLVM's Fortran compiler and leverages MLIR which is a reusable compiler infrastructure which, as part of LLVM, has become popular in recent years. However, whilst Flang leverages MLIR it does not fully integrate with it and instead provides bespoke translation and optimisation passes to target LLVM-IR. In this paper we first explore the performance of Flang against other compilers popular in HPC for a range of benchmarks before describing a mapping between Fortran and standard MLIR, exploring the performance of this. The result of this work is an up to three times speed up compared with Flang's existing approach across the benchmarks and experiments run, demonstrating that the Flang community should seriously consider leveraging standard MLIR.

cs.DC cs.PL