itaps-parallel iMeshP_getNumOfTypeAll and iMeshP_getNumOfTopoAll
Jason Kraftcheck
kraftche at cae.wisc.edu
Mon Nov 10 16:15:09 CST 2008
iMeshP_getNumOfTypeAll and iMeshP_getNumOfTopoAll are too general to
implement efficiently. And the behavior is unclear. Consider the following
case:
- 2 processors
- a vertex is on the interface, and therefore has a copy on each
- in one proc, the 'entity_set_handle' does not contain the vertex
- on the other, it does
Is this vertex counted? Either way, it is not possible for every processor
to send just a count. It is necessary to gather data from each processor
for each entity for which that processor has a copy to determine if/when to
count vertices like the above. Further, it isn't even possible to provide
an optimized case for the root set (e.g. count owned entities on each proc)
because there's no guarantee that because the root set is passed in one
processor that it is on any other processor.
This seems like yet another case of an ill-considered and overly-complex
API. If the intention is to get global counts (e.g. entity_set_handle ==
root_set), then I think we should just drop the entity_set_handle argument.
If there is a realistic case for having the entity_set_handle argument, then
a) We should have functions both with and without it so that the without
case doesn't incur the horrible performance penalty of the 'with' case (or
alternately mandate that if it is the root set on one proc, it must be the
root set on all procs.)
b) It would be nice if whomever does have a use case for the 'with' case
share it, so that we have some basis upon which to decide the 'all vs any'
thing.
- jason
More information about the itaps-parallel
mailing list