CIRCT  20.0.0git
Public Types | Public Member Functions | Protected Member Functions | Private Types | Private Attributes | List of all members
esi::AcceleratorConnection Class Referenceabstract

Abstract class representing a connection to an accelerator. More...

#include <Accelerator.h>

Inheritance diagram for esi::AcceleratorConnection:
Inheritance graph
[legend]
Collaboration diagram for esi::AcceleratorConnection:
Collaboration graph
[legend]

Public Types

using ServiceTable = std::map< std::string, services::Service * >
 
using Service = services::Service
 

Public Member Functions

 AcceleratorConnection (Context &ctxt)
 
virtual ~AcceleratorConnection ()
 
ContextgetCtxt () const
 
LoggergetLogger () const
 
virtual void disconnect ()
 Disconnect from the accelerator cleanly. More...
 
virtual std::map< std::string, ChannelPort & > requestChannelsFor (AppIDPath, const BundleType *, const ServiceTable &)=0
 Request the host side channel ports for a particular instance (identified by the AppID path). More...
 
AcceleratorServiceThreadgetServiceThread ()
 Return a pointer to the accelerator 'service' thread (or threads). More...
 
template<typename ServiceClass >
ServiceClass * getService (AppIDPath id={}, std::string implName={}, ServiceImplDetails details={}, HWClientDetails clients={})
 Get a typed reference to a particular service type. More...
 
virtual ServicegetService (Service::Type service, AppIDPath id={}, std::string implName={}, ServiceImplDetails details={}, HWClientDetails clients={})
 Calls createService and caches the result. More...
 
AcceleratortakeOwnership (std::unique_ptr< Accelerator > accel)
 Assume ownership of an accelerator object. More...
 

Protected Member Functions

virtual ServicecreateService (Service::Type service, AppIDPath idPath, std::string implName, const ServiceImplDetails &details, const HWClientDetails &clients)=0
 Called by getServiceImpl exclusively. More...
 

Private Types

using ServiceCacheKey = std::tuple< const std::type_info *, AppIDPath >
 Cache services via a unique_ptr so they get free'd automatically when Accelerator objects get deconstructed. More...
 

Private Attributes

Contextctxt
 ESI accelerator context. More...
 
std::map< ServiceCacheKey, std::unique_ptr< Service > > serviceCache
 
std::unique_ptr< AcceleratorServiceThreadserviceThread
 
std::vector< std::unique_ptr< Accelerator > > ownedAccelerators
 List of accelerator objects owned by this connection. More...
 

Detailed Description

Abstract class representing a connection to an accelerator.

Actual connections (e.g. to a co-simulation or actual device) are implemented by subclasses. No methods in here are thread safe.

Definition at line 78 of file Accelerator.h.

Member Typedef Documentation

◆ Service

Definition at line 107 of file Accelerator.h.

◆ ServiceCacheKey

using esi::AcceleratorConnection::ServiceCacheKey = std::tuple<const std::type_info *, AppIDPath>
private

Cache services via a unique_ptr so they get free'd automatically when Accelerator objects get deconstructed.

Definition at line 144 of file Accelerator.h.

◆ ServiceTable

Definition at line 93 of file Accelerator.h.

Constructor & Destructor Documentation

◆ AcceleratorConnection()

esi::AcceleratorConnection::AcceleratorConnection ( Context ctxt)

Definition at line 36 of file Accelerator.cpp.

◆ ~AcceleratorConnection()

esi::AcceleratorConnection::~AcceleratorConnection ( )
virtual

Definition at line 38 of file Accelerator.cpp.

References disconnect().

Member Function Documentation

◆ createService()

virtual Service* esi::AcceleratorConnection::createService ( Service::Type  service,
AppIDPath  idPath,
std::string  implName,
const ServiceImplDetails details,
const HWClientDetails clients 
)
protectedpure virtual

Called by getServiceImpl exclusively.

It wraps the pointer returned by this in a unique_ptr and caches it. Separate this from the wrapping/caching since wrapping/caching is an implementation detail.

Implemented in esi::backends::xrt::XrtAccelerator, esi::backends::cosim::CosimAccelerator, and esi::backends::trace::TraceAccelerator.

Referenced by getService().

◆ disconnect()

void AcceleratorConnection::disconnect ( )
virtual

◆ getCtxt()

Context& esi::AcceleratorConnection::getCtxt ( ) const
inline

◆ getLogger()

Logger& esi::AcceleratorConnection::getLogger ( ) const
inline

Definition at line 83 of file Accelerator.h.

References ctxt, and esi::Context::getLogger().

Referenced by registerCallbacks().

◆ getService() [1/2]

template<typename ServiceClass >
ServiceClass* esi::AcceleratorConnection::getService ( AppIDPath  id = {},
std::string  implName = {},
ServiceImplDetails  details = {},
HWClientDetails  clients = {} 
)
inline

Get a typed reference to a particular service type.

Caller does not take ownership of the returned pointer – the Accelerator object owns it. Pointer lifetime ends with the Accelerator lifetime.

Definition at line 112 of file Accelerator.h.

Referenced by dmaTest(), esi::services::Service::getChildService(), printHier(), printInfo(), and PYBIND11_MODULE().

◆ getService() [2/2]

services::Service * esi::AcceleratorConnection::getService ( Service::Type  service,
AppIDPath  id = {},
std::string  implName = {},
ServiceImplDetails  details = {},
HWClientDetails  clients = {} 
)
virtual

Calls createService and caches the result.

Subclasses can override if they want to use their own caching mechanism.

Definition at line 46 of file Accelerator.cpp.

References createService(), and serviceCache.

◆ getServiceThread()

AcceleratorServiceThread * esi::AcceleratorConnection::getServiceThread ( )

Return a pointer to the accelerator 'service' thread (or threads).

If the thread(s) are not running, they will be started when this method is called. std::thread is used. If users don't want the runtime to spin up threads, don't call this method. AcceleratorServiceThread is owned by AcceleratorConnection and governed by the lifetime of the this object.

Definition at line 40 of file Accelerator.cpp.

References serviceThread.

Referenced by PYBIND11_MODULE().

◆ requestChannelsFor()

virtual std::map<std::string, ChannelPort &> esi::AcceleratorConnection::requestChannelsFor ( AppIDPath  ,
const BundleType ,
const ServiceTable  
)
pure virtual

Request the host side channel ports for a particular instance (identified by the AppID path).

For convenience, provide the bundle type.

Implemented in esi::backends::xrt::XrtAccelerator, esi::backends::trace::TraceAccelerator, and esi::backends::cosim::CosimAccelerator.

◆ takeOwnership()

Accelerator * esi::AcceleratorConnection::takeOwnership ( std::unique_ptr< Accelerator accel)

Assume ownership of an accelerator object.

Ties the lifetime of the accelerator to this connection. Returns a raw pointer to the object.

Definition at line 65 of file Accelerator.cpp.

References ownedAccelerators.

Member Data Documentation

◆ ctxt

Context& esi::AcceleratorConnection::ctxt
private

ESI accelerator context.

Definition at line 140 of file Accelerator.h.

Referenced by getCtxt(), and getLogger().

◆ ownedAccelerators

std::vector<std::unique_ptr<Accelerator> > esi::AcceleratorConnection::ownedAccelerators
private

List of accelerator objects owned by this connection.

These are destroyed when the connection dies or is shutdown.

Definition at line 151 of file Accelerator.h.

Referenced by takeOwnership().

◆ serviceCache

std::map<ServiceCacheKey, std::unique_ptr<Service> > esi::AcceleratorConnection::serviceCache
private

Definition at line 145 of file Accelerator.h.

Referenced by getService().

◆ serviceThread

std::unique_ptr<AcceleratorServiceThread> esi::AcceleratorConnection::serviceThread
private

Definition at line 147 of file Accelerator.h.

Referenced by disconnect(), and getServiceThread().


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