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
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
> For more safety (and of course less performance) we could :
> - add a parameter that cause this tag database to sync. across all
> - add a parameter that turns a check for every send/receive, if the
> 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)