[petsc-dev] [petsc-maint #95566] petscstack resetting

Barry Smith bsmith at mcs.anl.gov
Thu Nov 3 17:01:14 CDT 2011


  The stack is pushed on PetscFunctionBegin; and popped on PetscFunctionReturn(0); so if the stack is smaller than it should be that means that there is a PetscFunctionReturn() without its partner PetscFunctionBegin;

   Unfortunately I cannot see from your stack frames where the problem is? Maybe your "custom gpu vector" is missing a begin somewhere?


   Barry

On Nov 3, 2011, at 4:54 PM, Daniel Lowell wrote:

> Hello all,
> 
> 
> In working with petsc-dev in the debugger I have found that petscstack
> popped empty before PETSc returns to the main of the program; i.e.,
> prematurely emptied.
> 
> My version:
> PETSc Dev-Version 3.2.3
> 
> 
> Okay I'll just walk to through the debug output as I found the issue, then
> show where specifically it is being consumed.
> I am running src/snes/examples/tutorials/ex14.
> 
> Using command:
> gdb --args ./ex14 -pc_type none -vec_type seqgpu -mat_no_inode
> 
> That Vec type is a custom gpu vector.
> 
> 
> 
> First I break at SNESSolve:
> 
> 
> Breakpoint 3, SNESSolve (snes=0x8457cb0, b=0x0, x=0x8472a70) at snes.c:2673
> 2673      for (grid=0; grid<snes->gridsequence; grid++) {ierr =
> PetscViewerASCIIPushTab(PETSC_VIEWER_STDOUT_(((PetscObject)snes)->comm));CHKERRQ(ierr);}
> 
> 
> I take a look at the petscstack:
> 
> (gdb) set $ii=0
> (gdb) p petscstack->function[$ii++]
> $35 = 0x1083450 "SNESSolve"
> 
> 
> Yup, it is in there:
> 
> 
> (gdb) bt
> #0  SNESSolve (snes=0x8457cb0, b=0x0, x=0x8472a70) at snes.c:2673
> #1  0x0000000000407765 in main (argc=6, argv=0x7fffffffdfb8) at ex14.c:165
> 
> Also it matches the trace.
> 
> Next I break at SNESSolve_LS:
> 
> 
> Breakpoint 4, SNESSolve_LS (snes=0x8457cb0) at ls.c:142
> 142      SNES_LS            *neP = (SNES_LS*)snes->data;
> 
> 
> 
> Check the stack again:
> 
> 
> (gdb) set $ii=0
> (gdb) p petscstack->function[$ii++]
> $36 = 0x0
> (gdb)
> $37 = 0x0
> 
> 
> What happened? Stack is now empty!
> 
> 
> 
> (gdb) bt
> #0  SNESSolve_LS (snes=0x8457cb0) at ls.c:142
> #1  0x0000000000612df5 in SNESSolve (snes=0x8457cb0, b=0x0, x=0x8472a70) at
> snes.c:2695
> #2  0x0000000000407765 in main (argc=6, argv=0x7fffffffdfb8) at ex14.c:165
> (gdb) c
> Continuing.
> 
> 
> Backtrace shows of course two PETSc frames.
> 
> 
> 
> 
> ...........................................................................
> Something is not right. I've tracked it down to something going on here.
> 
> 
> 
> 
> Breakpoint 16, VecSetType (vec=0x85aea00, method=0x1072069 "seq") at
> vecreg.c:55
> 55      PetscFunctionReturn(0);
> (gdb) bt
> #0  VecSetType (vec=0x85aea00, method=0x1072069 "seq") at vecreg.c:55
> #1  0x00000000004ca5e0 in VecCreate_Standard (v=0x85aea00) at pbvec.c:265
> #2  0x000000000048d3a4 in VecSetType (vec=0x85aea00, method=0x8468d70
> "standard") at vecreg.c:53
> #3  0x00000000005b7571 in DMCreateGlobalVector_DA (da=0x8465cf0,
> g=0x8457ee8) at dadist.c:35
> #4  0x00000000005f2c5f in DMCreateGlobalVector (dm=0x8465cf0,
> vec=0x8457ee8) at dm.c:303
> #5  0x00000000005b7017 in VecDuplicate_MPI_DA (g=0x8472a70, gg=0x8457ee8)
> at dadist.c:17
> #6  0x0000000000481240 in VecDuplicate (v=0x8472a70, newv=0x8457ee8) at
> vector.c:541
> #7  0x0000000000609a58 in SNESSetUp (snes=0x8457cb0) at snes.c:1599
> #8  0x0000000000612b67 in SNESSolve (snes=0x8457cb0, b=0x0, x=0x8472a70) at
> snes.c:2685
> #9  0x0000000000407765 in main (argc=6, argv=0x7fffffffdfb8) at ex14.c:165
> (gdb) p petscstack->currentsize
> $160 = 9
> (gdb) n
> 56    }
> (gdb)
> VecCreate_Standard (v=0x85aea00) at pbvec.c:269
> 269      PetscFunctionReturn(0);
> (gdb) p petscstack->currentsize
> $161 = 8
> (gdb) n
> 270    }
> (gdb) p petscstack->currentsize
> $162 = 7
> (gdb) n
> 
> 
> 
> 
> The stack is being consumed...
> 
> 
> 
> Breakpoint 16, VecSetType (vec=0x85aea00, method=0x8468d70 "standard") at
> vecreg.c:55
> 55      PetscFunctionReturn(0);
> (gdb) p petscstack->currentsize
> $163 = 7
> (gdb) n
> 56    }
> (gdb) p petscstack->currentsize
> $164 = 6
> (gdb) n
> DMCreateGlobalVector_DA (da=0x8465cf0, g=0x8457ee8) at dadist.c:36
> 36      ierr = VecSetFromOptions(*g);CHKERRQ(ierr);
> (gdb) p petscstack->currentsize
> $165 = 6
> (gdb) n
> 
> Breakpoint 16, VecSetType (vec=0x85aea00, method=0x7fffffffc9e0 "seqgpu")
> at vecreg.c:55
> 55      PetscFunctionReturn(0);
> (gdb) p petscstack->currentsize
> $166 = 5
> (gdb) n
> 56    }
> (gdb) p petscstack->currentsize
> $167 = 4
> (gdb) n
> VecSetTypeFromOptions_Private (vec=0x85aea00) at vector.c:1382
> 1382      PetscFunctionReturn(0);
> (gdb) p petscstack->currentsize
> $168 = 4
> (gdb) n
> 1383    }
> (gdb) p petscstack->currentsize
> $169 = 3
> (gdb) n
> VecSetFromOptions (vec=0x85aea00) at vector.c:1418
> 1418        if (vec->ops->setfromoptions) {
> (gdb) p petscstack->currentsize
> $170 = 3
> (gdb) n
> 1423        ierr =
> PetscObjectProcessOptionsHandlers((PetscObject)vec);CHKERRQ(ierr);
> (gdb) p petscstack->currentsize
> $171 = 3
> (gdb) n
> 1424      ierr = PetscOptionsEnd();CHKERRQ(ierr);
> (gdb)
> 1413      ierr = PetscObjectOptionsBegin((PetscObject)vec);CHKERRQ(ierr);
> (gdb)
> 1424      ierr = PetscOptionsEnd();CHKERRQ(ierr);
> (gdb)
> 1426      ierr = VecViewFromOptions(vec,
> ((PetscObject)vec)->name);CHKERRQ(ierr);
> (gdb)
> 1427      PetscFunctionReturn(0);
> (gdb)
> 1428    }
> (gdb)
> DMCreateGlobalVector_DA (da=0x8465cf0, g=0x8457ee8) at dadist.c:37
> 37      ierr =
> PetscObjectCompose((PetscObject)*g,"DM",(PetscObject)da);CHKERRQ(ierr);
> (gdb) p petscstack->currentsize
> $172 = 2
> (gdb) n
> 38      ierr = VecSetLocalToGlobalMapping(*g,da->ltogmap);CHKERRQ(ierr);
> (gdb)
> 39      ierr =
> VecSetLocalToGlobalMappingBlock(*g,da->ltogmapb);CHKERRQ(ierr);
> (gdb)
> 40      ierr = VecSetBlockSize(*g,dd->w);CHKERRQ(ierr);
> (gdb)
> 41      ierr =
> VecSetOperation(*g,VECOP_VIEW,(void(*)(void))VecView_MPI_DA);CHKERRQ(ierr);
> (gdb)
> 42      ierr =
> VecSetOperation(*g,VECOP_LOAD,(void(*)(void))VecLoad_Default_DA);CHKERRQ(ierr);
> (gdb)
> 43      ierr =
> VecSetOperation(*g,VECOP_DUPLICATE,(void(*)(void))VecDuplicate_MPI_DA);CHKERRQ(ierr);
> (gdb)
> 44      PetscFunctionReturn(0);
> (gdb)
> 45    }
> (gdb) p petscstack->currentsize
> $173 = 1
> (gdb) n
> DMCreateGlobalVector (dm=0x8465cf0, vec=0x8457ee8) at dm.c:304
> 304      PetscFunctionReturn(0);
> (gdb) p petscstack->currentsize
> $174 = 1
> (gdb) n
> 305    }
> (gdb) p petscstack->currentsize
> $175 = 0
> 
> 
> 
> The petscstack is fully used up at this point, however...
> 
> (gdb) bt
> #0  DMCreateGlobalVector (dm=0x8465cf0, vec=0x8457ee8) at dm.c:305
> #1  0x00000000005b7017 in VecDuplicate_MPI_DA (g=0x8472a70, gg=0x8457ee8)
> at dadist.c:17
> #2  0x0000000000481240 in VecDuplicate (v=0x8472a70, newv=0x8457ee8) at
> vector.c:541
> #3  0x0000000000609a58 in SNESSetUp (snes=0x8457cb0) at snes.c:1599
> #4  0x0000000000612b67 in SNESSolve (snes=0x8457cb0, b=0x0, x=0x8472a70) at
> snes.c:2685
> #5  0x0000000000407765 in main (argc=6, argv=0x7fffffffdfb8) at ex14.c:165
> (gdb)
> 
> 
> 
> 
> 
> 
> At first I thought it was due to the fact I modified ex14 at line 108 and
> inserted:
>  ierr = VecSetFromOptions(x);CHKERRQ(ierr);
> 
> And th petsc stack is being consumed prematurely here just as it is above.
> However since this is also happening in SNESSolve...
> 
> VecCUSP and VecPThreads I believe are activated through configuration
> options(i.e., preprocessing) so I'm not sure if anyone has hit this issue.
> The gpu vector type I'm implementing is activated as command line option.
> Has anyone else encountered this issue?
> 
> Any insight would be appreciated.
> 
> 
> 
> 
> Thanks,
> 
> Daniel Lowell
> 




More information about the petsc-dev mailing list