artdaq  v2_03_00
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
Public Member Functions | List of all members
artdaq::MPITransfer Class Reference

MPITransfer is a TransferInterface implementation plugin that transfers data using MPI. More...

#include <artdaq/TransferPlugins/MPITransfer.hh>

+ Inheritance diagram for artdaq::MPITransfer:

Public Member Functions

 MPITransfer (fhicl::ParameterSet pset, Role role)
 MPITransfer Constructor. More...
 
virtual ~MPITransfer ()
 MPITransfer Destructor.
 
CopyStatus copyFragment (Fragment &frag, size_t timeout_usec) override
 Copy a Fragment to the destination. Forces asynchronous send. More...
 
CopyStatus moveFragment (Fragment &&frag, size_t timeout_usec) override
 Move a Fragment to the destination. More...
 
int receiveFragment (Fragment &frag, size_t timeout_usec) override
 Receive a Fragment using MPI. More...
 
- Public Member Functions inherited from artdaq::TransferInterface
 TransferInterface (const fhicl::ParameterSet &ps, Role role)
 TransferInterface Constructor. More...
 
 TransferInterface (const TransferInterface &)=delete
 Copy Constructor is deleted.
 
TransferInterfaceoperator= (const TransferInterface &)=delete
 Copy Assignment operator is deleted. More...
 
virtual ~TransferInterface ()=default
 Default virtual Destructor.
 
virtual int receiveFragment (artdaq::Fragment &fragment, size_t receiveTimeout)=0
 Receive a Fragment from the transport mechanism. More...
 
virtual CopyStatus copyFragment (artdaq::Fragment &fragment, size_t send_timeout_usec=std::numeric_limits< size_t >::max())=0
 Copy a Fragment to the destination. May not necessarily be reliable. More...
 
virtual CopyStatus moveFragment (artdaq::Fragment &&fragment, size_t send_timeout_usec=std::numeric_limits< size_t >::max())=0
 Move a Fragment to the destination. This should be reliable, if the underlying transport mechanism supports reliable sending. More...
 
std::string uniqueLabel () const
 Get the unique label of this TransferInterface instance. More...
 
virtual int source_rank () const
 Get the source rank for this TransferInterface instance. More...
 
virtual int destination_rank () const
 Get the destination rank for this TransferInterface instance. More...
 

Additional Inherited Members

- Public Types inherited from artdaq::TransferInterface
enum  Role { Role::kSend, Role::kReceive }
 Used to determine if a TransferInterface is a Sender or Receiver. More...
 
enum  CopyStatus { CopyStatus::kSuccess, CopyStatus::kTimeout, CopyStatus::kErrorNotRequiringException }
 Returned from the send functions, this enumeration describes the possible return codes. If an exception occurs, it will be thrown and should be handled normally. More...
 
- Static Public Attributes inherited from artdaq::TransferInterface
static const int RECV_TIMEOUT = 0xfedcba98
 Value to be returned upon receive timeout. Because receivers otherwise return rank, this is also the limit on the number of ranks that artdaq currently supports.
 
- Protected Member Functions inherited from artdaq::TransferInterface
Role role () const
 Get the TransferInterface::Role of this TransferInterface. More...
 
- Protected Attributes inherited from artdaq::TransferInterface
size_t buffer_count_
 The number of Fragment transfers the TransferInterface can handle simultaneously.
 
const size_t max_fragment_size_words_
 The maximum size of the transferred Fragment objects, in artdaq::Fragment::RawDataType words.
 

Detailed Description

MPITransfer is a TransferInterface implementation plugin that transfers data using MPI.

Definition at line 24 of file MPITransfer.hh.

Constructor & Destructor Documentation

artdaq::MPITransfer::MPITransfer ( fhicl::ParameterSet  pset,
TransferInterface::Role  role 
)

MPITransfer Constructor.

Parameters
psetParameterSet used to configure MPITransfer
roleRole of this MPITransfer instance (kSend or kReceive)
* MPITransfer accepts the following Parameters:
* "synchronous_sends" (Default: true): When false, use MPI_ISend, otherwise, use MPI_SSend
* 

MPITransfer also requires all Parameters for configuring a TransferInterface

Definition at line 21 of file MPI_transfer.cc.

Member Function Documentation

artdaq::TransferInterface::CopyStatus artdaq::MPITransfer::copyFragment ( Fragment &  frag,
size_t  timeout_usec 
)
override

Copy a Fragment to the destination. Forces asynchronous send.

Parameters
fragFragment to copy
timeout_usecTimeout for send, in microseconds
Returns
CopyStatus detailing result of copy

Definition at line 446 of file MPI_transfer.cc.

artdaq::TransferInterface::CopyStatus artdaq::MPITransfer::moveFragment ( Fragment &&  frag,
size_t  timeout_usec 
)
override

Move a Fragment to the destination.

Parameters
fragFragment to move
timeout_usecTimeout for send, in microseconds
Returns
CopyStatus detailing result of copy

Definition at line 439 of file MPI_transfer.cc.

int artdaq::MPITransfer::receiveFragment ( Fragment &  frag,
size_t  timeout_usec 
)
override

Receive a Fragment using MPI.

Parameters
[out]fragReceived Fragment
timeout_usecTimeout for receive, in microseconds
Returns
Rank of sender or RECV_TIMEOUT

Definition at line 92 of file MPI_transfer.cc.


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