Buffer Allocation Control - 2020.2 English

Versal ACAP AI Engine Programming Environment User Guide (UG1076)

Document ID
UG1076
Release Date
2020-11-24
Version
2020.2 English

The AI Engine compiler automatically allocates the desired number of buffers for each memory connection. There are several different cases.

  • Lookup tables are always allocated as single buffers because they are expected to be read-only and private to a kernel. No locks are needed to synchronize lookup table accesses because they are expected to be accessed in an exclusive manner.
  • Window connections are usually assigned double buffers if the producer and consumer kernels are mapped to different processors or if the producer or the consumer is a DMA. This enables the two agents to operate in a pipelined manner using ping-pong synchronization with two locks. The AI Engine compiler automatically generates this synchronization in the respective processor main functions.
  • If the producer and consumer kernels are mapped to the same processor, then the window connection is given only one buffer and no lock synchronization is needed because the kernels are executed sequentially.
  • Run-time parameter connections are always assigned double buffers along with a selector word to choose the next buffer to be accessed.

Sometimes, with window connections, it is desirable to use only single buffer synchronization instead of double buffer. This is useful when the local data memory is at a premium and the performance penalty of using a single buffer for data transfer is not critical. This can be achieved using single_buffer(port<T>&) constraint.

single_buffer(first.in[0]);