[petsc-dev] petscstack resetting

Daniel Lowell redratio1 at gmail.com
Thu Nov 3 16:54:06 CDT 2011


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20111103/dd7202fe/attachment.html>


More information about the petsc-dev mailing list