Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
如果我有一个表示 MxN 矩阵内容的一维数组(其中最低有效维度在内存中是连续的),我如何在转置它时充分利用缓存(将最高有效维度的内容放在连续记忆)。这个问题可以改写如下;
如果我可以在读取连续内存但写入随机访问位置或从随机访问位置读取并写入连续内存之间进行选择,所有条件都相同,我应该选择哪个?
只有一种普遍正确的方法:编码、配置文件、测量和比较。
例如:您是否需要实际转置数组?或者将其转置就足够了(在这种情况下,迭代器可以解决问题)。很多时候,当我与我最喜欢的敌人(Fortran)互动时,我不得不“阅读转置”,因为傻瓜是专栏专业的。
使用 Eigen,它可以让您指定存储顺序。
但是 - 再次 - 测试并查看。很可能您正在追求红鲱鱼,而性能上的差异并不值得您花时间使代码复杂化。
如果我必须选择一个,我会选择读取连续而不是写入连续。原因
当然,由于这里有许多假设并且取决于您的特定用例和硬件,因此您可能必须自己对其进行分析以查看这些声明的有效性。