虽然Eigen是C++库并且C/C++使用行优先存储结构,但为什么Eigen更喜欢使用列优先存储顺序?来自为什么 MATLAB 使用列优先顺序?帖子中,我了解到 MATLAB 使用它是因为历史(由于 FORTRAN)原因。但据我所知,Eigen 一开始是基于 C++ 构建的。
在 Eigen 图书馆网站上写道:
Eigen 中的默认值是列优先。当然,Eigen 库的大部分开发和测试都是通过列主矩阵完成的。这意味着,即使我们的目标是透明地支持列主和行主存储顺序,Eigen 库也可能最适合列主矩阵。(取自https://eigen.tuxfamily.org/dox/group__TopicStorageOrders.html)
也许是因为经常使用 C++ 和 OpenCV,我的大脑倾向于以行优先的形式思考。使用列主矩阵开发和测试 Eigen 库是否存在任何性能(缓存局部性、加载/存储速度等)原因?
实际上,你是对的,本来,对于行优先存储的数据,行优先遍历具有更好的缓存局部性,因此缓存命中率更高。
\nEigen默认按col-major 顺序存储数据。看起来有点违反直觉\xef\xbc\x8chow,Eigen默认也是按照col-major顺序遍历数据的。
\n另外,您可以在此处找到官方文档Eigen storage order:\n当矩阵以行主序存储时,由于数据局部性更好,逐行遍历矩阵的算法会更快。类似地,对于列主矩阵来说,逐列遍历速度更快。
\n| 归档时间: | 
 | 
| 查看次数: | 5406 次 | 
| 最近记录: |