[petsc-users] Valgrind Errors with KSPSolve
Phil Tooley
phil.tooley at sheffield.ac.uk
Fri Oct 26 09:46:57 CDT 2018
Thanks Matt,
I got it figured out. As with a lot of uninitialised value bugs it
started a long way away (in a scalar value) and propagated through.
What is slightly bizarre is that valgrind didn't pick it up where I
define and first use it, even with --track-origins=yes.
Thank you for your help.
Phil
On 26/10/2018 15:01, Matthew Knepley wrote:
> On Fri, Oct 26, 2018 at 9:54 AM Phil Tooley
> <phil.tooley at sheffield.ac.uk <mailto:phil.tooley at sheffield.ac.uk>> wrote:
>
> Hi All,
>
> Running valgrind over my code reveals a huge number (it stops
> collecting
> after 1e6) of uninitialised value errors occuring the KSPSolve
> routine.
> These don't occur with the ksp example scripts but I can't figure out
> what I am doing wrong in my code. My code works as expected. The
> same
> errors occur with both version 3.9.4 and 3.10.0.
>
> I am developing in c++ and using smart pointers to allow
> autodestruction
> of Petsc objects, but I don't think this should have any side
> effects.
>
>
> From casual inspection, it sure seems like the matrix you are passing
> KSP has unitialized
> values.
>
> <Editorial comment>I used smart pointers for years, and work on
> packages that had smart
> pointers. In almost every case, we ended up ripping out the smart
> pointers and going with
> explicit destruction, the amount of work they save never outweighed
> the problems with
> detecting errors</Editorial comment>
>
> Thanks,
>
> Matt
>
> Thanks,
>
> Matt
>
>
> I do the ksp setup as:
>
> KSP_unique m_ksp = create_unique_ksp();
>
> perr = KSPCreate(m_comm, m_ksp.get());CHKERRABORT(m_comm, perr);
>
> perr = KSPSetOperators(*m_ksp, *normmat, *normmat);CHKERRABORT(m_comm,
> perr);
> perr = KSPSetUp(*m_ksp);CHKERRABORT(m_comm, perr);
>
> perr = KSPSetFromOptions(*m_ksp);CHKERRABORT(m_comm, perr);
> perr = KSPSetUp(*m_ksp);CHKERRABORT(m_comm, perr);
>
> perr = KSPSolve(*m_ksp, *m_rhs, *m_delta);CHKERRABORT(m_comm, perr);
>
> Where normmat is a smart pointer to a previously created Mat
> object and
> m_rhs and m_delta are smart pointers to Vec objects which are
> initialised using MatCreateVecs on normmat.
>
> I am using MPICH to provide a (hopefully) valgrind clean MPI
> implementation.
>
> Any insights are appreciated.
>
> Many Thanks
>
> Phil Tooley
>
> Typical errors are as follows:
>
> ==7368== Conditional jump or move depends on uninitialised value(s)
> ==7368== at 0x58894EE: PetscAbsScalar(double) (petscmath.h:389)
> ==7368== by 0x5891702: MatLUFactorNumeric_SeqAIJ (aijfact.c:553)
> ==7368== by 0x5406B83: MatLUFactorNumeric (matrix.c:3031)
> ==7368== by 0x609F317: PCSetUp_ILU(_p_PC*) (ilu.c:176)
> ==7368== by 0x6192D4F: PCSetUp (precon.c:923)
> ==7368== by 0x62EAE56: KSPSetUp (itfunc.c:381)
> ==7368== by 0x60190BB: PCSetUpOnBlocks_BJacobi_Singleblock(_p_PC*)
> (bjacobi.c:621)
> ==7368== by 0x619352C: PCSetUpOnBlocks (precon.c:954)
> ==7368== by 0x62E8F0A: KSPSetUpOnBlocks (itfunc.c:213)
> ==7368== by 0x62ECCB1: KSPSolve (itfunc.c:613)
> ==7368== by 0x10FCDD: Elastic::innerstep(double) (in
> /home/telemin/repos/pfire_petsc/bin/pfire)
> ==7368== by 0x110600: Elastic::innerloop(int) (in
> /home/telemin/repos/pfire_petsc/bin/pfire)
> ==7368==
> ==7368== Conditional jump or move depends on uninitialised value(s)
> ==7368== at 0x58894EE: PetscAbsScalar(double) (petscmath.h:389)
> ==7368== by 0x588A75F: MatPivotCheck_none(_p_Mat*, _p_Mat*,
> MatFactorInfo const*, FactorShiftCtx*, int) (matimpl.h:704)
> ==7368== by 0x588AD6E: MatPivotCheck(_p_Mat*, _p_Mat*,
> MatFactorInfo
> const*, FactorShiftCtx*, int) (matimpl.h:727)
> ==7368== by 0x589177D: MatLUFactorNumeric_SeqAIJ (aijfact.c:558)
> ==7368== by 0x5406B83: MatLUFactorNumeric (matrix.c:3031)
> ==7368== by 0x609F317: PCSetUp_ILU(_p_PC*) (ilu.c:176)
> ==7368== by 0x6192D4F: PCSetUp (precon.c:923)
> ==7368== by 0x62EAE56: KSPSetUp (itfunc.c:381)
> ==7368== by 0x60190BB: PCSetUpOnBlocks_BJacobi_Singleblock(_p_PC*)
> (bjacobi.c:621)
> ==7368== by 0x619352C: PCSetUpOnBlocks (precon.c:954)
> ==7368== by 0x62E8F0A: KSPSetUpOnBlocks (itfunc.c:213)
> ==7368== by 0x62ECCB1: KSPSolve (itfunc.c:613)
> ==7368==
> ==7368== Conditional jump or move depends on uninitialised value(s)
> ==7368== at 0x588A76D: MatPivotCheck_none(_p_Mat*, _p_Mat*,
> MatFactorInfo const*, FactorShiftCtx*, int) (matimpl.h:704)
> ==7368== by 0x588AD6E: MatPivotCheck(_p_Mat*, _p_Mat*,
> MatFactorInfo
> const*, FactorShiftCtx*, int) (matimpl.h:727)
> ==7368== by 0x589177D: MatLUFactorNumeric_SeqAIJ (aijfact.c:558)
> ==7368== by 0x5406B83: MatLUFactorNumeric (matrix.c:3031)
> ==7368== by 0x609F317: PCSetUp_ILU(_p_PC*) (ilu.c:176)
> ==7368== by 0x6192D4F: PCSetUp (precon.c:923)
> ==7368== by 0x62EAE56: KSPSetUp (itfunc.c:381)
> ==7368== by 0x60190BB: PCSetUpOnBlocks_BJacobi_Singleblock(_p_PC*)
> (bjacobi.c:621)
> ==7368== by 0x619352C: PCSetUpOnBlocks (precon.c:954)
> ==7368== by 0x62E8F0A: KSPSetUpOnBlocks (itfunc.c:213)
> ==7368== by 0x62ECCB1: KSPSolve (itfunc.c:613)
> ==7368== by 0x10FCDD: Elastic::innerstep(double) (in
> /home/telemin/repos/pfire_petsc/bin/pfire)
> ==7368==
> ==7368== Conditional jump or move depends on uninitialised value(s)
> ==7368== at 0x58894EE: PetscAbsScalar(double) (petscmath.h:389)
> ==7368== by 0x5889528: PetscIsNanScalar(double) (petscmath.h:674)
> ==7368== by 0x588A784: MatPivotCheck_none(_p_Mat*, _p_Mat*,
> MatFactorInfo const*, FactorShiftCtx*, int) (matimpl.h:704)
> ==7368== by 0x588AD6E: MatPivotCheck(_p_Mat*, _p_Mat*,
> MatFactorInfo
> const*, FactorShiftCtx*, int) (matimpl.h:727)
> ==7368== by 0x589177D: MatLUFactorNumeric_SeqAIJ (aijfact.c:558)
> ==7368== by 0x5406B83: MatLUFactorNumeric (matrix.c:3031)
> ==7368== by 0x609F317: PCSetUp_ILU(_p_PC*) (ilu.c:176)
> ==7368== by 0x6192D4F: PCSetUp (precon.c:923)
> ==7368== by 0x62EAE56: KSPSetUp (itfunc.c:381)
> ==7368== by 0x60190BB: PCSetUpOnBlocks_BJacobi_Singleblock(_p_PC*)
> (bjacobi.c:621)
> ==7368== by 0x619352C: PCSetUpOnBlocks (precon.c:954)
> ==7368== by 0x62E8F0A: KSPSetUpOnBlocks (itfunc.c:213)
> ==7368==
> ==7368== Conditional jump or move depends on uninitialised value(s)
> ==7368== at 0x4FDACE3: std::isnan(double) (cmath:627)
> ==7368== by 0x4FDAC8D: PetscIsNanReal (mathinf.c:92)
> ==7368== by 0x588952D: PetscIsNanScalar(double) (petscmath.h:674)
> ==7368== by 0x588A784: MatPivotCheck_none(_p_Mat*, _p_Mat*,
> MatFactorInfo const*, FactorShiftCtx*, int) (matimpl.h:704)
> ==7368== by 0x588AD6E: MatPivotCheck(_p_Mat*, _p_Mat*,
> MatFactorInfo
> const*, FactorShiftCtx*, int) (matimpl.h:727)
> ==7368== by 0x589177D: MatLUFactorNumeric_SeqAIJ (aijfact.c:558)
> ==7368== by 0x5406B83: MatLUFactorNumeric (matrix.c:3031)
> ==7368== by 0x609F317: PCSetUp_ILU(_p_PC*) (ilu.c:176)
> ==7368== by 0x6192D4F: PCSetUp (precon.c:923)
> ==7368== by 0x62EAE56: KSPSetUp (itfunc.c:381)
> ==7368== by 0x60190BB: PCSetUpOnBlocks_BJacobi_Singleblock(_p_PC*)
> (bjacobi.c:621)
> ==7368== by 0x619352C: PCSetUpOnBlocks (precon.c:954)
>
> --
> Phil Tooley
> Research Software Engineering
> University of Sheffield
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/
> <http://www.cse.buffalo.edu/~knepley/>
--
Phil Tooley
Research Software Engineering
University of Sheffield
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181026/8c3d4fb5/attachment-0001.html>
More information about the petsc-users
mailing list