Jeff,

OK. I'll try implementing George's idea and then you can compare which
one is simpler.

Regards,
KAWASHIMA Takahiro

> Not that I'm aware of; that would be great.
> 
> Unlike George, however, I'm not concerned about converting to linear 
> operations for attributes.
> 
> Attributes are not used often, but when they are:
> 
> a) there aren't many of them (so a linear penalty is trivial)
> b) they're expected to be low performance
> 
> So if it makes the code simpler, I certainly don't mind linear operations.
> 
> 
> 
> On Jan 17, 2013, at 9:32 AM, KAWASHIMA Takahiro <rivis.kawash...@nifty.com>
>  wrote:
> 
> > 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