Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] RFC: eliminating "descriptor" argument from sendi function
From: Eugene Loh (Eugene.Loh_at_[hidden])
Date: 2009-02-23 12:14:39


I'm a newbie and George is a veteran. So, this feels rather like David
and Goliath. (Hmm, David won and became king. Gee, I kinda like
that.) Anyhow...

George Bosilca wrote:

> It doesn't sound reasonable to me. There is a reason for this, and I
> think it's a good reason. The sendi function work for some devices as
> a fast path for sending data, when the network is not flooded.
> However, in the case sendi cannot do the job we expect, the fact that
> it return the descriptor save us a call (we don't have to do the
> alloc call later).

This does not make any sense to me. In what sense are we "saving a
call"? Not in the sense of run-time performance since the BTL is now
having to allocate a descriptor it did not otherwise need. The amount
of work is the same (one descriptor allocation either way), but you're
just pushing that work into the BTLs.

We are certainly not "saving a call" in the sense of reducing source
code. The PML has to have code to allocate a descriptor anyway since
there may not even be any sendi functions. So, the code to allocate the
descriptor is already in the PML. By asking sendi functions to do the
same, you're replicating that code in every sendi function... possibly
multiple times per BTL since a sendi function might have multiple "out
of resource" return paths.

> Therefore, in the PML we already have the descriptor and we can hand
> it back to the BTL, which give a chance for asynchronous progress
> later on. Without this descriptor, the only option the PML have is to
> put the PML request in a queue, and to try to send it later, which is
> very expensive.

This also makes no sense to me. We're not talking about doing without
the descriptor. The PML is prepared to allocate it anyhow. The issue
is where the descriptor is allocated in the case that sendi functions
exist but cannot succeed. One alternative is to use a single allocation
point in the PML. The other alternative (what we have today) is to
replicate that code out to multiple sites, adding unnecessary source
code and interface arguments.

The PML code is in
https://svn.open-mpi.org/source/xref/ompi_1.3/ompi/mca/pml/ob1/pml_ob1_sendreq.c#mca_pml_ob1_send_request_start_copy

Existing BTL sendi functions are at
https://svn.open-mpi.org/source/xref/ompi_1.3/ompi/mca/btl/sm/btl_sm.c#mca_btl_sm_sendi
https://svn.open-mpi.org/source/xref/ompi_1.3/ompi/mca/btl/mx/btl_mx.c#mca_btl_mx_sendi
https://svn.open-mpi.org/source/xref/ompi_1.3/ompi/mca/btl/portals/btl_portals_send.c#mca_btl_portals_sendi