Finch:用于有限元和有限体积法的Julia领域特定语言与代码生成
1. 引言
在大规模数值求解偏微分方程(PDEs)时,需要在利用问题或硬件细节的高度优化代码与易于适应变化的可扩展代码之间进行权衡。随着技术的快速发展和向异构系统的转变,可扩展代码的价值日益凸显,这促使人们从高性能计算专家编写的手写代码转向通过高级领域特定语言(DSL)生成的代码。此外,对于中等规模的问题,虽然需要良好的性能,但开发最优代码的成本可能并不合理,此时领域科学家需要自己开发软件或从通用库中拼凑代码。同时,在多物理系统中,有限元(FE)或有限体积(FV)等离散化方法的选择也非常重要,不同方面的系统可能更适合不同的方法。
目前已经有许多用于求解PDEs的DSL。一端是高级选项,如Matlab工具箱和Comsol,它们通用性强,不需要高水平的编程技能,但缺乏可定制性,底层代码通常对用户隐藏且难以修改。另一端是低级库,如Nektar++和deal.II,它们提供针对特定目的优化的可定制组件,但需要用户具备更多的编程输入和技能,也难以修改代码以适应变化。
本文介绍的Finch是一种用于求解PDEs的DSL,旨在成为一种折中的解决方案。它具有离散化无关性,目前支持有限元和有限体积方法,目标是使领域科学家能够为从小型笔记本电脑模拟到需要现代超级计算机可扩展性的大型系统等各种问题创建高效代码。实现这一目标的两个关键思想是模块化软件设计和为外部软件框架生成代码。
1.1 模块化软件设计
Finch不依赖于单一的通用代码,而是使用一组模块来提供适应问题需求或资源的灵活性。例如,它支持多种离散化方法,包括FE(CG和DG变体)和FV,以及数值工具,如PETSc的线性求解器、基于
超级会员免费看
订阅专栏 解锁全文
25

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



