Hedgehog  0.0.0
A library to generate hybrid pipeline workflow systems
hh::core::CoreQueueSender< NodeOutput > Class Template Reference

Sender for nodes possessing a queue of data. More...

#include "core_queue_sender.h"

Inheritance diagram for hh::core::CoreQueueSender< NodeOutput >:
Inheritance graph
Collaboration diagram for hh::core::CoreQueueSender< NodeOutput >:
Collaboration graph

Public Member Functions

 CoreQueueSender (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreQueueSender constructor. More...
 
 ~CoreQueueSender () override
 CoreQueueSender destructor.
 
virtual std::shared_ptr< std::set< CoreQueueReceiver< NodeOutput > * > > const & destinations () const
 Destination accessor. More...
 
void addReceiver (CoreReceiver< NodeOutput > *receiver) override
 Add a receiver to the set of receivers. More...
 
void removeReceiver (CoreReceiver< NodeOutput > *receiver) override
 Remove a receiver from the set of receivers. More...
 
void sendAndNotify (std::shared_ptr< NodeOutput > ptr) final
 Send a data to the list of destinations, and notify them. More...
 
void visit (AbstractPrinter *printer) override
 Special visit method for a CoreQueueSender, printing an edge. More...
 
std::set< CoreSender< NodeOutput > * > getSenders () override
 Get inner CoreSender i.e. this. More...
 
void copyInnerStructure (CoreQueueSender< NodeOutput > *rhs)
 Copy the inner structure of a CoreQueueSender (destinations, and notifier) More...
 
- Public Member Functions inherited from hh::core::CoreSender< NodeOutput >
 CoreSender (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreSender constructor. More...
 
 ~CoreSender () override
 CoreSender destructor.
 
void duplicateEdge (CoreNode *duplicateNode, std::map< CoreNode *, std::shared_ptr< CoreNode >> &correspondenceMap) override
 Duplicate all the edges from this to it's copy duplicateNode. More...
 
- Public Member Functions inherited from hh::core::CoreNotifier
 CoreNotifier ()=delete
 Deleted default constructor.
 
 CoreNotifier (std::string_view const &name, NodeType const type, size_t const numberThreads)
 Notifier constructor. More...
 
 ~CoreNotifier () override
 Notifier destructor.
 
- Public Member Functions inherited from hh::core::CoreNode
 CoreNode ()=delete
 Deleted default constructor.
 
 CoreNode (std::string_view const &name, NodeType const type, size_t numberThreads)
 Core node only constructor. More...
 
virtual ~CoreNode ()
 Default virtual destructor.
 
virtual std::shared_ptr< CoreNodeclone ()=0
 Virtual constructor for copy. More...
 
virtual std::string id () const
 Unique Id accessor. More...
 
virtual std::vector< std::pair< std::string, std::string > > ids () const
 Input node ids [nodeId, nodeIdCluster] accessor. More...
 
std::string_view const & name () const
 Node name accessor. More...
 
NodeType type () const
 Node type accessor. More...
 
bool isInside () const
 Node inside property accessor. More...
 
bool hasBeenRegistered () const
 Node registration property accessor. More...
 
CoreNodecoreClusterNode () const
 Main cluster core node link to this node accessor. More...
 
int threadId () const
 Thread id accessor. More...
 
size_t numberThreads () const
 Number of threads associated accessor. More...
 
CoreNodebelongingNode () const
 Belonging node accessor. More...
 
std::shared_ptr< std::multimap< CoreNode *, std::shared_ptr< CoreNode > > > const & insideNodes () const
 Inside node accessor. More...
 
std::shared_ptr< std::multimap< CoreNode *, std::shared_ptr< CoreNode > > > & insideNodes ()
 Inside nodes accessor. More...
 
std::chrono::duration< uint64_t, std::micro > const & executionTime () const
 Execution time accessor. More...
 
std::chrono::duration< uint64_t, std::micro > const & waitTime () const
 Wait time accessor. More...
 
std::chrono::duration< uint64_t, std::micro > const & memoryWaitTime () const
 Memory wait time accessor. More...
 
bool isInCluster () const
 In cluster property accessor. More...
 
bool isActive () const
 Is active property accessor. More...
 
bool isCudaRelated () const
 Is related to CUDA, used to have a green background on the dot file. More...
 
virtual int graphId ()
 Graph id accessor. More...
 
virtual int deviceId ()
 Device id accessor. More...
 
virtual std::chrono::duration< uint64_t, std::micro > maxExecutionTime () const
 Maximum execution time accessor. More...
 
virtual std::chrono::duration< uint64_t, std::micro > minExecutionTime () const
 Minimum execution time accessor. More...
 
virtual std::chrono::duration< uint64_t, std::micro > maxWaitTime () const
 Maximum waiting time accessor. More...
 
virtual std::chrono::duration< uint64_t, std::micro > minWaitTime () const
 Minimum waiting time accessor. More...
 
std::chrono::time_point< std::chrono::high_resolution_clock > const & creationTimeStamp () const
 Creation timestamp accessor. More...
 
std::chrono::time_point< std::chrono::high_resolution_clock > const & startExecutionTimeStamp () const
 Execution start timestamp accessor. More...
 
std::chrono::duration< uint64_t, std::micro > const & creationDuration () const
 Creation duration accessor. More...
 
std::chrono::duration< uint64_t, std::micro > const & executionDuration () const
 Execution duration accessor. More...
 
std::chrono::duration< uint64_t, std::micro > meanExecTimeCluster () const
 Compute and return the mean execution time for all tasks in the node cluster. More...
 
std::chrono::duration< uint64_t, std::micro > meanWaitTimeCluster () const
 Compute and return the mean wait time for all tasks in the node cluster. More...
 
std::chrono::duration< uint64_t, std::micro > meanMemoryWaitTimeCluster () const
 Compute and return the mean memory wait time for all tasks in the node cluster. More...
 
uint64_t stdvExecTimeCluster () const
 Compute and return the standard deviation execution time for all tasks in the node cluster. More...
 
uint64_t stdvWaitTimeCluster () const
 Compute and return the standard deviation wait time for all tasks in the node cluster. More...
 
uint64_t stdvMemoryWaitTimeCluster () const
 Compute and return the standard deviation memory wait time for all tasks in the node cluster. More...
 
std::pair< uint64_t, uint64_t > minmaxWaitTimeCluster () const
 Compute and return the min and max wait time for all tasks in the node cluster. More...
 
std::pair< uint64_t, uint64_t > minmaxMemoryWaitTimeCluster () const
 Compute and return the min and max memory wait time for all tasks in the node cluster. More...
 
std::pair< uint64_t, uint64_t > minmaxExecTimeCluster () const
 Compute and return the min and max execution time for all tasks in the node cluster. More...
 
size_t numberActiveThreadInCluster () const
 Compute and return the number of active nodes in a cluster. More...
 
virtual std::string extraPrintingInformation ()
 Extra printing information accessor. More...
 
void startExecutionTimeStamp (std::chrono::time_point< std::chrono::high_resolution_clock > const &startExecutionTimeStamp)
 Execution timestamp setter. More...
 
virtual void deviceId (int deviceId)
 Device id setter. More...
 
virtual void setInside ()
 Set the node as inside, (inside a graph)
 
void setInCluster ()
 Set the task as part of a cluster.
 
void threadId (uint8_t threadId)
 Set the thread id. More...
 
void coreClusterNode (CoreNode *coreClusterNode)
 Set the main cluster node to associate to this node. More...
 
void name (std::string_view const &name)
 Name node setter. More...
 
void numberThreads (size_t numberThreads)
 Number of threads setter. More...
 
void belongingNode (CoreNode *belongingNode)
 Belonging node setter. More...
 
void hasBeenRegistered (bool hasBeenRegistered)
 Has been registered property setter. More...
 
void isActive (bool isActive)
 Is active property setter. More...
 
void isCudaRelated (bool isCudaRelated)
 Is CUDA related property setter. More...
 
void isInside (bool isInside)
 Set the node as being inside another one. More...
 
void creationDuration (std::chrono::duration< uint64_t, std::micro > const &creationDuration)
 Creation duration setter. More...
 
void executionDuration (std::chrono::duration< uint64_t, std::micro > const &executionDuration)
 Execution duration setter. More...
 
void incrementWaitForMemoryDuration (std::chrono::duration< uint64_t, std::micro > const &memoryWait)
 Add wait for memory duration to total duration. More...
 
virtual void preRun ()
 Method defining what to do before the run.
 
virtual void run ()
 Run method, main execution.
 
virtual void postRun ()
 Method defining what to do after the run.
 
virtual void createCluster (std::shared_ptr< std::multimap< CoreNode *, std::shared_ptr< CoreNode >>> &)
 Define how to create a cluster for the node, by default do nothing.
 
virtual void joinThreads ()
 Define what is done when the thread is joined.
 
virtual behavior::Nodenode ()=0
 User's node accessor. More...
 
virtual std::set< CoreSlot * > getSlots ()=0
 Slots accessor for the node. More...
 
void removeInsideNode (CoreNode *coreNode)
 Remove a node from the registered inside nodes. More...
 
void copyInnerStructure (CoreNode *rhs)
 Copy inner structure from rhs nodes to this. More...
 
- Public Member Functions inherited from hh::core::CoreQueueNotifier
 CoreQueueNotifier (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreQueueNotifier constructor. More...
 
 ~CoreQueueNotifier () override
 CoreQueueNotifier destructor.
 
std::shared_ptr< std::set< CoreSlot * > > const & slots () const
 Connected slots accessor. More...
 
void addSlot (CoreSlot *slot) override
 Add a slot to the set of connected slots. More...
 
void removeSlot (CoreSlot *slot) override
 Remove a slot from the set of connected slots. More...
 
void notifyAllTerminated () override
 Notify all slots that the node is terminated.
 
void copyInnerStructure (CoreQueueNotifier *rhs)
 Copy the inner structure of the notifier (set of slots and connections) More...
 

Protected Member Functions

void duplicateEdge (CoreNode *duplicateNode, std::map< CoreNode *, std::shared_ptr< CoreNode >> &correspondenceMap) override
 Duplicate all the edges from this to it's copy duplicateNode. More...
 
- Protected Member Functions inherited from hh::core::CoreNode
void addUniqueInsideNode (const std::shared_ptr< CoreNode > &coreNode)
 Add a node to the inside nodes. More...
 
void incrementWaitDuration (std::chrono::duration< uint64_t, std::micro > const &wait)
 Increment wait duration. More...
 
void incrementExecutionDuration (std::chrono::duration< uint64_t, std::micro > const &exec)
 Increment execution duration. More...
 

Private Member Functions

void connectSenderToReceiverDuplication (CoreNode *coreNodeSender, CoreNode *coreNodeReceiver)
 Connect coreNodeSender to a coreNodeReceiver, connect for data transfer and signal handling. More...
 

Private Attributes

std::shared_ptr< std::set< CoreQueueReceiver< NodeOutput > * > > destinations_ = nullptr
 Set of receivers linked.
 

Detailed Description

template<class NodeOutput>
class hh::core::CoreQueueSender< NodeOutput >

Sender for nodes possessing a queue of data.

Template Parameters
NodeOutputNode output type

Definition at line 34 of file core_queue_sender.h.

Constructor & Destructor Documentation

◆ CoreQueueSender()

template<class NodeOutput>
hh::core::CoreQueueSender< NodeOutput >::CoreQueueSender ( std::string_view const &  name,
NodeType const  type,
size_t const  numberThreads 
)
inline

CoreQueueSender constructor.

Parameters
nameNode's name
typeNode's type
numberThreadsNode's number of thread

Definition at line 42 of file core_queue_sender.h.

Member Function Documentation

◆ addReceiver()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::addReceiver ( CoreReceiver< NodeOutput > *  receiver)
inlineoverridevirtual

Add a receiver to the set of receivers.

Parameters
receiverCoreReceiver to add

Implements hh::core::CoreSender< NodeOutput >.

Reimplemented in hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs... >.

Definition at line 60 of file core_queue_sender.h.

Here is the caller graph for this function:

◆ connectSenderToReceiverDuplication()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::connectSenderToReceiverDuplication ( CoreNode coreNodeSender,
CoreNode coreNodeReceiver 
)
inlineprivate

Connect coreNodeSender to a coreNodeReceiver, connect for data transfer and signal handling.

Parameters
coreNodeSenderthe sender
coreNodeReceiverthe receiver

Definition at line 168 of file core_queue_sender.h.

Here is the caller graph for this function:

◆ copyInnerStructure()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::copyInnerStructure ( CoreQueueSender< NodeOutput > *  rhs)
inline

Copy the inner structure of a CoreQueueSender (destinations, and notifier)

Parameters
rhsCoreQueueSender to copy to this

Definition at line 127 of file core_queue_sender.h.

Here is the caller graph for this function:

◆ destinations()

template<class NodeOutput>
virtual std::shared_ptr<std::set<CoreQueueReceiver<NodeOutput> *> > const& hh::core::CoreQueueSender< NodeOutput >::destinations ( ) const
inlinevirtual

Destination accessor.

Returns
Set of CoreQueueReceiver

Definition at line 54 of file core_queue_sender.h.

Here is the caller graph for this function:

◆ duplicateEdge()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::duplicateEdge ( CoreNode duplicateNode,
std::map< CoreNode *, std::shared_ptr< CoreNode >> &  correspondenceMap 
)
inlineoverrideprotectedvirtual

Duplicate all the edges from this to it's copy duplicateNode.

Parameters
duplicateNodeNode to connect
correspondenceMapCorrespondence map from base node to copy

Implements hh::core::CoreNode.

Definition at line 137 of file core_queue_sender.h.

Here is the caller graph for this function:

◆ getSenders()

template<class NodeOutput>
std::set<CoreSender<NodeOutput> *> hh::core::CoreQueueSender< NodeOutput >::getSenders ( )
inlineoverridevirtual

Get inner CoreSender i.e. this.

Returns
This as CoreSender

Implements hh::core::CoreSender< NodeOutput >.

Reimplemented in hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs... >.

Definition at line 123 of file core_queue_sender.h.

Here is the caller graph for this function:

◆ removeReceiver()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::removeReceiver ( CoreReceiver< NodeOutput > *  receiver)
inlineoverridevirtual

Remove a receiver from the set of receivers.

Parameters
receiverCoreReceiver to remove

Implements hh::core::CoreSender< NodeOutput >.

Definition at line 78 of file core_queue_sender.h.

◆ sendAndNotify()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::sendAndNotify ( std::shared_ptr< NodeOutput >  ptr)
inlinefinalvirtual

Send a data to the list of destinations, and notify them.

Parameters
ptrData send to all CoreQueueReceiver

Implements hh::core::CoreSender< NodeOutput >.

Definition at line 96 of file core_queue_sender.h.

◆ visit()

template<class NodeOutput>
void hh::core::CoreQueueSender< NodeOutput >::visit ( AbstractPrinter printer)
inlineoverridevirtual

Special visit method for a CoreQueueSender, printing an edge.

Parameters
printerPrinter visitor to print the CoreQueueSender

Implements hh::core::CoreNode.

Reimplemented in hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs... >, hh::core::CoreTask< GraphOutput, GraphInputs... >, and hh::core::CoreTask< TaskOutput, TaskInputs... >.

Definition at line 107 of file core_queue_sender.h.

Here is the caller graph for this function:

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