Parallel Streams Access - 2023.2 English

AI Engine Kernel and Graph Programming Guide (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 English

The AI Engine is able to use two streaming inputs or two streaming outputs in parallel.

To guide the tool to use parallel streams, 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);

    // Avoid the write instruction to occur at the same cycle as the readincr of data1
    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);

    // This writeincr can be scheduled as soon as possible 
    // as there is the __restrict keyword in function signature
    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.