[petsc-dev] synchronized printing, singletons, and jumbled GAMG/BJacobi output

Barry Smith bsmith at mcs.anl.gov
Sat May 25 19:12:06 CDT 2013


On May 24, 2013, at 6:52 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote:

> The output from '-pc_type gamg -ksp_view' in parallel is all jumbled up
> because every process prints on its own singleton (due to
> !same_local_solves), but the singletons aren't synchronized.
> 
> I think we should:
> 
> 1. Make BJacobi only print from rank 0.  We can have a verbose output
>  flag to print the O(P) data in case of different solvers in different
>  subdomains, but I think it can't be on by default.  Especially in the
>  case of GAMG, there isn't anything interesting from the others
>  because they have zero degrees of freedom.  I would like to apply
>  this change to 'maint', the other points below would be developed on
>  'master'.

   It would be confusing if it only prints rank 0 when the others are also interesting. I suggest it gather statistics from all the processes and print a summary.

  Barry

> 
> 2. Buffer and then synchronize on PetscViewerRestoreSingleton.  This
>  requires adding PetscViewerASCIISynchronizedVPrintf so that normal
>  PetscViewerASCIIPrintf on the singleton viewer will write to a
>  string.
> 
> 3. PetscViewerASCIISynchronizedPrintf is currently messy because it
>  writes eagerly on rank 0.  Is that behavior important?  We need some
>  way to make rank 0 of the singleton still write to a buffer and I'd
>  rather not convolute the logic further.  Is it okay if I make
>  synchronized writes always go to a buffer (even from rank 0)?  (This
>  means that in case of a crash part way through a synchronized write,
>  we'll have less output.  I don't see any other disadvantages.)
> 
> 4. We have two incompatible (private) definitions of the _PrintfQueue
>  structure.  I would like to consolidate by just using a
>  PetscSegBuffer in both places.
> 
> src/sys/fileio/mprint.h:
> 
> struct _PrintfQueue {
> char        *string;
> int         size;
> PrintfQueue next;
> };
> 
> src/sys/classes/viewer/impls/vu/petscvu.c:
> 
> struct _PrintfQueue {
> char        string[QUEUESTRINGSIZE];
> PrintfQueue next;
> };




More information about the petsc-dev mailing list