Предположим, что у меня есть разреженная матрица, за исключением блоков по диагонали (фиксированного размера).Эффективное блочно-разреженное умножение матрицы с Eigen
Eigen::SparseMatrix<float> lhs;
LHS составляет около 2%, не редки, но может быть очень большим. Тогда, скажем, у меня есть вектор:
Eigen::MatrixXf rhs = Eigen::MatrixXf::Random(SomeSz, 1);
На данный момент, давайте предположим, что это плотная.
Я хочу, чтобы эффективно вычислить:
result.noalias() = lhs * rhs;
Если бы я был компилировать с -O3 -march = родной -mtune = родной (с Clang), будет это производить оптимальный результат?
Кроме того, что, если ки были разреженными:
Eigen::SparseMatrix<float> rhs; rhs.resize(SomeSz, 1); rhs.reserve(SomeSz/SomeFactor);
Is:
result = lhs * rhs;
еще оптимально/неоптимальным?
Я предполагаю, что я спрашиваю, будет ли Эйген использовать блок-разреженную структуру и выполнять только необходимые вычисления.