使用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矩阵求逆,这对我会有帮助吗?

问候 维克拉姆

+3

也许感兴趣:“几乎没有一个很好的理由来颠倒矩阵。” http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/ – AakashM 2010-07-26 11:19:00

+0

请认真对待您的评论,看看如何从我的算法中摆脱矩阵求逆。 – HaggarTheHorrible 2010-07-26 11:59:51

+3

@AakashM那篇文章不相关。 John D. Cook关于矩阵的文章是关于科学计算中使用的大矩阵。这个问题是关于小矩阵的,通常用于计算机图形学和物理仿真。反转小矩阵非常有用(而且速度很快)。 – exDM69 2012-06-25 11:19:33

可以通过添加一个第四行和第四列,两者都是(0 0 0 1)展开3×3矩阵对4×4矩阵。反转后,左上角的3x3子矩阵将具有所需的逆。

+0

这是一个好主意。请试试看,谢谢 – HaggarTheHorrible 2010-07-26 11:58:54

您可以矢量化wikipedia中描述的3x3矩阵的分析标准版本。它不应该很难。

+0

在该版本中,请注意在行列式中使用的3个差异在其他9个部分中也被重用。 – phkahler 2010-07-26 17:48:47

我已经开始为2×2,3×3和4×4矩阵求逆基于SIMD移植库:

https://github.com/niswegmann/small-matrix-inverse

不幸的是3×3尚不支持(如写作)。