I have a quantum mechanics simulation where I need to multiply three matrices that look like this:
$$\rho(t_1)=U^\dagger \rho(t_0) \, U$$
where $U^\dagger$ is the hermitian conjugate of $U$. This evolves the density matrix $\rho$ from one time point to another time point. $U$ is called the evolution operator.
My question is: Is there a smart way to reduce the time required to do this matrix multiplication in C++? Is there anything better than using BLAS's zgemm
2 times (or zhemm
2 times, since the matrices are Hermitian)?
Additional information:
What I mean with smart is not only using a different library, but also finding a way to mathematically or computationally reduce the number of multiplications that have to be done in that operation.
The sizes of the matrices I deal with range from $2^7$ to $2^{15}$ in side-length (All these matrices are square matrices).