begin operation that fetches values from root and updates atomically by applying operation using my leaf value, to be completed with PetscSFFetchAndOpEnd()


#include "petscsf.h" 
PetscErrorCode PetscSFFetchAndOpBegin(PetscSF sf,MPI_Datatype unit,void *rootdata,const void *leafdata,void *leafupdate,MPI_Op op)

Input Arguments

sf - star forest
unit - data type
leafdata - leaf values to use in reduction
op - operation to use for reduction

Output Arguments

rootdata - root values to be updated, input state is seen by first process to perform an update
leafupdate - state at each leaf's respective root immediately prior to my atomic update

Level: advanced


The update is only atomic at the granularity provided by the hardware. Different roots referenced by the same process might be updated in a different order. Furthermore, if a composite type is used for the unit datatype, atomicity is not guaranteed across the whole vertex. Therefore, this function is mostly only used with primitive types such as integers.

See Also

PetscSFComputeDegreeBegin(), PetscSFReduceBegin(), PetscSFSetGraph()