如果我有一个表示MxN矩阵内容的一维数组(其中最低有效维在内存中是连续的),我如何在转置它时最好地利用缓存(以放置最重要的内容)连续记忆中的维度)。这个问题可以改写如下;
如果我可以选择读取连续内存但是写入随机访问位置或从随机访问位置读取并写入连续内存,所有条件都相同,我应该选择哪个?
答案 0 :(得分:3)
只有一种通常正确的方法:代码,配置文件,度量和比较。
例如:您是否需要实际转置数组?或者它是否足以将其转换为读取(在这种情况下,迭代器将完成这一操作)。通常当我与我最喜欢的敌人(Fortran)互动时,我必须“阅读转置”,因为傻瓜是专栏。
与Eigen一起玩,可让您指定存储顺序。
但是---再次 - 测试并看到。我们可能会认为你正在追求一个红鲱鱼,而且性能上的差异不会让你的代码复杂化。
答案 1 :(得分:1)
如果我必须选择一个,我会选择连续写入连续写入。原因
当然,由于此处有许多假设,并且取决于您的具体用例和硬件,因此您可能需要自行对其进行分析,以了解这些声明的有效性。