A section is a collection of statements that form a coherent segment of the kernel, such as jacobian computation or coefficient evaluation at quadrature points.
A section has additional details about input/output and includes annotations for potential optimization strategies.
Optimization strategies are now decoupled from the initial code generation (LNodes) and are instead applied as a subsequent step. This approach utilizes the annotations provided within each section to tailor optimizations.
Planned optimization to include:
[x] Loop Fusion: Merging loops across sections sharing the same name to improve cache performance and reduce overhead.
[x] Loop-Invariant Code Motion: Optimizing rank 2 forms by moving calculations that are constant within a loop outside of it, reducing redundant computations.
[ ] Sum Factorization: Applying this technique to jacobian, coefficient, and tensor assembly to reduce the computational complexity.
coverage: 80.653% (+0.3%) from 80.367%
when pulling 91ca120b45ebaac9439101bc662a75267001ad1e on igor/sum-factorization-opt
into f4f7882f292b9dbfb9e4487be7b36d35fd54a861 on main.
Introduce
Lnode.Section
:Optimization strategies are now decoupled from the initial code generation (LNodes) and are instead applied as a subsequent step. This approach utilizes the annotations provided within each section to tailor optimizations.
Planned optimization to include: