lundi 4 novembre 2019

Eigen cast with auto return type - Less efficient than explicit return type?

When casting a vector integers (i.e. Eigen::VectorXi) to a vector of doubles, and then operating on that vector of doubles, the generated assembly is dramatically different if the return type of the cast is auto.

In other words, using:

    Eigen::VectorXi int_vec(3);
    int_vec << 1, 2, 3;

    Eigen::VectorXd dbl_vec = int_vec.cast<double>();

Compared to:

    Eigen::VectorXi int_vec(3);
    int_vec << 1, 2, 3;

    auto dbl_vec = int_vec.cast<double>();

Here are two examples on godbolt:

VectorXd return type: https://godbolt.org/z/0FLC4r

auto return type: https://godbolt.org/z/MGxCaL

What are the ramifications of using auto for the return here? I thought it would be more efficient by avoiding a copy, but now I'm not sure.

Aucun commentaire:

Enregistrer un commentaire