OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ossimMpiSlaveOverviewSequencer Class Reference

#include <ossimMpiSlaveOverviewSequencer.h>

Inheritance diagram for ossimMpiSlaveOverviewSequencer:
ossimOverviewSequencer ossimReferenced ossimErrorStatusInterface

Public Member Functions

 ossimMpiSlaveOverviewSequencer ()
 default constructor More...
 
virtual bool isMaster () const
 
virtual void initialize ()
 This must be called. More...
 
virtual void setToStartOfSequence ()
 Will set the internal pointers to the upperleft tile number. More...
 
virtual void slaveProcessTiles ()
 This is a trigger to start resampling tiles. More...
 
- Public Member Functions inherited from ossimOverviewSequencer
 ossimOverviewSequencer ()
 default constructor More...
 
ossim_uint32 getNumberOfTiles () const
 
ossim_uint32 getNumberOfTilesHorizontal () const
 
ossim_uint32 getNumberOfTilesVertical () const
 
virtual void getOutputImageRectangle (ossimIrect &rect) const
 Gets the zero-based image rectangle for the output reduced resolution data set (rrds). More...
 
void setImageHandler (ossimImageHandler *input)
 Sets the input source or connection. More...
 
void setBitMaskObjects (ossimBitMaskWriter *mask_writer, ossimMaskFilter *mask_filter)
 Enabled the generation of an alpha (bit) mask such that any full or partial null pixels will be masked out. More...
 
void setSourceLevel (ossim_uint32 level)
 Sets the input source resolution to decimate from. More...
 
ossimHistogramMode getHistogramMode () const
 Gets the histogram accumulation mode. More...
 
void setHistogramMode (ossimHistogramMode mode)
 Sets the histogram accumulation mode. More...
 
void writeHistogram ()
 Write histogram method. More...
 
void writeHistogram (const ossimFilename &file)
 Write histogram method that takes a file name. More...
 
virtual ossimRefPtr< ossimImageDatagetNextTile ()
 Will allow you to get the next tile in the sequence. More...
 
ossimIpt getTileSize () const
 
void setTileSize (const ossimIpt &pt)
 updated the tile size. More...
 
void setResampleType (ossimFilterResampler::ossimFilterResamplerType resampleType)
 Sets the resampling type. More...
 
void setScanForMinMax (bool flag)
 Turn on/off scan for min max flag. More...
 
bool getScanForMinMax () const
 
void setScanForMinMaxNull (bool flag)
 Turn on/off scan for min, max, null flag. More...
 
bool getScanForMinMaxNull () const
 
bool writeOmdFile (const std::string &file)
 Writes an ossim metadata(omd) file with min, max, null values. More...
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 
- Public Member Functions inherited from ossimErrorStatusInterface
 ossimErrorStatusInterface ()
 
virtual ~ossimErrorStatusInterface ()
 
virtual ossimErrorCode getErrorStatus () const
 
virtual ossimString getErrorStatusString () const
 
virtual void setErrorStatus (ossimErrorCode error_status) const
 
virtual void setErrorStatus () const
 
virtual void clearErrorStatus () const
 
bool hasError () const
 
virtual std::ostream & print (std::ostream &out) const
 Outputs theErrorStatus as an ossimErrorCode and an ossimString. More...
 

Protected Member Functions

virtual ~ossimMpiSlaveOverviewSequencer ()
 virtual destructor More...
 
- Protected Member Functions inherited from ossimOverviewSequencer
virtual ~ossimOverviewSequencer ()
 virtual destructor More...
 
void getInputTileRectangle (ossimIrect &inputRect) const
 Gets the image rectangle for the input tile for theCurrentTileNumber. More...
 
void getOutputTileRectangle (ossimIrect &outputRect) const
 Gets the image rectangle for the output tile for theCurrentTileNumber. More...
 
void updateTileDimensions ()
 Updates theNumberOfTilesHorizontal and theNumberOfTilesVertical. More...
 
void resampleTile (const ossimImageData *inputTile)
 Resamples a patch of data. More...
 
template<class T >
void resampleTile (const ossimImageData *inputTile, T dummy)
 
void clearMinMaxNullArrays ()
 Clears out the arrays from a scan for min, max, nulls. More...
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 

Protected Attributes

int m_rank
 
int m_numberOfProcessors
 
- Protected Attributes inherited from ossimOverviewSequencer
ossimRefPtr< ossimImageHandlerm_imageHandler
 
ossimRefPtr< ossimBitMaskWriterm_maskWriter
 
ossimRefPtr< ossimMaskFilterm_maskFilter
 
ossimRefPtr< ossimImageDatam_tile
 
ossimIrect m_areaOfInterest
 
ossimIpt m_tileSize
 
ossim_uint32 m_numberOfTilesHorizontal
 
ossim_uint32 m_numberOfTilesVertical
 
ossim_uint32 m_currentTileNumber
 
ossim_uint32 m_sourceResLevel
 This is the resolution level to build overviews from. More...
 
bool m_dirtyFlag
 Dirty flag - if true, this object is not initialized. More...
 
ossim_int32 m_decimationFactor
 TODO make this handle any decimation. More...
 
ossimFilterResampler::ossimFilterResamplerType m_resampleType
 Currently only handles NEAREST_NEIGHBOR and BOX (default = BOX) More...
 
ossimRefPtr< ossimMultiBandHistogramm_histogram
 
ossimHistogramMode m_histoMode
 
ossim_uint32 m_histoTileIndex
 Used to determine which tiles to accumulate a histogram from. More...
 
bool m_scanForMinMax
 Control flags for min, max, null scanning. More...
 
bool m_scanForMinMaxNull
 
std::vector< ossim_float64m_minValues
 Arrays o hold the min value for each band for scan min/max methods. More...
 
std::vector< ossim_float64m_maxValues
 
std::vector< ossim_float64m_nulValues
 
- Protected Attributes inherited from ossimErrorStatusInterface
ossimErrorCode theErrorStatus
 

Detailed Description

Definition at line 21 of file ossimMpiSlaveOverviewSequencer.h.

Constructor & Destructor Documentation

◆ ossimMpiSlaveOverviewSequencer()

ossimMpiSlaveOverviewSequencer::ossimMpiSlaveOverviewSequencer ( )

default constructor

Definition at line 26 of file ossimMpiSlaveOverviewSequencer.cpp.

References ossimOverviewSequencer::m_currentTileNumber, m_numberOfProcessors, and m_rank.

27  :
29  m_rank(0),
31 {
32 #if OSSIM_HAS_MPI
33  MPI_Comm_rank(MPI_COMM_WORLD, &m_rank);
34  MPI_Comm_size(MPI_COMM_WORLD, &m_numberOfProcessors);
35 #endif
36 
37  if( m_rank != 0 )
38  {
39  //---
40  // Master process (rank 0) does not resample tiles so our process rank
41  // is 1 then we'll start at tile 0, rank 2 starts at 1, rank 3 starts
42  // at 2 and so on...
43  //---
45  }
46  else
47  {
49  }
50 }
ossimOverviewSequencer()
default constructor

◆ ~ossimMpiSlaveOverviewSequencer()

ossimMpiSlaveOverviewSequencer::~ossimMpiSlaveOverviewSequencer ( )
protectedvirtual

virtual destructor

Definition at line 52 of file ossimMpiSlaveOverviewSequencer.cpp.

53 {
54 }

Member Function Documentation

◆ initialize()

void ossimMpiSlaveOverviewSequencer::initialize ( )
virtual

This must be called.

We can only initialize this object completely if we know all connections are valid. Some other object drives this and so the connection's initialize will be called after. The job of this connection is to set up the sequence. It will default to the bounding rect. The area of interest can be set to some other rectagle (use setAreaOfInterest).

Reimplemented from ossimOverviewSequencer.

Definition at line 61 of file ossimMpiSlaveOverviewSequencer.cpp.

References ossimOverviewSequencer::initialize(), ossimOverviewSequencer::m_currentTileNumber, and m_rank.

◆ isMaster()

bool ossimMpiSlaveOverviewSequencer::isMaster ( ) const
virtual
Returns
Always false for this implementation.

Reimplemented from ossimOverviewSequencer.

Definition at line 56 of file ossimMpiSlaveOverviewSequencer.cpp.

57 {
58  return false;
59 }

◆ setToStartOfSequence()

void ossimMpiSlaveOverviewSequencer::setToStartOfSequence ( )
virtual

Will set the internal pointers to the upperleft tile number.

To go to the next tile in the sequence just call getNextTile.

Reimplemented from ossimOverviewSequencer.

Definition at line 68 of file ossimMpiSlaveOverviewSequencer.cpp.

References ossimOverviewSequencer::m_currentTileNumber, and m_rank.

69 {
70  if(m_rank != 0)
71  {
72  //---
73  // Subtract one since the masters job is just writing and not issue
74  // getTiles.
75  //---
77  }
78  else
79  {
80  // the master will start at 0
82  }
83 }

◆ slaveProcessTiles()

void ossimMpiSlaveOverviewSequencer::slaveProcessTiles ( )
virtual

This is a trigger to start resampling tiles.

Reimplemented from ossimOverviewSequencer.

Definition at line 85 of file ossimMpiSlaveOverviewSequencer.cpp.

References ossim::byteOrder(), ossimImageData::getBuf(), ossimOverviewSequencer::getNextTile(), ossimOverviewSequencer::getNumberOfTiles(), ossimImageSource::getOutputScalarType(), ossimRectilinearDataObject::getScalarType(), ossimImageData::getSize(), ossimImageData::getSizeInBytes(), ossimOverviewSequencer::m_currentTileNumber, ossimOverviewSequencer::m_imageHandler, m_numberOfProcessors, ossimOverviewSequencer::m_tile, OSSIM_BIG_ENDIAN, OSSIM_UINT8, ossimEndian::swap(), and ossimRefPtr< T >::valid().

86 {
87 #if OSSIM_HAS_MPI
88 
89  //---
90  // Bytes must be swapped to big endian (network byte order) if the scalar
91  // type is not 8 bit and the system byte order is little endian. We will
92  // use the endian pointer itself as a flag to swap.
93  //---
94  ossimEndian* endian = 0;
95  if (m_imageHandler.valid())
96  {
98  {
100  {
101  endian = new ossimEndian();
102  }
103  }
104  }
105 
106  // Total number of tiles for all processes.
107  ossim_uint32 numberOfTiles = getNumberOfTiles();
108 
109  int errorValue; // Needed for MPI_Isend and MPI_Wait.
110  MPI_Request request; // Needed for MPI_Isend and MPI_Wait.
111 
112  while(m_currentTileNumber < numberOfTiles)
113  {
115 
116  void* buf = data->getBuf();
117 
118  // Data always sent in big endian byte order.
119  if (endian)
120  {
121  endian->swap(m_tile->getScalarType(), buf, m_tile->getSize());
122  }
123 
124  // Send the buffer to the master process.
125  request = MPI_REQUEST_NULL;
126  errorValue = MPI_Isend(buf,
127  data->getSizeInBytes(),
128  MPI_UNSIGNED_CHAR,
129  0,
130  0,
131  MPI_COMM_WORLD,
132  &request);
133 
134  //---
135  // Wait for send to complete before we overwrite the buffer with the
136  // next tile.
137  //---
138  errorValue = MPI_Wait(&request, MPI_STATUS_IGNORE);
139 
140  //---
141  // If we have eight processes only seven are used for resampling tiles,
142  // so we would process every seventh tile.
143  //
144  // The call to getNextTile has already incremented m_currentTileNumber
145  // by one so adjust accordingly.
146  //---
147  if (m_numberOfProcessors>2)
148  {
150  }
151 
152  } // End of while loop through number of tiles.
153 
154  // cleanup...
155  if (endian)
156  {
157  delete endian;
158  endian = 0;
159  }
160 
161 #endif /* End of #if OSSIM_HAS_MPI */
162 
163 }
bool valid() const
Definition: ossimRefPtr.h:75
ossimRefPtr< ossimImageData > m_tile
ossimRefPtr< ossimImageHandler > m_imageHandler
OSSIM_DLL ossimByteOrder byteOrder()
Definition: ossimCommon.cpp:54
ossim_uint32 getNumberOfTiles() const
virtual ossim_uint32 getSizeInBytes() const
Returns the total number of bytes for all bands.
unsigned int ossim_uint32
virtual ossimRefPtr< ossimImageData > getNextTile()
Will allow you to get the next tile in the sequence.
virtual ossimScalarType getScalarType() const
virtual ossimScalarType getOutputScalarType() const
This will be used to query the output pixel type of the tile source.
virtual ossim_uint32 getSize() const
Returns the total number of pixels in a tile for all bands.
virtual const void * getBuf() const
8 bit unsigned integer
void swap(ossim_sint8 &)
Definition: ossimEndian.h:26

Member Data Documentation

◆ m_numberOfProcessors

int ossimMpiSlaveOverviewSequencer::m_numberOfProcessors
protected

◆ m_rank

int ossimMpiSlaveOverviewSequencer::m_rank
protected

The documentation for this class was generated from the following files: