⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 message.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
📖 第 1 页 / 共 2 页
字号:
    virtual void recvt(int type, long* data, int ndata);    virtual void recvt(int type, float* data, int ndata);    void recvt(int type, double& data) { recvt(type,&data,1); }    void recvt(int type, int& data) { recvt(type,&data,1); }    virtual void raw_recvt(int type, void* data, int nbyte) = 0;    /// Ask if a given typed message has been received.    virtual int probet(int type) = 0;    /** Do broadcasts of various types of data.        Similar members exist for each of the basic types. */    virtual void bcast(double* data, int ndata, int from = 0);    virtual void bcast(unsigned int* data, int ndata, int from = 0);    virtual void bcast(int* data, int ndata, int from = 0);    virtual void bcast(char* data, int nbyte, int from = 0);    virtual void bcast(unsigned char* data, int nbyte, int from = 0);    virtual void bcast(signed char* data, int nbyte, int from = 0);    virtual void bcast(short* data, int ndata, int from = 0);    virtual void bcast(long* data, int ndata, int from = 0);    virtual void bcast(float* data, int ndata, int from = 0);    virtual void raw_bcast(void* data, int nbyte, int from = 0);    void bcast(double& data, int from = 0) { bcast(&data, 1, from); }    void bcast(int& data, int from = 0) { bcast(&data, 1, from); }    /** Collect data distributed on the nodes to a big array replicated        on each node. */    virtual void raw_collect(const void *part, const int *lengths,                             void *whole, int bytes_per_datum=1);    void collect(const double *part, const int *lengths, double *whole);    /** Global sum reduction.        Similar members exist for each of the basic types. */    virtual void sum(double* data, int n, double* = 0, int target = -1);    virtual void sum(unsigned int* data, int n, unsigned int* = 0, int target = -1);    virtual void sum(int* data, int n, int* = 0, int target = -1);    virtual void sum(char* data, int n, char* = 0, int target = -1);    virtual void sum(unsigned char* data, int n,                     unsigned char* = 0, int target = -1);    virtual void sum(signed char* data, int n,                     signed char* = 0, int target = -1);    void sum(double& data) { sum(&data, 1); }    void sum(int& data) { sum(&data, 1); }    /** Global maximization.        Similar members exist for each of the basic types. */    virtual void max(double* data, int n, double* = 0, int target = -1);    virtual void max(int* data, int n, int* = 0, int target = -1);    virtual void max(unsigned int* data, int n, unsigned int* = 0, int target = -1);    virtual void max(char* data, int n, char* = 0, int target = -1);    virtual void max(unsigned char* data, int n,                     unsigned char* = 0, int target = -1);    virtual void max(signed char* data, int n,                     signed char* = 0, int target = -1);    void max(double& data) { max(&data, 1); }    void max(int& data) { max(&data, 1); }    /** Global minimization.        Similar members exist for each of the basic types. */    virtual void min(double* data, int n, double* = 0, int target = -1);    virtual void min(int* data, int n, int* = 0, int target = -1);    virtual void min(unsigned int* data, int n, unsigned int* = 0, int target = -1);    virtual void min(char* data, int n, char* = 0, int target = -1);    virtual void min(unsigned char* data, int n,                     unsigned char* = 0, int target = -1);    virtual void min(signed char* data, int n,                     signed char* = 0, int target = -1);    void min(double& data) { min(&data, 1); }    void min(int& data) { min(&data, 1); }    /** Global generic reduction.        Similar members exist for each of the basic types. */    virtual void reduce(double*, int n, GrpReduce<double>&,                        double*scratch = 0, int target = -1);    virtual void reduce(int*, int n, GrpReduce<int>&,                        int*scratch = 0, int target = -1);    virtual void reduce(unsigned int*, int n, GrpReduce<unsigned int>&,                        unsigned int*scratch = 0, int target = -1);    virtual void reduce(char*, int n, GrpReduce<char>&,                        char*scratch = 0, int target = -1);    virtual void reduce(unsigned char*, int n, GrpReduce<unsigned char>&,                        unsigned char*scratch = 0, int target = -1);    virtual void reduce(signed char*, int n, GrpReduce<signed char>&,                        signed char*scratch = 0, int target = -1);    virtual void reduce(short*, int n, GrpReduce<short>&,                        short*scratch = 0, int target = -1);    virtual void reduce(float*, int n, GrpReduce<float>&,                        float*scratch = 0, int target = -1);    virtual void reduce(long*, int n, GrpReduce<long>&,                        long*scratch = 0, int target = -1);    void reduce(double& data, GrpReduce<double>& r) { reduce(&data, 1, r); }    void reduce(int& data, GrpReduce<int>& r) { reduce(&data, 1, r); }    /// Synchronize all of the processors.    virtual void sync();    /** Each message group maintains an association of ClassDesc with        a global index so SavableState information can be sent between        nodes without needing to send the classname and look up the        ClassDesc with each transfer.  These routines return information        about that mapping. */    int classdesc_to_index(const ClassDesc*);    const ClassDesc* index_to_classdesc(int);    int nclass() const { return nclass_; }};struct message_struct {  void *buf;  int size;  int type;  struct message_struct *p;  };typedef struct message_struct message_t;/** ProcMessageGrp provides a concrete specialization    of MessageGrp that supports only one node. */class ProcMessageGrp: public MessageGrp {  private:    // Messages are stored in these linked lists    message_t *sync_messages;    message_t *type_messages;    void sendit(message_t *& messages, int dest, int msgtype, void* buf, int bytes);    void recvit(message_t *& messages, int source, int type, void* buf, int bytes,                int& last_size, int& last_type);          public:    ProcMessageGrp();    ProcMessageGrp(const Ref<KeyVal>&);    ~ProcMessageGrp();    Ref<MessageGrp> clone(void);        void raw_send(int target, void* data, int nbyte);    void raw_sendt(int target, int type, void* data, int nbyte);    void raw_recv(int sender, void* data, int nbyte);    void raw_recvt(int type, void* data, int nbyte);    void raw_bcast(void* data, int nbyte, int from);    int probet(int type);    void sync();};/** Uses integer message types to send and receive messages.    Message group specializations that use the MPI library    and the Paragon NX can be conveniently implemented in terms    of this. */class intMessageGrp: public MessageGrp {  protected:    int msgtype_nbit; // the total number of bits available    int ctl_nbit; // control information bits    int seq_nbit; // sequence information bits    int typ_nbit; // type information bits    int src_nbit; // source information bits    // Masks for the fields in the type.    int ctl_mask;    int seq_mask;    int typ_mask;    int src_mask;    // Shifts to construct a message type.    int ctl_shift;    int seq_shift;    int typ_shift;    int src_shift;    int msgtype_typ(int msgtype);    int typ_msgtype(int usrtype);    int seq_msgtype(int source, int seq);    // The next sequence number for each node is stored in these.    int *source_seq;    int *target_seq;        /// Must be implemented by specializations.    virtual void basic_send(int target, int type, void* data, int nbyte) = 0;    /// Must be implemented by specializations.    virtual void basic_recv(int type, void* data, int nbyte) = 0;    /// Must be implemented by specializations.    virtual int basic_probe(int type) = 0;    intMessageGrp();    intMessageGrp(const Ref<KeyVal>&);    void initialize(int me, int n, int nbits);  public:    ~intMessageGrp();    void raw_send(int target, void* data, int nbyte);    void raw_recv(int sender, void* data, int nbyte);    void raw_sendt(int target, int type, void* data, int nbyte);    void raw_recvt(int type, void* data, int nbyte);    int probet(int);    int leftover_ctl_bits();};}#include <util/group/messaget.h>#endif// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -