AI 引擎 API 提供了矢量比较运算,包括:
-
aie::eq
-
aie::neq
-
aie::le
-
aie::lt
-
aie::ge
-
aie::gt
矢量比较运算会逐一比较两个矢量中的每个元素,或者将一个标量与一个矢量进行比较,然后返回特殊类型 aie::mask
。aie::mask
的每个位都对应于一个基本比较结果。
aie::vector<int32,16> v1,v2;
// compare each element
// true if v1[i]<v2[i]
aie::mask<16> msk_lt=aie::lt(v1,v2);
// set bit 0 to be true
msk_lt.set(0);
// set bit 1 to be false
msk_lt.clear(1);
/*element-wise selection
*select v2[i] if msk_lt[i] is true
*/select v1[i] if msk_lt[i] is false;
aie::vector<int32,16> v_s=aie::select(v1,v2,msk_lt);
以下 API 用于对两个输入矢量或一个输入矢量与一个标量值按逐个元素进行比较,如果首个输入元素大于第二个输入元素,则返回两者之间的差异。否则,对该元素返回 0。
-
aie::maxdiff
aie::vector<int16,16> v1,v2;
// vc[i]=(v1[i]>v2[i])?(v1[i]-v2[i]):0
auto vc=aie::maxdiff(v1,v2);
// vc[i]=(v1[i]>1)?(v1[i]-1):0
auto vc2=aie::maxdiff(v1,(int16)1);
// vc[i]=(2>v2[i])?(2>v2[i]):0
auto vc3=aie::maxdiff((int16)2,v2);
以下 API 会对两个输入矢量的所有元素进行比较,并返回 bool
值。
-
aie::equal
- 返回两个输入矢量的所有元素是否相等。这两个矢量的类型和大小必须相同。
-
aie::not_equal
- 返回两个输入矢量中的部分元素是否不相等。这两个矢量的类型和大小必须相同。
以下提供的 API 用于逐一选择两个矢量(或一个标量和一个矢量)中每个元素的最大值或最小值。标量和矢量的类型必须相同。
-
aie::max
-
aie::min
// vc[i]=max(v1[i], v2[i])
aie::vector<int32,16> vc=aie::max(v1,v2);