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

Part of the outer graph that gathers data from the output nodes and makes them available as the graph output. More...

#include "core_graph_sink.h"

Inheritance diagram for hh::core::CoreGraphSink< GraphOutput >:
Inheritance graph
Collaboration diagram for hh::core::CoreGraphSink< GraphOutput >:
Collaboration graph

Public Member Functions

 CoreGraphSink ()
 Default sink constructor.
 
 ~CoreGraphSink () override
 Default sink destructor.
 
void visit (AbstractPrinter *printer) override
 Special visit method for graph's sink. More...
 
behavior::Nodenode () override
 Get a node from the graph's sink, that does not exist, throw an error in every case. More...
 
std::shared_ptr< CoreNodeclone () override
 Get a clone of the graph's sink, that does not exist, throw an error in every case. More...
 
bool waitForNotification () override
 Wait for notification from the output nodes and return the state of the sink. More...
 
void duplicateEdge ([[maybe_unused]]CoreNode *duplicateNode, [[maybe_unused]]std::map< CoreNode *, std::shared_ptr< CoreNode >> &correspondenceMap) override
 Duplicate edge for a sink, throw an error in every case. More...
 
- Public Member Functions inherited from hh::core::CoreQueueMultiReceivers< GraphOutput >
 CoreQueueMultiReceivers (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreQueueMultiReceivers constructor. More...
 
 ~CoreQueueMultiReceivers () override
 CoreQueueMultiReceivers destructor.
 
bool receiversEmpty () final
 Test emptiness of all receivers. More...
 
size_t totalQueueSize () final
 Sums the queue sizes for all receivers. More...
 
std::set< CoreSlot *> getSlots () final
 Return a set of slots, {this}. More...
 
CoreQueueSlotqueueSlot () final
 Return the node's slot. More...
 
void copyInnerStructure (CoreQueueMultiReceivers< NodeInputs... > *rhs)
 Copy the inner structure of all receivers and the slot from rhs to this. More...
 
- Public Member Functions inherited from hh::core::CoreMultiReceivers< NodeInputs... >
 CoreMultiReceivers (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreMultiReceivers constructor. More...
 
 ~CoreMultiReceivers () override
 CoreMultiReceivers destructor.
 
void removeForAllSenders (CoreNode *coreNode)
 Remove all coreNode's senders from this. More...
 
- Public Member Functions inherited from hh::core::CoreSlot
 CoreSlot (std::string_view const &name, NodeType const type, size_t const numberThreads)
 Core slot constructor. More...
 
 ~CoreSlot () override
 Core Slot 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::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 void duplicateEdge (CoreNode *duplicateNode, std::map< CoreNode *, std::shared_ptr< CoreNode >> &correspondenceMap)=0
 Duplicate all of the edges from this to its copy duplicateNode. 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::CoreReceiver< Inputs >
 CoreReceiver (std::string_view const &name, NodeType const type, size_t const numberThreads)
 Constructor with node name, node type and number of threads for the node. More...
 
 ~CoreReceiver () override
 Default destructor.
 
virtual void addSender (CoreSender< Inputs > *sender)=0
 Interface to add a CoreSender to the receiver. More...
 
virtual void removeSender (CoreSender< Inputs > *sender)=0
 Interface to remove a CoreSender from the receiver. More...
 
virtual void receive (std::shared_ptr< Inputs > data)=0
 Interface to receive a data. More...
 
virtual bool receiverEmpty ()=0
 Accessor to test emptiness on the receiver. More...
 
virtual size_t queueSize ()
 Interface to get the number of element to be treated by this node for this type, by default return 0. More...
 
virtual std::set< CoreReceiver< Inputs > *> receivers ()=0
 Accessor to all receivers connected to this receiver. More...
 
- Public Member Functions inherited from hh::core::CoreQueueSlot
 CoreQueueSlot (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreQueueSlot constructor. More...
 
 ~CoreQueueSlot () override
 CoreQueueSlot destructor.
 
std::shared_ptr< std::condition_variable > const & notifyConditionVariable () const
 Condition variable accessor. More...
 
std::shared_ptr< std::mutex > const & slotMutex () const
 Mutex accessor. More...
 
size_t numberInputNodes () const final
 Number of CoreNotifier linked accessor. More...
 
void addNotifier (CoreNotifier *notifier) final
 Add a notifier to set of CoreNotifier. More...
 
void removeNotifier (CoreNotifier *notifier) final
 Remove a notifier from set of CoreNotifier. More...
 
bool hasNotifierConnected () final
 Test if CoreNotifier are linked to this CoreQueueSlot. More...
 
void wakeUp () final
 Wake up and notify a node connected to the condition variable CoreQueueSlot::notifyConditionVariable_.
 
void lockUniqueMutex ()
 Lock the mutex.
 
void unlockUniqueMutex ()
 Unlock the mutex.
 
void copyInnerStructure (CoreQueueSlot *rhs)
 Copy the inner structure of the receiver (mutex, condition variable and set of notifiers) More...
 
- Public Member Functions inherited from hh::core::CoreQueueReceiver< NodeInputs >
 CoreQueueReceiver (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreQueueReceiver constructor. More...
 
 ~CoreQueueReceiver () override
 CoreQueueReceiver default destructor.
 
size_t queueSize () override
 Return the current waiting data queue size. More...
 
size_t maxQueueSize ()
 Return the maximum current waiting data queue size registered. More...
 
void addSender (CoreSender< NodeInputs > *sender) final
 Add a CoreSender to this. More...
 
void removeSender (CoreSender< NodeInputs > *sender) final
 Remove a CoreSender from this. More...
 
void receive (std::shared_ptr< NodeInputs > data) final
 Receive a data from a CoreQueueSender, and store it into the waiting queue. More...
 
bool receiverEmpty () final
 Test emptiness on the queue. More...
 
std::set< CoreReceiver< NodeInputs > *> receivers () override
 Receivers accessor. More...
 
std::shared_ptr< NodeInputs > popFront ()
 Return the front element of the queue and return it. More...
 
void copyInnerStructure (CoreQueueReceiver< NodeInputs > *rhs)
 Copy the CoreQueueReceiver inner structure (queue and senders list) from rhs to this. More...
 
- Public Member Functions inherited from hh::core::CoreReceiver< NodeInputs >
 CoreReceiver (std::string_view const &name, NodeType const type, size_t const numberThreads)
 Constructor with node name, node type and number of threads for the node. More...
 
 ~CoreReceiver () override
 Default destructor.
 

Additional Inherited Members

- 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...
 
- Protected Member Functions inherited from hh::core::CoreQueueSlot
std::shared_ptr< std::set< CoreNotifier * > > const & notifiers () const
 Protected accessor to the set of notifiers connected to the CoreQueueSlot. More...
 

Detailed Description

template<class GraphOutput>
class hh::core::CoreGraphSink< GraphOutput >

Part of the outer graph that gathers data from the output nodes and makes them available as the graph output.

Template Parameters
GraphOutputGraph's data output

Definition at line 31 of file core_graph_sink.h.

Member Function Documentation

◆ clone()

template<class GraphOutput >
std::shared_ptr<CoreNode> hh::core::CoreGraphSink< GraphOutput >::clone ( )
inlineoverridevirtual

Get a clone of the graph's sink, that does not exist, throw an error in every case.

Exceptions
std::runtime_errorA graph's sink should not be cloned
Returns
nothing, fail with a std::runtime_error

Implements hh::core::CoreNode.

Definition at line 66 of file core_graph_sink.h.

◆ duplicateEdge()

template<class GraphOutput >
void hh::core::CoreGraphSink< GraphOutput >::duplicateEdge ( [[maybe_unused] ]CoreNode duplicateNode,
[[maybe_unused] ]std::map< CoreNode *, std::shared_ptr< CoreNode >> &  correspondenceMap 
)
inlineoverride

Duplicate edge for a sink, throw an error in every case.

Exceptions
std::runtime_errorA sink does not have edges to connect
Parameters
duplicateNodeduplicateNode to connect
correspondenceMapNode correspondence map

Definition at line 95 of file core_graph_sink.h.

◆ node()

template<class GraphOutput >
behavior::Node* hh::core::CoreGraphSink< GraphOutput >::node ( )
inlineoverridevirtual

Get a node from the graph's sink, that does not exist, throw an error in every case.

Exceptions
std::runtime_errorA graph's sink does not have node
Returns
nothing, fail with a std::runtime_error

Implements hh::core::CoreNode.

Definition at line 56 of file core_graph_sink.h.

◆ visit()

template<class GraphOutput >
void hh::core::CoreGraphSink< GraphOutput >::visit ( AbstractPrinter printer)
inlineoverridevirtual

Special visit method for graph's sink.

Parameters
printerPrinter visitor to print the graph's sink

Implements hh::core::CoreNode.

Definition at line 46 of file core_graph_sink.h.

Here is the call graph for this function:

◆ waitForNotification()

template<class GraphOutput >
bool hh::core::CoreGraphSink< GraphOutput >::waitForNotification ( )
inlineoverridevirtual

Wait for notification from the output nodes and return the state of the sink.

Returns
True if the sink is terminated, else False

Implements hh::core::CoreSlot.

Definition at line 77 of file core_graph_sink.h.

Here is the call graph for this function:

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