Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

vtkMPIController Class Reference

Process communication using MPI. More...

#include <vtkMPIController.h>

Inheritance diagram for vtkMPIController:

Inheritance graph
[legend]
Collaboration diagram for vtkMPIController:

Collaboration graph
[legend]
List of all members.

Public Methods

virtual const char * GetClassName ()
virtual int IsA (const char *type)
void PrintSelf (ostream &os, vtkIndent indent)
virtual void Initialize (int *argc, char ***arcv)
virtual void Finalize ()
virtual void SingleMethodExecute ()
virtual void MultipleMethodExecute ()
void Barrier ()
virtual void CreateOutputWindow ()
void SetCommunicator (vtkMPICommunicator *comm)
int NoBlockSend (int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockSend (unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockSend (char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockSend (float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockReceive (int *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockReceive (unsigned long *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockReceive (char *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)
int NoBlockReceive (float *data, int length, int remoteProcessId, int tag, vtkMPICommunicator::Request &req)

Static Public Methods

vtkMPIController * New ()
int IsTypeOf (const char *type)
vtkMPIController * SafeDownCast (vtkObject *o)
char * ErrorString (int err)

Protected Methods

 vtkMPIController ()
 ~vtkMPIController ()
int InitializeNumberOfProcesses ()
void InitializeCommunicator (vtkMPICommunicator *comm)
void InitializeRMICommunicator ()

Static Protected Attributes

vtkMPICommunicatorWorldRMICommunicator
int Initialized

Detailed Description

Process communication using MPI.

Date:
2001/11/13 14:25:57
Revision:
1.7

vtkMPIController is a concrete class which implements the abstract multi-process control methods defined in vtkMultiProcessController using MPI (Message Passing Interface) cf. Using MPI / Portable Parallel Programming with the Message-Passing Interface, Gropp et al, MIT Press. It also provide functionality specific to MPI and not present in vtkMultiProcessController. Before any MPI communication can occur Initialize() must be called by all processes. It is required to be called once, controllers created after this need not call Initialize(). At the end of the program Finalize() must be called by all processes. The use of user-defined communicators are supported with vtkMPICommunicator and vtkMPIGroup. Note that a duplicate of the user defined communicator is used for internal communications (RMIs). This communicator has the same properties as the user one except that it has a new context which prevents the two communicators from interfering with each other.

See also:
vtkOutputPort vtkInputPort vtkMultiProcessController vtkMPICommunicator vtkMPIGroup
Examples:
vtkMPIController (Examples)
Tests:
vtkMPIController (Tests)

Definition at line 84 of file vtkMPIController.h.


Constructor & Destructor Documentation

vtkMPIController::vtkMPIController   [protected]
 

vtkMPIController::~vtkMPIController   [protected]
 


Member Function Documentation

vtkMPIController* vtkMPIController::New   [static]
 

Create an object with Debug turned off, modified time initialized to zero, and reference counting on.

Reimplemented from vtkMultiProcessController.

virtual const char* vtkMPIController::GetClassName   [virtual]
 

Return the class name as a string. This method is defined in all subclasses of vtkObject with the vtkTypeMacro found in vtkSetGet.h.

Reimplemented from vtkMultiProcessController.

int vtkMPIController::IsTypeOf const char *    type [static]
 

Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.

Reimplemented from vtkMultiProcessController.

virtual int vtkMPIController::IsA const char *    type [virtual]
 

Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.

Reimplemented from vtkMultiProcessController.

vtkMPIController* vtkMPIController::SafeDownCast vtkObject   o [static]
 

Will cast the supplied object to vtkObject* is this is a safe operation (i.e., a safe downcast); otherwise NULL is returned. This method is defined in all subclasses of vtkObject with the vtkTypeMacro found in vtkSetGet.h.

Reimplemented from vtkMultiProcessController.

void vtkMPIController::PrintSelf ostream &    os,
vtkIndent    indent
[virtual]
 

Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from vtkMultiProcessController.

virtual void vtkMPIController::Initialize int *    argc,
char ***    arcv
[virtual]
 

This method is for setting up the processes. It needs to be called only once during program execution. Calling it more than once will have no effect. Controllers created after this call will be initialized automatically (i.e. they will have the proper LocalProcessId and NumberOfProcesses). The addresses of argc and argv should be passed to this method otherwise command line arguments will not be correct (because usually MPI implementations add their own arguments during startup).

virtual void vtkMPIController::Finalize   [virtual]
 

This method is for cleaning up and has to be called before the end of the program if MPI was initialized with Initialize()

Reimplemented from vtkMultiProcessController.

virtual void vtkMPIController::SingleMethodExecute   [virtual]
 

Execute the SingleMethod (as define by SetSingleMethod) using this->NumberOfProcesses processes.

Reimplemented from vtkMultiProcessController.

virtual void vtkMPIController::MultipleMethodExecute   [virtual]
 

Execute the MultipleMethods (as define by calling SetMultipleMethod for each of the required this->NumberOfProcesses methods) using this->NumberOfProcesses processes.

Reimplemented from vtkMultiProcessController.

void vtkMPIController::Barrier   [virtual]
 

This method can be used to synchronize MPI processes in the current communicator. This uses the user communicator.

Reimplemented from vtkMultiProcessController.

virtual void vtkMPIController::CreateOutputWindow   [virtual]
 

This method can be used to tell the controller to create a special output window in which all messages are preceded by the process id.

Reimplemented from vtkMultiProcessController.

char* vtkMPIController::ErrorString int    err [static]
 

Given an MPI error code, return a string which contains an error message. This string has to be freed by the user.

void vtkMPIController::SetCommunicator vtkMPICommunicator   comm
 

MPIController uses this communicator in all sends and receives. By default, MPI_COMM_WORLD is used. THIS SHOULD ONLY BE CALLED ON THE PROCESSES INCLUDED IN THE COMMUNICATOR. FOR EXAMPLE, IF THE COMMUNICATOR CONTAINES PROCESSES 0 AND 1, INVOKING THIS METHOD ON ANY OTHER PROCESS WILL CAUSE AN MPI ERROR AND POSSIBLY LEAD TO A CRASH.

int vtkMPIController::NoBlockSend int *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method sends data to another process (non-blocking). Tag eliminates ambiguity when multiple sends or receives exist in the same process. The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 144 of file vtkMPIController.h.

int vtkMPIController::NoBlockSend unsigned long *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method sends data to another process (non-blocking). Tag eliminates ambiguity when multiple sends or receives exist in the same process. The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 148 of file vtkMPIController.h.

int vtkMPIController::NoBlockSend char *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method sends data to another process (non-blocking). Tag eliminates ambiguity when multiple sends or receives exist in the same process. The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 152 of file vtkMPIController.h.

int vtkMPIController::NoBlockSend float *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method sends data to another process (non-blocking). Tag eliminates ambiguity when multiple sends or receives exist in the same process. The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 156 of file vtkMPIController.h.

int vtkMPIController::NoBlockReceive int *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method receives data from a corresponding send (non-blocking). The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 167 of file vtkMPIController.h.

int vtkMPIController::NoBlockReceive unsigned long *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method receives data from a corresponding send (non-blocking). The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 171 of file vtkMPIController.h.

int vtkMPIController::NoBlockReceive char *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method receives data from a corresponding send (non-blocking). The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 176 of file vtkMPIController.h.

int vtkMPIController::NoBlockReceive float *    data,
int    length,
int    remoteProcessId,
int    tag,
vtkMPICommunicator::Request   req
[inline]
 

This method receives data from a corresponding send (non-blocking). The last argument, vtkMPICommunicator::Request& req can later be used (with req.Test() ) to test the success of the message. Note: These methods delegate to the communicator

Definition at line 180 of file vtkMPIController.h.

int vtkMPIController::InitializeNumberOfProcesses   [protected]
 

void vtkMPIController::InitializeCommunicator vtkMPICommunicator   comm [protected]
 

void vtkMPIController::InitializeRMICommunicator   [protected]
 


Member Data Documentation

vtkMPICommunicator* vtkMPIController::WorldRMICommunicator [static, protected]
 

Definition at line 210 of file vtkMPIController.h.

int vtkMPIController::Initialized [static, protected]
 

Definition at line 213 of file vtkMPIController.h.


The documentation for this class was generated from the following file:
Generated on Thu Mar 28 14:36:44 2002 for VTK by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001