C 优化矩阵更新和乘法

C 优化矩阵更新和乘法,c,optimization,matrix,scientific-computing,C,Optimization,Matrix,Scientific Computing,以矩阵为例 X(a,b) = [a b a a] 我想用X执行一些相对密集的矩阵代数计算,更新a和b的值,然后重复 我可以看到存储X项的两种方法: 1) 作为数字(即浮动)。然后在我们的矩阵代数运算之后,我们将X中的所有值更新为a和b的正确值 2) 作为指向a和b的指针,因此在更新它们之后,X的条目将自动更新 现在,我最初认为方法(2)是可行的,因为它跳过了更新步骤。然而,我相信使用方法(1)可以在并行执行例如矩阵乘法时更好地使用缓存(尽管我不是专家,所以如果我错了,请纠正

以矩阵为例

X(a,b) = [a b
          a a]
我想用
X
执行一些相对密集的矩阵代数计算,更新
a
b
的值,然后重复

我可以看到存储
X
项的两种方法:

1) 作为数字(即浮动)。然后在我们的矩阵代数运算之后,我们将X中的所有值更新为
a
b
的正确值

2) 作为指向
a
b
的指针,因此在更新它们之后,
X
的条目将自动更新

现在,我最初认为方法(2)是可行的,因为它跳过了更新步骤。然而,我相信使用方法(1)可以在并行执行例如矩阵乘法时更好地使用缓存(尽管我不是专家,所以如果我错了,请纠正我)

我的假设是,对于不必要的矩阵计算,你应该使用方法(2),当计算变得更复杂时,会有一些阈值,你应该切换到(1)


我想这不是一个很少见的问题,我的问题是,对于一般矩阵
X

哪种方法听起来都很难实现。最简单的答案是做一个测试计算,尝试两种方法,并对它们进行基准测试。拿快一点的。根据您正在执行的操作类型(矩阵乘法、求逆等),您可以通过简化操作来减少计算量,前提是您可以对矩阵结构进行假设。但我不能说得更深入了,因为我不确定你在做什么类型的手术

但根据经验,对于这样大小的矩阵,您可能不会看到性能差异。对于较大的矩阵,您将看到,因为CPU的缓存开始填充。在这种情况下,通过分离乘法和加法运算、指针索引以及将输入作为常量传递,编译器可以显著提高性能

看 和