Looks like put and get functions should be added if possible. The MTL
layer looks like it is designed for two-sided only with no intention of
supporting one-sided.

-Nathan

On Thu, Nov 06, 2014 at 03:21:32PM -0700, Nathan Hjelm wrote:
> 
> Great! We should probably try to figure out how the mtl layer can be
> modified to expose those atomics. If possible this should be done before
> the 1.9 branch to ensure the feature is available in the next release
> series.
> 
> -Nathan
> 
> On Thu, Nov 06, 2014 at 05:15:30PM -0500, Joshua Ladd wrote:
> >    MXM supports atomics.
> > 
> >    On Thursday, November 6, 2014, Nathan Hjelm <hje...@lanl.gov> wrote:
> > 
> >      I haven't look at that yet. Would be great to get the new osc component
> >      working over both btls and mtls. I know portals supports atomics but I
> >      don't know whether psm does.
> > 
> >      -Nathan
> > 
> >      On Thu, Nov 06, 2014 at 08:45:15PM +0200, Mike Dubman wrote:
> >      >    btw, do you plan to add atomics API to MTL layer as well?
> >      >    On Thu, Nov 6, 2014 at 5:23 PM, Nathan Hjelm <hje...@lanl.gov>
> >      wrote:
> >      >
> >      >      At the moment I select the lowest latency BTL that can reach all
> >      of the
> >      >      ranks in the communicator used to create the window. I can add
> >      code to
> >      >      round-robin windows over the available BTLs on multi-rail
> >      systems.
> >      >
> >      >      -Nathan
> >      >      On Wed, Nov 05, 2014 at 06:38:25PM -0800, Paul Hargrove wrote:
> >      >      >    All atomics must be done through not just "the same btl" 
> > but
> >      the
> >      >      same btl
> >      >      >    MODULE,  since atomics from two IB HCAs, for instance, are
> >      not
> >      >      necessarily
> >      >      >    coherent. So, how is the "best" one to be selected?
> >      >      >
> >      >      >    -Paul [Sent from my phone]
> >      >      >
> >      >      >    On Nov 5, 2014 7:15 AM, "Nathan Hjelm" <hje...@lanl.gov>
> >      wrote:
> >      >      >
> >      >      >      In the new osc component I don't try to handle that case.
> >      All
> >      >      atomics
> >      >      >      have to be done through the same btl (including atomics 
> > on
> >      self).
> >      >      I did
> >      >      >      this because with the default setup of Gemini they can 
> > not
> >      be
> >      >      mixed. If
> >      >      >      it is possible to mix them with other networks I would be
> >      happy
> >      >      to add
> >      >      >      an atomic flag for that.
> >      >      >
> >      >      >      -Nathan
> >      >      >
> >      >      >      On Wed, Nov 05, 2014 at 03:41:58AM -0500, Joshua Ladd
> >      wrote:
> >      >      >      >    Quick question. Out of curiosity, how do you handle
> >      the
> >      >      (common)
> >      >      >      case of
> >      >      >      >    mixing network atomics with CPU atomics? Say for a
> >      single
> >      >      target
> >      >      >      with two
> >      >      >      >    initiators, one initiator is on host with the 
> > target,
> >      so
> >      >      goes
> >      >      >      through the
> >      >      >      >    SM BTL, and the other initiator is off host, so goes
> >      through
> >      >      the
> >      >      >      network
> >      >      >      >    BTL.
> >      >      >      >
> >      >      >      >    Josh
> >      >      >      >    On Tue, Nov 4, 2014 at 6:46 PM, Nathan Hjelm
> >      >      <hje...@lanl.gov>
> >      >      >      wrote:
> >      >      >      >
> >      >      >      >      What: Completely revamp the BTL RDMA interface
> >      (btl_put,
> >      >      btl_get)
> >      >      >      to
> >      >      >      >      better match what is needed for MPI one-sided.
> >      >      >      >
> >      >      >      >      Why: I am preparing to push an enhanced MPI-3
> >      one-sided
> >      >      component
> >      >      >      that
> >      >      >      >      makes use of network rdma and atomic operations to
> >      provide
> >      >      a fast
> >      >      >      truely
> >      >      >      >      one-sided implementation. Before I can push this
> >      component
> >      >      I want
> >      >      >      to
> >      >      >      >      change the btl interface to:
> >      >      >      >
> >      >      >      >       - Provide access to network atomic operations. I
> >      only
> >      >      need add
> >      >      >      and
> >      >      >      >         cswap but the interface can be extended to any
> >      number
> >      >      of
> >      >      >      operations.
> >      >      >      >
> >      >      >      >         The new interface provides three new functions:
> >      >      btl_atomic_op,
> >      >      >      >         btl_atomic_fop, and btl_atomic_cswap.
> >      Additionally
> >      >      there are
> >      >      >      two new
> >      >      >      >         btl_flags to indicate available atomic support:
> >      >      >      >         MCA_BTL_FLAGS_ATOMIC_OPS, and
> >      >      MCA_BTL_FLAGS_ATOMIC_FOPS. The
> >      >      >      >         btl_atomics_flags field has been added to
> >      indicate
> >      >      which
> >      >      >      atomic
> >      >      >      >         operations are supported (see
> >      >      mca_btl_base_atomic_op_t). At
> >      >      >      this time
> >      >      >      >         I only added support for 64-bit integer atomics
> >      but I
> >      >      am open
> >      >      >      to
> >      >      >      >         adding support for 32-bit as well.
> >      >      >      >
> >      >      >      >       - Provide an interface that will allow
> >      simultaneous
> >      >      put/get
> >      >      >      operations
> >      >      >      >         without extra calls into the btl. The current
> >      interface
> >      >      >      requires the
> >      >      >      >         btl user to call prepare_src/prepare_dst before
> >      every
> >      >      rdma
> >      >      >      >         operation. In some cases this is a complete
> >      waste
> >      >      (vader, sm
> >      >      >      with
> >      >      >      >         CMA, knem, or xpmem).
> >      >      >      >
> >      >      >      >         I seperated the registration of memory from the
> >      segment
> >      >      info.
> >      >      >      More
> >      >      >      >         information is provided below. The new put/get
> >      >      functions have
> >      >      >      the
> >      >      >      >         following signatures:
> >      >      >      >
> >      >      >      >      typedef int (*mca_btl_base_module_put_fn_t) 
> > (struct
> >      >      >      >      mca_btl_base_module_t *btl,
> >      >      >      >          struct mca_btl_base_endpoint_t *endpoint, void
> >      >      >      *local_address,
> >      >      >      >          uint64_t remote_address, struct
> >      >      >      mca_btl_base_registration_handle_t
> >      >      >      >      *local_handle,
> >      >      >      >          struct mca_btl_base_registration_handle_t
> >      >      *remote_handle,
> >      >      >      size_t
> >      >      >      >      size, int flags,
> >      >      >      >          int order, mca_btl_base_rdma_completion_fn_t
> >      cbfunc,
> >      >      void
> >      >      >      >      *cbcontext, void *cbdata);
> >      >      >      >
> >      >      >      >      typedef int (*mca_btl_base_module_get_fn_t) 
> > (struct
> >      >      >      >      mca_btl_base_module_t *btl,
> >      >      >      >          struct mca_btl_base_endpoint_t *endpoint, void
> >      >      >      *local_address,
> >      >      >      >          uint64_t remote_address, struct
> >      >      >      mca_btl_base_registration_handle_t
> >      >      >      >      *local_handle,
> >      >      >      >          struct mca_btl_base_registration_handle_t
> >      >      *remote_handle,
> >      >      >      size_t
> >      >      >      >      size, int flags,
> >      >      >      >          int order, mca_btl_base_rdma_completion_fn_t
> >      cbfunc,
> >      >      void
> >      >      >      >      *cbcontext, void *cbdata);
> >      >      >      >
> >      >      >      >      typedef void (*mca_btl_base_rdma_completion_fn_t)(
> >      >      >      >          struct mca_btl_base_module_t* module,
> >      >      >      >          struct mca_btl_base_endpoint_t* endpoint,
> >      >      >      >          void *local_address,
> >      >      >      >          struct mca_btl_base_registration_handle_t
> >      >      *local_handle,
> >      >      >      >          void *context,
> >      >      >      >          void *cbdata,
> >      >      >      >          int status);
> >      >      >      >
> >      >      >      >         I may modify the completion function to provide
> >      more
> >      >      >      information on
> >      >      >      >         the completed operation (size).
> >      >      >      >
> >      >      >      >       - Allow the registration of an entire region even
> >      if the
> >      >      region
> >      >      >      can not
> >      >      >      >         be modified with a single rdma operation. At
> >      this time
> >      >      >      prepare_src
> >      >      >      >         and prepare_dst may modify the size and 
> > register
> >      a
> >      >      smaller
> >      >      >      >         region. This will not work.
> >      >      >      >
> >      >      >      >         This is done in the new interface through the
> >      new
> >      >      >      btl_register_mem,
> >      >      >      >         and btl_deregister_mem interfaces. The
> >      btl_register_mem
> >      >      >      interface
> >      >      >      >         returns a registration handle of size
> >      >      >      btl_registration_handle_size
> >      >      >      >         that can be used as either the local_handle or
> >      >      remote_handle
> >      >      >      to any
> >      >      >      >         rdma/atomic function. BTLs that do not provide
> >      these
> >      >      functions
> >      >      >      do not
> >      >      >      >         require registration for rdma/atomic 
> > operations.
> >      >      >      >
> >      >      >      >      typedef struct mca_btl_base_registration_handle_t
> >      >      >      >      *(*mca_btl_base_module_register_mem_fn_t)(
> >      >      >      >          struct mca_btl_base_module_t* btl, struct
> >      >      >      mca_btl_base_endpoint_t
> >      >      >      >      *endpoint, void *base,
> >      >      >      >          size_t size, uint32_t flags);
> >      >      >      >
> >      >      >      >      typedef struct mca_btl_base_registration_handle_t
> >      >      >      >      *(*mca_btl_base_module_register_mem_fn_t)(
> >      >      >      >          struct mca_btl_base_module_t* btl, struct
> >      >      >      mca_btl_base_endpoint_t
> >      >      >      >      *endpoint, void *base,
> >      >      >      >          size_t size, uint32_t flags);
> >      >      >      >
> >      >      >      >       - Expose the limitations of the put and get
> >      operations so
> >      >      the
> >      >      >      caller
> >      >      >      >         can make decisions before trying a get or put
> >      >      operation. Two
> >      >      >      >         examples: the Gemini interconnect has an
> >      alignment
> >      >      restriction
> >      >      >      on
> >      >      >      >         get, openib devices may have a limit on how
> >      large a
> >      >      single
> >      >      >      get/put
> >      >      >      >         operation can be. The current interface sort of
> >      gives
> >      >      the put
> >      >      >      limit
> >      >      >      >         but it is tied to the rdma pipeline protocol.
> >      >      >      >
> >      >      >      >         This is done in the new interface by providing
> >      >      btl_get_limit,
> >      >      >      >         btl_get_alignment, btl_put_limit, and
> >      >      btl_put_alignment.
> >      >      >      Operations
> >      >      >      >         that violate these restrictions should return
> >      >      >      OPAL_ERR_BAD_PARAM
> >      >      >      >         (operation over limit) or 
> > OPAL_ERR_NOT_SUPPORTED
> >      >      (operation
> >      >      >      not
> >      >      >      >         supported due to alignment restructions with
> >      either the
> >      >      source
> >      >      >      or
> >      >      >      >         destination buffer).
> >      >      >      >
> >      >      >      >      This is a big change and I do not expect everyone
> >      to like
> >      >      100% of
> >      >      >      these
> >      >      >      >      changes. I welcome any feedback people have.
> >      >      >      >
> >      >      >      >      When: Tuesday, Nov 17, 2015. This is during SC so
> >      there
> >      >      will be
> >      >      >      time for
> >      >      >      >      face-to-face discussion if anyone has any concerns
> >      or
> >      >      would like
> >      >      >      to see
> >      >      >      >      something changed.
> >      >      >      >
> >      >      >      >      The proposed new btl interface as well as updated
> >      versions
> >      >      of:
> >      >      >      pml/ob1,
> >      >      >      >      btl/openib, btl/self, btl/scif, btl/sm, btl/tcp,
> >      btl/ugni,
> >      >      and
> >      >      >      btl/vader
> >      >      >      >      can be found in my btlmod branch at:
> >      >      >      >
> >      >      >      >      https://github.com/hjelmn/ompi/tree/btlmod
> >      >      >      >
> >      >      >      >      Other btls (smcuda, and usnic) still need to be
> >      updated to
> >      >      >      provide the
> >      >      >      >      new interface. Unmodified btl will not build.
> >      >      >      >
> >      >      >      >      If there are no objections I will push the btl
> >      >      modifications into
> >      >      >      the
> >      >      >      >      master two weeks from today (Nov 17). Please take 
> > a
> >      look
> >      >      and let
> >      >      >      me know
> >      >      >      >      what you think.
> >      >      >      >
> >      >      >      >      _______________________________________________
> >      >      >      >      devel mailing list
> >      >      >      >      de...@open-mpi.org
> >      >      >      >      Subscription:
> >      >      http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >      >      >      >      Link to this post:
> >      >      >      >
> >      >      http://www.open-mpi.org/community/lists/devel/2014/11/16193.php
> >      >      >
> >      >      >      > _______________________________________________
> >      >      >      > devel mailing list
> >      >      >      > de...@open-mpi.org
> >      >      >      > Subscription:
> >      >      http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >      >      >      > Link to this post:
> >      >      >     
> >      http://www.open-mpi.org/community/lists/devel/2014/11/16195.php
> >      >      >
> >      >      >      _______________________________________________
> >      >      >      devel mailing list
> >      >      >      de...@open-mpi.org
> >      >      >      Subscription:
> >      http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >      >      >      Link to this post:
> >      >      >     
> >      http://www.open-mpi.org/community/lists/devel/2014/11/16198.php
> >      >
> >      >      > _______________________________________________
> >      >      > devel mailing list
> >      >      > de...@open-mpi.org
> >      >      > Subscription:
> >      http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >      >      > Link to this post:
> >      >      http://www.open-mpi.org/community/lists/devel/2014/11/16224.php
> >      >
> >      >      _______________________________________________
> >      >      devel mailing list
> >      >      de...@open-mpi.org
> >      >      Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >      >      Link to this post:
> >      >      http://www.open-mpi.org/community/lists/devel/2014/11/16230.php
> >      >
> >      >    --
> >      >    Kind Regards,
> >      >    M.
> > 
> >      > _______________________________________________
> >      > devel mailing list
> >      > de...@open-mpi.org
> >      > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
> >      > Link to this post:
> >      http://www.open-mpi.org/community/lists/devel/2014/11/16240.php
> 
> > _______________________________________________
> > devel mailing list
> > de...@open-mpi.org
> > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
> > Link to this post: 
> > http://www.open-mpi.org/community/lists/devel/2014/11/16258.php
> 



> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/devel
> Link to this post: 
> http://www.open-mpi.org/community/lists/devel/2014/11/16259.php

Attachment: pgpRbawLAH4E2.pgp
Description: PGP signature

Reply via email to