写入并递增输出串流 - 2023.2 简体中文

AI 引擎内核与计算图编程指南 (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 简体中文

AI 引擎运算

以下运算会向给定输出串流写入数据,并在 AI 引擎上前移串流。由于在 AI 引擎上有 2 个输出串流端口,因此,物理端口分配由 AI 引擎编译器自动完成,并作为串流数据结构的一部分进行传递。数据值可逐一写入输出串流或者作为矢量来写入输出串流。对于后者,仅当所有值都已写入后,串流运算才会停滞。数据基于底层单周期 32 位串流运算或者 4 周期 128 位宽串流运算来进行分组。级联连接会并行写入所有值。

void writeincr(output_stream<int32> *w, int32 v);
void writeincr(output_stream<int64> *w, int64 v);
void writeincr(output_stream<uint32> *w, uint32 v);
void writeincr(output_stream<cint16> *w, cint16 v);
void writeincr(output_stream<cint32> *w, cint32 v);
void writeincr(output_stream<float> *w, float v);
void writeincr(output_stream<cfloat> *w, cfloat v);

void writeincr_v<16>(output_stream<int8> *w, aie::vector<int8,16> &v);
void writeincr_v<16>(output_stream<uint8> *w, aie::vector<uint8,16> &v);
void writeincr_v<8>(output_stream<int16> *w, aie::vector<int16,8> &v);
void writeincr_v<4>(output_stream<cint16> *w, aie::vector<cint16,4> &v);
void writeincr_v<4>(output_stream<int32> *w, aie::vector<int32,4> &v);
void writeincr_v<2>(output_stream<cint32> *w, aie::vector<cint32,2> &v);
void writeincr_v<4>(output_stream<float> *w, aie::vector<float,4> &v);

void writeincr_v<8>(output_stream<acc48> *w, aie::accum<acc48,8> &v);
void writeincr_v<4>(output_stream<cacc48> *w, aie::accum<cacc48,4> &v);
void writeincr_v<4>(output_stream<acc80> *str, aie::accum<acc80,4> &v);
void writeincr_v<2>(output_stream<cacc80> *str, aie::accum<cacc80,2> &v);
void writeincr_v<8>(output_stream<accfloat> *str, aie::accum<accfloat,8> &v);
void writeincr_v<4>(output_stream<caccfloat> *str, aie::accum<caccfloat,4> &v);
注释: writeincr API 可搭配 TLAST 实参一起使用,来指明串流结束,如下所示。
void writeincr(output_stream<int32> *w, int32 value, bool tlast);