Mat2Boundary: Treating User-Defined Boundary Condition as SpMV for Distributed PDE Solvers on Block-Structured Grids
Yanzheng Cai, Mingzhe Zhang, Shengqi Chen, Haoyuan Song, Wenguang Chen (Department of Computer Science, Technology & BRNist, Tsinghua University, Beijing, China)

TL;DR
Mat2Boundary introduces a DSL and compiler that models boundary conditions as affine sparse linear operators, simplifying implementation and improving efficiency in distributed PDE solvers on structured grids.
Contribution
It unifies various boundary-condition handling techniques into a modular, matrix-based abstraction and generates optimized kernels for distributed high-performance PDE computations.
Findings
Achieves up to 7.6× speedup in BC kernel performance.
Reduces BC code complexity by over 70%.
Scales efficiently to 1,344 CPU cores with 72%-88% efficiency.
Abstract
Boundary-condition (BC) handling is a major source of complexity in PDE solvers on structured and block-structured grids, especially for high-order methods and distributed-memory execution. We present Mat2Boundary, a DSL and compiler for boundary computations that models a broad class of boundary-conditions as affine sparse linear operators. This abstraction unifies halo copying, circular and symmetric mappings, zero padding, block-edge synchronization, and user-defined interpolation, while exposing a modular basic sub-matrix interface for declarative composition. To make this representation efficient, Mat2Boundary combines multi-stage programming and polyhedral analysis to generate matrix-free kernels for structured cases, support user-defined sparse matrices for irregular cases, eliminate redundant boundary work, and synthesize reusable communication schedules for distributed…
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.
