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的缓存开始填充。在这种情况下,通过分离乘法和加法运算、指针索引以及将输入作为常量传递,编译器可以显著提高性能
看
和