可以使用SIMD指令求解3x3矩阵的逆吗?

5

我正在使用基于ARM Cortex-A8的处理器,有几个地方需要计算3x3矩阵求逆运算。

由于Cortex-a8处理器具有NEON SIMD处理器,我有兴趣使用此协处理器进行3x3矩阵求逆,我看到了几个4x4实现(Intel SSE和freevec),但是我没有在任何地方看到使用SIMD指令进行3x3矩阵求逆操作。Freevec使用的方法是将4x4矩阵分成4个2x2矩阵,然后对每个矩阵进行微小操作,并最终重新组合结果以获得4x4矩阵的逆。我不认为在3x3矩阵中有这样的机会。

有没有人有想法如何使用SIMD指令进行3x3矩阵求逆,这对我非常有帮助?

问候 Vikram


3
或许会引起兴趣:"矩阵求逆很少有好的理由。" http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/ - AakashM
我会认真考虑你的评论,并看看如何从我的算法中摆脱矩阵求逆。 - HaggarTheHorrible
3
@AakashM,那篇文章不相关。John D. Cook的矩阵文章是关于科学计算中使用的大矩阵。而这个问题是关于在计算机图形学和物理模拟中常用的小矩阵。反转小矩阵非常有用(而且相当快)。 - exDM69
这里有一份关于使用XMMS的旧版Intel PDF和另一篇ARM博客文章关于矩阵乘法。因为人们的需求不同,所以简洁的答案可能是不可能的;速度、代码大小、内存带宽、精度等等。 - artless noise
3个回答

6

您可以通过添加第四行和第四列(都为0 0 0 1)来将3x3矩阵扩展为4x4矩阵。在求逆后,左上角的3x3子矩阵将具有所需的逆矩阵。


3

1
你可以将wikipedia中描述的3x3矩阵的分析标准版本向量化。这应该不难。

在那个版本中,注意到行列式中使用的3个差异也被重复使用在其他9个部分中。 - phkahler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接