With a stream-based access model, the kernels receive an input stream or an output stream of typed data as an argument. Each access to these streams is synchronized, i.e., reads stall if the data is not available in the stream and writes stall if the stream is unable to accept new data.
An AI Engine supports two 32-bit input stream
ports with id=0
or 1
and two 32-bit output stream ports with id=0
or 1
. This ID is supplied as an argument to the stream object
constructors. The AI Engine compiler automatically
allocates the input and output stream port IDs from left to right in the argument list
of a kernel. Multiple kernels mapped to the same AI Engine are not allowed to share stream ports unless the streams are
packet switched (see Explicit Packet Switching).
There is also a direct stream communication channel between the accumulator register of one AI Engine and the physically adjacent core, called a cascade. The cascade stream is connected within the AI Engine array in a snake-like linear fashion from AI Engine processor to processor.
The stream data structures are automatically inferred by the AI Engine compiler from data flow graph connections, and are automatically declared in the wrapper code implementing the graph control. The kernel functions merely operate on pointers to stream data structures that are passed to them as arguments. There is no need to declare these stream data structures in data flow graph or kernel program.