SetCtrlSpr(ISASI)

产品支持情况

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

功能说明

头文件路径为:"basic_api/kernel_operator_common_intf.h"

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

函数原型

template <int8_t startBit, int8_t endBit>
__aicore__ static inline void SetCtrlSpr(int64_t value)

参数说明

表1 模板参数说明

参数名 描述
startBit 起始比特位索引。
endBit 终止比特位索引。

表2 参数说明

参数名 输入/输出 描述
value 输入 起止比特位上新设置的值。

表3 Ascend 950PR/Ascend 950DT常用CTRL寄存器比特位说明

CTRL寄存器比特位 功能 默认值 配合使用的API
CTRL[8:6] 用于控制数据从L0C Buffer/Unified Buffer/L1 Buffer搬运至Global Memory时原子操作的启用及数据类型选择。
• 3'b000:不开启原子操作;
• 3'b001:开启原子操作,数据类型为float;
• 3'b010:开启原子操作,数据类型为half;
• 3'b011:开启原子操作,数据类型为int16_t;
• 3'b100:开启原子操作,数据类型为int32_t;
• 3'b101:开启原子操作,数据类型为int8_t;
• 3'b110:开启原子操作,数据类型为bfloat16_t。
3'b000 不涉及
CTRL[10:9] 用于控制原子操作的类型,仅在CTRL[8:6]开启原子操作时生效。
• 2'b00:选择ADD操作;
• 2'b01:选择MAX操作;
• 2'b10:选择MIN操作。
2'b00 不涉及
CTRL[45] 用于控制左右矩阵数据做Mmad计算时的处理方式。
• 1'b0:按照原数据类型进行处理;
• 1'b1:左右矩阵数据均为fp8_e4m3fn_t时,数据视为hifloat8_t进行矩阵乘法计算。其他场景按照原数据类型进行处理。
1'b0 不涉及
CTRL[48] 用于控制浮点数计算和浮点数精度转换时的饱和模式,仅在CTRL[60]开启时生效。
• 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。
1'b0 配合使用的API:
•矢量计算API
•原子操作API
•精度转换指令

使用约束:
•需要满足数据类型限制。
•执行原子操作过程中,如果需要重新配置该控制位,需要调用DataCacheCleanAndInvalid先清除当前Cache Line状态并将当前数据写出,防止饱和模式变更影响当前数据。具体调用示例可参考原子操作中,half类型配置全局非饱和模式示例。
CTRL[50] 用于控制浮点数精度转换时的NaN饱和模式,在CTRL[48]设置为饱和模式时生效。
• 1'b0:NaN输出会被转换为0.0;
• 1'b1:NaN输出会保持NaN。

该控制位仅支持如下数据类型:
fp8_e8m0_t、fp8_e5m2_t、fp8_e4m3fn_t。
1'b0 精度转换指令(需要满足数据类型限制)。
CTRL[53] 用于控制整数计算指令的饱和模式。
• 1'b0:截断模式,溢出值按目标数据类型位数截断,保留低位,舍弃高位;
• 1'b1:饱和模式,溢出值饱和到±MAX。
1'b0 矢量计算API(输入输出数据类型为整数)。
CTRL[59] 用于控制浮点数转整数或整数转整数时的精度转换饱和模式,仅在CTRL[60]开启时生效。
• 1'b0:饱和模式:溢出值饱和到±MAX;
• 1'b1:截断模式:溢出值按目标数据类型位数截断,保留低位,舍弃高位。
1'b0 精度转换指令。
CTRL[60] 用于控制饱和模式的全局生效方式。
• 1'b0:单指令设置饱和;
• 1'b1:全局设置饱和。
1'b1 该控制位可与Reg矢量计算API Cast配合使用,或与CTRL[48]、CTRL[59]配合使用,具体配置信息参考表6

表4 Atlas A3 训练系列产品/Atlas A3 推理系列产品常用CTRL寄存器比特位说明

CTRL寄存器比特位 功能 默认值 配合使用的API
CTRL[48] 用于控制浮点数计算和浮点数精度转换时的饱和模式。
• 1'b0:饱和模式,inf输出会被饱和为±MAX, NaN输出会被饱和为0;
• 1'b1:非饱和模式,inf/NaN保持原输出。

该控制位仅支持如下数据类型:
•浮点数计算时支持half、bfloat16_t数据类型;
•浮点数精度转换时支持如下数据类型:half、bfloat16_t。
1'b0 不涉及

注:针对Atlas A3 训练系列产品/Atlas A3 推理系列产品,推荐使用SetSaturationFlagGetSaturationFlag来设置和获取CTRL[48]以控制饱和模式。

表5 Atlas A2 训练系列产品/Atlas A2 推理系列产品常用CTRL寄存器比特位说明

CTRL寄存器比特位 功能 默认值 配合使用的API
CTRL[48] 用于控制浮点数计算和浮点数精度转换时的饱和模式。
• 1'b0:饱和模式,inf输出会被饱和为±MAX, NaN输出会被饱和为0;
• 1'b1:非饱和模式,inf/NaN保持原输出。

该控制位仅支持如下数据类型:
•浮点数计算时支持half、bfloat16_t数据类型;
•浮点数精度转换时支持如下数据类型:half、bfloat16_t。
1'b0 不涉及

注:针对Atlas A2 训练系列产品/Atlas A2 推理系列产品,推荐使用SetSaturationFlagGetSaturationFlag来设置和获取CTRL[48]以控制饱和模式。

表6 Ascend 950PR/Ascend 950DT饱和模式全局或单指令生效配置表

全局开启位 控制位 功能描述
CTRL[60] = 1'b0 Reg矢量计算Cast API的trait模板参数中satMode设置为SatMode::NO_SAT。 单指令非饱和模式。
CTRL[60] = 1'b0 Reg矢量计算Cast API的trait模板参数中satMode设置为SatMode::SAT。 单指令饱和模式。
CTRL[60] = 1'b1 CTRL[48] = 1'b1 全局非饱和模式(浮点数计算和浮点数精度转换)。
CTRL[60] = 1'b1 CTRL[48] = 1'b0 全局饱和模式(浮点数计算和浮点数精度转换)。
CTRL[60] = 1'b1 CTRL[59] = 1'b1 全局非饱和模式(浮点数转整数或整数转整数时的精度转换)。
CTRL[60] = 1'b1 CTRL[59] = 1'b0 全局饱和模式(浮点数转整数或整数转整数时的精度转换)。

返回值说明

约束说明

  • Ascend 950PR/Ascend 950DT仅支持CTRL[8:6]、CTRL[10:9]、CTRL[45]、CTRL[48]、CTRL[50]、CTRL[53]、CTRL[59]、CTRL[60]比特位。
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品仅支持CTRL[48]比特位。
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品仅支持CTRL[48]比特位。

调用示例

  • 如下示例中开启非饱和模式,数据类型为half。

    AscendC::SetCtrlSpr<48, 48>(1);
    
  • 原子操作中,half类型配置全局非饱和模式示例。

    AscendC::SetCtrlSpr<6, 8>(2);
    AscendC::SetAtomicAdd<half>();
    AscendC::DataCacheCleanAndInvalid<half, AscendC::CacheLine::ENTIRE_DATA_CACHE, AscendC::DcciDst::CACHELINE_ATOMIC>(dstTensor);
    AscendC::SetCtrlSpr<48, 48>(1);
    ...