[petsc-dev] PetscSplitReduction

Barry Smith bsmith at mcs.anl.gov
Wed Sep 10 17:32:02 CDT 2014


  Jose,

   Start by making PetscSplitReduction  an opaque pointer to the actual struct.

   For example 

typedef struct _n_PetscSplitReduction *PetscSplitReduction; 

goes in the public include  include/petscsys.h

typedef struct {
-  MPI_Comm    comm;
-  MPI_Request request;
-  PetscBool   async;
-  PetscScalar *lvalues;     /* this are the reduced values before call to MPI_Allreduce() */
-  PetscScalar *gvalues;     /* values after call to MPI_Allreduce() */
-  void        **invecs;     /* for debugging only, vector/memory used with each op */
-  PetscInt    *reducetype;  /* is particular value to be summed or maxed? */
-  SRState     state;        /* are we calling xxxBegin() or xxxEnd()? */
-  PetscInt    maxops;       /* total amount of space we have for requests */
-  PetscInt    numopsbegin;  /* number of requests that have been queued in */
-  PetscInt    numopsend;    /* number of requests that have been gotten by user */
-} _n_PetscSplitReduction;

goes in the private include  include/petsc-private/petscimpl.h

Then you need to decide how to access the material inside the struct. 

1) Do you want all PETSc users to be able to access stuff in the struct and modify it or 

2) Do you want a few places in SLEPc to take advantage of the PetscSplitReduction abilities? 

  I am guessing you want 2) in that case just have your SLEPc code include the petscimpl.h and access the structure directly. This is what we do in, for example VecDotBegin() etc 

  If you want 1) then you have a lot of work ahead of you because you need to abstract all the operations you want to do on PetscSplitReduction and provide methods to do those operations and then call those operations from SLEPc. 

  Basically your “Jed sin” (which is far worse than a cardinal sin) was putting this private data structure directly in the public interface of PETSc, i.e. in petscsys.h

  Barry




On Sep 10, 2014, at 8:43 AM, Jose E. Roman <jroman at dsic.upv.es> wrote:

> 
> El 09/07/2014, a las 23:39, Jed Brown escribió:
> 
>> Satish Balay <balay at mcs.anl.gov> writes:
>> 
>>> merged to maint now.
>> 
>> Satish, we can't have this non-namespaced stuff in 'maint' (it really
>> can break user code).  The struct definition should really be private
>> (so if Jose needs to access fields, we need to write interface
>> functions).
>> 
>> I'm sorry about my radio silence on this issue.  The travel has been
>> more disruptive than usual for having time to write code.
> 
> 
> This is still not done. Please tell me how you would like to have it done and I will do it.
> 
> My request was to make PetscSplitReductionGet, PetscSplitReductionEnd, PetscSplitReductionExtend public.
> 
> My initial commit was: https://bitbucket.org/petsc/petsc/commits/e8058a0 (branch jose/split-reduction).
> 
> Thanks.
> Jose
> 
> 
> 




More information about the petsc-dev mailing list