以矩阵
为例X(a,b) = [a b
a a]
我想用X
执行一些相对密集的矩阵代数计算,更新a
和b
的值,然后重复。
我可以看到两种存储X
:
1)作为数字(即浮点数)。然后在我们的矩阵代数运算之后,我们将X中的所有值更新为a
和b
的正确值。
2)作为指向a
和b
的指针,以便在更新后,X
的条目会自动更新。
现在,我最初认为方法(2)是跳过更新步骤的方法。但是我相信使用方法(1)可以在并行执行例如矩阵乘法时更好地使用缓存(虽然我不是专家,所以如果我错了请纠正我。)
我的假设是,对于不昂贵的矩阵计算,你应该使用方法(2)并且会有一些阈值,因为计算变得更加复杂,你应该切换到(1)。
我想这不是一个不常见的问题,我的问题是哪个是用于一般矩阵的最佳方法X
?
答案 0 :(得分:0)
这两种方法听起来都难以实施。最简单的答案是进行测试计算,尝试两者并对它们进行基准测试。采取更快的一个。根据您正在进行的操作(矩阵乘法,反演等?),您可以通过简化操作来减少计算,因为您可以对矩阵结构做出假设。但是我不能再那么说了,因为我不确定你正在做什么类型的操作。
但是根据经验,使用矩阵大小,您可能无法看到性能差异。使用更大的矩阵,您将会因为CPU的缓存开始填充。在这种情况下,执行诸如分离乘法和加法运算,指针索引以及将输入作为const的操作使编译器能够进行显着的性能增强。
请参阅 Optimized matrix multiplication in C和 Cache friendly method to multiply two matrices