On Aug 17, 2007, at 8:22 AM, Sven Stork wrote:
What's about this. Every component choose its own tag independent
from the
others. Before a component can use the tag it must register with
its full
name and the tag at a small (process intern) database. If 2
components try to
register the same tag we emit a warning, terminate the
processes, ... .
My knee-jerk reaction to this is: no! How could we ship code that
might abort?!
But upon further reflection, I'm guessing that you assume that we
would catch such tag conflicts during QA testing and therefore only
ship components that use distinct tags. That might be tolerable.
However, it does raise another place where we would have to have
central coordination between all MPI processes -- something we've
actively been trying to shed for scalability reasons...
If 2 components (CompA and CompB) want to register the same tag and
we assume
that process A loads _only_ CompA while processes B loads _only_
CompB than
both components will be loaded without any error.
I assume that it's rather unusual that CompA send a message to
process B as
there is no counter component. But there is still some probability.
*Assumedly* we would never ship components that use the same tag (per
above), but it doesn't address the possibility of 3rd party
components, etc.
For more safety (and of course less performance) we could :
- add a parameter that cause this tag database to sync. across all
processes.
- add a parameter that turns a check for every send/receive, if the
specified
tag has been used or not
Another thought (that was long-ago discarded) would be to use string
tags. If you follow the prefix rule, it's easy to guarantee that
there won't be conflicts. But:
a) this is the moral equivalent of the modex -- which currently
utilizes the one-time blast-o-gram from the HNP during MPI_INIT to do
all the transport
b) to use this for regular RML/OOB/RSL/whatever communication in the
MPI layer would be rather expensive (which is why it was discarded)
--
Jeff Squyres
Cisco Systems