Я выполняю серию матричных умножений с довольно большими матрицами.Выполнение всех этих операций занимает много времени, и мне нужна моя программа, чтобы сделать это в большом цикле.Мне было интересно, есть ли у кого-нибудь идеи, чтобы ускорить это?Я только начал использовать Eigen, поэтому у меня очень ограниченные знания.
Я использовал ROOT-cern, встроенный в класс TMatrix, но скорость выполнения матричных операций очень низкая.Я настроил некоторые диагональные матрицы, используя Eigen, в надежде, что он обработал операцию умножения более оптимальным способом.Возможно, но я не вижу разницы в производительности.
// setup matrices
int size = 8000;
Eigen::MatrixXf a(size*2,size);
// fill matrix a....
Eigen::MatrixXf r(2*size,2*size); // diagonal matrix of row sums of a
// fill matrix r
Eigen::MatrixXf c(size,size); // diagonal matrix of col sums of a
// fill matrix c
// transpose a in place
a.transposeInPlace();
Eigen::MatrixXf c_dia;
c_dia = c.diagonal().asDiagonal();
Eigen::MatrixXf r_dia;
r_dia = r.diagonal().asDiagonal();
// calc car
Eigen::MatrixXf car;
car = c_dia*a*r_dia;