> On Jul 28, 2017, at 7:12 PM, Richard Tran Mills <rtmi...@anl.gov> wrote: > > On Fri, Jul 28, 2017 at 12:32 PM, Smith, Barry F. <bsm...@mcs.anl.gov> wrote: > > > On Jul 28, 2017, at 2:13 PM, Richard Tran Mills <rtmi...@anl.gov> wrote: > > > > On Fri, Jul 28, 2017 at 12:02 PM, Stefano Zampini > > <stefano.zamp...@gmail.com> wrote: > > MatShift, MatZeroEntries…. there are for sure others that modify the > > entries. I would suggest you to quickly go over the online Mat pages. > > > > Just a curiosity: Why the inspector should care about the magnitude of the > > entries? > > If it’s clear in the code how to change the entry of the CSR that the > > inspector uses (not the CSR itself, just the values), then the missing > > functions can be fixed later. > > > > The inspector shouldn't care, of course, at all about the magnitude of the > > entries since it is only looking at the sparsity pattern. Unfortunately, > > the the MKL sparse inspector-executor routines store things in an internal > > representation that I cannot modify; I just have to tell MKL to rebuild the > > data structure. It doesn't use the A,I,J arrays that PETSc has after these > > are used by mkl_sparse_optimize(). > > They will eventually support a "updated numerical values only" option. > > Richard > > In theory PETSc Mat have two "state" values, > > 1) nonzerostate - this is increased anytime the nonzero structure changes > > 2) state - this is increased anytime any numerical values are changed > > These are used by PCSetUp() to determine if the preconditioner needs to be > updated and if that involves a new nonzero structure. > > The reason I say "in theory" is that it looks like certain changes to > matrices do not properly update the state. > > Hi Barry: Sounds good. In the meantime, I'm simply making a corresponding > _SeqAIJMKL version of all of the functions in question that will just call > the _SeqAIJ version and then call a function that creates an updated MKL > sparse matrix handle. It appears that several of these do not have function > prototypes in any of the .h files (they haven't been needed outside of > aij.c). I assume I can just add PETSC_INTERN prototypes in > src/mat/impls/aij/seq/aij.h (where we have things like prototypes for > MatAssemblyEnd_SeqAIJ)?
I think this is the correct place. If they have static in front of them you will need to remove that also. > Or is there some reason we want to keep these functions more hidden? I could > just declare prototypes in aijmkl.c, but that seems worse in my mind: If > someone changes an interface in aij.c, then changing the prototype in aij.h > is something they might think of, but I don't think they'll necessarily know > to do so in aijmkl.c. > > --Richard > > > > Barry > > Vec also has a state variable and this is used to insure that cached norms > are up to date. > > > > > > > > > --Richard > > > > > > > > > On Jul 28, 2017, at 9:58 PM, Barry Smith <bsm...@mcs.anl.gov> wrote: > > > > > > > > >> On Jul 28, 2017, at 12:50 PM, Richard Tran Mills <rtmi...@anl.gov> wrote: > > >> > > >> Folks, > > >> > > >> I've been debugging my rmills/add-aijmkl branch, and I found that one > > >> bug I had was related to what happens when I am using the MKL sparse > > >> inspector-executor routines inside an AIJMKL matrix and then MatScale is > > >> called on the matrix. MatScale modifies the entries of the matrix, > > >> thereby invalidating the internal representation that the MKL routines > > >> use. Currently, I've set things up so that the MKL representation is > > >> only updated in MatAssemblyEnd_SeqAIJMKL and MatDuplicate_SeqAIJMKL. > > >> Looks like I also need a MatScale_SeqAIJMKL that will update the MKL > > >> representation when needed. Are there other routines that may modify the > > >> matrix entries without invoking MatAssemblyEnd? > > > > > > There is no general "rule"; generally any method that could result in a > > > different nonzero pattern results in calls to the MatAssemblyEnd... but > > > otherwise they likely do not call it. MatDiagonalScale() is a candidate. > > > > > > Barry > > > > > >> > > >> --Richard > > > > > > > > >