Nikita Smetanin
d7d740abe9
Symmetric eigen 3x3 implementation + benchmark & tests
...
Summary:
Symmetric eigenvalues 3x3 implementation from https://github.com/fairinternal/denseposeslim/blob/roman_c3dpo/tools/functions.py#L612
based on https://en.wikipedia.org/wiki/Eigenvalue_algorithm#3.C3.973_matrices and https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf
Benchmarks show significant outperformance of symeig3x3 in comparison with torch implementations (torch.symeig and torch.linalg.eigh) on GPU (P100), especially for large batches: 70-280ns per sample vs 3400ns per sample for torch_linalg_eigh_1048576_cpu
It's worth mentioning that torch.linalg.eigh is still comparably fast for batches up to 8192 on CPU.
Some tests are still failing as the error thresholds need to be adjusted appropriately.
Reviewed By: patricklabatut
Differential Revision: D29915453
fbshipit-source-id: 7c1b062da631c57c4e22a42dd0027ea5e205f1b5
2021-10-06 10:57:07 -07:00