Modifying generalized reduce "synchronized" behavior:
- Removing "small" message size limit because it really does not relate to the eager size accross the board. Now, the leaf nodes in generalized reduce will use blocking send (DEFAULT/ORIGINAL BEHAVIOR) either when the maximum number of outstanding requests is 0 or when the total number of segments is less than the maximum number of outstanding requests. Otherwise, it will send messages using non-blocking synchronized send operation. This commit was SVN r14572.
Этот коммит содержится в:
родитель
25190b85f8
Коммит
9eff74ad4d
@ -228,24 +228,23 @@ int ompi_coll_tuned_reduce_generic( void* sendbuf, void* recvbuf, int original_c
|
||||
|
||||
/* leaf nodes
|
||||
Depending on the value of max_outstanding_reqs and
|
||||
the size of the segment we have two options:
|
||||
the number of segments we have two options:
|
||||
- send all segments using blocking send to the parent, or
|
||||
- avoid overflooding the parent nodes by limiting the number of
|
||||
outstanding requests to max_oustanding_reqs.
|
||||
TODO/POSSIBLE IMPROVEMENT: If there is a way to determine the eager size
|
||||
for the current communication, synchronization should be used only
|
||||
when the message/segment size is smaller than the eager size.
|
||||
*/
|
||||
else {
|
||||
|
||||
const int small_message_size = 4000; /* 4000 bytes */
|
||||
int segment_size = typelng * count_by_segment;
|
||||
|
||||
/* If the number of segments is less than a maximum number of oustanding
|
||||
requests, or there is no limit on the maximum number of outstanding
|
||||
requests, or the segment size is greater than the
|
||||
"small message size" we send data to the parent using blocking
|
||||
send */
|
||||
requests or there is no limit on the maximum number of outstanding
|
||||
requests, we send data to the parent using blocking send */
|
||||
if ((0 == max_outstanding_reqs) ||
|
||||
(num_segments <= max_outstanding_reqs) ||
|
||||
(segment_size > small_message_size)) {
|
||||
(num_segments <= max_outstanding_reqs)) {
|
||||
|
||||
segindex = 0;
|
||||
while ( original_count > 0) {
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user