For streaming input and output interfaces, when the performance is limited by the stream number, the AI Engine is able to use two streaming inputs or two streaming outputs in parallel, instead of one streaming input or output.
To guide the tool to use parallel streams is to use
aie_stream_resource_in
and aie_stream_resource_out
annotations with different enumeration values, like
aie_stream_resource_in::a
and aie_stream_resource_in::b
for input streams. For
example:void vect_mul(input_stream<int8>* __restrict data1, input_stream<int8>* __restrict data2,
output_stream<int8>* __restrict out){
while(true)
chess_prepare_for_pipelining
chess_loop_range(8,)
{
aie::vector<int8,16> va_int8=readincr_v<16,aie_stream_resource_in::a>(data1);
aie::vector<int8,16> vb_int8=readincr_v<16,aie_stream_resource_in::b>(data2);
auto vc=aie::mul(va_int8,vb_int8);
writeincr<aie_stream_resource_out::a>(out,vc.to_vector<int8>(0));
va_int8=readincr_v<16,aie_stream_resource_in::a>(data1);
vb_int8=readincr_v<16,aie_stream_resource_in::b>(data2);
vc=aie::mul(va_int8,vb_int8);
writeincr(out,vc.to_vector<int8>(0));
}
}
Similarly, aie_stream_resource_out::a
and
aie_stream_resource_out::b
can be used to denote two
parallel output streams.