Собственные линейные характеристики сложения / вычитания - PullRequest
0 голосов
/ 08 ноября 2018

Во время профилирования моей программы я обнаружил, что следующие строки являются узким местом

// Some big nested loop
{
    const auto inpRow = inpMap.row(counter);
    outMap.row(adjRow) -= inpRow;
    outMap.row(colInd) += inpRow;
}

outMap и inpMap - это Eigen::Map<Eigen::MatrixRX<Scalar>>, где Eigen::MatrixRX определяется как Eigen::Matrix<Scalar, -1, -1, Eigen::RowMajor>, то есть основная матрица строки.

Есть ли способ улучшить производительность таких операций? (Кроме parallel for конечно)

1 Ответ

0 голосов
/ 08 ноября 2018

Вы мало что можете сделать, поскольку такие выражения уже должны быть полностью векторизованы. Тем не менее вот несколько советов:

  • Убедитесь, что вы включили оптимизацию компилятора, -O3 -march=native
  • Затем измерьте время, которое требуется, и рассчитайте FLOPS, чтобы увидеть, насколько вы далеки от теоретической пиковой производительности вашего ЦП (отключите турбо-буст для этого эксперимента)
  • Если вы очень далеко от теоретического пика, то, скорее всего, вы страдаете от промахов в кеше. Вы можете уменьшить их, разделив два назначения на порции ниже 16 КБ. С этого момента вы можете получить ускорение до х2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...