Hi George,

This certainly looks like our motivations are close. However, I don't see in the presentation how you implement it (maybe I misread it), especially how you manage to not modify the BTL interface.

Do you have any code / SVN commit references for us to better understand what it's about ?

Thanks,
Sylvain

On Tue, 8 Mar 2011, George Bosilca wrote:


On Mar 8, 2011, at 12:12 , Damien Guinier wrote:

Hi Jeff

Sorry, your email went on the devel mailing list of Open MPI.

I'm working on large message exchange optimization. My optimization consists in 
"choosing
the best protocol for each large message".
In fact,
- for each device, the way to chose the best protocol is different.
- the faster protocol for a given device depends on that device hardware and on 
the message
specifications.

So the device/BTL itself is the best place to dynamically select the fastest 
protocol.

Presently, for large messages, the protocol selection is only based on device 
capabilities.
My optimization consists in asking the device/BTL for a "preferred protocol" and
then make a choice based on :
       - the device capabilities and the BTL's recommendation.

As a BTL will not randomly change its preferred protocol, one can assume it will depend on the peer. Here is a similar approach to one you describe in your email, but without modification of the BTL interface.

https://fs.hlrs.de/projects/eurompi2010/TALKS/WEDNESDAY_AFTERNOON/george_bosilca_locality_and_topology_aware.pdf

 george.




Technical view:
The optimization is located in mca_pml_ob1_send_request_start_btl(), after the 
device/btl selection.
In the large message section, I call a new function :
  mca_pml_ob1_preferred_protocol() => mca_bml_base_preferred_protocol()
This one will try to launch
  btl->btl_preferred_protocol()
So, selecting a protocol before a large message in not in the critical path.
It is the BTL's responsibility to define this function to select a preferred 
protocol.

If this function is not defined, nothing changes in the code path
To do this optimization , I had to add an interface to the btl module structure in 
"btl.h", this is the drawback.

----

I have already used this feature to optimize the "shared memory" device/BTL. I use the 
"preferred_protocol" feature to enable/disable
KNEM according to intra/inter socket communication. This optimization increases a 
"IMB pingping benchmark" bandwidth by ~36%.

----

The next step is now to use the "preferred protocol" feature with openib ( with 
many IB cards)



Attached 2 patches:
1) BTL_preferred.patch:
  introduces the new preferred protocol interface
2) SM_KNEM_intra_socket.patch:
  defines the preferred protocol for the sm btl
  Note: Since the "ess" framework can't give us the "socket locality
        information", I used hitopo that has been proposed in an RFC
        some times ago:
        http://www.open-mpi.org/community/lists/devel/2010/11/8677.php



<BTL_preferred.path><SM_KNEM_intra_socket.patch>_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel

"I disapprove of what you say, but I will defend to the death your right to say 
it"
 -- Evelyn Beatrice Hall


_______________________________________________
devel mailing list
de...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/devel

Reply via email to