繁体   English   中英

为什么 Eigen 默认使用 Column-Major 而不是 Row-Major?

[英]Why Eigen use Column-Major by default instead of Row-Major?

虽然 Eigen 是 C++ 库和 C/C++ 使用 row-major 存储结构,但为什么 Eigen 更喜欢使用 column-major 存储顺序? 为什么 MATLAB 使用列优先顺序? 发布后,我了解 MATLAB 使用它是因为历史(由于 FORTRAN)原因。 但据我所知,Eigen 一开始是建立在 C++ 之上的。

在 Eigen Library 网站上,它说:

Eigen 中的默认值是列优先。 自然,Eigen 库的大部分开发和测试都是使用列优先矩阵完成的。 这意味着,即使我们的目标是透明地支持以列为主和以行为主的存储顺序,Eigen 库也可以很好地处理以列为主的矩阵。 (取自https://eigen.tuxfamily.org/dox/group__TopicStorageOrders.html

可能由于经常使用 C++ 和 OpenCV,我的大脑倾向于以行主要形式思考。 使用列主矩阵开发和测试 Eigen 库是否有任何性能(缓存位置、加载/存储速度等)原因?

其实你是对的,原来对于row-major存储的数据, row-major traversal具有更好的缓存局部性,因此缓存命中率更高。

默认情况下,Eigen 以col-major 顺序存储数据。 这似乎有点违反直觉,然而,Eigen 默认也以col-major 顺序遍历数据。

此外,您可以在此处找到官方文档Eigen storage order :由于更好的数据局部性,当矩阵以行优先顺序存储时,逐行遍历矩阵的算法将 go 更快。 同样,对于列主矩阵,逐列遍历更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM