d7264aa613
This commit fixes several bugs identified by a new multi-threaded RMA benchmarking suite. The following bugs have been identified and fixed: - The code that signaled the actual start of an access epoch changed the eager_send_active flag on a synchronization object without holding the object's lock. This could cause another thread waiting on eager sends to block indefinitely because the entirety of ompi_osc_pt2pt_sync_expected could exectute between the check of eager_send_active and the conditon wait of ompi_osc_pt2pt_sync_wait. - The bookkeeping of fragments could get screwed up when performing long put/accumulate operations from different threads. This was caused by the fragment flush code at the end of both put and accumulate. This code was put in place to avoid sending a large number of unexpected messages to a peer. To fix the bookkeeping issue we now 1) wait for eager sends to be active before stating any large isend's, and 2) keep track of the number of large isends associated with a fragment. If the number of large isends reaches 32 the active fragment is flushed. - Use atomics to update the large receive/send tag counters. This prevents duplicate tags from being used. The tag space has also been updated to use the entire 16-bits of the tag space. These changes should also fix open-mpi/ompi#1299. Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov> |
||
---|---|---|
.. | ||
configure.m4 | ||
Makefile.am | ||
osc_pt2pt_active_target.c | ||
osc_pt2pt_comm.c | ||
osc_pt2pt_component.c | ||
osc_pt2pt_data_move.c | ||
osc_pt2pt_data_move.h | ||
osc_pt2pt_frag.c | ||
osc_pt2pt_frag.h | ||
osc_pt2pt_header.h | ||
osc_pt2pt_module.c | ||
osc_pt2pt_passive_target.c | ||
osc_pt2pt_pending_frag.h | ||
osc_pt2pt_request.c | ||
osc_pt2pt_request.h | ||
osc_pt2pt_sync.c | ||
osc_pt2pt_sync.h | ||
osc_pt2pt.h | ||
owner.txt |