Matt,
How difficult would it be to rework DMPLEX to allow the use of VecGhost? We have performance problems with GPUs with simple DMNETWORK models because the code spends more time uselessly copying the local part of the vector to another vector in global to local and local to global; more than 1/2 the time of the total simulation.
Firedrake already does this because they "vec ghost" their vectors by default. Here is what you need:
When you create the PetscSection, by default it orders the unknowns according to the default point numbering. This
is what causes the ghost unknowns to be mixed in with the local unknowns. However, PetscSection allows you to set
a point permutation
This determines the order of dogs by iterating through points in this permutation, and you can put all shared points at the end.