On Tue, Jun 26, 2018 at 2:54 AM Pierre Jolivet <[email protected]> wrote:
> Hello, > The fix suggested by Mark resolves the error: > #define GAMG_HASH(key) (PetscInt)((((PetscInt64)7)*(PetscInt64)key)% > (PetscInt64)a_tab->size) > > I’m guessing this is similar to the fix suggested by Barry: > #define GAMG_HASH(key) ((((PetscInt64)7)*key)%a_tab->size) > > FWIW, my problem has around 1.2B d.o.f., so if the key is something like a > column or row index, that could explain the error when doing 7*key > Thanks, and yep the integer rolls over. (unsigned PetscInt) should work also. > > Thanks, > Pierre > > On 24 Jun 2018, at 11:28 PM, Smith, Barry F. <[email protected]> wrote: > > > Pierre, > > Can you confirm if my suggested fix resolved the error message or not? > If so, we'll add it to the maint branch. > > Thanks > > Barry > > > > https://stackoverflow.com/questions/11720656/modulo-operation-with-negative-numbers > > > > On Jun 24, 2018, at 4:19 PM, Mark Adams <[email protected]> wrote: > > > > On Sun, Jun 24, 2018 at 2:09 PM Smith, Barry F. <[email protected]> > wrote: > > > On Jun 24, 2018, at 11:15 AM, Mark Adams <[email protected]> wrote: > > First, -pc_gamg_threshold 0.8 is crazy. 0.08 is very high. probably best > to start with 0. > > This threshold will delete all of your edges in the coarsening graph, > probably, and GAMG will switch to a one level solve (silently although > -info will tell you). > > And yes, this looks like a 64 bit indices problem, we have: > > #define GAMG_HASH(key) ((((PetscInt)7)*key)%a_tab->size) > > We should probably cast everything to (long long) or (unsigned PetscInt) I > guess ... I'm not sure how this should be done exactly. Any ideas from the > peanut gallery? > > > Mark, > > It should only be changed if we know the exact mechanism that causes > the failure. It is not obvious to me that just changing > ((((PetscInt)7)*key)%a_tab->size) to ((((PetscInt64)7)*key)%a_tab->size) > should matter. > > If 7*key > 2B then you can get a negative number and %a_tab->size will > still be a negative number, which triggers: > > ksp/pc/impls/gamg/agg.c: if (flid < 0) > SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Cannot find gid1 in table”); > > which is the second error that Pierre gets. I don't fully understand the > first error but a messed up hash table is certainly a possibility. > > And maybe we should cast the hell out of it to be safe: > > #define GAMG_HASH(key) > (PetscInt)((((PetscInt64)7)*(PetscInt64)key)%(PetscInt64)a_tab->size) > > I am a bit puzzled that this works. I would think this would be more of a > problem but maybe everyone just uses 64 bit ints. I have dealt with this > many times and I am puzzled that I left it in a state that looks so wrong > to me now. Perhaps Pierre's complicated thing is causing this somehow. > > > > Barry > > > > > On Sun, Jun 24, 2018 at 2:34 AM Pierre Jolivet <[email protected]> > wrote: > Hello, > Any ideas on how to debug this? > [406]PETSC ERROR: key 328214936 not found in table > [406]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html > for trouble shooting. > [406]PETSC ERROR: Petsc Development GIT revision: v3.9.2-603-gceafe64 GIT > Date: 2018-06-10 12:46:16 -0500 > [406]PETSC ERROR: > /ccc/work/cont003/rndm/rndm/FreeFem-sources/src/mpi/FreeFem++-mpi on a > arch-linux2-c-debug-bullxmpi named curie2698 by jolivetp Sun Jun 24 > 07:06:07 2018 > [406]PETSC ERROR: Configure options --with-scalar-type=real > --with-hypre-dir=arch-linux2-c-opt-bullxmpi > --with-metis-dir=arch-linux2-c-opt-bullxmpi > --with-mumps-dir=arch-linux2-c-opt-bullxmpi --with-mkl_cpardiso=1 > --with-mkl_pardiso=1 --with-parmetis-dir=arch-linux2-c-opt-bullxmpi > --with-ptscotch-dir=arch-linux2-c-opt-bullxmpi > --with-sowing-dir=arch-linux2-c-opt-bullxmpi > --with-blacs-include=/ccc/products/mkl-18.0.1.163/default/ > 18.0.1.163/mkl/include > --with-blacs-lib=/ccc/products/mkl-18.0.1.163/default/ > 18.0.1.163/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so > --with-blaslapack-dir=/ccc/products/mkl-18.0.1.163/default/ > 18.0.1.163/mkl/lib/intel64 --with-x=0 --with-debugging=1 > --with-errorchecking=1 > --with-mkl_pardiso-dir=/ccc/products/mkl-18.0.1.163/default/18.0.1.163/mkl > --with-mkl_cpardiso-dir=/ccc/products/mkl-18.0.1.163/default/ > 18.0.1.163/mkl > --with-scalapack-include=/ccc/products/mkl-18.0.1.163/default/ > 18.0.1.163/mkl/include > --with-scalapack-lib="[/ccc/products/mkl-18.0.1.163/default/ > 18.0.1.163/mkl/lib/intel64/libmkl_scalapack_lp64.so,/ccc/products/mkl-18.0.1.163/default/18.0.1.163/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so]" > --with-fortran-bindings=0 PETSC_ARCH=arch-linux2-c-debug-bullxmpi > [406]PETSC ERROR: #1 PCGAMGHashTableFind() line 106 in > /ccc/work/cont003/rndm/rndm/petsc/include/petsc/private/pcgamgimpl.h > [406]PETSC ERROR: #2 smoothAggs() line 526 in > /ccc/work/cont003/rndm/rndm/petsc/src/ksp/pc/impls/gamg/agg.c > [406]PETSC ERROR: #3 PCGAMGCoarsen_AGG() line 970 in > /ccc/work/cont003/rndm/rndm/petsc/src/ksp/pc/impls/gamg/agg.c > [406]PETSC ERROR: #4 PCSetUp_GAMG() line 518 in > /ccc/work/cont003/rndm/rndm/petsc/src/ksp/pc/impls/gamg/gamg.c > [406]PETSC ERROR: #5 PCSetUp() line 932 in > /ccc/work/cont003/rndm/rndm/petsc/src/ksp/pc/interface/precon.c > [406]PETSC ERROR: #6 KSPSetUp() line 381 in > /ccc/work/cont003/rndm/rndm/petsc/src/ksp/ksp/interface/itfunc.c > > For smaller problems, this works fine. Should I compile using 64 bit > indices? > I’m using -pc_type gamg -pc_gamg_threshold 0.8 -pc_gamg_agg_nsmooths 1 > -pc_gamg_sym_graph true -pc_gamg_square_graph 10 > > Thanks, > Pierre > > > >
