Re: [eigen] Google Summer of Code 2018 - Symmetric Matrices for Eigen

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Hi David,

there is very interesting prior art on this: The LAPACK Rectangular Full Packed format (see http://www.netlib.org/lapack/lawnspdf/lawn199.pdf) is able to take advantage of GEMM when multiplying Hermitian matrices. This is a great improvement over the conventional packed format (which you plan to implement as far as I can tell), which does not support Level-3 BLAS. You should definitely look at the paper for inspiration.

Best
Márton


On 3 May 2018 at 00:01, David A. Tellenbach <datell@xxxxxxxxxxxxx> wrote:
Hello together,

my name is David Tellenbach, I'm currently studying Computer Science at the LMU Munich, Germany and got chosen for the Google Summer of Code 2018 Project "Faster Matrix Algebra for ATLAS", supervised by Dmitry Emeliyanov and Stewart Martin-Haugh.

Google Summer of Code is a global program focused on bringing more student developers into open source software development. Students work with an open source organization on a three month programming project during their break from school.

As you might know, our project's task is to implement support for symmetric matrices for Eigen. A short project description is available via the following link: https://summerofcode..withgoogle.com/projects/#5293950017994752

The official coding period hasn't started yet and lasts for three month, from May, 14 until August, 14 2018. The time now is meant to get to know the community and people involved.

As far as I see, Eigen basically provides three types of matrices: Dense, sparse and diagonal matrices. Of these types, the class Eigen::DiagonalMatrix seems to be the one that could be most similar to a possible implementation of a class for symmetric matrices. There is no need for storing all elements (as in the case of dense matrices) neither is a sophisticated mechanism to find the position of scalars in the matrix needed (as in the case of sparse matrices). Therefore I’d like to create the for symmetric matrices by deriving from Eigen::EigenBase (as in the case of diagonal matrices). 

Of course one goal is to store only the upper or lower triangular part of the matrix since this already defines it completely. Similar to Eigen::DiagonalMatrix the storage could look something like this:

    typedef typename internal::traits<Derived>::SymmetricVectorType SymmetricVectorType;

  // Store just one triangular part of the matrix
  typedef Matrix<_Scalar, (SizeAtCompileTime * SizeAtCompileTime + SizeAtCompileTime)/2, 
    1, 0, (MaxSizeAtCompileTime * MaxSizeAtCompileTime + MaxSizeAtCompileTime)/2 ,1> SymmetricVectorType;

We plan to provide constructors which take either matrices of type Eigen::Matrix<…> or Eigen::SelfAdjointView<…>.

What do you think about these broad plans so far? We are happy about any feedback.

Thanks,
David




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/