Subject: [Boost-bugs] [Boost C++ Libraries] #9356: Unexpected wait_any function behavor (with irecv)
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-11-07 16:42:30
#9356: Unexpected wait_any function behavor (with irecv)
-----------------------------------------+---------------------
Reporter: christopher.bignamini@⦠| Owner: troyer
Type: Bugs | Status: new
Milestone: To Be Determined | Component: mpi
Version: Boost 1.54.0 | Severity: Problem
Keywords: wait_any, mpi, non blocking |
-----------------------------------------+---------------------
The boost wait_any function does not behave as the corresponding MPI
function, in correspondence to irecv function calls, when more than 1 data
transmission request is present. In particular it is possible that after a
first successfully completed communication all the others are not checked
at all, with the function always returning as in case of a new completed
communication. This unexpected behavior is probably due to the following
code lines (in file nonblocking.hpp, from line 61):
{{{
// Check if we have found a completed request. If so, return it.
if (optional<status> result = current->test())
return std::make_pair(*result, current);
}}}
If a previously completed request is tested the corresponding optional
result is returned and, with the above conditional statement, this
condition leads to a subsequent return to the external calling code. The
performed request status check should therefore probably also include the
required information to exclude previously completed communications.
By commenting the above lines and using the wait_any function with
standard MPI data types the unexpected behavior disappears since in this
case the boost function is allowed to make use of the corresponding MPI
function.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/9356> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:14 UTC