我正在执行一系列相当大的矩阵乘法。要运行所有这些操作需要很长时间,我需要我的程序在一个大循环中完成。我想知道是否有人有任何加速的想法?我刚开始使用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;
Eigen::MatrixXf car = ((a.transpose().array().rowwise() * a.colwise().sum()).colwise() * a.rowwise().sum()).matrix()
。 - jdehesa