在科学计算与人工智能深度融合的时代,如何让传统编程语言焕发新生,成为开发者关注的热点。近日,编译器领域传来重磅消息:LFortran 编译器与 Enzyme 自动微分框架完成集成,首次在 Fortran 语言中实现了高效的差异化编程(Differentiable Programming)。这一突破不仅为拥有数十年历史的 Fortran 注入了现代机器学习能力,也为气候模拟、天体物理、计算化学等依赖 Fortran 的高性能计算领域打开了可微编程的大门。

Fortran 的“可微分”觉醒

Fortran 作为诞生于 1950 年代的“元老级”语言,至今仍是科学计算领域的核心工具——全球排名前 500 的超算中,大量数值模拟代码仍由 Fortran 编写。然而,随着深度学习与基于梯度的优化算法兴起,Fortran 缺乏原生自动微分(Automatic Differentiation, AD)支持,导致科学家在训练物理信息神经网络(PINN)、进行不确定性量化或反问题求解时,不得不手动推导梯度或借助 Python 胶水代码,效率低下且易出错。

LFortran 是一款采用现代架构开发的交互式 Fortran 编译器,支持即时编译(JIT)与 IDE 集成,旨在降低 Fortran 的开发门槛。而 Enzyme 则是 LLVM 生态中备受关注的自动微分框架,能对已编译的代码自动生成梯度,无需修改源代码或引入特殊类型。两者的结合,意味着 Fortran 程序员只需像往常一样编写数值代码,Enzyme 即可自动计算其导数,且性能接近手写最优。

技术原理:两大利器如何协同

传统自动微分工具通常要求语言内置 AD 库或重载运算符,而 Enzyme 采用源代码级代码变换策略,在 LLVM IR(中间表示)层面注入梯度计算逻辑。它能够处理包括循环、分支、函数调用在内的复杂控制流,并支持前向模式与反向模式 AD。LFortran 则负责将 Fortran 代码高效编译为 LLVM IR,再交由 Enzyme 进行微分变换,最后生成可执行文件或共享库。

据项目开发者介绍,双方通过嵌入 En

zyme 的编译器插件实现了无缝对接。用户只需在 LFortran 的编译命令中添加 --enzyme 标志,即可对指定函数生成其微分版本。例如,一个计算流体压力场方程的 Fortran 子程序,经 Enzyme 处理后能直接输出压力对输入参数的梯度,用于灵敏度分析或伴随优化。

实际应用:从气候模式到分子动力学

这一组合的优势在多个科学场景中已得到验证。在大气科学领域,传统气候模式参数化方案常包含上百个经验参数,手动调优极为繁琐。利用可微 Fortran,研究人员可对整个模式进行端到端梯度反向传播,结合观测数据以机器学习方式自动校准参数。此外,在计算化学中,基于 Fortran 编写的分子动力学模拟代码,可通过自动微分无缝嵌入神经网络势函数,实现第一性原理与经典力场的混合建模。

LFortran 的开发者表示:“我们并不要求科学家放弃他们信任的 Fortran 代码,而是通过 Enzyem 赋予它‘学会求导’的能力。这将极大缩短从物理模型到优化求解的周期。”

生态意义与未来展望

长期以来,自动微分库主要面向 Python 或 C++ 生态,Fortran 用户常被视为“二等公民”。此次 LFortran + Enzyme 的集成,打破了语言壁垒,使高性能计算领域的存量代码得以复用,降低了科研团队的技术转换成本。随着 LLVM 生态的持续扩大,未来其他遗留语言(如 Julia 或 C)也有望受益于类似的差异化编译方案。

目前,LFortran 与 Enzyme 的集成代码已开源(GitHub: lfortran/lfortran),团队正在优化对复杂 Fortran 模块(如派生类型、数组切片)的支持,并计划发布预编译二进制包。对于致力于将物理仿真与 AI 结合的研究者而言,这无疑是一个值得关注的里程碑。

编者按:可微编程被视为下一代科学计算基础设施的核心。Fortran 这一“老树”能否借 Enzyme 之力开出“新花”?我们拭目以待。