矢量矩阵乘法顺序会影响性能吗?

joh*_*ers 5 math 3d graphics matrix

这不是一个主要的vs列主要问题.这是基于矩阵乘法的关联属性的与性能相关的计算问题的顺序:A(BC)=(AB)C

如果我有两个矩阵,AB一个向量v,我想以一定的顺序将它们相乘,例如ABv,我可以做(AB)vA(Bv).

我以编程方式向我发现,如果我使用第二种方法并且总是将矩阵与向量相乘,那么从更少的计算中我可以获得更好的性能.

例如,如果我们处理4x4矩阵:

AB 结果是16个单独的计算,一个新的矩阵,每个结果来自一个点积

Matrix*vector 得到4个计算,每个计算来自一个点积

因此:

(AB)v 是16 + 4点积计算= 20

A(Bv) 是两个矩阵向量积,或4 + 4点积计算= 8

我在想什么?这表明,如果我每次都使用向量,那么执行许多这样的矢量矩阵表达式会显着提高性能吗?

因此,构造一个基于向量*矩阵从左到右计算顺序执行的矩阵库是有意义的(即使你选择用列主格式标记从右到左),因为向量与矩阵乘积相乘是在图形中很常见.

and*_*and 5

在矩阵的单个操作和所涉及的单个向量的有限环境中,你和tmyklebu是正确的.但是,在实际应用之前,通常需要注意更大的背景.这个问题围绕着AB相对于v变化频率的变化.如果AB相对静态(它们不经常变化)与v相比,你可能最好预先计算AB并将其应用于v恰好具有的任何值.

此外,在实践中,存在由多个矢量组成的一些几何形状,其可以通过首先计算AB然后将该变换应用于几何中的所有矢量来一起更有效地变换和计算.