【发布时间】:2017-10-01 17:38:42
【问题描述】:
我已经通过谷歌找到了行优先和列优先背后的逻辑,但似乎没有找到我问题的答案。
我的问题是:
例如,我有三种类型的矩阵维度; 5x50000、500x500、50000x5。这三个都将具有相同的 250000 乘法。但是,当这些乘法以行为主时,为什么 5x50000 矩阵的执行时间最长?我知道这与缓存有关。我的机器有 L1 32K、L2 256k、L3 8192k。
在谷歌搜索和阅读一些答案后,我了解到 C 程序中的数组是连续存储的,因此行主要是最快的,但我的问题是它与 5x50000 矩阵有什么关系,使其成为最糟糕的?是因为它有很大的列吗? 500x500 做得最好?
任何解释都会很有帮助。 谢谢。
【问题讨论】:
-
据我记忆,将两个矩阵 M1 和 M2 相乘,M1 中的列数应该等于 M1 中的行数。
-
是的,当然!我已经在问题中指定了矩阵的维度(rowxcol)。在我的代码中,逻辑是 A[i][j] = A[i*n + j] 其中 i 和 j 是矩阵 A 的行索引和 col 索引,n 是列数。这是行优先乘法。
-
三个矩阵相乘的顺序是什么?
标签: c multithreading matrix