Progress toward constructing our own matrix classes
From GlueXWiki
- Current code uses TMatrixD, a generic matrix package in root that has substantial overhead
- Kalman filter code is very matrix heavy
- Working on our own Matrix classes tailored for the Kalman filter: 1x2, 1x5, 2x2, 2x5, 5x5, 5x2, 5x1
- SIMD instructions used wherever possible
- Some operations have been implemented and tested for speed on ifarml6 after generating 10,000,000 "events". In the table below: a(2,2), A(5,5), B(5,5), C(1,5), D(5,1), E(2,5), F(5,2)
Operation TMatrixD(s) DMatrix(s) T/D ---------------------------------------------------------- a^-1 1.493 0.090 16.59 A^-1 6.274 2.274 2.76 A+B 1.470 0.609 2.41 A*B 3.821 0.974 3.82 A^T 1.178 0.393 3.00 A^T*B*A 7.892 1.857 4.25 C*A*D 2.466 0.520 4.74 E*A*F 3.630 0.651 5.58