CIRCT 21.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. | |
virtual std::future< MessageData > | readAsync () |
Asynchronous read. | |
virtual void | read (MessageData &outData) |
Specify a buffer to read into. | |
void | setMaxDataQueueMsgs (uint64_t maxMsgs) |
Set maximum number of messages to store in the dataQueue. | |
![]() | |
ChannelPort (const Type *type) | |
virtual | ~ChannelPort () |
bool | poll () |
Poll for incoming data. | |
const Type * | getType () const |
Static Public Attributes | |
static constexpr uint64_t | DefaultMaxDataQueueMsgs = 32 |
Default max data queue size set at connect time. | |
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. | |
std::mutex | pollingM |
Mutex to protect the two queues used for polling. | |
std::queue< MessageData > | dataQueue |
Store incoming data here if there are no outstanding promises to be fulfilled. | |
uint64_t | maxDataQueueMsgs |
Maximum number of messages to store in dataQueue. 0 means no limit. | |
std::queue< std::promise< MessageData > > | promiseQueue |
Promises to be fulfilled when data is available. | |
![]() | |
const Type * | type |
Additional Inherited Members | |
![]() | |
virtual bool | pollImpl () |
Method called by poll() to actually poll the channel if the channel is connected. | |
virtual void | connectImpl (std::optional< unsigned > bufferSize) |
Called by all connect methods to let backends initiate the underlying connections. | |
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 |
Reimplemented in esi::UnknownReadChannelPort.
Definition at line 44 of file Ports.cpp.
References Callback, callback, esi::ChannelPort::connectImpl(), Disconnected, and mode.
|
overridevirtual |
Connect to the channel in polling mode.
Implements esi::ChannelPort.
Reimplemented in esi::UnknownReadChannelPort.
Definition at line 53 of file Ports.cpp.
References assert(), callback, esi::ChannelPort::connectImpl(), dataQueue, DefaultMaxDataQueueMsgs, maxDataQueueMsgs, mode, Polling, pollingM, and promiseQueue.
|
inlineoverridevirtual |
Implements esi::ChannelPort.
Definition at line 129 of file Ports.h.
References Disconnected, and mode.
|
inlineoverridevirtual |
Implements esi::ChannelPort.
Definition at line 130 of file Ports.h.
References Disconnected, and mode.
|
inlinevirtual |
Specify a buffer to read into.
Blocking. Basic API, will likely change for performance and functionality reasons.
Definition at line 165 of file Ports.h.
References readAsync().
|
virtual |
Asynchronous read.
Reimplemented in esi::UnknownReadChannelPort.
Definition at line 77 of file Ports.cpp.
References assert(), Callback, 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 177 of file Ports.h.
References maxDataQueueMsgs.
|
protected |
|
protected |
Store incoming data here if there are no outstanding promises to be fulfilled.
Definition at line 195 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 197 of file Ports.h.
Referenced by connect(), and setMaxDataQueueMsgs().
|
protected |
Definition at line 182 of file Ports.h.
Referenced by connect(), connect(), disconnect(), isConnected(), and readAsync().
|
protected |
Mutex to protect the two queues used for polling.
Definition at line 192 of file Ports.h.
Referenced by connect(), and readAsync().
|
protected |
Promises to be fulfilled when data is available.
Definition at line 199 of file Ports.h.
Referenced by connect(), and readAsync().