[PETSC #14656] "multivector" support in PETSc?

Barry Smith bsmith at mcs.anl.gov
Sat Apr 8 13:13:38 CDT 2006


   The biggest reason we haven't added "multi-vectors" is more design
decisions that have to be made then actual code implementation. There are two 
important design decisions:

I) Introduce a new class or overload Vec?

   1) Introduce a Vecs class, essentially copying the interface from
      Vec and implement the methods. A Vecs is essentially a collection of Vec.
      Then provide methods such as
      MatMults(), MatSolves(), PCApplys(), PCSetUps(), KSPSolves() etc

   2) Overload the current Vec class so that a Vec is either a "regular"
      Vec or a collection of vectors. Modify the Vec interface and methods
      as needed, then modify the MatMult() etc as needed

   3) Do 1) and have it all working well and then use this to quickly
      do 2) and throw away the seperate concept of Vecs (without losing
      the fastest possible performance for a "new" Vec that has a single
      vector).

   The advantage of 1) is we never break the current interface. 2) has the
   advantage of not introducing a new class; and since software
   comprehension difficulty grows exponentially with the number of classes
   this is a good thing. The advantage of 3) is we get an incremental approach
   to 2) (incremental is often good). Disadvantage of 3) is that users have
   to live with first the Vecs interface (but on the other hand most people
   won't use Vecs anyways) and then go back to Vec.

   I think 3) is the correct approach.

II) Default storage of "multivectors"? (note: the interfaces for Vecs will, of
    course, be data storage format neutral, but the code we actually write
    cannot be)

   1) Have the Vecs be essentially an array of Vec.

   2) Have a Vecs essentially be a double array where the "values" of the
      "vectors" are interlaced.

   The advantage of 1) is that it is easier to implement and doing things
   like deflation (removing one of the vectors in a Vec) doesn't require
   any copies of the vector data. The advantage of 2) is better performance,
   and since we are using block for better performance we should take advantage
   of the best possible performance.

   I think implementing both 1) and 2) is appropriate, starting with 1) since
   getting it completed would be faster.

   Barry


Note: the Vecs currently in petscvec.h is just a toy and can be ignored.



On Fri, 7 Apr 2006, Victor Eijkhout wrote:
>
>The question has come up before. If all goes according to plan, then Bill 
>Gropp will hire a student for the summer to implement it. On a project that 
>I lead, and that has use for multivectors for a different purpose, there is 
>actually budget. Feel free to recommend someone to Bill if you know of a 
>good candidate. Does your former advisor have students who are familiar 
>with the matter?
>
>Victor.
>
>On Apr 7, 2006, at 1:05 PM, Richard Tran Mills wrote:
>
>>Hi Guys,
>>
>>My former Ph.D. advisor, Andreas Stathopoulos (andreas at cs.wm.edu), has 
>>released an eigensolver package, PRIMME, that he is interested in 
>>interfacing as an external package with PETSc.  I told him a bit about how 
>>he could do this, but what I couldn't really answer was his questions 
>>about "multivector" support in PETSc.  PRIMME implements block 
>>Davidson/Jacobi-Davidson type methods, and thus needs to do a lot of 
>>operations like sparse matrix-multivector multiplies.  I haven't seen 
>>anything like this in PETSc (and since PETSc doesn't have block Krylov 
>>solvers, I suppose there is currently no need).  Has anyone done any work 
>>on stuff like this, or does anyone have any plans to?  Any thoughts on 
>>this?
>>
>>Cheers,
>>Richard
>>
>
>
>




More information about the petsc-dev mailing list