Richard,

   My gut feeling is that the "hint" based system should be used by default, 
who uses linear stuff only once (only people not doing real problems :-)). So 
you could just provide a  single flag to say don't use hints, useful for 
numerical comparisons. (This is all experimental, stuff anyways and will 
evolve).

  Barry

> On Feb 13, 2017, at 9:33 PM, Richard Mills <[email protected]> wrote:
> 
> 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. =)
> 
> --Richard
> 
> On Mon, Feb 13, 2017 at 5:48 PM, Barry Smith <[email protected]> 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 PETSc API.
> 
>   Barry
> 
> > On Feb 13, 2017, at 6:03 PM, Richard Mills <[email protected]> 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
> 
> 

Reply via email to