HTGS  v2.0
The Hybrid Task Graph Scheduler
htgs::CudaMemoryManager< T > Class Template Reference

Implements a MemoryManager that binds the thread responsible for the MemoryManager to a CUDA GPU prior to allocating memory. More...

#include <htgs/core/memory/CudaMemoryManager.hpp>

Inheritance diagram for htgs::CudaMemoryManager< T >:
Inheritance graph
Collaboration diagram for htgs::CudaMemoryManager< T >:
Collaboration graph

Public Member Functions

 CudaMemoryManager (std::string name, int *cudaIds, size_t memoryPoolSize, std::shared_ptr< IMemoryAllocator< T >> memoryAllocator, MMType type)
 Creates a CudaMemoryManager. More...
 
void initialize () override
 Initializes the CudaMemoryManager by setting which GPU the CudaMemoryManager is repsonsible prior to allocating memory. More...
 
std::string getName () override
 Gets the name of the CudaMemoryManager. More...
 
MemoryManager< T > * copy () override
 Creates a shallow copy of the CudaMemoryManager. More...
 
- Public Member Functions inherited from htgs::MemoryManager< T >
 MemoryManager (std::string name, size_t memoryPoolSize, std::shared_ptr< IMemoryAllocator< T >> memoryAllocator, MMType type)
 Creates the MemoryManager with the specified memory pool size and allocator. More...
 
 ~MemoryManager () override
 Destructor.
 
void initialize () override
 Initializes the MemoryManager, getting the size of the memory pool, and filling the memory pool with allocated data. More...
 
void shutdown () override
 Shuts down the MemoryManager memory is only released when the underlying graph destructs the memory manager.
 
void executeTask (std::shared_ptr< MemoryData< T >> data) override
 Processes memory data. More...
 
void debug () override
 Provides debug output for MemoryManager.
 
virtual size_t getMemoryPoolSize ()
 Virtual function to gets the size of the MemoryPool. More...
 
virtual std::shared_ptr< IMemoryAllocator< T > > getAllocator ()
 Gets the allocator that is responsible for allocating and freeing memory for the MemoryPool. More...
 
std::string getMemoryManagerName ()
 Gets the name of the memory manager. More...
 
std::string typeName ()
 Gets the demangled type name of the connector. More...
 
MMType getType () const
 Gets the memory manager type. More...
 
virtual 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...
 
std::string getDotFillColor () override
 Gets the color for filling the shape for graphviz dot. More...
 
- Public Member Functions inherited from htgs::ITask< MemoryData< T >, MemoryData< T > >
 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...
 
void initialize (size_t pipelineId, size_t numPipeline, TaskManager< MemoryData< T >, MemoryData< T > > *ownerTask)
 Function that is called when an ITask is being initialized by it's owner thread. More...
 
virtual void executeTask (std::shared_ptr< MemoryData< T > > data)=0
 Pure virtual function that is called when an ITask's thread is to execute on data. More...
 
virtual bool canTerminate (std::shared_ptr< AnyConnector > inputConnector) override
 
virtual void executeTaskFinal () override
 
virtual std::string getDotLabelName () override
 
virtual std::string getDotShapeColor () override
 
virtual std::string getDotShape () override
 
virtual std::string getDotCustomProfile () override
 Adds the string text to the profiling of this task in the graphviz dot visualization. More...
 
virtual void printProfile () override
 
virtual size_t getNumGraphsSpawned ()
 Gets the number of graphs spawned by this ITask. More...
 
virtual std::string genDotProducerEdgeToTask (std::map< std::shared_ptr< AnyConnector >, AnyITask * > &inputConnectorDotMap, int dotFlags) override
 
virtual std::string genDotConsumerEdgeFromConnector (std::shared_ptr< AnyConnector > connector, int flags) override
 
virtual std::string genDotProducerEdgeFromConnector (std::shared_ptr< AnyConnector > connector, int flags)
 
ITask< MemoryData< T >, MemoryData< T > > * copyITask (bool deep) override
 Copies the ITask (including a copy of all memory edges) More...
 
void addResult (std::shared_ptr< MemoryData< T > > result)
 Adds results to the output list to be sent to the next connected ITask in a TaskGraph. More...
 
void addResult (MemoryData< T > *result)
 Adds results to the output list to be sent to the next connected ITask in a TaskGraph. More...
 
m_data_t< V > getMemory (std::string name, IMemoryReleaseRule *releaseRule)
 Retrieves memory from a memory edge. More...
 
m_data_t< V > getDynamicMemory (std::string name, IMemoryReleaseRule *releaseRule, size_t numElems)
 Retrieves memory from a memory edge. More...
 
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
 
std::string outTypeName () override final
 
std::string getAddress () override final
 
void setTaskManager (TaskManager< MemoryData< T >, MemoryData< T > > *ownerTask)
 Sets the owner task manager for this ITask. More...
 
TaskManager< MemoryData< T >, MemoryData< T > > * getOwnerTaskManager ()
 Gets the owner task manager for this ITask. More...
 
virtual void gatherProfileData (std::map< AnyTaskManager *, TaskManagerProfile * > *taskManagerProfiles)
 Gathers profile data. More...
 
- Public Member Functions inherited from htgs::AnyITask
 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 getConsumerDotIds ()
 
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 genCustomDot (ProfileUtils *profileUtils, int colorFlag)
 Virtual function to generate customized dot file. 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...
 

Private Attributes

int * cudaIds
 The array of CUDA contexts.
 

Detailed Description

template<class T>
class htgs::CudaMemoryManager< T >

Implements a MemoryManager that binds the thread responsible for the MemoryManager to a CUDA GPU prior to allocating memory.

Once a TaskGraphRuntime binds a thread to the CudaMemoryManager and calls its initialize function, the CUDA GPU specified by the pipelineId of the CudaMemoryManager is bound to the thread. This pipelineId accesses a Cuda ID, so the number of pipelines spawned for the ExecutionPipeline task should match the number of Cuda IDs passed to the CudaMemoryManager If the Task is not associated with an ExecutionPipeline, then there only needs to be one Cuda ID.

Template Parameters
Tthe input/output MemoryData type for the CudaMemoryManager; i.e.; cufftDoubleComplex

Constructor & Destructor Documentation

◆ CudaMemoryManager()

template<class T>
htgs::CudaMemoryManager< T >::CudaMemoryManager ( std::string  name,
int *  cudaIds,
size_t  memoryPoolSize,
std::shared_ptr< IMemoryAllocator< T >>  memoryAllocator,
MMType  type 
)
inline

Creates a CudaMemoryManager.

The CUcontext should contain enough CUcontext such that there is one per Cuda GPU if this Task is added into an ExecutionPipeline.

Parameters
namethe name of the memory manager edge
cudaIdsthe Cuda Ids
memoryPoolSizethe size of the memory pool
memoryAllocatorthe memory allocator describing how memory is allocated for the GPU.
typethe memory manager type

Member Function Documentation

◆ copy()

template<class T>
MemoryManager<T>* htgs::CudaMemoryManager< T >::copy ( )
inlineoverridevirtual

Creates a shallow copy of the CudaMemoryManager.

Returns
the copy of the CudaMemoryManager

Reimplemented from htgs::MemoryManager< T >.

◆ getName()

template<class T>
std::string htgs::CudaMemoryManager< T >::getName ( )
inlineoverridevirtual

Gets the name of the CudaMemoryManager.

Returns

Reimplemented from htgs::MemoryManager< T >.

◆ initialize()

template<class T>
void htgs::CudaMemoryManager< T >::initialize ( )
inlineoverridevirtual

Initializes the CudaMemoryManager by setting which GPU the CudaMemoryManager is repsonsible prior to allocating memory.

The initialize routine is called after a thread has been bound to the Task, thus enforcing the Task to allocate memory on the specified Cuda GPU based on the pipelineId associated with the Task managing the CudaMemoryManager.

Reimplemented from htgs::ITask< MemoryData< T >, MemoryData< T > >.


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