Skip to content

asc_set_ctrl

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:不支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:不支持

功能说明

头文件路径为:"c_api/spr/spr.h"

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

函数原型

C++
__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]用于控制标量单元访问Unified Buffer(UB)时是否经过DCache。DCache的读取速度快于UB,因此在对UB进行大量读取,且UB中数据不被Vector单元写入时,可选择开启该模式。
- 1'b0:标量单元访问UB时,直接从UB中读取;
- 1'b1:标量单元访问UB时,从DCache中读取。
CTRL[50]用于控制fp8_e8m0_t、fp8_e5m2_t、fp8_e4m3fn_t相关场景的饱和模式。
- 1'b0:饱和模式;
- 1'b1:非饱和模式。
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:截断模式:溢出值按照目标数据类型位数截断,保留低位,舍弃高位。
CTRL[60]饱和控制策略选择位。
- 1'b0:按单指令/API路径配置饱和(对应asc_override_strategy::USE_API);
- 1'b1:使用全局CTRL饱和配置(对应asc_override_strategy::USE_GLOBAL),此时CTRL[59]的CAST配置才会生效。

返回值说明

流水类型

PIPE_S

约束说明

  • 使用前需要先用asc_get_ctrl()获取当前值,仅对需要变更的bit位进行修改。
  • 常用可配置比特位包括CTRL[48]、CTRL[50]、CTRL[53]、CTRL[56]、CTRL[59]、CTRL[60]。

调用示例

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

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区