[ANN] CliffordAlgebras.jl

For truly large algebras, it may be the case that the dynamism is okay and inconsequential, but even then I suspect there’s a better solution in terms of just storing a sparse array of the multiplication table and then writing to it on the fly as needed.

However, this approach is really disastrous for performance with small clifford algebras, and small clifford algebras can be just as interesting and important as large ones. In fact, perhaps one good route to respresenting a large clifford algebra would be through sparse kronecker products of small ones.

Setting aside large clifford algebras for the moment though, the approach to getting good performance in small clifford algebras is basically to avoid any dynamic dispatch, and fully unroll the multiplication table. You can see a conversation I had here Encoding group elements and operations - #17 by Mason where I demonstrated how using loop unrolling made this significantly faster than the approach used previously in Grassmann.jl

I have an idea for making this scale more gracefully to intermediate sizes though, let me try and whip up a quick prototype.

1 Like