mindspore.ops.NPUGetFloatStatus
- class mindspore.ops.NPUGetFloatStatus[源代码]
在执行
mindspore.ops.NPUAllocFloatStatus
后, NPUGetFloatStatus 获取最新溢出状态并更新标识。说明
标志是一个Tensor,其shape为 \((8,)\) ,数据类型为 mindspore.dtype.float32 。如果标志的和等于0,则没有发生溢出。如果标志之和大于0,则发生溢出。此外,使用有严格的顺序要求,即在使用 NPUGetFloatStatus 算子之前,需要确保
mindspore.ops.NPUClearFloatStatus
和需执行的计算已执行。使用mindspore.ops.Depend
确保执行顺序。- 输入:
x (Tensor) -
mindspore.ops.NPUAllocFloatStatus
的输出Tensor。数据类型必须为float16或float32。 \((N,*)\) ,其中 \(*\) 表示任意附加维度,其rank应小于8。
- 输出:
Tensor,shape与 x 相同。Tensor中的所有元素都将为零。
- 异常:
TypeError - 如果 x 不是Tensor。
TypeError - 如果 x 的数据类型既不是float16也不是float32。
- 支持平台:
Ascend
样例:
>>> import numpy as np >>> import mindspore.nn as nn >>> from mindspore import ops >>> from mindspore.common import dtype as mstype >>> from mindspore.common.tensor import Tensor >>> class Net(nn.Cell): ... def __init__(self): ... super().__init__() ... self.alloc_status = ops.NPUAllocFloatStatus() ... self.get_status = ops.NPUGetFloatStatus() ... self.clear_status = ops.NPUClearFloatStatus() ... self.sub = ops.Sub() ... self.neg = ops.Neg() ... ... def construct(self, x): ... init = self.alloc_status() ... clear_status = self.clear_status(init) ... x = ops.depend(x, clear_status) ... res = self.sub(x, self.neg(x)) ... init = ops.depend(init, res) ... get_status = self.get_status(init) ... res = ops.depend(res, get_status) ... return res >>> >>> value = 5 >>> data = np.full((2, 3), value, dtype=np.float16) >>> x = Tensor(data, dtype=mstype.float16) >>> net = Net() >>> res = net(x) >>> print(res) [[10. 10. 10.] [10. 10. 10.]]