ESyS-Particle  2.3
mpisgbuf.h
Go to the documentation of this file.
1 // //
3 // Copyright (c) 2003-2014 by The University of Queensland //
4 // Centre for Geoscience Computing //
5 // http://earth.uq.edu.au/centre-geoscience-computing //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 #ifndef __MPISGBUF_H
14 #define __MPISGBUF_H
15 
16 #include <mpi.h>
17 #include <string>
18 #include "Parallel/mpibuf.h"
19 
29 {
30 protected:
31  MPI_Comm m_comm;
32  int m_rank;
33  int m_size;
35  MPI_Status m_status;
36 
37 public:
38  AMPISGBufferRoot(MPI_Comm);
39  virtual ~AMPISGBufferRoot(){};
40 
41  virtual void clear()=0;
42  virtual void gather()=0;
43  virtual void scatter()=0;
44  virtual void append(int,int)=0;
45  virtual void append(double,int)=0;
46  virtual void append(const char*,int)=0;
47  virtual void append(const Vec3 &,int);
48  virtual int pop_int(int)=0;
49  virtual double pop_double(int)=0;
50  virtual void pop_doubles(int,double *,int)=0;
51  virtual Vec3 pop_vector(int);
52  const MPI_Status& status(){return m_status;};
53 };
54 
64 {
65  protected:
66  int m_root;
68 
69 public:
70  AMPISGBufferLeaf(MPI_Comm,int);
71  virtual ~AMPISGBufferLeaf(){};
72 
73  virtual void clear()=0;
74  virtual void send()=0;
75  virtual void receive()=0;
76  virtual void append(int)=0;
77  virtual void append(double)=0;
78  virtual int pop_int()=0;
79  virtual double pop_double()=0;
80  virtual void pop_doubles(double *,int)=0;
81  virtual std::string pop_string()=0;
82  const MPI_Status& status(){return m_status;};
83 };
84 
94 {
95 private:
96  char* m_buffer;
99  int *m_position;
100 
101 public:
102  CMPISGBufferRoot(MPI_Comm,int);
103  virtual ~CMPISGBufferRoot();
104 
105  virtual void clear();
106  virtual void gather();
107  virtual void scatter();
108  virtual void append(int,int);
109  virtual void append(double,int);
110  virtual void append(const char*,int);
111  virtual int pop_int(int);
112  virtual double pop_double(int);
113  virtual void pop_doubles(int,double *,int);
114 };
115 
125 {
126 private:
127  char* m_buffer;
130 
131 public:
132  CMPISGBufferLeaf(MPI_Comm,int,int);
133  virtual ~CMPISGBufferLeaf();
134 
135  virtual void clear();
136  virtual void send();
137  virtual void receive();
138  virtual void append(int);
139  virtual void append(double);
140  virtual void append(const char*);
141  virtual int pop_int();
142  virtual double pop_double();
143  virtual void pop_doubles(double *,int);
144  virtual std::string pop_string();
145 };
146 
147 #endif // __MPISGBUF_H
virtual ~CMPISGBufferRoot()
Definition: mpisgbuf.cpp:65
int m_dbl_increment
the "packing size" of int/double
Definition: mpisgbuf.h:67
virtual ~CMPISGBufferLeaf()
Definition: mpisgbuf.cpp:208
virtual void clear()
Definition: mpisgbuf.cpp:72
virtual void clear()=0
virtual void clear()=0
Definition: vec3.h:46
int * m_position
the current end of the content in each slice
Definition: mpisgbuf.h:99
virtual void scatter()=0
int m_rank
the rank in this communicator
Definition: mpisgbuf.h:32
virtual void pop_doubles(int, double *, int)=0
virtual void send()
Definition: mpisgbuf.cpp:221
virtual int pop_int(int)=0
char * m_buffer
Definition: mpisgbuf.h:127
virtual void scatter()
Definition: mpisgbuf.cpp:90
int m_dbl_increment
the "packing size" of int/double
Definition: mpisgbuf.h:34
virtual int pop_int()
Definition: mpisgbuf.cpp:272
AMPISGBufferLeaf(MPI_Comm, int)
Definition: mpisgbuf.cpp:181
virtual void pop_doubles(int, double *, int)
Definition: mpisgbuf.cpp:168
virtual void receive()=0
virtual ~AMPISGBufferRoot()
Definition: mpisgbuf.h:39
virtual double pop_double()=0
virtual void clear()
Definition: mpisgbuf.cpp:213
virtual void append(int, int)
Definition: mpisgbuf.cpp:103
Abstract base class for MPI send/recv buffer.
Definition: mpibuf.h:33
MPI_Status m_status
Definition: mpisgbuf.h:35
virtual int pop_int(int)
Definition: mpisgbuf.cpp:143
virtual Vec3 pop_vector(int)
Definition: mpisgbuf.cpp:40
char * m_dummy_buffer
dummy buffer sent by root to itself
Definition: mpisgbuf.h:97
virtual void append(int)=0
int m_int_increment
Definition: mpisgbuf.h:34
virtual double pop_double()
Definition: mpisgbuf.cpp:286
int m_buffersize
the size of the buffer per slice
Definition: mpisgbuf.h:98
CMPISGBufferRoot(MPI_Comm, int)
Definition: mpisgbuf.cpp:54
virtual ~AMPISGBufferLeaf()
Definition: mpisgbuf.h:71
virtual int pop_int()=0
int m_position
the current end of the content
Definition: mpisgbuf.h:129
char * m_buffer
Definition: mpisgbuf.h:96
Buffer for MPI scatter/gather, leaf component.
Definition: mpisgbuf.h:124
int m_int_increment
Definition: mpisgbuf.h:67
Abstract base class for scatter/gather buffer, leaf component.
Definition: mpisgbuf.h:63
virtual void gather()
Definition: mpisgbuf.cpp:82
CMPISGBufferLeaf(MPI_Comm, int, int)
Definition: mpisgbuf.cpp:197
virtual void append(int)
Definition: mpisgbuf.cpp:239
const MPI_Status & status()
Definition: mpisgbuf.h:52
int m_root
rank of the root process
Definition: mpisgbuf.h:66
virtual void append(int, int)=0
virtual void pop_doubles(double *, int)
Definition: mpisgbuf.cpp:294
virtual double pop_double(int)
Definition: mpisgbuf.cpp:160
int m_buffersize
the size of the buffer
Definition: mpisgbuf.h:128
Abstract base class for scatter/gather buffer, root component.
Definition: mpisgbuf.h:28
virtual void receive()
Definition: mpisgbuf.cpp:229
MPI_Status m_status
Definition: mpibuf.h:37
virtual void send()=0
virtual std::string pop_string()=0
MPI_Comm m_comm
the MPI communicator used for the scatter/gather operations
Definition: mpisgbuf.h:31
Buffer for MPI scatter/gather, root component.
Definition: mpisgbuf.h:93
const MPI_Status & status()
Definition: mpisgbuf.h:82
AMPISGBufferRoot(MPI_Comm)
Definition: mpisgbuf.cpp:24
virtual std::string pop_string()
Definition: mpisgbuf.cpp:305
virtual double pop_double(int)=0
int m_size
size of the communicator
Definition: mpisgbuf.h:33
virtual void pop_doubles(double *, int)=0
virtual void gather()=0