boost::mpi::request — 非阻塞发送或接收请求。
// In header: <boost/mpi/request.hpp> class request { public: // member classes/structs/unions class handler { public: // public member functions virtual ~handler() = 0; virtual status wait() = 0; virtual optional< status > test() = 0; virtual void cancel() = 0; virtual bool active() const = 0; virtual optional< MPI_Request & > trivial() = 0; }; template<typename T, typename A> class legacy_dynamic_primitive_array_handler { }; template<typename T> class legacy_serialized_array_handler { }; template<typename T> class legacy_serialized_handler { }; // public member functions request(); status wait(); optional< status > test(); void cancel(); optional< MPI_Request & > trivial(); bool active() const; void preserve(boost::shared_ptr< void >); // public static functions template<typename T> static request make_trivial_send(communicator const &, int, int, T const &); template<typename T> static request make_trivial_send(communicator const &, int, int, T const *, int); static request make_packed_send(communicator const &, int, int, void const *, std::size_t); static request make_bottom_send(communicator const &, int, int, MPI_Datatype); static request make_empty_send(communicator const &, int, int); template<typename T> static request make_trivial_recv(communicator const &, int, int, T &); template<typename T> static request make_trivial_recv(communicator const &, int, int, T *, int); static request make_bottom_recv(communicator const &, int, int, MPI_Datatype); static request make_empty_recv(communicator const &, int, int); static request make_dynamic(); template<typename T> static request make_serialized(communicator const &, int, int, T &); template<typename T> static request make_serialized_array(communicator const &, int, int, T *, int); template<typename T, typename A> static request make_dynamic_primitive_array_recv(communicator const &, int, int, std::vector< T, A > &); template<typename T, typename A> static request make_dynamic_primitive_array_send(communicator const &, int, int, std::vector< T, A > const &); // private member functions request(handler *); };
此结构包含有关非阻塞发送或接收的信息,并分别从 isend
或 irecv
返回。
request
公共成员函数request();
构造一个 NULL 请求。
status wait();
等待此请求关联的通信完成,然后返回一个描述通信的 status
对象。
optional< status > test();
确定此请求关联的通信是否已成功完成。如果已完成,则返回描述通信的 status
对象。否则,返回一个空的 optional<>
以表示通信尚未完成。请注意,一旦 test()
返回 status
对象,则请求已完成,不应调用 wait()
。
void cancel();
取消挂起的通信,假设它尚未完成。
optional< MPI_Request & > trivial();
实现此请求的简单 MPI 请求,前提是它很简单。可能与大多数用户无关。
bool active() const;
此请求是否可能挂起?
void preserve(boost::shared_ptr< void > d);
request
公共静态函数template<typename T> static request make_trivial_send(communicator const & comm, int dest, int tag, T const & value);
在一个 MPI 请求中发送已知数量的基本对象。
template<typename T> static request make_trivial_send(communicator const & comm, int dest, int tag, T const * values, int n);
static request make_packed_send(communicator const & comm, int dest, int tag, void const * values, std::size_t n);
static request make_bottom_send(communicator const & comm, int dest, int tag, MPI_Datatype tp);
static request make_empty_send(communicator const & comm, int dest, int tag);
template<typename T> static request make_trivial_recv(communicator const & comm, int dest, int tag, T & value);
在一个 MPI 请求中接收已知数量的基本对象。
template<typename T> static request make_trivial_recv(communicator const & comm, int dest, int tag, T * values, int n);
static request make_bottom_recv(communicator const & comm, int dest, int tag, MPI_Datatype tp);
static request make_empty_recv(communicator const & comm, int dest, int tag);
static request make_dynamic();
构造未知大小的简单数据请求。
template<typename T> static request make_serialized(communicator const & comm, int source, int tag, T & value);
构造序列化数据请求。
template<typename T> static request make_serialized_array(communicator const & comm, int source, int tag, T * values, int n);
构造复杂数据数组的请求。
template<typename T, typename A> static request make_dynamic_primitive_array_recv(communicator const & comm, int source, int tag, std::vector< T, A > & values);
请求接收基本数据数组。
template<typename T, typename A> static request make_dynamic_primitive_array_send(communicator const & comm, int source, int tag, std::vector< T, A > const & values);
请求发送基本数据数组。