|
| ExecutionPipeline (size_t numPipelines, TaskGraphConf< T, U > *graph, std::string name="Execution Pipeline", bool waitForInit=true) |
| Creates an execution pipeline, which encapsulates a graph and duplicates it numPipelines times. More...
|
|
| ExecutionPipeline (size_t numPipelines, TaskGraphConf< T, U > *graph, std::shared_ptr< IRuleList< T, T >> rules, std::string name="Execution Pipeline", bool waitForInit=true) |
| Creates an execution pipeline, which encapsulates a graph and duplicates it numPipelines times. More...
|
|
| ~ExecutionPipeline () |
| Destructor that frees all memory allocated by the execution pipeline.
|
|
size_t | getNumGraphsSpawned () override |
| Gets the number of graphs spawned by this ITask. More...
|
|
void | addInputRule (IRule< T, T > *rule) |
| Adds an input rule, which can be used for domain decomposition. More...
|
|
void | addInputRule (std::shared_ptr< IRule< T, T >> rule) |
| Adds an input rule, which can be used for domain decomposition. More...
|
|
void | initialize () |
| Initializes the execution pipeline and duplicates the task graph based on the number of pipelines. More...
|
|
void | shutdown () |
| Shuts down the execution pipeline. More...
|
|
void | shutdownParallel (int id) |
| Waits for all runtimes in parallel to update overall runtime of each graph. More...
|
|
void | executeTask (std::shared_ptr< T > data) |
| Executes the execution pipeline task on data and forwards that data to the input rules. More...
|
|
std::string | getName () |
| Gets the name for the execution pipeline. More...
|
|
ITask< T, U > * | copy () |
| Makes a copy of the execution pipeline. More...
|
|
void | debug () |
| Provides debugging output for the execution pipeline. More...
|
|
virtual void | gatherProfileData (std::map< AnyTaskManager *, TaskManagerProfile *> *taskManagerProfiles) override |
| Gathers profile data. More...
|
|
void | printProfile () override |
| Prints the profile data to std::out. More...
|
|
std::string | genCustomDot (ProfileUtils *profileUtils, int colorFlag) override |
| Virtual function to generate customized dot file. More...
|
|
virtual std::string | genDotProducerEdgeToTask (std::map< std::shared_ptr< AnyConnector >, AnyITask *> &inputConnectorDotMap, int dotFlags) override |
|
virtual std::string | genDotProducerEdgeFromConnector (std::shared_ptr< AnyConnector > connector, int flags) |
|
virtual std::string | genDotConsumerEdgeFromConnector (std::shared_ptr< AnyConnector > connector, int flags) override |
|
std::string | getConsumerDotIds () override |
|
std::string | genDot (int flags, std::string dotId, std::shared_ptr< AnyConnector > input, std::shared_ptr< AnyConnector > output) override |
| Virtual function that generates the input/output and per-task dot notation. More...
|
|
| ITask () |
| Creates an ITask with number of threads equal to 1.
|
|
| ITask (size_t numThreads) |
| Constructs an ITask with a specified number of threads. More...
|
|
| ITask (size_t numThreads, bool isStartTask, bool poll, size_t microTimeoutTime) |
| Constructs an ITask with a specified number of threads as well as additional scheduling options. More...
|
|
virtual bool | canTerminate (std::shared_ptr< AnyConnector > inputConnector) override |
| Virtual function that is called when an ITask is checking if it can be terminated. More...
|
|
virtual void | executeTaskFinal () override |
| Virtual function that is called just before the task has shutdown. More...
|
|
virtual std::string | getDotLabelName () override |
| Virtual function to get the label name used for dot graph viz. More...
|
|
virtual std::string | getDotShapeColor () override |
| Gets the color of the shape for graphviz dot. More...
|
|
virtual std::string | getDotFillColor () override |
| Gets the color for filling the shape for graphviz dot. More...
|
|
virtual std::string | getDotShape () override |
| Gets the shape for graphviz dot. More...
|
|
virtual std::string | getDotCustomProfile () override |
| Adds the string text to the profiling of this task in the graphviz dot visualization. More...
|
|
ITask< T, U > * | copyITask (bool deep) override |
| Copies the ITask (including a copy of all memory edges) More...
|
|
void | addResult (std::shared_ptr< U > result) |
| Adds results to the output list to be sent to the next connected ITask in a TaskGraph. More...
|
|
void | addResult (U *result) |
| Adds results to the output list to be sent to the next connected ITask in a TaskGraph. More...
|
|
void | initialize (size_t pipelineId, size_t numPipeline, TaskManager< T, U > *ownerTask) |
| Function that is called when an ITask is being initialized by it's owner thread. More...
|
|
template<class V > |
m_data_t< V > | getMemory (std::string name, IMemoryReleaseRule *releaseRule) |
| Retrieves memory from a memory edge. More...
|
|
template<class V > |
m_data_t< V > | getDynamicMemory (std::string name, IMemoryReleaseRule *releaseRule, size_t numElems) |
| Retrieves memory from a memory edge. More...
|
|
template<class V > |
void | releaseMemory (m_data_t< V > memory) |
| Releases memory onto a memory edge, which is transferred by the graph communicator. More...
|
|
void | resetProfile () |
| Resets profile data.
|
|
size_t | getThreadID () |
| Gets the thread ID associated with this task. More...
|
|
unsigned long long int | getTaskComputeTime () const |
| Gets the task's compute time. More...
|
|
std::string | inTypeName () override final |
| Gets the demangled input type name of the connector. More...
|
|
std::string | outTypeName () override final |
| Gets the demangled output type name of the connector. More...
|
|
std::string | getAddress () override final |
| Gets the address from the owner task, which is the address of the task graph. More...
|
|
void | setTaskManager (TaskManager< T, U > *ownerTask) |
| Sets the owner task manager for this ITask. More...
|
|
TaskManager< T, U > * | getOwnerTaskManager () |
| Gets the owner task manager for this ITask. More...
|
|
| AnyITask () |
| Creates an ITask with number of threads equal to 1.
|
|
| AnyITask (size_t numThreads) |
| Constructs an ITask with a specified number of threads. More...
|
|
| AnyITask (size_t numThreads, bool isStartTask, bool poll, size_t microTimeoutTime) |
| Constructs an ITask with a specified number of threads as well as additional scheduling options. More...
|
|
virtual | ~AnyITask () |
| Destructor.
|
|
virtual std::string | genDot (int flags, std::string dotId, std::shared_ptr< htgs::AnyConnector > input, std::shared_ptr< htgs::AnyConnector > output) |
| Virtual function that generates the input/output and per-task dot notation. More...
|
|
virtual std::string | getProducerDotIds () |
|
virtual std::string | genDot (int flags, std::string dotId) |
| Virtual function that adds additional dot attributes to this node. More...
|
|
virtual std::string | debugDotNode () |
| Provides debug output for a node in the dot graph. More...
|
|
virtual void | profile () |
| Virtual function that is called to provide profile output for the ITask. More...
|
|
virtual std::string | profileStr () |
| Virtual function that is called after executionTask is called. More...
|
|
void | initialize (size_t pipelineId, size_t numPipeline) |
| Virtual function that is called when an ITask is being initialized by it's owner thread. More...
|
|
void | setPipelineId (size_t pipelineId) |
| Sets the pipeline Id for this ITask. More...
|
|
size_t | getPipelineId () |
| Gets the pipeline ID. More...
|
|
void | setNumPipelines (size_t numPipelines) |
| Sets the number of pipelines that this ITask belongs too. More...
|
|
size_t | getNumPipelines () const |
| Sets the task graph communicator. More...
|
|
size_t | getNumThreads () const |
| Gets the number of threads associated with this ITask. More...
|
|
bool | isStartTask () const |
| Gets whether this ITask is a starting task. More...
|
|
bool | isPoll () const |
| Gets whether this ITask is polling for data or not. More...
|
|
size_t | getMicroTimeoutTime () const |
| Gets the timeout time for polling. More...
|
|
void | copyMemoryEdges (AnyITask *iTaskCopy) |
| Copies the memory edges from this AnyITask to another AnyITask. More...
|
|
std::string | genDot (int flags, std::shared_ptr< AnyConnector > input, std::shared_ptr< AnyConnector > output) |
| Creates a dot notation representation for this task. More...
|
|
void | profileITask () |
| Provides profile output for the ITask,. More...
|
|
std::string | getDotId () |
| Gets the id used for dot nodes. More...
|
|
std::string | getNameWithPipelineId () |
| Gets the name of the ITask with it's pipeline ID. More...
|
|
const std::shared_ptr< ConnectorMap > & | getMemoryEdges () const |
| Gets the memory edges for the task. More...
|
|
const std::shared_ptr< ConnectorMap > & | getReleaseMemoryEdges () const |
| Gets the memory edges for releasing memory for the memory manager, used to shutdown the memory manager. More...
|
|
bool | hasMemoryEdge (std::string name) |
| Checks whether this ITask contains a memory edge for a specified name. More...
|
|
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. More...
|
|
unsigned long long int | getMemoryWaitTime () const |
| Gets the amount of time the task was waiting for memory. More...
|
|
void | incMemoryWaitTime (unsigned long long int val) |
| Increments memory wait time. More...
|
|
template<class T, class U>
class htgs::ExecutionPipeline< T, U >
The ExecutionPipeline class is used to duplicate task graphs, such that each duplicate executes concurrently.
Each task within the task graph is an exact duplicate of the original's. The only difference is the pipelineId passed to each task. The pipelineId indicates which task graph the task belongs too. This value can be used as a rank to distribute computation and determine if additional functionality is needed to process data (such as copying data from one GPU to another).
An ExecutionPipeline can be used to execute across multiple GPUs on a single system. Any ICudaTask will automatically be bound to a separate GPU based on the CUContext array passed to the ICudaTask. The size of the CUContext array should match the number of execution pipelines specified. If data exists between two GPUs, then additional copying may be required, see ICudaTask for details and example usage for copying data between GPUs.
The execution pipeline can be used to distribute data among each task graph by adding a rule that uses the pipelineId parameter in an IRule. See addInputRule(IRule <T, T> *rule)
If you wish to share a rule with multiple execution pipelines or bookkeepers, you must wrap the rule into a std::shared_ptr prior to calling the addInputRule function.
Example usage:
... build subGraph
PostProcessTask *taskOutsideExecPipeline = new PostProcessTask();
htgs::TaskGraph<MatrixData, VoidData> *mainGraph = new htgs::TaskGraph<MatrixData, VoidData>();
mainGraph->setGraphConsumerTask(execPipeline);
mainGraph->addEdge(execPipeline, taskOutsideExecPipeline);
while(hasDataToAdd)
{
mainGraph->produceData(data);
}
mainGraph->finishProducingData();
runTime->executeAndWaitForRunTime();
- Template Parameters
-