【问题标题】:Is 3x3 Matrix inverse possible using SIMD instructions?是否可以使用 SIMD 指令进行 3x3 矩阵求逆?
【发布时间】:2010-07-26 10:58:21
【问题描述】:

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

由于 Cortex-a8 处理器有一个 NEON SIMD 处理器,我有兴趣将这个协处理器用于 3x3 矩阵求逆,我看到了几个 4x4 实现(英特尔 SSE 和 freevec),但我在哪里没有看到 3x3使用 SIMD 指令执行矩阵逆运算。 freevec 使用的方法是将 4x4 矩阵拆分为 4、2x2 矩阵,然后对每个矩阵进行微小的运算,最后将结果重新组合,得到 4x4 矩阵的逆矩阵。对于 3x3 矩阵,我看不到这样的机会。

有人知道如何使用 SIMD 指令进行 3x3 矩阵求逆,这对我很有帮助吗?

问候 维克拉姆

【问题讨论】:

  • 也许感兴趣:“几乎没有充分的理由来反转矩阵。” johndcook.com/blog/2010/01/19/dont-invert-that-matrix
  • 会认真对待您的评论,看看如何从我的算法中消除矩阵求逆。
  • @AakashM 那篇文章不相关。 John D. Cook 关于矩阵的文章是关于科学计算中使用的大矩阵。这个问题是关于小矩阵的,通常用于计算机图形学和物理模拟。反转小矩阵非常有用(而且速度非常快)。
  • 这是一个 old Intel PDF 使用 XMMS 和另一个 ARM Blog post 矩阵乘法。由于人们有不同的需求,因此可能无法给出简明的答案;速度、代码大小、内存带宽、精度等

标签: algorithm simd neon matrix-inverse


【解决方案1】:

您可以通过添加第 4 行和第 4 列将 3x3 矩阵扩展为 4x4 矩阵,两者均为 (0 0 0 1)。求逆后,左上角的 3x3 子矩阵将得到所需的逆。

【讨论】:

    【解决方案2】:

    我已经启动了一个基于 SIMD 的可移植库,用于 2x2、3x3 和 4x4 矩阵求逆:

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

    很遗憾,目前还不支持 3x3(在撰写本文时)。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 在那个版本中,请注意,行列式中使用的 3 个不同之处也在其他 9 个部分中重复使用。
      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2015-06-13
      • 2020-03-22
      • 2015-06-05
      相关资源
      最近更新 更多