The request make perfect sense.

I have a suggestion regarding the implementation: please add the two new 
functions to the exported MTL structure in each MTL (like in the attached patch 
for MX).

Index: ompi/mca/mtl/mx/mtl_mx.c
===================================================================
--- ompi/mca/mtl/mx/mtl_mx.c    (revision 24855)
+++ ompi/mca/mtl/mx/mtl_mx.c    (working copy)
@@ -59,7 +59,9 @@
         ompi_mtl_mx_irecv,
         ompi_mtl_mx_iprobe,

-        ompi_mtl_mx_cancel
+        ompi_mtl_mx_cancel,
+        NULL,
+        NULL,
     }    
 };


Thanks,
  george.

On Jul 1, 2011, at 16:45 , Mike Dubman wrote:

> WHAT: Adding communicator add/delete callbacks to MTL.
> 
> WHY: MTL will be able to separate messages on different contexts.
> 
> WHEN: On trunk (later on v1.5 as well), Tuesday telconf, 5 July 2011
> 
> TIMEOUT: Tuesday telconf, 12 July 2011
> 
> DETAILS:
>  
>  Currently MTLs do no handle communicator contexts in any special way,
> they only add the context id to the tag selection of the underlying 
> messaging meachinsm. 
>  
>  We would like to enable an MTL to maintain its own context data
> per-communicator. This way an MTL will be able to queue incoming eager 
> messages and rendezvous requests per-communicator basis.
>  The MTL will be allowed to override comm->c_pml_comm member, 
> since it's unused in pml_cm anyway.
> 
> 
> diff -r 0f757f8f3efb -r 8fcf276ee527 ompi/mca/mtl/mtl.h
> --- a/ompi/mca/mtl/mtl.h Thu Jun 30 14:13:33 2011 +0300
> +++ b/ompi/mca/mtl/mtl.h Fri Jul 01 13:54:20 2011 +0300
> @@ -355,6 +355,34 @@
>  
>  
>  /**
> + * Downcall from PML layer when a new communicator is created.
> + *
> + * @param comm  Communicator
> + * @return      OMPI_SUCCESS or failure status.
> + *
> + * Provides the MTL the opportunity to initialize/cache a data structure
> + * on the communicator.
> + */
> +typedef int (*mca_mtl_base_module_add_comm_fn_t)(
> +                          struct mca_mtl_base_module_t* mtl,
> +                          struct ompi_communicator_t* comm);
> +
> +
> +/**
> + * Downcall from PML layer when a communicator is destroyed.
> + *
> + * @param comm  Communicator
> + * @return      OMPI_SUCCESS or failure status.
> + *
> + * Provides the MTL the opportunity to cleanup any datastructures
> + * associated with the communicator.
> + */
> +typedef int (*mca_mtl_base_module_del_comm_fn_t)(
> +                          struct mca_mtl_base_module_t* mtl,
> +                          struct ompi_communicator_t* comm);
> +
> +
> +/**
>   * MTL module interface functions and attributes.
>   */
>  struct mca_mtl_base_module_t {
> @@ -368,7 +396,6 @@
>      mca_mtl_base_module_add_procs_fn_t   mtl_add_procs;
>      mca_mtl_base_module_del_procs_fn_t   mtl_del_procs;
>      mca_mtl_base_module_finalize_fn_t    mtl_finalize;
> -
>      mca_mtl_base_module_send_fn_t        mtl_send;
>      mca_mtl_base_module_isend_fn_t       mtl_isend;
>      mca_mtl_base_module_irecv_fn_t       mtl_irecv;
> @@ -376,6 +403,8 @@
>  
>      /* Optional MTL functions */
>      mca_mtl_base_module_cancel_fn_t      mtl_cancel;
> +    mca_mtl_base_module_add_comm_fn_t    mtl_add_comm;
> +    mca_mtl_base_module_del_comm_fn_t    mtl_del_comm;
>  };
>  typedef struct mca_mtl_base_module_t mca_mtl_base_module_t;
>  
> diff -r 0f757f8f3efb -r 8fcf276ee527 ompi/mca/pml/cm/pml_cm.c
> --- a/ompi/mca/pml/cm/pml_cm.c Thu Jun 30 14:13:33 2011 +0300
> +++ b/ompi/mca/pml/cm/pml_cm.c Fri Jul 01 13:54:20 2011 +0300
> @@ -82,14 +82,22 @@
>  int
>  mca_pml_cm_add_comm(ompi_communicator_t* comm)
>  {
> +    int ret;
> +
>      /* should never happen, but it was, so check */
>      if (comm->c_contextid > ompi_pml_cm.super.pml_max_contextid) {
>          return OMPI_ERR_OUT_OF_RESOURCE;
>      }
>  
> -    /* setup our per-communicator data */
> +    /* initialize per-communicator data. MTLs may override this. */
>      comm->c_pml_comm = NULL;
>  
> +    /* notify the MTL about the added communicator */
> +    if ((NULL != ompi_mtl->mtl_add_comm) &&
> +        (OMPI_SUCCESS != (ret = OMPI_MTL_CALL(add_comm(ompi_mtl, comm))))) {
> +        return ret;
> +    }
> +
>      return OMPI_SUCCESS;
>  }
>  
> @@ -97,8 +105,13 @@
>  int
>  mca_pml_cm_del_comm(ompi_communicator_t* comm)
>  {
> -    /* clean up our per-communicator data */
> -    comm->c_pml_comm = NULL;
> +    int ret;
> +
> +    /* notify the MTL about the deleted communicator */
> +    if ((NULL != ompi_mtl->mtl_del_comm) &&
> +        (OMPI_SUCCESS != (ret = OMPI_MTL_CALL(del_comm(ompi_mtl, comm))))) {
> +        return ret;
> +    }
>  
>      return OMPI_SUCCESS;
>  }
> 
> _______________________________________________
> devel-core mailing list
> devel-c...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel-core


Reply via email to