昇腾社区首页
中文
注册

Mask规则说明

如需要控制哪些元素参与计算,可通过配置Mask寄存器实现。每次迭代内可处理的元素个数的最大值取决于操作数的数据类型,最大值为:256 / sizeof(数据类型)。

Mask寄存器共128个控制位,bit位的值为1表示参与计算,0表示不参与。当操作数的数据类型为16位时(如half/uint16_t),全部128个控制位生效;当操作数为32位时(如float/int32_t),低64位生效。

void set_vector_mask(uint64_t mask1, uint64_t mask0);
表1 mask设置参数说明

参数名

说明

mask1

Mask寄存器高64位

mask0

Mask寄存器低64位

  • 当操作数为16位时,mask0、mask1∈[0, 2^64-1],且mask0和mask1不可同时为0。
  • 当操作数为32位时,mask1为0,mask0∈(0, 2^64-1]。

示例:

// 数据类型为int16_t 
// mask0的二进制值:(高)0101010101010101010101010101010101010101010101010101010101010101 
// mask1同mask0,即间隔参与运算
uint64_t mask0 = 6148914691236517205; 
uint64_t mask1 = 6148914691236517205; 
set_vector_mask(mask1, mask0); 
vadd(); 
// 输入数据(src0Local): [1 2 3 ... 64 ...127 128] 
// 输入数据(src1Local): [1 2 3 ... 64 ...127 128] 
// 输出数据(dstLocal): [2 undefined 6 ... undefined ...254 undefined]