[petsc-dev] [petsc-users] Is PetscViewerBinary special?

Barry Smith bsmith at mcs.anl.gov
Fri Jan 30 13:23:18 CST 2015


> On Jan 30, 2015, at 8:53 AM, Dave May <dave.mayhem23 at gmail.com> wrote:
> 
> Hi Barry,
> 
> Okay - fair enough. Almost of all the code would be re-used with my suggestion.
> 
> I hope you don't mind, I moved this discussion to the dev list as I wanted to propose a solution.
> 
> What about this as an alternative?
> 
> [1] I add PetscViewerSetFromOptions_Binary()
> 
> [2] I add a setupcalled flag into PetscViewer_Binary
> 
> [3] I modify PetscViewerFileSetName_Binary() to just set the file name string and defer actually opening of the file to within in a function PetscViewerSetUp_Binary(). 
> Depending on whether mpiio is set we call (essentially) the current contents of PetscViewerFileSetName_MPIIO() or PetscViewerFileSetName_Binary(). 
> However the parsing of options -viewer_binary_skip_info etc would be moved into PetscViewerSetFromOptions_Binary()
> 
> [4] I modify the PetscViewerDestory_Binary() such that it calls the appropriate functions for mpiio or non-mpiio and remove PetscObjectComposeFunction() from PetscViewerBinarySetMPIIO_Binary()
> 

   You also need to add a function call interface for turning on/off use of MPIIO.  Perhaps PetscViewerBinarySetUseMPIIO(viewer,PetscBool) and a getter.


> [5] PetscViewerSetUp_Binary() would be called at the end of PetscViewerSetFromOptions_Binary(),

   No it should not be called here. User may want to continue to do stuff here.

> or at the beginning of any of the getters associated with PetscViewerBinary, e.g. PetscViewerBinaryGetDescriptor()


> and at the beginning of PetscViewerBinaryWrite() PetscViewerBinaryRead().
> 
> [6] PetscViewerBinaryOpen() would obviously call PetscViewerSetFromOptions_Binary().
> 
> Or does this approach sound like a giant hack?
> Probably a new operation for the PetscViewer (setup) would be a nicer way to go.

   This sounds reasonable to try. Not worth yet adding a setup for all viewers.

  Barry

> 
> I can put this in branch if you think it is worth while pursuing the approach I propose.
> 
> Cheers
>   Dave
> 
> On 30 January 2015 at 14:56, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
>   Dave,
> 
>    I did the mpiio hack originally and yes it is very ad hoc and could do with a good reorganization. I am fine with accepting a branch that treats the MPIIO one as a completely different class; the only reason not to do this is if  both classes have essentially the same code but no reuse between them.
> 
>    Barry
> 
> > On Jan 30, 2015, at 7:51 AM, Dave May <dave.mayhem23 at gmail.com> wrote:
> >
> > Thanks Matt.
> >
> > Given the PETSc way of doing things, I believe the following should be possible:
> > [1] attach an option prefix to a viewer
> > [2] skip the header on some binary viewers
> > [3] use mpiio for some binary viewers, but not all of them.
> >
> > However, it doesn't appear to be completely simple to allow this behaviour.
> >
> > For instance, replacing
> >     ierr = PetscOptionsGetBool(NULL,"-viewer_binary_mpiio",&useMPIIO,NULL);CHKERRQ(ierr);
> > with
> >     ierr = PetscOptionsGetBool(((PetscObject)viewer)->prefix,"-viewer_binary_mpiio",&useMPIIO,NULL);CHKERRQ(ierr);
> > won't work as an option prefix will never have been set.
> >
> > If I was to add a PetscViewerSetFromOptions_Binary(), I would have to ensure that PetscViewerSetFromOptions() was called before PetscViewerFileSetName() was called as the latter this triggers a swap of the functions used to open binary file, e.g. from PetscViewerFileSetName_Binary() to PetscViewerFileSetName_MPIIO()
> >
> > Would it be simpler and cleaner to have MPIIO be defined as an independent implementation which was a sub-class of the binary class?
> >
> > Then we could use command line flags to switch between implementations at runtime
> >   -xxx_viewer_type binary
> > versus
> >   -xxx_viewer_type mpiio
> > rather than having to use
> >   -xxx_viewer_type binary -viewer_binary_mpiio
> > which has obvious short comings like forcing all binary viewers, independent of the prefix to use mpiio. It would also allow the PetscViewer object to be used in a manner which follows the standard PETSc pattern of: XXCreate(), XXSetOptionsPrefix(), XXSetType(), XXSetFromOptions().
> >
> > Then we could do this
> >   PetscViewerCreate()
> >   PetscViewerSetOptionsPrefix()
> >   PetscViewerSetType()
> >   PetscViewerFileSetMode()
> >   PetscViewerBinarySetSkipHeader()
> >   PetscViewerFileSetName()
> >   PetscViewerSetFromOptions()
> > and it wouldn't matter which order SetName(), BinarySkipHeader() etc were called.
> >
> > What do people think?
> >
> >
> > Cheers
> >   Dave
> >
> >
> >
> >
> >
> > On 30 January 2015 at 13:56, Matthew Knepley <knepley at gmail.com> wrote:
> > On Fri, Jan 30, 2015 at 2:06 AM, Dave May <dave.mayhem23 at gmail.com> wrote:
> > Hello,
> >
> > I've noticed the create function PetscViewerCreate_Binary() doesn't appear to be using the options prefix attached to the PetscViewer.
> > Specifically, I see on line 1276 of
> >   petsc-3.5.2/src/sys/classes/viewer/impls/binary/binv.c
> > the following
> >   ierr = PetscOptionsGetBool(NULL,"-viewer_binary_mpiio",&useMPIIO,NULL);CHKERRQ(ierr);
> >
> > Is this an oversight or something intentional?
> >
> > This is an oversight.
> >
> >   Matt
> >
> > Are PetscViewers in general behaving such that they cannot be configured independently of each other if
> > PetscViewerSetOptionsPrefix() and PetscViewerSetFromOptions() are called?
> >
> >
> > Cheers
> >   Dave
> >
> >
> >
> > --
> > 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
> >
> 
> 




More information about the petsc-dev mailing list