使用SIMD指令可以进行3x3矩阵求逆吗?
问题描述:
我正在使用基于ARM Cortex-A8的处理器,我有几个地方计算3x3矩阵逆运算。由于Cortex-a8处理器有一个NEON SIMD处理器,我有兴趣使用这个协处理器进行3x3矩阵反转,所以我看到了几个4x4的实现(Intel SSE和freevec),但没有看到3x3矩阵的位置使用SIMD指令进行反操作。 freevec使用的方法是将4×4矩阵分割成4×2×2矩阵,然后对每个矩阵进行微小操作,并将结果重新组合以得到4×4矩阵的逆。我没有看到3x3矩阵有这样的机会。使用SIMD指令可以进行3x3矩阵求逆吗?
任何人都有一个想法如何使用SIMD指令进行3x3矩阵求逆,这对我会有帮助吗?
问候 维克拉姆
答
可以通过添加一个第四行和第四列,两者都是(0 0 0 1)展开3×3矩阵对4×4矩阵。反转后,左上角的3x3子矩阵将具有所需的逆。
+0
这是一个好主意。请试试看,谢谢 – HaggarTheHorrible 2010-07-26 11:58:54
答
我已经开始为2×2,3×3和4×4矩阵求逆基于SIMD移植库:
https://github.com/niswegmann/small-matrix-inverse
不幸的是3×3尚不支持(如写作)。
也许感兴趣:“几乎没有一个很好的理由来颠倒矩阵。” http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/ – AakashM 2010-07-26 11:19:00
请认真对待您的评论,看看如何从我的算法中摆脱矩阵求逆。 – HaggarTheHorrible 2010-07-26 11:59:51
@AakashM那篇文章不相关。 John D. Cook关于矩阵的文章是关于科学计算中使用的大矩阵。这个问题是关于小矩阵的,通常用于计算机图形学和物理仿真。反转小矩阵非常有用(而且速度很快)。 – exDM69 2012-06-25 11:19:33