优化矩阵更新和乘法

时间:2015-02-27 09:34:13

标签: c optimization matrix scientific-computing

以矩阵

为例
X(a,b) = [a b
          a a]

我想用X执行一些相对密集的矩阵代数计算,更新ab的值,然后重复。

我可以看到两种存储X

条目的方法

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

2)作为指向ab的指针,以便在更新后,X的条目会自动更新。

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

我的假设是,对于不昂贵的矩阵计算,你应该使用方法(2)并且会有一些阈值,因为计算变得更加复杂,你应该切换到(1)。

我想这不是一个不常见的问题,我的问题是哪个是用于一般矩阵的最佳方法X

1 个答案:

答案 0 :(得分:0)

这两种方法听起来都难以实施。最简单的答案是进行测试计算,尝试两者并对它们进行基准测试。采取更快的一个。根据您正在进行的操作(矩阵乘法,反演等?),您可以通过简化操作来减少计算,因为您可以对矩阵结构做出假设。但是我不能再那么说了,因为我不确定你正在做什么类型的操作。

但是根据经验,使用矩阵大小,您可能无法看到性能差异。使用更大的矩阵,您将会因为CPU的缓存开始填充。在这种情况下,执行诸如分离乘法和加法运算,指针索引以及将输入作为const的操作使编译器能够进行显着的性能增强。

请参阅 Optimized matrix multiplication in CCache friendly method to multiply two matrices