CIRCT
20.0.0git
|
A ChannelPort which reads data from the accelerator. More...
#include <Ports.h>
Public Member Functions | |
ReadChannelPort (const Type *type) | |
virtual void | disconnect () override |
virtual bool | isConnected () const override |
virtual void | connect (std::function< bool(MessageData)> callback, std::optional< unsigned > bufferSize=std::nullopt) |
virtual void | connect (std::optional< unsigned > bufferSize=std::nullopt) override |
Connect to the channel in polling mode. More... | |
virtual std::future< MessageData > | readAsync () |
Asynchronous read. More... | |
virtual void | read (MessageData &outData) |
Specify a buffer to read into. More... | |
void | setMaxDataQueueMsgs (uint64_t maxMsgs) |
Set maximum number of messages to store in the dataQueue. More... | |
Public Member Functions inherited from esi::ChannelPort | |
ChannelPort (const Type *type) | |
virtual | ~ChannelPort () |
bool | poll () |
Poll for incoming data. More... | |
const Type * | getType () const |
Static Public Attributes | |
static constexpr uint64_t | DefaultMaxDataQueueMsgs = 32 |
Default max data queue size set at connect time. More... | |
Protected Types | |
enum | Mode { Disconnected , Callback , Polling } |
Indicates the current mode of the channel. More... | |
Protected Attributes | |
volatile Mode | mode |
std::function< bool(MessageData)> | callback |
Backends call this callback when new data is available. More... | |
std::mutex | pollingM |
Mutex to protect the two queues used for polling. More... | |
std::queue< MessageData > | dataQueue |
Store incoming data here if there are no outstanding promises to be fulfilled. More... | |
uint64_t | maxDataQueueMsgs |
Maximum number of messages to store in dataQueue. 0 means no limit. More... | |
std::queue< std::promise< MessageData > > | promiseQueue |
Promises to be fulfilled when data is available. More... | |
Protected Attributes inherited from esi::ChannelPort | |
const Type * | type |
Additional Inherited Members | |
Protected Member Functions inherited from esi::ChannelPort | |
virtual bool | pollImpl () |
Method called by poll() to actually poll the channel if the channel is connected. More... | |
virtual void | connectImpl (std::optional< unsigned > bufferSize) |
Called by all connect methods to let backends initiate the underlying connections. More... | |
A ChannelPort which reads data from the accelerator.
It has two modes: Callback and Polling which cannot be used at the same time. The mode is set at connect() time. To change the mode, disconnect() and then connect() again.
|
protected |
|
inline |
|
virtual |
Definition at line 44 of file Ports.cpp.
References callback, esi::ChannelPort::connectImpl(), and mode.
|
overridevirtual |
Connect to the channel in polling mode.
Implements esi::ChannelPort.
Definition at line 53 of file Ports.cpp.
References assert(), callback, esi::ChannelPort::connectImpl(), dataQueue, DefaultMaxDataQueueMsgs, maxDataQueueMsgs, mode, pollingM, and promiseQueue.
|
inlineoverridevirtual |
|
inlineoverridevirtual |
|
inlinevirtual |
Specify a buffer to read into.
Blocking. Basic API, will likely change for performance and functionality reasons.
Definition at line 144 of file Ports.h.
References readAsync().
|
virtual |
Asynchronous read.
Definition at line 77 of file Ports.cpp.
References assert(), dataQueue, mode, pollingM, and promiseQueue.
Referenced by PYBIND11_MODULE(), read(), sv2cCosimserverEpRegister(), and sv2cCosimserverEpTryGet().
|
inline |
Set maximum number of messages to store in the dataQueue.
0 means no limit. This is only used in polling mode and is set to default of 32 upon connect. While it may seem redundant to have this and bufferSize, there may be (and are) backends which have a very small amount of memory which are accelerator accessible and want to move messages out as quickly as possible.
Definition at line 156 of file Ports.h.
References maxDataQueueMsgs.
|
protected |
|
protected |
Store incoming data here if there are no outstanding promises to be fulfilled.
Definition at line 174 of file Ports.h.
Referenced by connect(), and readAsync().
|
staticconstexpr |
|
protected |
Maximum number of messages to store in dataQueue. 0 means no limit.
Definition at line 176 of file Ports.h.
Referenced by connect(), and setMaxDataQueueMsgs().
|
protected |
Definition at line 161 of file Ports.h.
Referenced by connect(), disconnect(), isConnected(), and readAsync().
|
protected |
Mutex to protect the two queues used for polling.
Definition at line 171 of file Ports.h.
Referenced by connect(), and readAsync().
|
protected |
Promises to be fulfilled when data is available.
Definition at line 178 of file Ports.h.
Referenced by connect(), and readAsync().