A few addendums in no particular order...
1. The ompi/ tree is the MPI layer. It's the top layer in the stack.
It uses ORTE and OPAL for various things.
2. The PML (point-to-point messagging layer) is the stuff right behind
MPI_SEND, MPI_RECV, and friends. We have two main PMLs: OB1 and CM
(and some other similar ones, but not important here). OB1 is
probably the only one you care about.
3. OB1 effects the majority of the MPI rules and behavior. It makes
MPI_Requests, processes them, potentially segments and re-assembles
individual messages, etc.
4. OB1 uses BTLs (Byte Transfer Layers) to actually move bytes between
processes. Each BTL is for a different kind of transport; OB1 uses
the BML (BTL multiplexing layer; "layer" is a generous term here;
think of it as trivial BTL pointer array management functionality) to
manage all the BTLs that it is currently using.
5. OB1 and some of the BTLs use the ORTE layer for "out of band"
communications, usually for initialization and finalization. The
"OOB" ORTE framework is more-or-less equivalent to the BTL framework,
but it's *only* used for ORTE-level communications (not MPI
communications). The RML (routing message layer) ORTE framework is a
layer on top of the OOB that has the potential to route messages as
necessary. To be clear, the OMPI layer always uses the RML, not the
OOB directly (the RML uses the OOB underneath).
6. A bunch of OOB connections are made during the startup of the MPI
job. BTL connections are generally made on an "as needed" basis
(e.g., during the first MPI_SEND to a given peer). Ralph will have to
fill you in on the details of how/when/where OOB connections are made.
7. There is unfortunately little documentation on the OMPI source code
except comments in the code. :-\ However, there was a nice writeup
recently that may be helpful to you:
8. Once TCP BTL connections are made, IP addressing is no longer
necessary in the OMPI-level messages that are sent because the sockets
are connected point-to-point -- i.e., the peer process is already
known because we have a socket to them. The MPI layer messaging more
contains things like the communicator ID, tag, ...etc.
Hope that helps!
On Jun 18, 2009, at 10:26 AM, Ralph Castain wrote:
> Hi Leo
> The MPI communications is contained in the ompi/mca/btl code area.
> The BTL's (Bit Transport Layer) actually moves the message data.
> Each BTL is responsible for opening its own connections - ORTE has
> nothing to do with it, except to transport out-of-band (OOB)
> messages to support creating the connection if that specific BTL
> requires it.
> If you are interested in TCP communications, you will find all of
> that code in ompi/mca/btl/tcp. It can be confusing down there, so
> expect to spend a little time trying to understand it. I believe
> Jeff has some documentation on the OMPI web site about it (perhaps a
> The source/destination is embedded in the message, again done by
> each BTL since the receiver must be a BTL of the same type. Again,
> this has nothing to do with ORTE - it is purely up to the BTL. MPI
> communications are also coordinated by the PML, which is responsible
> for matching messages with posted receives. You might need to look
> at the ompi/mca/pml/ob1 code to understand how that works.
> Hope that gives you a starting point
> On Jun 18, 2009, at 7:57 AM, Leo P. wrote:
>> Hi Everyone,
>> I wanted to ask some questions about things I am having trouble
>> As far as my understanding of MPI_INIT function, I assumed MPI_INIT
>> typically procedure resources required including the sockets. But
>> now as I understand from the documentation that openMPI only
>> allocated socket when the process has to send a message to a peer.
>> If some one could let me where exactly in the code this is
>> happening I would appreciate a lot. I guess this is happening in
>> ORTE layer so I am spending time looking at it. But if some one
>> could let me in which function this is happening it will help me a
>> Also I think most of the MPI implementation embed source and
>> destination address with the communication protocol. Am I right to
>> assume openMPI does the same thing. Is this also happening in the
>> ORTE layer.
>> Is there a documentation about this openMPI site? if there can
>> someone please let me know the location of it.
>> ICC World Twenty20 England '09 exclusively on YAHOO!
>> devel mailing list
> devel mailing list