George,

Your idea makes sense.
Is anyone working on it? If not, I'll try.

Regards,
KAWASHIMA Takahiro

> Takahiro,
> 
> Thanks for the patch. I deplore the lost of the hash table in the attribute 
> management, as the potential of transforming all attributes operation to a 
> linear complexity is not very appealing.
> 
> As you already took the decision C, it means that at the communicator 
> destruction stage the hash table is not relevant anymore. Thus, I would have 
> converted the hash table to an ordered list (ordered by the creation index, a 
> global entity atomically updated every time an attribute is created), and 
> proceed to destroy the attributed in the desired order. Thus instead of 
> having a linear operation for every operation on attributes, we only have a 
> single linear operation per communicator (and this during the destruction 
> stage).
> 
>   George.
> 
> On Jan 16, 2013, at 16:37 , KAWASHIMA Takahiro <rivis.kawash...@nifty.com> 
> wrote:
> 
> > Hi,
> > 
> > I've implemented ticket #3123 "MPI-2.2: Ordering of attribution deletion
> > callbacks on MPI_COMM_SELF".
> > 
> >  https://svn.open-mpi.org/trac/ompi/ticket/3123
> > 
> > As this ticket says, attributes had been stored in unordered hash.
> > So I've replaced opal_hash_table_t with opal_list_t and made necessary
> > modifications for it. And I've also fixed some multi-threaded concurrent
> > (get|set|delete)_attr call issues.
> > 
> > By this modification, following behavior changes are introduced.
> > 
> >  (A) MPI_(Comm|Type|Win)_(get|set|delete)_attr function may be slower
> >      for MPI objects that has many attributes attached.
> >  (B) When the user-defined delete callback function is called, the
> >      attribute is already removed from the list. In other words,
> >      if MPI_(Comm|Type|Win)_get_attr is called by the user-defined
> >      delete callback function for the same attribute key, it returns
> >      flag = false.
> >  (C) Even if the user-defined delete callback function returns non-
> >      MPI_SUCCESS value, the attribute is not reverted to the list.
> > 
> > (A) is due to a sequential list search instead of a hash. See find_value
> > function for its implementation.
> > (B) and (C) are due to an atomic deletion of the attribute to allow
> > multi-threaded concurrent (get|set|delete)_attr call in MPI_THREAD_MULTIPLE.
> > See ompi_attr_delete function for its implementation. I think this does
> > not matter because MPI standard doesn't specify behavior in such cases.
> > 
> > The patch for Open MPI trunk is attached. If you like it, take in
> > this patch.
> > 
> > Though I'm a employee of a company, this is my independent and private
> > work at my home. No intellectual property from my company. If needed,
> > I'll sign to Individual Contributor License Agreement.

Reply via email to