Eigen 库:返回表达式而不是向量本身

问题描述 投票:0回答:1

是否可以返回某种可以进一步使用和简化的表达式,而不是向量本身?

我有一个函数

Vector3<T> f(Vector3<T> const&, Vector3<T> const&);
,并将其应用到
g = f(a1, b1).cwiseProduct(t1) + f(a2, b2).cwiseProduct(t2)
形式的表达式中。我想知道这个是否可以优化。当
f
返回时,似乎没有必要创建向量。返回一个“表达式”可能会更有效,然后可以针对
g
的评估进行优化。

c++ eigen compiler-optimization eigen3
1个回答
0
投票

这也许应该是一条评论,但需要正确的格式。

Vector3 <T> g;
{
    auto v1 = f (a1, b1).cwiseProduct (t1);
    auto v2 = f (a2, b2).cwiseProduct (t2);
    g = v1 + v2;
}

将使用更少的内存,因为

f
返回的临时对象可以更快地被丢弃。但是,在我看来,它有点笨拙。也许将其包装在一个函数中。

如果

f
cwiseProduct
都生成新向量。那么我不知道可以做哪些进一步的优化。也许你应该告诉我们
f

© www.soinside.com 2019 - 2024. All rights reserved.