asc_set_ctrl

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品

功能说明

对CTRL寄存器(控制寄存器)的特定比特位进行设置。

函数原型

__aicore__ inline void asc_set_ctrl(uint64_t config)

参数说明

表1 参数说明

参数名 输入/输出 描述
config 输入 待设置的寄存器值。常用CTRL寄存器比特位说明参考表2。

表2 常用CTRL寄存器比特位说明

CTRL比特位 功能
CTRL[48] 用于控制整数计算指令的饱和模式
- 1'b0:饱和模式,INF输出会被饱和为±MAX,NAN输出会被饱和为0;
- 1'b1:非饱和模式,INF/NAN保持原输出。
该控制位仅支持如下数据类型:
- 浮点数计算时支持half数据类型;
- 浮点数精度转换时支持如下数据类型:hifloat8_t、fp8_e8m0_t、fp8_e5m2_t、fp8_e4m3fn_t、half、bfloat16_t。
CTRL[49] 用于控制标量单元读取数据时是否通过datacache读取。datacache的读取速度快于ub,因此在对ub进行大量读取,且ub中数据不被vector单元写入时,可选择开启该模式。
- 1'b0:标量单元读取数据时,直接从ub中读取;
- 1'b1:标量单元读取数据时,从datacache中读取。
CTRL[53] 用于控制整数计算指令的饱和模式
- 1'b0:截断模式,溢出值按目标数据类型位数截断,保留低位,舍弃高位;
- 1'b1:饱和模式,溢出值饱和到±MAX。
CTRL[56] MASK模式控制位。MASK用于辅助SIMD指令执行,由于CTRL[56]指示两种模式:
- 1'b0:向量操作中的掩码寄存器。每位对应向量中一个元素,标记该元素是否参与计算。'1'表示对应元素将被计算;'0'表示对应元素将不被计算;
- 1'b1:MASK[31:0]用于指示SIMD指令实际操作的元素数量。实际重复次数由VECTOR自动推断,此时参数repeat time(Xt[63:56])被忽略。
CTRL[59] 用于控制浮点数转整数或整数转整数时的精度转换饱和模式,仅在CTRL[60]使能时生效。
- 1'b0:饱和模式,溢出值饱和到±MAX;
- 1'b1:截断模式:溢出值按照目标数据类型位数截断,保留低位,舍弃高位。

返回值说明

流水类型

PIPE_S

约束说明

  • 使用前需要先用asc_get_ctrl()获取当前值,仅对需要变更的bit位进行修改。
  • 仅支持已设置CTRL[48]、CTRL[53]、CTRL[56]、CTRL[59]比特位。

调用示例

// 将CTRL[48]设置为非饱和模式
uint64_t ori_config = asc_get_ctrl();
uint64_t mask = (static_cast<uint64_t>(1) << 49);
uint64_t config = ori_config | mask;
asc_set_ctrl(config);