Matthew Knepley <[email protected]> writes: >> PetscSF cannot currently scatter individual bytes (4 bytes minimum), and >> even if it could, it's a horribly inefficient representation (4 or 8 >> bytes of metadata for each byte of payload). The quick fix at that >> moment was to send in units of size PetscInt (the struct was always >> going to be divisible by that size). >> > > The way I understand it, he never had a single MPI_BYTE, but always a bunch. > Shouldn't that packing handle that case?
In DMPlexDistributeData, your fieldSF is blown up so that every unit has its own metadata (rank, offset). That's a terrible mechanism for moving structs with hundreds of bytes. I would rather not make PetscSF deal with fully-heterogeneous data (where each node can have a different size) because it makes indexing a nightmare (you need a PetscSection or similar just to get in the door; I don't want PetscSF to depend on PetscSection).
pgpL51gx3UzRw.pgp
Description: PGP signature
