dox/Parallel/vtkMPICommunicator.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00038
#ifndef __vtkMPICommunicator_h
00039
#define __vtkMPICommunicator_h
00040
00041
#include "vtkCommunicator.h"
00042
00043
class vtkMPIController;
00044
class vtkMPIGroup;
00045
00046
class vtkMPICommunicatorOpaqueRequest;
00047
class vtkMPICommunicatorOpaqueComm;
00048
00049 class VTK_PARALLEL_EXPORT vtkMPICommunicator :
public vtkCommunicator
00050 {
00051
public:
00052 vtkTypeRevisionMacro( vtkMPICommunicator,
vtkCommunicator);
00053
00055
static vtkMPICommunicator*
New();
00056
00059
static vtkMPICommunicator* GetWorldCommunicator();
00060
00061
virtual void PrintSelf(ostream& os,
vtkIndent indent);
00062
00067
int Initialize(vtkMPICommunicator* mpiComm,
vtkMPIGroup* group);
00068
00070
00072
virtual int Send(
int* data,
int length,
int remoteProcessId,
int tag);
00073
virtual int Send(
unsigned long* data,
int length,
int remoteProcessId,
00074
int tag);
00075
virtual int Send(
char* data,
int length,
int remoteProcessId,
int tag);
00076
virtual int Send(
unsigned char* data,
int length,
int remoteProcessId,
00077
int tag);
00078
virtual int Send(
float* data,
int length,
int remoteProcessId,
00079
int tag);
00080
virtual int Send(
double* data,
int length,
int remoteProcessId,
00081
int tag);
00082
#ifdef VTK_USE_64BIT_IDS
00083
virtual int Send(
vtkIdType* data,
int length,
int remoteProcessId,
00084
int tag);
00086
#endif
00087 virtual int Send(
vtkDataObject* data,
int remoteProcessId,
int tag)
00088 {
return this->
vtkCommunicator::Send(data, remoteProcessId, tag); }
00089 virtual int Send(
vtkDataArray* data,
int remoteProcessId,
int tag)
00090 {
return this->
vtkCommunicator::Send(data, remoteProcessId, tag); }
00091
00092
00093
00094 class VTK_PARALLEL_EXPORT Request
00095 {
00096
public:
00097 Request();
00098 ~Request();
00099
int Test();
00100
void Cancel();
00101
void Wait();
00102 vtkMPICommunicatorOpaqueRequest* Req;
00103 };
00104
00105
00106
00108
00112
int NoBlockSend(
int* data,
int length,
int remoteProcessId,
int tag,
00113 Request& req);
00114
int NoBlockSend(
unsigned long* data,
int length,
int remoteProcessId,
00115
int tag, Request& req);
00116
int NoBlockSend(
char* data,
int length,
int remoteProcessId,
00117
int tag, Request& req);
00118
int NoBlockSend(
float* data,
int length,
int remoteProcessId,
00119
int tag, Request& req);
00121
00123
00125
virtual int Receive(
int* data,
int length,
int remoteProcessId,
00126
int tag);
00127
virtual int Receive(
unsigned long* data,
int length,
00128
int remoteProcessId,
int tag);
00129
virtual int Receive(
char* data,
int length,
int remoteProcessId,
00130
int tag);
00131
virtual int Receive(
unsigned char* data,
int length,
int remoteProcessId,
00132
int tag);
00133
virtual int Receive(
float* data,
int length,
int remoteProcessId,
00134
int tag);
00135
virtual int Receive(
double* data,
int length,
int remoteProcessId,
00136
int tag);
00137
#ifdef VTK_USE_64BIT_IDS
00138
virtual int Receive(
vtkIdType* data,
int length,
int remoteProcessId,
00139
int tag);
00141
#endif
00142 virtual int Receive(
vtkDataObject* data,
int remoteProcessId,
int tag)
00143 {
return this->
vtkCommunicator::Receive(data, remoteProcessId, tag); }
00144 virtual int Receive(
vtkDataArray* data,
int remoteProcessId,
int tag)
00145 {
return this->
vtkCommunicator::Receive(data, remoteProcessId, tag); }
00146
00148
00151
int NoBlockReceive(
int* data,
int length,
int remoteProcessId,
00152
int tag, Request& req);
00153
int NoBlockReceive(
unsigned long* data,
int length,
00154
int remoteProcessId,
int tag, Request& req);
00155
int NoBlockReceive(
char* data,
int length,
int remoteProcessId,
00156
int tag, Request& req);
00157
int NoBlockReceive(
float* data,
int length,
int remoteProcessId,
00158
int tag, Request& req);
00160
00161
00163
00164
int Broadcast(
int* data ,
int length,
int root);
00165
int Broadcast(
unsigned long* data,
int length,
int root);
00166
int Broadcast(
char* data ,
int length,
int root);
00167
int Broadcast(
float* data ,
int length,
int root);
00168
int Broadcast(
double* data ,
int length,
int root);
00170
00171
00173
00175
int Gather(
int* data ,
int* to ,
int length,
int root);
00176
int Gather(
unsigned long* data,
unsigned long* to,
int length,
int root);
00177
int Gather(
char* data ,
char* to ,
int length,
int root);
00178
int Gather(
float* data ,
float* to ,
int length,
int root);
00179
int Gather(
double* data ,
double* to ,
int length,
int root);
00181
00183
00190
int GatherV(
int* data,
int* to,
00191
int sendlength,
int* recvlengths,
int* offsets,
int root);
00192
int GatherV(
unsigned long* data,
unsigned long* to,
00193
int sendlength,
int* recvlengths,
int* offsets,
int root);
00194
int GatherV(
char* data,
char* to,
00195
int sendlength,
int* recvlengths,
int* offsets,
int root);
00196
int GatherV(
float* data,
float* to,
00197
int sendlength,
int* recvlengths,
int* offsets,
int root);
00198
int GatherV(
double* data,
double* to,
00199
int sendlength,
int* recvlengths,
int* offsets,
int root);
00201
00202
00204
00208
int AllGather(
int* data ,
int* to ,
int length);
00209
int AllGather(
unsigned long* data,
unsigned long* to,
int length);
00210
int AllGather(
char* data ,
char* to ,
int length);
00211
int AllGather(
float* data ,
float* to ,
int length);
00212
int AllGather(
double* data ,
double* to ,
int length);
00214
00216
00220
int AllGatherV(
int* data,
int* to,
00221
int sendlength,
int* recvlengths,
int* recvOffsets);
00222
int AllGatherV(
unsigned long* data,
unsigned long* to,
00223
int sendlength,
int* recvlengths,
int* recvOffsets);
00224
int AllGatherV(
char* data,
char* to,
00225
int sendlength,
int* recvlengths,
int* recvOffsets);
00226
int AllGatherV(
float* data,
float* to,
00227
int sendlength,
int* recvlengths,
int* recvOffsets);
00228
int AllGatherV(
double* data,
double* to,
00229
int sendlength,
int* recvlengths,
int* recvOffsets);
00231
00233
00234
int ReduceMax(
int* data,
int* to,
int size,
int root);
00235
int ReduceMax(
long* data,
long* to,
int size,
int root);
00236
int ReduceMax(
float* data,
float* to,
int size,
int root);
00237
int ReduceMax(
double* data,
double* to,
int size,
int root);
00239
00240
int ReduceMin(
int* data,
int* to,
int size,
int root);
00241
int ReduceMin(
long* data,
long* to,
int size,
int root);
00242
int ReduceMin(
float* data,
float* to,
int size,
int root);
00243
int ReduceMin(
double* data,
double* to,
int size,
int root);
00244
00245
int ReduceSum(
int* data,
int* to,
int size,
int root);
00246
int ReduceSum(
long* data,
long* to,
int size,
int root);
00247
int ReduceSum(
float* data,
float* to,
int size,
int root);
00248
int ReduceSum(
double* data,
double* to,
int size,
int root);
00249
00250
int ReduceAnd(
bool* data,
bool* to,
int size,
int root);
00251
int ReduceOr(
bool* data,
bool* to,
int size,
int root);
00252
00253
00254
00255
00256
friend class vtkMPIController;
00257
00258 vtkMPICommunicatorOpaqueComm* GetMPIComm()
00259 {
00260
return this->Comm;
00261 }
00262
00263
00264
00265
static char* Allocate(size_t size);
00266
static void Free(
char* ptr);
00267
00268
00269
protected:
00270 vtkMPICommunicator();
00271 ~vtkMPICommunicator();
00272
00273
virtual void SetGroup(
vtkMPIGroup*);
00274
00276
00283 vtkSetMacro(KeepHandle,
int);
00284 vtkBooleanMacro(KeepHandle,
int);
00286
00287
00288 static vtkMPICommunicator* WorldCommunicator;
00289
00290
void InitializeCopy(vtkMPICommunicator* source);
00291
00296
void CopyFrom(vtkMPICommunicator* source);
00297
00304
void Duplicate(vtkMPICommunicator* source);
00305
00306 vtkMPICommunicatorOpaqueComm* Comm;
00307 vtkMPIGroup* Group;
00308
00309 int Initialized;
00310 int KeepHandle;
00311
00312
static int CheckForMPIError(
int err);
00313
00314
private:
00315 vtkMPICommunicator(
const vtkMPICommunicator&);
00316
void operator=(
const vtkMPICommunicator&);
00317 };
00318
00319
00320
#endif // __vtkMPICommunicator_h
00321
00322
00323
00324