43#ifndef vtkMPIController_h
44#define vtkMPIController_h
47#include "vtkParallelMPIModule.h"
77 int* vtkNotUsed(argc),
char*** vtkNotUsed(argv),
int initializedExternally)
override;
91 void Finalize(
int finalizedExternally)
override;
147 ->NoBlockSend(data, length, remoteProcessId, tag, req);
149 int NoBlockSend(
const unsigned long* data,
int length,
int remoteProcessId,
int tag,
153 ->NoBlockSend(data, length, remoteProcessId, tag, req);
159 ->NoBlockSend(data, length, remoteProcessId, tag, req);
161 int NoBlockSend(
const unsigned char* data,
int length,
int remoteProcessId,
int tag,
165 ->NoBlockSend(data, length, remoteProcessId, tag, req);
171 ->NoBlockSend(data, length, remoteProcessId, tag, req);
177 ->NoBlockSend(data, length, remoteProcessId, tag, req);
179#ifdef VTK_USE_64BIT_IDS
180 int NoBlockSend(
const vtkIdType* data,
int length,
int remoteProcessId,
int tag,
184 ->NoBlockSend(data, length, remoteProcessId, tag, req);
200 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
206 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
212 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
218 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
224 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
230 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
232#ifdef VTK_USE_64BIT_IDS
237 ->NoBlockReceive(data, length, remoteProcessId, tag, req);
255 int Iprobe(
int source,
int tag,
int* flag,
int* actualSource,
int* type,
int* size)
258 ->Iprobe(
source, tag, flag, actualSource, type, size);
260 int Iprobe(
int source,
int tag,
int* flag,
int* actualSource,
unsigned long* type,
int* size)
263 ->Iprobe(
source, tag, flag, actualSource, type, size);
265 int Iprobe(
int source,
int tag,
int* flag,
int* actualSource,
const char* type,
int* size)
268 ->Iprobe(
source, tag, flag, actualSource, type, size);
270 int Iprobe(
int source,
int tag,
int* flag,
int* actualSource,
float* type,
int* size)
273 ->Iprobe(
source, tag, flag, actualSource, type, size);
275 int Iprobe(
int source,
int tag,
int* flag,
int* actualSource,
double* type,
int* size)
278 ->Iprobe(
source, tag, flag, actualSource, type, size);
361 int remoteProcessId,
void* arg,
int argLength,
int rmiTag,
bool propagate)
override;
370 friend class vtkMPIOutputWindow;
375 static char ProcessorName[];
a simple class to control print indentation
dynamic, self-adjusting array of int
Class for creating user defined MPI communicators.
Process communication using MPI.
int Iprobe(int source, int tag, int *flag, int *actualSource, int *type, int *size)
int WaitAll(const int count, vtkMPICommunicator::Request requests[])
Given the request objects of a set of non-blocking operations (send and/or receive) this method block...
int NoBlockReceive(char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
~vtkMPIController() override
int WaitSome(const int count, vtkMPICommunicator::Request requests[], vtkIntArray *completed)
Blocks until one or more of the specified requests in the given request request array completes.
void InitializeCommunicator(vtkMPICommunicator *comm)
int NoBlockSend(const char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int Iprobe(int source, int tag, int *flag, int *actualSource, double *type, int *size)
void Finalize() override
This method is for cleaning up and has to be called before the end of the program if MPI was initiali...
int NoBlockSend(const unsigned char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int Iprobe(int source, int tag, int *flag, int *actualSource, const char *type, int *size)
void CreateOutputWindow() override
This method can be used to tell the controller to create a special output window in which all message...
int NoBlockReceive(float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
static int UseSsendForRMI
When set, TriggerRMI uses Ssend instead of Send.
bool TestSome(const int count, vtkMPICommunicator::Request requests[], vtkIntArray *completed)
Return true iff one or more of the communicator request objects is complete.
bool TestAny(const int count, vtkMPICommunicator::Request requests[], int &idx)
Returns true iff at least one of the communication request objects is complete.
static vtkMPICommunicator * WorldRMICommunicator
void SetCommunicator(vtkMPICommunicator *comm)
MPIController uses this communicator in all sends and receives.
int NoBlockSend(const float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
void Initialize(int *argc, char ***argv) override
This method is for setting up the processes.
vtkMPIController * CreateSubController(vtkProcessGroup *group) override
Creates a new controller with the processes specified by the given group.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int Iprobe(int source, int tag, int *flag, int *actualSource, float *type, int *size)
void Initialize(int *vtkNotUsed(argc), char ***vtkNotUsed(argv), int initializedExternally) override
This method is for setting up the processes.
vtkMPIController * PartitionController(int localColor, int localKey) override
Partitions this controller based on a coloring.
void Finalize(int finalizedExternally) override
This method is for cleaning up.
int NoBlockReceive(double *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
static const char * GetProcessorName()
int NoBlockReceive(unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
static char * ErrorString(int err)
Given an MPI error code, return a string which contains an error message.
void SingleMethodExecute() override
Execute the SingleMethod (as define by SetSingleMethod) using this->NumberOfProcesses processes.
static vtkMPIController * New()
int NoBlockSend(const int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method sends data to another process (non-blocking).
int WaitAny(const int count, vtkMPICommunicator::Request requests[], int &idx)
Blocks until one of the specified requests in the given request array completes.
static void SetUseSsendForRMI(int use_send)
When set to 1, TriggerRMI uses Ssend() instead of Send() calls.
int NoBlockReceive(int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
This method receives data from a corresponding send (non-blocking).
int NoBlockReceive(unsigned char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int Iprobe(int source, int tag, int *flag, int *actualSource)
Nonblocking test for a message.
void TriggerRMIInternal(int remoteProcessId, void *arg, int argLength, int rmiTag, bool propagate) override
Implementation for TriggerRMI() provides subclasses an opportunity to modify the behaviour eg.
int NoBlockSend(const double *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
bool TestAll(const int count, vtkMPICommunicator::Request requests[])
Returns true iff all of the communication request objects are complete.
virtual void Initialize()
Same as Initialize(0, 0, 1).
static int GetUseSsendForRMI()
int NoBlockSend(const unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
void MultipleMethodExecute() override
Execute the MultipleMethods (as define by calling SetMultipleMethod for each of the required this->Nu...
int Iprobe(int source, int tag, int *flag, int *actualSource, unsigned long *type, int *size)
void InitializeRMICommunicator()
Multiprocessing communication superclass.
A subgroup of processes from a communicator.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_SIZEHINT(...)