gpt4 book ai didi

c++ - Eigen middleCols() 惩罚

转载 作者:行者123 更新时间:2023-11-30 03:18:16 25 4
gpt4 key购买 nike

如果我使用 Eigen 的成员函数 Matrix3Xf 矩阵 myMatrix.middleCols(a, b) with a = 0, b = myMatrix.cols() -1,我得到了性能损失。当然,我通常对 a 和 b 使用其他值,但使用这些值,最容易与普通矩阵进行比较。

这是正常行为吗?是这样吗,因为无法确保对齐,因此无法进行矢量化?我没有在文档中找到任何相关信息。

这是一个示例代码:

Matrix3Xf a_full = Matrix3Xf::Random(3, 400);
Vector3f v = Vector3f::Random();
RowVectorXf b_full = RowVectorXf::Random(400);

volatile int left = 0, right = 399;
auto& a = a_full.middleCols(left, right);
auto& b = b_full.middleCols(left, right);
//auto& a = a_full;
//auto& b = b_full;

for (float f = 0; f < 1000000; f++)
{
b += (v.transpose() * a);
}

cout << b.sum();

使用这段代码,我的执行时间为 8.6 秒。有一个= a_full; b = b_ful;不加注释,执行时间7.8s

最佳答案

关于乘以常数:https://godbolt.org/z/a_OEEP .你确实有一些开销,因为 Eigen 不知道你的列是否从对齐的位置开始,所以它会乘以一些值直到它到达对齐的位置。 (此外,最后还有一个清理循环)。如果列数相对较少,这可能会产生重大影响。

另外,MSVC 有时不擅长内联琐碎的函数。很多问题在开发分支(默认)中得到修复,但在 3.3.x 中没有,通过添加更多强制内联。

关于c++ - Eigen middleCols() 惩罚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54858928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com