[ofiwg] c++ Fabric - from ofiwg discussion from today

Taylor, Christopher P CIV (US) christopher.p.taylor.civ at mail.mil
Wed May 23 06:40:30 PDT 2018


Sean, Jeff, interested parties,

Hopefully, this email clarifies what was mentioned on the phone call yesterday. Currently, a *very* *early* and *rough* version of a 'fabric<libfabric>' looks something like this:

// base template case - allows fabric libraries the ability to specialize against the struct fabric interface

template<typename fabric_impl>
struct fabric {
    using impl = fabric_impl;

    // methods enumerated
    ...
};

// template specialization of a libfabric fabric - a libfabric specific implementation of a 'fabric'

template<>
struct fabric<libfabric> {
    using impl = fabric_impl;

    // current thought about where domains should live
    std::vector<fi_domain *> domains;

    // member variables
    ...

    // methods enumerated
    ...
};

Current plan is to build wrapper template specialized structures around member variables found in this structure. After re-reviewing the libfabric notion of an fi_domain, it makes sense to house fi_domains in the fabric. That said, there might be an opportunity, at this point, to seek parity with data structures found in asio.

asio has this notion of an 'asio::io_context'. It might make sense to create a wrapper type around fi_domains called a 'fabric::io_context'. In asio, the OS provides these 'asio::io_context' structures; in the case of libfabric, one might be able to consider the 'fabric' as a 'fabric::io_context' provider/maintainer.

Users would ask the fabric to create fabric::io_contexts that could then be used to perform fabric operations. These fabric::io_contexts would be light wrappers around the existing libfabric data structures (ie: fi_domains). The io_context could then house domains, queues, memory registration, etc.

Example of a client/server application that emphasizes asio::io_contexts:

https://www.boost.org/doc/libs/1_67_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp

Chris

________________________________________
From: Hefty, Sean [sean.hefty at intel.com]
Sent: Tuesday, May 22, 2018 10:55 PM
To: Jeff Squyres (jsquyres)
Cc: OFIWG Mailing list; Taylor, Christopher P CIV (US)
Subject: [Non-DoD Source] RE: [ofiwg] c++ Fabric - from ofiwg discussion from today

> If I'm understanding this correctly, you're saying "class Fabric" is
> the C++ equivalent of "struct fid_domain" -- is that right?

That is my initial understanding; however, it may be closer to some merger of fid_fabric and fid_domain.  Chris called out that the names are subject to change.

> If so, that is going to be tremendously confusing.

I agree, but fixing the name isn't too hard at this point.  Maybe we call it class FabricDomain.  Anyway, I'm more concerned at the moment with figuring out if C++ needs separate Fabric and Domain classes, or if we only deal with fid_domains.  And if we go with the latter what happens with the fid_pep.

I don't quite understand how ASIO deals with connection establishment yet.

- Sean




More information about the ofiwg mailing list