Xmipp  v3.23.11-Nereus
Classes | Macros | Functions
Collaboration diagram for MPI:

Classes

class  MpiNode
 
class  MpiTaskDistributor
 
class  MpiFileMutex
 
class  XmippMpiProgram
 
class  MpiMetadataProgram
 
class  BasicMpiMetadataProgram< BASE_CLASS >
 

Macros

#define TAG_WORK   0
 
#define TAG_STOP   1
 
#define TAG_WAIT   2
 
#define TAG_WORK_REQUEST   100
 
#define TAG_WORK_RESPONSE   101
 

Functions

void xmipp_MPI_Reduce (void *send_data, void *recv_data, size_t count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm communicator, size_t blockSize=1048576)
 

Detailed Description

Macro Definition Documentation

◆ TAG_STOP

#define TAG_STOP   1

Definition at line 79 of file xmipp_mpi.h.

◆ TAG_WAIT

#define TAG_WAIT   2

Definition at line 80 of file xmipp_mpi.h.

◆ TAG_WORK

#define TAG_WORK   0

Definition at line 78 of file xmipp_mpi.h.

◆ TAG_WORK_REQUEST

#define TAG_WORK_REQUEST   100

Definition at line 82 of file xmipp_mpi.h.

◆ TAG_WORK_RESPONSE

#define TAG_WORK_RESPONSE   101

Definition at line 83 of file xmipp_mpi.h.

Function Documentation

◆ xmipp_MPI_Reduce()

void xmipp_MPI_Reduce ( void *  send_data,
void *  recv_data,
size_t  count,
MPI_Datatype  datatype,
MPI_Op  op,
int  root,
MPI_Comm  communicator,
size_t  blockSize = 1048576 
)

MPI Reduce with memory constraint. MPI_Reduce may give a segmentation fault when sharing large objects

Definition at line 331 of file xmipp_mpi.cpp.

340 {
341  int type_size;
342  MPI_Type_size(datatype,&type_size);
343  size_t quotient=count/blockSize;
344  if (quotient>0)
345  {
346  for (size_t c=0; c<quotient; c++)
347  MPI_Reduce((unsigned char*)(send_data)+c*blockSize*size_t(type_size),
348  (unsigned char*)(recv_data)+c*blockSize*size_t(type_size),
349  blockSize,datatype,op,root,communicator);
350  }
351  size_t remainder=count%blockSize;
352  if (remainder>0)
353  MPI_Reduce((unsigned char*)(send_data)+quotient*blockSize*size_t(type_size),
354  (unsigned char*)(recv_data)+quotient*blockSize*size_t(type_size),
355  remainder,datatype,op,root,communicator);
356 }
doublereal * c