I had a user ask this, its not a very practical question but I am
curious.

OMPI uses a 'fast' network if its available. (IB, GM, etc) I also
infer that for process in the same SMP nodes the sm (shared memory)
btl is used, even if the job has more than one node given to it? The
real question is what happens if a job is given three nodes, two have
IB adapters and all have ethernet. Will the entire job use TCP for
process on different nodes and shared memory inner node? Or will the
two that have ib connections use ib to communicate and only use TCP
when talking to the third host that does not have IB.

Second would it be safe to say OMPI searches the BTL's in the
following order when trying to reach a process?
Self
SM
IB, GM, MX, MVAPI
TCP

Third, what about a hypothetical case when a node has both GM and IB
on it? (evaluation machines)

Last does OMPI build something like a route list when mpi_init() is
called? This way knowing how to get to other members off the job?
Or is this done the first time a process needs to talk to another
process thus not storing any route information not needed.

p.s. not having to recompile code for different networks has made
evaluating network so much more enjoyable. Thank-you for all the
work on the selection of networks 'just working'