Boost C++ 库

……是世界上最受推崇、设计最精良的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

类请求 - Boost C++ 函数库
PrevUpHomeNext

类请求

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 *);
};

描述

此结构包含有关非阻塞发送或接收的信息,并分别从 isendirecv 返回。

request 公共成员函数

  1. request();

    构造一个 NULL 请求。

  2. status wait();

    等待此请求关联的通信完成,然后返回一个描述通信的 status 对象。

  3. optional< status > test();

    确定此请求关联的通信是否已成功完成。如果已完成,则返回描述通信的 status 对象。否则,返回一个空的 optional<> 以表示通信尚未完成。请注意,一旦 test() 返回 status 对象,则请求已完成,不应调用 wait()

  4. void cancel();

    取消挂起的通信,假设它尚未完成。

  5. optional< MPI_Request & > trivial();

    实现此请求的简单 MPI 请求,前提是它很简单。可能与大多数用户无关。

  6. bool active() const;

    此请求是否可能挂起?

  7. void preserve(boost::shared_ptr< void > d);

request 公共静态函数

  1. template<typename T> 
      static request 
      make_trivial_send(communicator const & comm, int dest, int tag, 
                        T const & value);

    在一个 MPI 请求中发送已知数量的基本对象。

  2. template<typename T> 
      static request 
      make_trivial_send(communicator const & comm, int dest, int tag, 
                        T const * values, int n);
  3. static request 
    make_packed_send(communicator const & comm, int dest, int tag, 
                     void const * values, std::size_t n);
  4. static request 
    make_bottom_send(communicator const & comm, int dest, int tag, 
                     MPI_Datatype tp);
  5. static request make_empty_send(communicator const & comm, int dest, int tag);
  6. template<typename T> 
      static request 
      make_trivial_recv(communicator const & comm, int dest, int tag, T & value);

    在一个 MPI 请求中接收已知数量的基本对象。

  7. template<typename T> 
      static request 
      make_trivial_recv(communicator const & comm, int dest, int tag, T * values, 
                        int n);
  8. static request 
    make_bottom_recv(communicator const & comm, int dest, int tag, 
                     MPI_Datatype tp);
  9. static request make_empty_recv(communicator const & comm, int dest, int tag);
  10. static request make_dynamic();

    构造未知大小的简单数据请求。

  11. template<typename T> 
      static request 
      make_serialized(communicator const & comm, int source, int tag, T & value);

    构造序列化数据请求。

  12. template<typename T> 
      static request 
      make_serialized_array(communicator const & comm, int source, int tag, 
                            T * values, int n);

    构造复杂数据数组的请求。

  13. template<typename T, typename A> 
      static request 
      make_dynamic_primitive_array_recv(communicator const & comm, int source, 
                                        int tag, std::vector< T, A > & values);

    请求接收基本数据数组。

  14. 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);

    请求发送基本数据数组。

request 私有成员函数

  1. request(handler * h);

PrevUpHomeNext