是否存在一种用于计算低维矩阵(约4)的行列式的方法,该方法与SIMD( NEON ,SSE,SSE2)兼容?我正在使用手动扩展公式,该公式效果不佳。在Linux下,我一直使用SSE到SSE3和neon。矩阵元素都是浮点数。

最佳答案

这是我的5美分。
2x2矩阵的行列式:
对于读者来说,这是一个练习,应该易于实现
3x3矩阵的行列式:
使用标量三乘积。这将需要智能的cross()dot()实现。这些的食谱是广泛可用的。
4x4矩阵的行列式:
使用here中的技巧之一。我的代码:

template <class T>
inline T det(matrix<T, 4, 4> const& m) noexcept
{
  auto const A(make_matrix<T, 2, 2>(m(0, 0), m(0, 1), m(1, 0), m(1, 1)));
  auto const B(make_matrix<T, 2, 2>(m(0, 2), m(0, 3), m(1, 2), m(1, 3)));
  auto const C(make_matrix<T, 2, 2>(m(2, 0), m(2, 1), m(3, 0), m(3, 1)));
  auto const D(make_matrix<T, 2, 2>(m(2, 2), m(2, 3), m(3, 2), m(3, 3)));

  return det(A - B * inv(D) * C) * det(D);
}
5x5 +矩阵的行列式:
可能使用上面的技巧。

关于sse - SIMD的行列式计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29991373/

10-12 18:00