|
7 | 7 | * rights reserved. |
8 | 8 | * Copyright (c) 2013-2015 Los Alamos National Security, LLC. All rights |
9 | 9 | * reserved. |
10 | | - * Copyright (c) 2014-2016 Research Organization for Information Science |
| 10 | + * Copyright (c) 2014-2017 Research Organization for Information Science |
11 | 11 | * and Technology (RIST). All rights reserved. |
12 | 12 | * |
13 | 13 | * Author(s): Torsten Hoefler <[email protected]> |
@@ -425,19 +425,24 @@ static inline int red_sched_chain (int rank, int p, int root, const void *sendbu |
425 | 425 |
|
426 | 426 | /* last node does not recv */ |
427 | 427 | if (vrank != p-1) { |
428 | | - if (vrank == 0) { |
| 428 | + if (vrank == 0 && sendbuf != recvbuf) { |
429 | 429 | res = NBC_Sched_recv ((char *)recvbuf+offset, false, thiscount, datatype, rpeer, schedule, true); |
430 | 430 | } else { |
431 | | - res = NBC_Sched_recv ((char *) offset, true, thiscount, datatype, rpeer, schedule, true); |
| 431 | + res = NBC_Sched_recv ((char *)offset, true, thiscount, datatype, rpeer, schedule, true); |
432 | 432 | } |
433 | 433 | if (OPAL_UNLIKELY(OMPI_SUCCESS != res)) { |
434 | 434 | return res; |
435 | 435 | } |
436 | 436 |
|
437 | 437 | /* root reduces into receivebuf */ |
438 | 438 | if(vrank == 0) { |
439 | | - res = NBC_Sched_op ((char *) sendbuf + offset, false, (char *) recvbuf + offset, false, |
440 | | - thiscount, datatype, op, schedule, true); |
| 439 | + if (sendbuf != recvbuf) { |
| 440 | + res = NBC_Sched_op ((char *) sendbuf + offset, false, (char *) recvbuf + offset, false, |
| 441 | + thiscount, datatype, op, schedule, true); |
| 442 | + } else { |
| 443 | + res = NBC_Sched_op ((char *)offset, true, (char *) recvbuf + offset, false, |
| 444 | + thiscount, datatype, op, schedule, true); |
| 445 | + } |
441 | 446 | } else { |
442 | 447 | res = NBC_Sched_op ((char *) sendbuf + offset, false, (char *) offset, true, thiscount, |
443 | 448 | datatype, op, schedule, true); |
|
0 commit comments