libCEED
libCEED copied to clipboard
Use "Fixed-size Sparse Matrix x Dense Matrix" (FsSpMDM) interface for `xsmm` backend
For certain applications using a non-tensor basis, the basis is quite sparse and the basis application can take advantage of this to increase performance. This FsSpMDM implementation in LIBXSMM benchmarks the sparse vs. dense kernels during construction (after JiT) and chooses the faster one. This could be an easy thing to try out in libCEED.
For reference, PyFR uses this: https://github.com/PyFR/PyFR/blob/ff01337aef17d0cd999ab016e53a8bb23d866b10/pyfr/backends/openmp/xsmm.py.
Interesting and perhaps related to recent work from Brubeck and Farrell on bases with sparsity properties.
Thanks for the reference!
Another common application which I had in mind is for constructing the discrete gradient interpolation from H1 to H(curl) on an element, or discrete curl from H(curl) to H(div). These are typically very sparse and involve only couplings between dofs sharing a face or edge, for example.