[petsc-dev] Interface for supporting MKL sparse inspector-executor model?

Richard Mills richardtmills at gmail.com
Mon Feb 13 21:33:46 CST 2017

Hi Barry,

I was thinking along those lines when I first considered putting together
an MKL-based matrix class, but I decided that I wanted to be able to
support the standard MKL sparse BLAS routines as well as the
inspector-executor model ones.  My plan was to add some logic to check to
see if a "matrix optimization" phase has been done, and use the
inspector-executor routines (where possible) if so.  Maybe it would be
better to have two matrix classes (one for the standard MKL sparse BLAS,
the other using the inspector-executor stuff), but that seemed to be adding
more classes than necessary (recognizing that we also need a BAIJMKL class
for the block CSR case).

Unfortunately, I note that, in my very limited experimentation so far, the
standard sparse BLAS routines from MKL are slightly slower than the
PETSc-provided kernels.  Which is good for PETSc, but bad for showing any
utility of my hacking on this front. =)


On Mon, Feb 13, 2017 at 5:48 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:

>   At this time I would hide the hints and just set reasonable ones and
> then have the MatAssemblyEnd for the new class provide the default hints
> and then call the optimize, but keep all of that stuff hidden from the
>   Barry
> > On Feb 13, 2017, at 6:03 PM, Richard Mills <richardtmills at gmail.com>
> wrote:
> >
> > Hi All,
> >
> > I've finally gotten around to putting together a matrix class (called
> AIJMKL for now) that inherits from AIJ but uses some methods provided by
> Intel MKL.  One thing I'd like to support is the "SpMV 2" sparse
> inspector-executor routines, detailed in the MKL reference manual starting
> at
> >
> >   https://software.intel.com/en-us/node/590105
> >
> > The basic usage model is this: You set some hints (see the functions at
> https://software.intel.com/en-us/node/590120) about how a matrix you have
> is going to be used, e.g., you call 'mkl_sparse_mv_hint' to set a guess
> about the number of upcoming matrix-vector multiplications that will be
> performed with this matrix.  When you've set various hints, then you call
> 'mkl_sparse_optimize' to start an analysis operation in which MKL examines
> the sparsity structure and maybe does some internal things for
> optimizations.  Then you can then apply mkl_sparse_d_mv to perform mat-vec
> operations.
> >
> > I am wondering what a proper way to provide a PETSc interface to these
> is.  I can think of a few ways to do this.  The most straightforward way is
> probably.
> >
> > * Add MatAIJMKLSetMVHint(), MatAIJMKLSetMMHint(), etc.
> > * Add MatAIJMKLOptimize() call.
> >
> > I also will be adding a BAIJMKL class for BAIJ matrices, so I'd
> duplicate these.  Does this option sound OK?  Or do others think I should
> do something more general?
> >
> > --Richard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20170213/aa6f4e57/attachment.html>

More information about the petsc-dev mailing list