运算符重载 - 2023.2 简体中文

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

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

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;

aie::vector<int32,8> va,vb;
aie::vector<int32,8> vadd=va+vb;
aie::vector<int32,8> vsub=va-vb;

// negation of each element
aie::vector<int32,8> vneg=-vb;
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=");

// bit not
auto vnot_va=~va;

// bit xor
auto vones=va ^ vnot_va;
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=");

前述代码的可能的 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