AI 引擎 API 为众多运算提供运算符重载。只需包含头文件 aie_api/operators.hpp
并使用 aie::operators
名称空间,即可使用此功能特性。
包含的运算符如下所示。
- 运算符
+
- 加法运算符。它等同于
aie::add
。 - 运算符
+=
- 加法赋值运算符。
- 运算符
-
- 负运算符。它等同于
aie::neg
。 - 运算符
-
- 减法运算符。它等同于
aie::sub
。 - 运算符
-=
- 减法赋值运算符。
- 运算符
!=
- 不等于比较运算符。它等同于
aie::neq
。 - 运算符
<
- 小于比较运算符。它等同于
aie::lt
。 - 运算符
<=
- 小于或等于比较运算符。它等同于
aie::le
。 - 运算符
==
- 等于比较运算符。它等同于
aie::eq
。 - 运算符
>
- 大于比较运算符。它等同于
aie::gt
。 - 运算符
>=
- 大于或等于比较运算符。它等同于
aie::ge
。 - 运算符
<<
- 按位左移运算符。它等同于
aie::upshift
。 - 运算符
>>
- 按位右移运算符。它等同于
aie::downshift
。 - 运算符
&
- 按位 AND 运算。它等同于
aie::bit_and
。 - 运算符
^
- 按位 XOR 运算。它等同于
aie::bit_xor
。 - 运算符
|
- 按位 OR 运算。它等同于
aie::bit_or
。 - 运算符
~
- 按位 NEG 运算。它等同于
aie::bit_not
。
使用运算符的代码示例如下所示。
#include <aie_api/aie.hpp>
#include <aie_api/aie_adf.hpp>
#include <aie_api/utils.hpp>
#include <aie_api/operators.hpp>
using namespace aie::operators;
void operator_overload_test(input_window<int32>* __restrict data,output_window<int32>* __restrict out){
aie::vector<int32,8> va=window_readincr_v<8>(data);
aie::vector<int32,8> vb=window_readincr_v<8>(data);
aie::vector<int32,8> vadd=va+vb;
aie::vector<int32,8> vsub=va-vb;
aie::vector vneg=-vb;//negation of each element
vadd+=vneg;
aie::print(va,true,"va=");
aie::print(vadd,true,"vadd=");
//compare each element of the vector correspondingly
auto msk_neq=(vadd!=va);
//mask bit equals 1 if vector element not equal
aie::print(msk_neq,true,"msk_neq=");
aie::vector vnot_va=~va;//bit not
aie::vector vones=va ^ vnot_va;//bit xor
aie::print(vones,true,"vones=");
//choose vadd if mask bit equals 0
auto vout=aie::select(vadd,vones,msk_neq);
aie::print(vout,true,"vout=");
window_writeincr(out,vadd);
}
前述代码的可能的 C 语言输出之一如下所示。
va=9 10 11 12 13 14 15 16
vadd=9 10 11 12 13 14 15 16
msk_neq=0 0 0 0 0 0 0 0
vones=-1 -1 -1 -1 -1 -1 -1 -1
vout=9 10 11 12 13 14 15 16