A structure-exploiting numbering algorithm for finite elements on extruded meshes, and its performance evaluation in Firedrake
Gheorghe-Teodor Bercea, Andrew T. T. McRae, David A. Ham, Lawrence, Mitchell, Florian Rathgeber, Luigi Nardi, Fabio Luporini, Paul H. J. Kelly

TL;DR
This paper introduces a new numbering algorithm for extruded meshes that leverages their structure to improve data access efficiency in finite element computations, demonstrated within the Firedrake system.
Contribution
A novel structure-exploiting numbering algorithm for extruded meshes that enhances data access performance in finite element simulations.
Findings
Performance improves after 10-20 layers due to spatial and temporal reuse.
Achieves 70-90% of hardware-specific theoretical limits.
Effective for both continuous and discontinuous Galerkin discretizations.
Abstract
We present a generic algorithm for numbering and then efficiently iterating over the data values attached to an extruded mesh. An extruded mesh is formed by replicating an existing mesh, assumed to be unstructured, to form layers of prismatic cells. Applications of extruded meshes include, but are not limited to, the representation of 3D high aspect ratio domains employed by geophysical finite element simulations. These meshes are structured in the extruded direction. The algorithm presented here exploits this structure to avoid the performance penalty traditionally associated with unstructured meshes. We evaluate the implementation of this algorithm in the Firedrake finite element system on a range of low compute intensity operations which constitute worst cases for data layout performance exploration. The experiments show that having structure along the extruded direction enables the…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
