STIR  6.2.0
Namespaces | Macros
distributed_functions.h File Reference

Declaration of functions in the distributed namespace. More...

#include "mpi.h"
#include "stir/shared_ptr.h"
#include "stir/recon_buildblock/ProjectorByBinPair.h"
#include "stir/DiscretisedDensity.h"
#include "stir/RelatedViewgrams.h"
#include "stir/Viewgram.h"
#include "stir/VoxelsOnCartesianGrid.h"
#include "stir/ProjDataInfo.h"

Go to the source code of this file.

Namespaces

 distributed
 Namespace for distributed computation with MPI.
 
 stir
 Namespace for the STIR library (and some/most of its applications)
 

Macros

#define STIR_MPI
 Precompiler-define that needs to be set to enable the parallel version of stir::distributable_computation.
 
#define STIR_MPI_TIMINGS
 Precompiler-define that needs to be set to enable timings in the parallel version of stir::distributable_computation. More...
 

Variables

Tag-names currently used by functions in the distributed namespace
const int distributed::INT_TAG = 7
 
const int distributed::ARBITRARY_TAG = 8
 special tag, equivalent to MPI_ANY_TAG in some functions
 
const int distributed::STIR_MPI_CONF_TAG = 9
 
const int distributed::IMAGE_ESTIMATE_TAG = 23
 
const int distributed::IMAGE_PARAMETER_TAG = 24
 
const int distributed::VIEWGRAM_DIMENSIONS_TAG = 27
 
const int distributed::VIEWGRAM_TAG = 28
 
const int distributed::VIEWGRAM_COUNT_TAG = 29
 
const int distributed::PROJECTION_DATA_INFO_TAG = 30
 
const int distributed::PARAMETER_INFO_TAG = 21
 
const int distributed::REGISTERED_NAME_TAG = 25
 

Global variables used for STIR_MPI

int distributed::num_processors
 the number of processes used for distributed computation
 
bool distributed::first_iteration
 some stuff in distributable_computation needs to be done only in the first iteration
 
bool distributed::test = false
 enable/disable tests
 
bool distributed::rpc_time = false
 
bool distributed::test_send_receive_times = false
 enable timings for PRC_process_related_viewgrams_gradient() computation
 
double distributed::total_rpc_time = 0
 enable timings for every single send/receive operation
 
double distributed::total_rpc_time_2 = 0.0
 adding up the time used for PRC_process_related_viewgrams_gradient() computation at all slaves
 
double distributed::total_rpc_time_slaves = 0.0
 adding up the time used for PRC_process_related_viewgrams_gradient() computation at a single slave
 
double distributed::min_threshold = 0.1
 value to reduce the total_rpc_time values
 
void distributed::send_int_value (int value, int destination)
 threshold for displaying send/receive times, initially set to 0.1 seconds More...
 
void distributed::send_string (const std::string &str, int tag, int destination)
 sends or broadcasts a string More...
 
void distributed::send_bool_value (bool value, int tag, int destination)
 send or broadcast a bool value More...
 
void distributed::send_int_values (int *values, int count, int tag, int destination)
 sends or broadcasts some integer values More...
 
void distributed::send_double_values (double *values, int count, int tag, int destination)
 send or broadcast double values More...
 
void distributed::send_view_segment_numbers (const stir::ViewSegmentNumbers &vs_num, int tag, int destination)
 send or broadcast ViewSegmentNumbers object More...
 
void distributed::send_projectors (const stir::shared_ptr< stir::ProjectorByBinPair > &proj_pair_sptr, int destination)
 send or broadcast a projector-pair object More...
 
void distributed::send_image_parameters (const stir::DiscretisedDensity< 3, float > *input_image_ptr, int tag, int destination)
 sends or broadcasts the parameters of a DiscretisedDensity object More...
 
void distributed::send_image_estimate (const stir::DiscretisedDensity< 3, float > *input_image_ptr, int destination)
 sends or broadcasts the values of a DiscretisedDensity object More...
 
void distributed::send_exam_and_proj_data_info (const stir::ExamInfo &exam_info, const stir::ProjDataInfo &proj_data_info, int destination)
 sends or broadcasts the information from ExamInfo and ProjDataInfo More...
 
void distributed::send_related_viewgrams (stir::RelatedViewgrams< float > *viewgrams, int destination)
 sends a RelatedViegrams object More...
 
void distributed::send_viewgram (const stir::Viewgram< float > &viewgram, int destination)
 sends a Viewgram object More...
 
int distributed::receive_int_value (int source)
 receives a single integer value More...
 
std::string distributed::receive_string (int tag, int source)
 receives a string More...
 
void distributed::receive_and_initialize_projectors (stir::shared_ptr< stir::ProjectorByBinPair > &projector_pair_ptr, int source)
 receives all needed information to subsequently construct a ProjectorByBinPair object More...
 
bool distributed::receive_bool_value (int tag, int source)
 receives a bool value More...
 
MPI_Status distributed::receive_int_values (int *values, int count, int tag)
 receives some integer values More...
 
MPI_Status distributed::receive_double_values (double *values, int count, int tag)
 receives some double values More...
 
MPI_Status distributed::receive_view_segment_numbers (stir::ViewSegmentNumbers &vs_num, int tag)
 receive a ViewSegmentNumbers object More...
 
void distributed::receive_and_set_image_parameters (stir::shared_ptr< stir::DiscretisedDensity< 3, float >> &image_ptr, int &buffer, int tag, int source)
 receives the parameters of a DiscretisedDensity object More...
 
MPI_Status distributed::receive_image_values_and_fill_image_ptr (stir::shared_ptr< stir::DiscretisedDensity< 3, float >> &image_ptr, int buffer_size, int source)
 receives the values of a DiscretisedDensity object More...
 
void distributed::receive_and_construct_exam_and_proj_data_info_ptr (stir::shared_ptr< stir::ExamInfo > &exam_info_sptr, stir::shared_ptr< stir::ProjDataInfo > &proj_data_info_sptr, int source)
 receives information of ExamInfo and ProjDataInfo objects and constructs new ones from it More...
 
void distributed::receive_and_construct_related_viewgrams (stir::RelatedViewgrams< float > *&viewgrams, const stir::shared_ptr< stir::ProjDataInfo > &proj_data_info_ptr, const stir::shared_ptr< stir::DataSymmetriesForViewSegmentNumbers > symmetries_sptr, int source)
 receives and constructs a RelatedViewgrams object More...
 
void distributed::receive_and_construct_viewgram (stir::Viewgram< float > *&viewgram, const stir::shared_ptr< stir::ProjDataInfo > &proj_data_info_ptr, int source)
 receives a Viewgram object More...
 
void distributed::reduce_received_output_image (stir::DiscretisedDensity< 3, float > *output_image_ptr, int destination)
 the function called by the master to reduce the output image More...
 
void distributed::reduce_output_image (stir::shared_ptr< stir::DiscretisedDensity< 3, float >> &output_image_ptr, int image_buffer_size, int my_rank, int destination)
 the function called by the slaves to reduce the output image More...
 

Detailed Description

Declaration of functions in the distributed namespace.

Author
Tobias Beisel
Kris Thielemans

Macro Definition Documentation

◆ STIR_MPI_TIMINGS

#define STIR_MPI_TIMINGS

Precompiler-define that needs to be set to enable timings in the parallel version of stir::distributable_computation.

The functions in the distributable namespace can include run-time measurements included which print times from start to end of a single Send or Receive command. This will uncover some maybe unnecessary long waiting times. It was actually used while developing the parallel version to check whether some code rearrangements would lead to faster computation. To enable these timings, compile the MPI-Version with the preprocessor variable STIR_MPI_TIMINGS defined.

If compiled with STIR_MPI_TIMINGS defined, you still have the possibility to enable/disable the timings by using the parsing parameter (for stir::stir::PoissonLogLikelihoodWithLinearModelForMeanAndProjData).

enable message timings := 1

To give the printed times a threshold use

message timings threshold := 0.1