13 #ifndef HTGS_MEMORYEDGE_HPP 14 #define HTGS_MEMORYEDGE_HPP 20 #include <htgs/core/graph/profile/CustomProfile.hpp> 50 : memoryEdgeName(memoryEdgeName),
51 getMemoryTask(getMemoryTask),
52 memoryManager(memoryManager) {}
60 throw std::runtime_error(
65 +
" must be added to the graph you are connecting the memory edge too.");
72 if (memTaskManager->getInputConnector() !=
nullptr)
73 throw std::runtime_error(
74 "Error memory manager: " +
getMemoryTask->
getName() +
" is already connected to the graph! Are you trying to reuse the same memory manager instance?");
76 if (memTaskManager->getOutputConnector() !=
nullptr)
77 throw std::runtime_error(
78 "Error memory manager: " +
getMemoryTask->
getName() +
" is already connected to the graph! Are you trying to reuse the same memory manager instance?");
80 memTaskManager->setInputConnector(releaseMemoryConnector);
81 memTaskManager->setOutputConnector(getMemoryConnector);
83 getMemoryConnector->incrementInputTaskCount();
84 releaseMemoryConnector->incrementInputTaskCount();
88 releaseMemoryConnector,
93 std::shared_ptr<ProfileData> memoryData(
new CreateNodeProfile(
memoryManager, graph,
"MemoryManager"));
94 std::shared_ptr<ProfileData> connectorData(
new CreateConnectorProfile(getMemoryConnector.get(), graph, getMemoryConnector->getProducerCount(),
""));
96 graph->sendProfileData(memoryData);
97 graph->sendProfileData(connectorData);
99 std::shared_ptr<ProfileData> producerConnectorData(
new CreateEdgeProfile(
memoryManager, getMemoryConnector.get(),
memoryEdgeName,
nullptr));
100 std::shared_ptr<ProfileData> connectorConsumerData(
new CreateEdgeProfile(getMemoryConnector.get(),
getMemoryTask,
memoryManager->typeName(),
nullptr));
102 graph->sendProfileData(producerConnectorData);
103 graph->sendProfileData(connectorConsumerData);
121 #endif //HTGS_MEMORYEDGE_HPP virtual std::string getName()=0
Virtual function to get the name of an ITask.
Implements the parent ITask, which removes the template arguments of an ITask.
Definition: AnyITask.hpp:48
ITask< T, U > * getCopy(ITask< T, U > *orig)
Gets the copy for an ITask based on some original ITask reference.
Definition: AnyTaskGraphConf.hpp:327
bool hasTask(AnyITask *task)
Checks whether an ITask is in the graph or not.
Definition: AnyTaskGraphConf.hpp:604
bool hasMemoryEdge(std::string name)
Checks whether this ITask contains a memory edge for a specified name.
Definition: AnyITask.hpp:535
std::string memoryEdgeName
The name of the memory edge.
Definition: MemoryEdge.hpp:114
EdgeDescriptor * copy(AnyTaskGraphConf *graph) override
Creates a copy of the edge descriptor to be added to other graphs, such as those within execution pip...
Definition: MemoryEdge.hpp:107
Implements the memory edge that is added to the graph.
Definition: MemoryEdge.hpp:39
Manages the input/output of IData between Tasks.
Definition: Connector.hpp:62
TaskManager< T, U > * getTaskManager(ITask< T, U > *task)
Gets the task manager that is responsible for a particular ITask.
Definition: AnyTaskGraphConf.hpp:362
void attachMemoryEdge(std::string name, std::shared_ptr< AnyConnector > getMemoryConnector, std::shared_ptr< AnyConnector > releaseMemoryConnector, MMType type)
Attaches a memory edge to this ITask to get memory.
Definition: AnyITask.hpp:549
MemoryEdge(const std::string &memoryEdgeName, AnyITask *getMemoryTask, MemoryManager< T > *memoryManager)
Creates a memory edge.
Definition: MemoryEdge.hpp:47
MemoryManager< T > * memoryManager
the memory manager task
Definition: MemoryEdge.hpp:116
Processes MemoryData between two ITasks using a memory pool.
Definition: MemoryManager.hpp:47
AnyITask * getMemoryTask
The task that is getting memory.
Definition: MemoryEdge.hpp:115
Implements the base class for the TaskGraphConf class, removing the template arguments and providing ...
Definition: AnyTaskGraphConf.hpp:66
The edge descriptor is an interface used to describe how an edge is applied and copied to a task grap...
Definition: EdgeDescriptor.hpp:39
Implements the edge descriptor interface to build edges for a task graph.
Implements the MemoryManager class that processes MemoryData between two ITasks.
void applyEdge(AnyTaskGraphConf *graph) override
Applies an edge to a task graph.
Definition: MemoryEdge.hpp:56
Definition: Bookkeeper.hpp:23