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

Execution Pipeline core. More...

#include "core_execution_pipeline.h"

Inheritance diagram for hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >:
Inheritance graph
Collaboration diagram for hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >:
Collaboration graph

Public Member Functions

 CoreExecutionPipeline ()=delete
 Deleted Default constructor.
 
 CoreExecutionPipeline (std::string_view const &name, AbstractExecutionPipeline< GraphOutput, GraphInputs... > *executionPipeline, std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... >> coreBaseGraph, size_t numberGraphs, std::vector< int > const &deviceIds, bool automaticStart)
 The core execution pipeline constructor. More...
 
virtual ~CoreExecutionPipeline ()=default
 Default destructor.
 
behavior::Nodenode () override
 Return the user's node. More...
 
std::vector< int > const & deviceIds () const
 Device ids accessor. More...
 
size_t numberGraphs () const
 Number of execution pipeline's graphs accessor. More...
 
std::string id () const override
 Execution pipeline id, i.e switch id accessor. More...
 
AbstractExecutionPipeline< GraphOutput, GraphInputs... > * executionPipeline () const
 User execution pipeline accessor. More...
 
int deviceId () override
 Get a device id, not possible for an execution pipeline, throw an error in every case. More...
 
std::set< CoreSender< GraphOutput > * > getSenders () override
 Execution pipeline's senders accessor. More...
 
std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... > > baseCoreGraph ()
 Return the core of the base graph. More...
 
void addReceiver (CoreReceiver< GraphOutput > *receiver) override
 Add a receiver to the execution pipeline, to all inside graphs. More...
 
void addSlot (CoreSlot *slot) override
 Add a slot to a execution pipeline, i.e. to all inside graphs. More...
 
void visit (AbstractPrinter *printer) override
 Special visit method for an execution pipeline, visit also all inside graphs. More...
 
void createCluster ([[maybe_unused]]std::shared_ptr< std::multimap< CoreNode *, std::shared_ptr< CoreNode >>> &) override
 Create inner graphs clusters and launch the threads.
 
std::chrono::duration< uint64_t, std::micro > maxExecutionTime () const override
 Return the maximum execution time of all inside graphs. More...
 
std::chrono::duration< uint64_t, std::micro > minExecutionTime () const override
 Return the minimum execution time of all inside graphs. More...
 
std::chrono::duration< uint64_t, std::micro > maxWaitTime () const override
 Return the maximum wait time of all inside graphs. More...
 
std::chrono::duration< uint64_t, std::micro > minWaitTime () const override
 Return the minimum wait time of all inside graphs. More...
 
- Public Member Functions inherited from hh::core::CoreTask< GraphOutput, GraphInputs... >
 CoreTask (std::string_view const &name, size_t const numberThreads, NodeType const type, AbstractTask< GraphOutput, TaskInputs... > *task, bool automaticStart)
 CoreTask constructor (Used for AbstractTask and StateManager) More...
 
 ~CoreTask () override
 Core Task destructor.
 
bool automaticStart () const
 Automatic start property accessor. More...
 
void automaticStart (bool automaticStart)
 Automatic start property accessor. More...
 
std::shared_ptr< NvtxProfiler > & nvtxProfiler ()
 NVTX profiler accessor. More...
 
behavior::Nodenode () override
 Node accessor. More...
 
AbstractTask< GraphOutput, TaskInputs... > * task () const
 Node accessor. More...
 
void visit (AbstractPrinter *printer) override
 Special visit method for a CoreTask. More...
 
void copyInnerStructure (CoreTask< GraphOutput, TaskInputs... > *rhs)
 Copy the inner structure from rhs to this CoreTask. More...
 
void createCluster (std::shared_ptr< std::multimap< CoreNode *, std::shared_ptr< CoreNode >>> &insideNodesGraph) override
 Create a cluster for a CoreTask. More...
 
void run () override
 Main loop for the CoreTask.
 
void operateReceiver ()
 Operate a CoreTasks's receiver for a specific type, thread safe. More...
 
bool waitForNotification () override
 Wait method for notification. More...
 
std::shared_ptr< AbstractTask< GraphOutput, TaskInputs... > > createCopyFromThis ()
 Create a copy from this instance. More...
 
- Public Member Functions inherited from hh::core::CoreQueueSender< GraphOutput >
 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< GraphOutput > *> > const & destinations () const
 Destination accessor. More...
 
void addReceiver (CoreReceiver< GraphOutput > *receiver) override
 Add a receiver to the set of receivers. More...
 
void removeReceiver (CoreReceiver< GraphOutput > *receiver) override
 Remove a receiver from the set of receivers. More...
 
void sendAndNotify (std::shared_ptr< GraphOutput > ptr) final
 Send a data to the list of destinations, and notify them. More...
 
std::set< CoreSender< GraphOutput > *> getSenders () override
 Get inner CoreSender i.e. this. More...
 
void copyInnerStructure (CoreQueueSender< GraphOutput > *rhs)
 Copy the inner structure of a CoreQueueSender (destinations, and notifier) More...
 
- Public Member Functions inherited from hh::core::CoreSender< GraphOutput >
 CoreSender (std::string_view const &name, NodeType const type, size_t const numberThreads)
 CoreSender constructor. More...
 
 ~CoreSender () override
 CoreSender destructor.
 
- 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::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...
 
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 postRun ()
 Method defining what to do after the run.
 
virtual void joinThreads ()
 Define what is done when the thread is joined.
 
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 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...
 
- Public Member Functions inherited from hh::core::CoreQueueMultiReceivers< TaskInputs... >
 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::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.
 
- Public Member Functions inherited from hh::core::CoreExecute< TaskInputs >
virtual void callExecute (std::shared_ptr< TaskInputs > data)=0
 Wrapper to call the user-defined Execute::execute. More...
 

Protected Member Functions

bool callCanTerminate (bool lock) override
 Can terminate for the ep, specialised to not call user's defined one. More...
 
- Protected Member Functions inherited from hh::core::CoreQueueSender< GraphOutput >
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...
 
- 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...
 

Protected Attributes

std::shared_ptr< CoreSwitch< GraphInputs... > > coreSwitch_
 Switch use to divert the data to the graphs.
 
std::vector< std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... > > > epGraphs_ = {}
 Core Copies of the graphs (actual memory is stored here)
 

Private Member Functions

void duplicateGraphs ()
 Duplicate the graphs and link it to the switch.
 
template<class GraphInput >
void addEdgeSwitchGraph (std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... >> &graph)
 Add data and notification link between switch and one inside graph. More...
 
void connectGraphToEP (std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... >> &coreGraph)
 Connect a graph to the switch and register it. More...
 
void connectGraphsOutputToReceiver (CoreGraph< GraphOutput, GraphInputs... > *graph, CoreReceiver< GraphOutput > *coreReceiver)
 Connect a CoreReceiver to all output of a graph. More...
 
void mergeSenders (std::set< CoreSender< GraphOutput > * > &superSet, std::set< CoreSender< GraphOutput > *> &graphSenders)
 Add the graph's senders to the super set. More...
 
template<class GraphInput >
void printEdgeSwitchGraphs (AbstractPrinter *printer, CoreGraph< GraphOutput, GraphInputs... > *graph)
 Print an edge for GraphInput input from the switch to all graph's input node. More...
 

Private Attributes

AbstractExecutionPipeline< GraphOutput, GraphInputs... > * executionPipeline_ = nullptr
 User's execution pipeline.
 
size_t numberGraphs_ = 0
 Total number of graphs in the execution pipeline.
 
std::vector< intdeviceIds_ = {}
 Device id's value to set to the different graphs into the execution pipeline.
 

Detailed Description

template<class GraphOutput, class ... GraphInputs>
class hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >

Execution Pipeline core.

Duplicate and hold the copies of the graph given at construction. Associate also the device ids and the graph ids to the copies. The graph and the copies are plug to the execution pipeline's switch, that will divert the data coming to the execution pipeline to the different graphs.

Template Parameters
GraphOutputGraph's output type
GraphInputsGraph's input types

Definition at line 50 of file core_execution_pipeline.h.

Constructor & Destructor Documentation

◆ CoreExecutionPipeline()

template<class GraphOutput, class ... GraphInputs>
hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::CoreExecutionPipeline ( std::string_view const &  name,
AbstractExecutionPipeline< GraphOutput, GraphInputs... > *  executionPipeline,
std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... >>  coreBaseGraph,
size_t  numberGraphs,
std::vector< int > const &  deviceIds,
bool  automaticStart 
)
inline

The core execution pipeline constructor.

Parameters
nameExecution pipeline name
executionPipelineUser's execution pipeline
coreBaseGraphBase graph to duplicate
numberGraphsNumber of graphs in the execution pipeline
deviceIdsDevice ids to set to the different graphs
automaticStartTrue if the graphs have to run automatically, else False

Definition at line 72 of file core_execution_pipeline.h.

Member Function Documentation

◆ addEdgeSwitchGraph()

template<class GraphOutput, class ... GraphInputs>
template<class GraphInput >
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::addEdgeSwitchGraph ( std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... >> &  graph)
inlineprivate

Add data and notification link between switch and one inside graph.

Template Parameters
GraphInputGraph input type
Parameters
graphgraph to link

Definition at line 289 of file core_execution_pipeline.h.

◆ addReceiver()

template<class GraphOutput, class ... GraphInputs>
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::addReceiver ( CoreReceiver< GraphOutput > *  receiver)
inlineoverridevirtual

Add a receiver to the execution pipeline, to all inside graphs.

Parameters
receiverReceiver to add to the execution pipeline

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

Definition at line 172 of file core_execution_pipeline.h.

◆ addSlot()

template<class GraphOutput, class ... GraphInputs>
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::addSlot ( CoreSlot slot)
inlineoverridevirtual

Add a slot to a execution pipeline, i.e. to all inside graphs.

Parameters
slotCoreSlot to add to all execution pipeline

Reimplemented from hh::core::CoreQueueNotifier.

Definition at line 191 of file core_execution_pipeline.h.

◆ baseCoreGraph()

template<class GraphOutput, class ... GraphInputs>
std::shared_ptr<CoreGraph<GraphOutput, GraphInputs...> > hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::baseCoreGraph ( )
inline

Return the core of the base graph.

Returns
Base graph's core

Definition at line 166 of file core_execution_pipeline.h.

Here is the caller graph for this function:

◆ callCanTerminate()

template<class GraphOutput, class ... GraphInputs>
bool hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::callCanTerminate ( bool  lock)
inlineoverrideprotectedvirtual

Can terminate for the ep, specialised to not call user's defined one.

Parameters
lockNode's mutex
Returns
True if the node is terminated, else False

Reimplemented from hh::core::CoreTask< GraphOutput, GraphInputs... >.

Definition at line 264 of file core_execution_pipeline.h.

◆ connectGraphsOutputToReceiver()

template<class GraphOutput, class ... GraphInputs>
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::connectGraphsOutputToReceiver ( CoreGraph< GraphOutput, GraphInputs... > *  graph,
CoreReceiver< GraphOutput > *  coreReceiver 
)
inlineprivate

Connect a CoreReceiver to all output of a graph.

Parameters
graphCoreGraph to be connected
coreReceiverReceiver to connect

Definition at line 316 of file core_execution_pipeline.h.

Here is the caller graph for this function:

◆ connectGraphToEP()

template<class GraphOutput, class ... GraphInputs>
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::connectGraphToEP ( std::shared_ptr< CoreGraph< GraphOutput, GraphInputs... >> &  coreGraph)
inlineprivate

Connect a graph to the switch and register it.

Parameters
coreGraphGraph to connect to the execution pipeline

Definition at line 305 of file core_execution_pipeline.h.

Here is the caller graph for this function:

◆ deviceId()

template<class GraphOutput, class ... GraphInputs>
int hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::deviceId ( )
inlineoverridevirtual

Get a device id, not possible for an execution pipeline, throw an error in every case.

Exceptions
std::runtime_errorAn execution pipeline does not have a device id
Returns
Nothing, throw an error

Reimplemented from hh::core::CoreNode.

Definition at line 141 of file core_execution_pipeline.h.

◆ deviceIds()

template<class GraphOutput, class ... GraphInputs>
std::vector<int> const& hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::deviceIds ( ) const
inline

Device ids accessor.

Returns
Device ids

Definition at line 122 of file core_execution_pipeline.h.

◆ executionPipeline()

template<class GraphOutput, class ... GraphInputs>
AbstractExecutionPipeline<GraphOutput, GraphInputs...>* hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::executionPipeline ( ) const
inline

User execution pipeline accessor.

Returns
User execution pipeline

Definition at line 134 of file core_execution_pipeline.h.

◆ getSenders()

template<class GraphOutput, class ... GraphInputs>
std::set<CoreSender<GraphOutput> *> hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::getSenders ( )
inlineoverridevirtual

Execution pipeline's senders accessor.

Gather senders from all execution pipeline's graphs

Returns
A set composed by execution pipeline's senders

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

Definition at line 152 of file core_execution_pipeline.h.

◆ id()

template<class GraphOutput, class ... GraphInputs>
std::string hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::id ( ) const
inlineoverridevirtual

Execution pipeline id, i.e switch id accessor.

Returns
Execution pipeline id, i.e switch id

Reimplemented from hh::core::CoreNode.

Definition at line 130 of file core_execution_pipeline.h.

◆ maxExecutionTime()

template<class GraphOutput, class ... GraphInputs>
std::chrono::duration<uint64_t, std::micro> hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::maxExecutionTime ( ) const
inlineoverridevirtual

Return the maximum execution time of all inside graphs.

Returns
Maximum execution time of all inside graphs

Reimplemented from hh::core::CoreNode.

Definition at line 218 of file core_execution_pipeline.h.

◆ maxWaitTime()

template<class GraphOutput, class ... GraphInputs>
std::chrono::duration<uint64_t, std::micro> hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::maxWaitTime ( ) const
inlineoverridevirtual

Return the maximum wait time of all inside graphs.

Returns
Maximum wait time of all inside graphs

Reimplemented from hh::core::CoreNode.

Definition at line 240 of file core_execution_pipeline.h.

◆ mergeSenders()

template<class GraphOutput, class ... GraphInputs>
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::mergeSenders ( std::set< CoreSender< GraphOutput > * > &  superSet,
std::set< CoreSender< GraphOutput > *> &  graphSenders 
)
inlineprivate

Add the graph's senders to the super set.

Parameters
superSetSet where to merge the graph's sender
graphSendersSenders to add to the set

Definition at line 324 of file core_execution_pipeline.h.

Here is the caller graph for this function:

◆ minExecutionTime()

template<class GraphOutput, class ... GraphInputs>
std::chrono::duration<uint64_t, std::micro> hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::minExecutionTime ( ) const
inlineoverridevirtual

Return the minimum execution time of all inside graphs.

Returns
Minimum execution time of all inside graphs

Reimplemented from hh::core::CoreNode.

Definition at line 229 of file core_execution_pipeline.h.

◆ minWaitTime()

template<class GraphOutput, class ... GraphInputs>
std::chrono::duration<uint64_t, std::micro> hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::minWaitTime ( ) const
inlineoverridevirtual

Return the minimum wait time of all inside graphs.

Returns
Minimum wait time of all inside graphs

Reimplemented from hh::core::CoreNode.

Definition at line 251 of file core_execution_pipeline.h.

◆ node()

template<class GraphOutput, class ... GraphInputs>
behavior::Node* hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::node ( )
inlineoverridevirtual

Return the user's node.

Returns
User's node: CoreExecutionPipeline::executionPipeline_

Implements hh::core::CoreNode.

Definition at line 118 of file core_execution_pipeline.h.

◆ numberGraphs()

template<class GraphOutput, class ... GraphInputs>
size_t hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::numberGraphs ( ) const
inline

Number of execution pipeline's graphs accessor.

Returns
Number of execution pipeline's graphs

Definition at line 126 of file core_execution_pipeline.h.

Here is the caller graph for this function:

◆ printEdgeSwitchGraphs()

template<class GraphOutput, class ... GraphInputs>
template<class GraphInput >
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::printEdgeSwitchGraphs ( AbstractPrinter printer,
CoreGraph< GraphOutput, GraphInputs... > *  graph 
)
inlineprivate

Print an edge for GraphInput input from the switch to all graph's input node.

Template Parameters
GraphInputEdge Graph input type to print
Parameters
printerPrinter object to visit the execution pipeline and print the edge
graphGraph to take the node's from

Definition at line 334 of file core_execution_pipeline.h.

◆ visit()

template<class GraphOutput, class ... GraphInputs>
void hh::core::CoreExecutionPipeline< GraphOutput, GraphInputs >::visit ( AbstractPrinter printer)
inlineoverridevirtual

Special visit method for an execution pipeline, visit also all inside graphs.

Parameters
printerPrinter visitor to print the CoreExecutionPipeline

Implements hh::core::CoreNode.

Definition at line 197 of file core_execution_pipeline.h.


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