| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 26 天前 | ||
| 30 天前 | ||
| 30 天前 | ||
| 30 天前 | ||
| 30 天前 | ||
| 30 天前 | ||
| 30 天前 |
NPUGetFloatStatus
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | √ |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
功能说明
- 算子功能:读取NPU硬件浮点溢出状态寄存器,并在检测到溢出时将溢出标志写回输入
addr(side effect),输出data固定为全零。该算子常与NPUAllocFloatStatus配合使用,用于混合精度训练中loss scaling溢出状态的读取场景。本仓交付Ascend 950PR/Ascend 950DT实现(暂未支持溢出探测的空实现):不修改输入addr,输出data固定全零;其余支持产品的实现由canndev仓交付。
-
计算公式:
data=zeros(8,dtype=float32)\text{data} = \text{zeros}(8, \text{dtype}=\text{float32})
当检测到溢出(status != 0)时,同时执行写回:
addr=ones(8,dtype=float32)\text{addr} = \text{ones}(8, \text{dtype}=\text{float32})
Ascend 950上暂未支持溢出探测,status恒为0,故
addr不被修改,data恒为全零。 -
示例:
输入addr: tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float32) 输出data: tensor([0., 0., 0., 0., 0., 0., 0., 0.], dtype=torch.float32)
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| addr | 输入 | 接收溢出标志写回的Tensor,固定shape为(8,)。检测到溢出时被写为全1(Ascend 950空实现中恒不写回)。 | FLOAT | ND |
| data | 输出 | NPU浮点状态Tensor,固定shape为(8,),包含8个float32零值,不承载状态信息。 | FLOAT | ND |
约束说明
- 该算子有一个输入
addr、一个输出data,无属性。 - 输入
addr的shape固定为(8,),dtype仅支持float32,format仅支持ND。 - 输出
data的shape固定为(8,),不可变更。8个元素对应NPU硬件的溢出状态标志位(共32字节)。 - 输出
data的dtype仅支持float32,不支持其他数据类型。 - 输出
data的format仅支持ND。 - 输出
data的值始终为全零(8个float32零值),不承载状态信息;溢出状态通过side effect写回输入addr。 - 在Ascend 950上为空实现:overflowStatus固定为0,不修改输入
addr,输出固定全零,无并行归约,天然确定性。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| 图模式调用 | test_geir_npu_get_float_status | 参见算子调用完成算子编译和验证。 |