если я использую функцию-член матриц Eigen Matrix3Xf
myMatrix.middleCols(a, b)
с 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,8 с