SaturateMode#

产品支持情况#

  • Ascend 950PR&950DT系列产品:支持

  • Atlas A3系列产品:不支持

  • Atlas A2系列产品:不支持

功能说明#

SaturateMode定义了vf.astype缩窄类型转换时的饱和处理模式,用于控制源数据超出目标类型表示范围时的处理策略。

原型定义#

class SaturateMode(enum.Enum):
     OFF = ...  # 非饱和模式(默认),超出范围的值截断或行为因转换场景而异
     ON = ...  # 饱和模式,超出范围的值截断到目标类型的最大值或最小值

约束说明#

不同类型转换场景下,非饱和模式与饱和模式的行为差异如下:

场景

非饱和模式(OFF)

饱和模式(ON)

浮点转整数

输入数据超过输出类型最值时,结果被截断为目标格式的数据宽度(保留最低有效位),例如输入half值为257,输出uint8_t值为1;输入为+/-inf时,则返回输出类型的对应最值;输入为nan时,返回0。

输入数据超过输出类型最值时,返回输出类型的对应最值,例如输入half值为257,输出uint8值为255,输入half值为-inf,输出uint8_t值为0;输入为nan时,返回0。

浮点转浮点

输入数据为nan时,输出为nan;输入+/-inf时,输出为+/-inf。

输入为nan时,输出为0;输入数据超过输出类型最值时,返回输出类型的对应最值。

整数转浮点

不支持非饱和模式

输入为nan时,输出为0;输入数据超过输出类型最值时,返回输出类型的对应最值。该场景默认饱和模式,无需配置。

整数转整数

输入数据会截断为目标数据宽度,例如,输入int32_t值为256,输出uint8_t值为0。

输入数据超出目标数据范围,会饱和为目标数据最值。

调用示例#

import pypto_pro.language as pl

@pl.vector_function
def vf_kernel(src, preg):
    dst = vf.astype(src, preg, dtype=pl.DT_INT8, saturate=pl.SaturateMode.ON)