1# NNRt (V2_0) 2 3 4## 概述 5 6Neural Network Runtime(NNRt, 神经网络运行时)是面向AI领域的跨芯片推理计算运行时,作为中间桥梁连通上层AI推理框架和底层加速芯片,实现AI模型的跨芯片推理计算。提供统一AI芯片驱动接口,实现AI芯片驱动接入OpenHarmony。 7 8**起始版本:** 3.2 9 10 11## 汇总 12 13 14### 文件 15 16| 名称 | 描述 | 17| -------- | -------- | 18| [INnrtDevice.idl](_i_nnrt_device_8idl_v20.md) | 该文件定义芯片设备相关的接口。 | 19| [IPreparedModel.idl](_i_prepared_model_8idl_v20.md) | 该文件定义了AI模型推理、获取模型输入tensor维度范围、导出编译后模型等接口。 | 20| [ModelTypes.idl](_model_types_8idl_v20.md) | 该文件定义AI模型相关的结构体。 | 21| [NnrtTypes.idl](_nnrt_types_8idl_v20.md) | 该文件定义了HDI接口中用到的类型。 | 22| [NodeAttrTypes.idl](_node_attr_types_8idl_v20.md) | 该文件定义AI模型算子的参数和功能。 | 23 24 25### 类 26 27| 名称 | 描述 | 28| -------- | -------- | 29| interface [INnrtDevice](interface_i_nnrt_device_v20.md) | 定义了与设备相关的接口,实现设备管理和模型编译等操作。 | 30| interface [IPreparedModel](interface_i_prepared_model_v20.md) | NNRt模块的包路径。 | 31| struct [Tensor](_tensor_v20.md) | 张量结构体。 | 32| struct [Node](_node_v20.md) | 算子节点结构体。 | 33| struct [SubGraph](_sub_graph_v20.md) | 子图结构体。 | 34| struct [Model](_model_v20.md) | 模型结构体。 | 35| struct [SharedBuffer](_shared_buffer_v20.md) | 共享内存数据的结构体。 | 36| struct [ModelConfig](_model_config_v20.md) | 定义编译模型需要的参数配置。 | 37| struct [QuantParam](_quant_param_v20.md) | 量化参数结构体。 | 38| struct [IOTensor](_i_o_tensor_v20.md) | AI模型的输入输出张量。 | 39| struct [Activation](_activation_v20.md) | 激活类型的算子,所有的激活函数都属于该算子,具体的激活函数类型一句参数来确定。 | 40| struct [AddFusion](_add_fusion_v20.md) | 输入Tensor逐元素相加, 输出x和y的和,数据形状与输入broadcast之后一样,数据类型与较高精度的输入精度一致。 | 41| struct [ArgMaxFusion](_arg_max_fusion_v20.md) | 返回跨轴的tensor前K个索引或者是数值。 | 42| struct [AvgPoolFusion](_avg_pool_fusion_v20.md) | 在输入tensor上应用 2D 平均池化。支持int8量化输入。 | 43| struct [BatchToSpaceND](_batch_to_space_n_d_v20.md) | 将一个4维tensor的batch维度按block_shape切分成小块,并将这些小块拼接到空间维度。 | 44| struct [BiasAdd](_bias_add_v20.md) | 对给出的输入张量上的各个维度方向上的数据进行偏置。 | 45| struct [Cast](_cast_v20.md) | 根据输出张量的类型对张量数据类型进行转换。 | 46| struct [Concat](_concat_v20.md) | 在指定轴上连接张量,将输入张量按给定的轴连接起来。 | 47| struct [Conv2DFusion](_conv2_d_fusion_v20.md) | 对将4维的tensor执行带有偏置的二维卷积运算。 | 48| struct [Conv2dTransposeFusion](_conv2d_transpose_fusion_v20.md) | 对一个4维的tensor执行带有偏置的二维反卷积。 | 49| struct [DivFusion](_div_fusion_v20.md) | 将两个tensor执行除法运算。 | 50| struct [Eltwise](_eltwise_v20.md) | 元素级别操作的算子。 | 51| struct [ExpandDims](_expand_dims_v20.md) | 在给定轴上为tensor添加一个额外的维度。 | 52| struct [Fill](_fill_v20.md) | 根据指定的维度,创建由一个标量填充的tensor。 | 53| struct [FullConnection](_full_connection_v20.md) | 对输入数据做全连接。 | 54| struct [FusedBatchNorm](_fused_batch_norm_v20.md) | 对一个tensor进行批标准化的运算。 | 55| struct [Gather](_gather_v20.md) | 根据指定的索引和轴返回输入tensor的切片。 | 56| struct [LayerNormFusion](_layer_norm_fusion_v20.md) | 对一个tensor从某一axis开始做层归一化。 | 57| struct [LessEqual](_less_equal_v20.md) | 对输入x1和x2,计算每对元素的x1<=x2的结果。 | 58| struct [MatMulFusion](_mat_mul_fusion_v20.md) | 对输入x1和x2,计算x1和x2的内积。 | 59| struct [Maximum](_maximum_v20.md) | 对输入x1和x2,计算x1和x2对应元素最大值,x1和x2的输入遵守隐式类型转换规则,使数据类型一致。 | 60| struct [MaxPoolFusion](_max_pool_fusion_v20.md) | 对输入x,计算 2D 最大值池化。 | 61| struct [MulFusion](_mul_fusion_v20.md) | 对输入x1和x2,将x1和x2相同的位置的元素相乘得到output。 | 62| struct [OneHot](_one_hot_v20.md) | 根据indices指定的位置,生成一个由one-hot向量构成的tensor。 | 63| struct [PadFusion](_pad_fusion_v20.md) | 在x指定维度的数据前后,添加指定数值进行增广。 | 64| struct [PowFusion](_pow_fusion_v20.md) | 求x的y次幂,输入必须是两个tensor或一个tensor和一个标量。 | 65| struct [PReLUFusion](_p_re_l_u_fusion_v20.md) | 计算x和weight的PReLU激活值。 | 66| struct [QuantDTypeCast](_quant_d_type_cast_v20.md) | 数据类型转换。 | 67| struct [ReduceFusion](_reduce_fusion_v20.md) | 减小x张量的维度。 | 68| struct [Reshape](_reshape_v20.md) | 根据inputShape调整input的形状。 | 69| struct [Resize](_resize_v20.md) | 按给定的参数对输入的张量进行变形。 | 70| struct [Rsqrt](_rsqrt_v20.md) | 求x的平方根的倒数。 | 71| struct [ScaleFusion](_scale_fusion_v20.md) | 给定一个tensor,计算其缩放后的值。 | 72| struct [Shape](_shape_v20.md) | 输出输入tensor的形状。 | 73| struct [SliceFusion](_slice_fusion_v20.md) | 在x各维度,在axes维度中,以begin为起点,截取size长度的切片。 | 74| struct [Softmax](_softmax_v20.md) | 给定一个tensor,计算其softmax结果。 | 75| struct [SpaceToBatchND](_space_to_batch_n_d_v20.md) | 将4维张量在空间维度上进行切分成多个小块,然后在batch维度上拼接这些小块。 | 76| struct [Split](_split_v20.md) | 算子沿 axis 维度将x拆分成多个张量,张量数量由outputNum指定。 | 77| struct [Sqrt](_sqrt_v20.md) | 给定一个tensor,计算其平方根。 | 78| struct [SquaredDifference](_squared_difference_v20.md) | 计算两个输入的差值并返回差值的平方。SquaredDifference算子支持tensor和tensor相减。 | 79| struct [Squeeze](_squeeze_v20.md) | 去除axis中,长度为1的维度。支持int8量化输入。 | 80| struct [Stack](_stack_v20.md) | 将一组tensor沿axis维度进行堆叠,堆叠前每个tensor的维数为n,则堆叠后output维数为n+1。 | 81| struct [StridedSlice](_strided_slice_v20.md) | 根据步长和索引对输入张量进行切片提取。 | 82| struct [SubFusion](_sub_fusion_v20.md) | 计算两个输入的差值。 | 83| struct [TileFusion](_tile_fusion_v20.md) | 以multiples指定的次数拷贝输入张量。 | 84| struct [TopKFusion](_top_k_fusion_v20.md) | 查找沿axis轴的前K个最大值和对应索引。 | 85| struct [Transpose](_transpose_v20.md) | 根据perm对x进行数据重排。 | 86| struct [Unsqueeze](_unsqueeze_v20.md) | 根据输入axis的值。增加一个维度。 | 87 88 89### 枚举 90 91| 名称 | 描述 | 92| -------- | -------- | 93| [DeviceType](#devicetype) : int { OTHER , CPU , GPU , ACCELERATOR } | AI计算芯片的类型。 | 94| [DeviceStatus](#devicestatus) : int { AVAILABLE , BUSY , OFFLINE , UNKNOWN } | 用于AI计算芯片的状态。 | 95| [PerformanceMode](#performancemode) : int {<br/>PERFORMANCE_NONE , PERFORMANCE_LOW , PERFORMANCE_MEDIUM , PERFORMANCE_HIGH , PERFORMANCE_EXTREME<br/>} | 芯片执行AI计算的性能模式。 | 96| [Priority](#priority) : int { PRIORITY_NONE , PRIORITY_LOW , PRIORITY_MEDIUM , PRIORITY_HIGH } | AI计算任务的优先级。 | 97| [Format](#format) : byte { FORMAT_NONE = -1 , FORMAT_NCHW = 0 , FORMAT_NHWC = 1 } | 算子数据排布。需要配合[Tensor](_tensor_v20.md)使用。 | 98| [DataType](#datatype) : byte {<br/>DATA_TYPE_UNKNOWN = 0 , DATA_TYPE_BOOL = 30 , DATA_TYPE_INT8 = 32 , DATA_TYPE_INT16 = 33 , DATA_TYPE_INT32 = 34 , DATA_TYPE_INT64 = 35 , DATA_TYPE_UINT8 = 37 , DATA_TYPE_UINT16 = 38 , DATA_TYPE_UINT32 = 39 , DATA_TYPE_UINT64 = 40 , DATA_TYPE_FLOAT16 = 42 , DATA_TYPE_FLOAT32 = 43 , DATA_TYPE_FLOAT64 = 44<br/>} | 张量的数据类型。需要配合[Tensor](_tensor_v20.md)使用。 | 99| [QuantType](#quanttype) : byte { QUANT_TYPE_NONE , QUANT_TYPE_ALL } | 量化类型。需要配合[Node](_node_v20.md)使用。 | 100| [NodeType](#nodetype) : unsigned int {<br/>NODE_TYPE_NONE = 0 , NODE_TYPE_ACTIVATION = 2 , NODE_TYPE_ADD_FUSION = 5 , NODE_TYPE_ARGMAX_FUSION = 11 , NODE_TYPE_AVGPOOL_FUSION = 17 , NODE_TYPE_BATCH_TO_SPACE_ND = 22 , NODE_TYPE_BIAS_ADD = 23 , NODE_TYPE_CAST = 28 , NODE_TYPE_CONCAT = 31 , NODE_TYPE_CONV2D_FUSION = 35 , NODE_TYPE_CONV2D_TRANSPOSE_FUSION = 36 , NODE_TYPE_DIV_FUSION = 47 , NODE_TYPE_ELTWISE = 52 , NODE_TYPE_EXPAND_DIMS = 56 , NODE_TYPE_FILL = 66 , NODE_TYPE_FULL_CONNECTION = 67 ,<br/>NODE_TYPE_FUSED_BATCH_NORM = 68 , NODE_TYPE_GATHER = 69 , NODE_TYPE_LAYER_NORM_FUSION = 75 , NODE_TYPE_LESS_EQUAL = 78 ,<br/>NODE_TYPE_MATMUL_FUSION = 89 , NODE_TYPE_MAXIMUM = 90 , NODE_TYPE_MAX_POOL_FUSION = 92 , NODE_TYPE_MUL_FUSION = 99 ,<br/>NODE_TYPE_ONE_HOT = 105 , NODE_TYPE_PAD_FUSION = 107 , NODE_TYPE_POW_FUSION = 110 , NODE_TYPE_PRELU_FUSION = 112 ,<br/>NODE_TYPE_QUANT_DTYPE_CAST = 113 , NODE_TYPE_REDUCE_FUSION = 118 , NODE_TYPE_RESHAPE = 119 , NODE_TYPE_RESIZE = 120 ,<br/>NODE_TYPE_RSQRT = 126 , NODE_TYPE_SCALE_FUSION = 127 , NODE_TYPE_SHAPE = 130 , NODE_TYPE_SLICE_FUSION = 135 ,<br/>NODE_TYPE_SOFTMAX = 138 , NODE_TYPE_SPACE_TO_BATCH_ND = 141 , NODE_TYPE_SPLIT = 145 , NODE_TYPE_SQRT = 146 ,<br/>NODE_TYPE_SQUEEZE = 147 , NODE_TYPE_SQUARED_DIFFERENCE = 149 , NODE_TYPE_STACK = 150 , NODE_TYPE_STRIDED_SLICE = 151 ,<br/>NODE_TYPE_SUB_FUSION = 152 , NODE_TYPE_TILE_FUSION = 160 , NODE_TYPE_TOPK_FUSION = 161 , NODE_TYPE_TRANSPOSE = 162 , NODE_TYPE_UNSQUEEZE = 165<br/>} | 算子类型。 | 101| [ResizeMethod](#resizemethod) : byte { RESIZE_METHOD_UNKNOWN = -1 , RESIZE_METHOD_LINEAR = 0 , RESIZE_METHOD_NEAREST = 1 , RESIZE_METHOD_CUBIC = 2 } | 调整尺寸的方法。需要配合[Resize](_resize_v20.md)算子使用。 | 102| [CoordinateTransformMode](#coordinatetransformmode) : byte { COORDINATE_TRANSFORM_MODE_ASYMMETRIC = 0 , COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS = 1 , COORDINATE_TRANSFORM_MODE_HALF_PIXEL = 2 } | 坐标变换模式,仅[Resize](_resize_v20.md)算子使用这些枚举。 以变换 Width 为例, 记 new_i 为resize之后的Tenosr沿x轴的第i个坐标; 记 old_i 为输入Tensor沿x的轴的对应坐标; 记 newWidth 是resize之后的Tensor沿着x的轴的长度; 记 oldWidth 是输入tensor沿x的轴的长度。 可以通过下面的公式计算出 old_i : | 103| [NearestMode](#nearestmode) : byte {<br/>NEAREST_MODE_NORMAL = 0 , NEAREST_MODE_ROUND_HALF_DOWN = 1 , NEAREST_MODE_ROUND_HALF_UP = 2 , NEAREST_MODE_FLOOR = 3 , NEAREST_MODE_CEIL = 4<br/>} | 临近算法类型。需要配合[Resize](_resize_v20.md)算子使用。 | 104| [ActivationType](#activationtype) : byte {<br/>ACTIVATION_TYPE_NO_ACTIVATION = 0 , ACTIVATION_TYPE_RELU = 1 , ACTIVATION_TYPE_SIGMOID = 2 , ACTIVATION_TYPE_RELU6 = 3 , ACTIVATION_TYPE_ELU = 4 , ACTIVATION_TYPE_LEAKY_RELU = 5 , ACTIVATION_TYPE_ABS = 6 , ACTIVATION_TYPE_RELU1 = 7 , ACTIVATION_TYPE_SOFTSIGN = 8 , ACTIVATION_TYPE_SOFTPLUS = 9 , ACTIVATION_TYPE_TANH = 10 , ACTIVATION_TYPE_SELU = 11 , ACTIVATION_TYPE_HSWISH = 12 , ACTIVATION_TYPE_HSIGMOID = 13 , ACTIVATION_TYPE_THRESHOLDRELU = 14 , ACTIVATION_TYPE_LINEAR = 15 , ACTIVATION_TYPE_HARD_TANH = 16 , ACTIVATION_TYPE_SIGN = 17 , ACTIVATION_TYPE_SWISH = 18 , ACTIVATION_TYPE_GELU = 19 , ACTIVATION_TYPE_UNKNOWN = 20<br/>} | 激活函数类型。激活函数使得神经网络模型具有区分非线性函数的能力,这也让神经网络模型可以被应用于众多非线性模型中。 [NodeAttrTypes.idl](_node_attr_types_8idl_v20.md)文件中拥有ActivationType类型的参数的算子会在运行完成算子的运算之后执行相对应的激活函数。 | 105| [ReduceMode](#reducemode) : byte {<br/>REDUCE_MODE_MEAN = 0 , REDUCE_MODE_MAX = 1 , REDUCE_MODE_MIN = 2 , REDUCE_MODE_PROD = 3 , REDUCE_MODE_SUM = 4 , REDUCE_MODE_SUM_SQUARE = 5 , REDUCE_MODE_ASUM = 6 , REDUCE_MODE_ALL = 7<br/>} | 用于维度移除的方法,需要配合[ReduceFusion](_reduce_fusion_v20.md)算子使用。 | 106| [EltwiseMode](#eltwisemode) : byte { ELTWISE_MODE_PROD = 0 , ELTWISE_MODE_SUM = 1 , ELTWISE_MODE_MAXIMUM = 2 , ELTWISE_MODE_UNKNOWN = 3 } | 元素级别运算支持的计算类型,需要配合[Eltwise](_eltwise_v20.md)算子使用。 | 107| [PadMode](#padmode) : byte { PAD_MODE_PAD = 0 , PAD_MODE_SAME = 1 , PAD_MODE_VALID = 2 } | 填充类型,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md),[AvgPoolFusion](_avg_pool_fusion_v20.md),[Conv2DFusion](_conv2_d_fusion_v20.md),[MaxPoolFusion](_max_pool_fusion_v20.md)使用。 | 108| [RoundMode](#roundmode) : byte { ROUND_MODE_FLOOR = 0 , ROUND_MODE_CEIL = 1 } | 小数取整算法,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md)算子使用。 | 109| [PaddingMode](#paddingmode) : byte { PADDING_MODE_CONSTANT = 0 , PADDING_MODE_REFLECT = 1 , PADDING_MODE_SYMMETRIC = 2 , PADDING_MODE_RESERVED = 3 } | 填充类型,需要配合[PadFusion](_pad_fusion_v20.md)算子使用。 | 110| [NNRT_ReturnCode](#nnrt_returncode) : int {<br/>NNRT_SUCCESS = 0 , NNRT_FAILED = 1 , NNRT_NULL_PTR = 2 , NNRT_INVALID_PARAMETER = 3 ,<br/>NNRT_MEMORY_ERROR = 4 , NNRT_OUT_OF_MEMORY = 5 , NNRT_OPERATION_FORBIDDEN = 6 , NNRT_INVALID_FILE = 7 ,<br/>NNRT_INVALID_PATH = 8 , NNRT_INSUFFICIENT_BUFFER = 9 , NNRT_NO_CHANGE = 10 , NNRT_NOT_SUPPORT = 11 ,<br/>NNRT_SERVICE_ERROR = 12 , NNRT_DEVICE_ERROR = 13 , NNRT_DEVICE_BUSY = 14 , NNRT_CANCELLED = 15 ,<br/>NNRT_PERMISSION_DENIED = 16 , NNRT_TIME_OUT = 17 , NNRT_INVALID_TENSOR = 18 , NNRT_INVALID_NODE = 19 ,<br/>NNRT_INVALID_INPUT = 20 , NNRT_INVALID_OUTPUT = 21 , NNRT_INVALID_DATATYPE = 22 , NNRT_INVALID_FORMAT = 23 ,<br/>NNRT_INVALID_TENSOR_NAME = 24 , NNRT_INVALID_SHAPE = 25 , NNRT_OUT_OF_DIMENTION_RANGES = 26 , NNRT_INVALID_BUFFER = 27 ,<br/>NNRT_INVALID_BUFFER_SIZE = 28 , NNRT_INVALID_PERFORMANCE_MODE = 29 , NNRT_INVALID_PRIORITY = 30 , NNRT_INVALID_MODEL = 31 ,<br/>NNRT_INVALID_MODEL_CACHE = 32 , NNRT_UNSUPPORTED_OP = 33<br/>} | NNRt定义的专用错误码,为HDI接口的返回值。 | 111 112 113## 枚举类型说明 114 115 116### ActivationType 117 118``` 119enum ActivationType : byte 120``` 121 122**描述** 123 124 125激活函数类型。激活函数使得神经网络模型具有区分非线性函数的能力,这也让神经网络模型可以被应用于众多非线性模型中。 [NodeAttrTypes.idl](_node_attr_types_8idl_v20.md)文件中拥有ActivationType类型的参数的算子会在运行完成算子的运算之后执行相对应的激活函数。 126 127**起始版本:** 3.2 128 129| 枚举值 | 描述 | 130| -------- | -------- | 131| ACTIVATION_TYPE_NO_ACTIVATION | 无激活函数。 | 132| ACTIVATION_TYPE_RELU | ReLU激活函数。逐元素求$ max(x_i, 0) $,负数输出值会被修改为0,正数输出不受影响。<br/>$ \text{ReLU}(x_i) = (x_i)^+ = \max(x_i, 0),$<br/>其中$ x_i $是输入元素。 | 133| ACTIVATION_TYPE_SIGMOID | Sigmoid激活函数。按元素计算Sigmoid激活函数。Sigmoid函数定义为:<br/>$ \text{Sigmoid}(x_i) = \frac{1}{1 + \exp(-x_i)} $<br/>其中$ x_i $是输入的元素。 | 134| ACTIVATION_TYPE_RELU6 | ReLU6激活函数。ReLU6类似于ReLU,不同之处在于设置了上限,其上限为6,如果输入大于6,输出会被限制为6。ReLU6函数定义为:<br/>$ \text{ReLU6}(x_i) = \min(\max(0, x_i), 6) $<br/>其中$ x_i $是输入的元素。 | 135| ACTIVATION_TYPE_ELU | 指数线性单元激活函数(Exponential Linear Unit activation function,ELU)激活函数。对输入的每个元素计算ELU。ELU函数定义为:<br/>$ ELU(x_{i}) = \begin{cases} x_i, &\text{if } x_i \geq 0; \cr \alpha \* (\exp(x_i) - 1), &\text{otherwise.} \end{cases} $<br/>其中,$ x_i $表示输入的元素,$ \alpha $表示alpha参数,该参数通过[Activation](_activation_v20.md)进行设置。 | 136| ACTIVATION_TYPE_LEAKY_RELU | LeakyReLU激活函数。 LeakyReLU函数定义为:<br/>$ \text{LeakyReLU}(x_i) = \begin{cases} x_i, &\text{if } x_i \geq 0; \cr {\alpha} \* x_i, &\text{otherwise.} \end{cases}$<br/>其中,$ x_i $表示输入的元素,$ \alpha $表示alpha参数,该参数通过[Activation](_activation_v20.md)进行设置。 | 137| ACTIVATION_TYPE_ABS | 计算绝对值的激活函数。函数定义为:<br/>$ \text{abs}(x_i) = \|x_i\| $<br/>其中,$ x_i $表示输入的元素。 | 138| ACTIVATION_TYPE_RELU1 | ReLU1激活函数。ReLU1函数定义为:<br/>$ \text{ReLU1}(x_i)= \min(\max(0, x_i), 1) $<br/>其中,$ x_i $表示输入的元素。 | 139| ACTIVATION_TYPE_SOFTSIGN | SoftSign激活函数。SoftSign函数定义如下:<br/>$ \text{SoftSign}(x_i) = \frac{x_i}{1 + \|x_i\|} $<br/>其中,$ x_i $表示输入的元素。 | 140| ACTIVATION_TYPE_SOFTPLUS | Softplus激活函数。Softplus为ReLU函数的平滑近似。可对一组数值使用来确保转换后输出结果均为正值。Softplus函数定义如下:<br/>$ \text{Softplus}(x_i) = \log(1 + \exp(x_i)) $<br/>其中,$ x_i $表示输入的元素。 | 141| ACTIVATION_TYPE_TANH | Tanh激活函数。Tanh函数定义如下:<br/>$ tanh(x) = \frac{\exp(x_i) - \exp(-x_i)}{\exp(x_i) + \exp(-x_i)} = \frac{\exp(2x_i) - 1}{\exp(2x_i) + 1} $<br/>其中,$ x_i $表示输入的元素。 | 142| ACTIVATION_TYPE_SELU | SELU(Scaled exponential Linear Unit)激活函数。SELU函数定义如下:<br/>$ SELU(x_{i}) = scale \* \begin{cases} x_{i}, &\text{if } x_{i} \geq 0; \cr \text{alpha} \* (\exp(x_i) - 1), &\text{otherwise.} \end{cases} $<br/>其中,$ x_i $是输入元素,$ \alpha $和$ scale $是预定义的常量( $\alpha=1.67326324$,$scale=1.05070098$)。 | 143| ACTIVATION_TYPE_HSWISH | Hard Swish激活函数。<br/>$ \text{Hardswish}(x_{i}) = x_{i} \* \frac{ReLU6(x_{i} + 3)}{6} $<br/>其中,$ x_i $表示输入的元素。 | 144| ACTIVATION_TYPE_HSIGMOID | Hard Sigmoid激活函数。 Hard Sigmoid函数定义如下:<br/>$ \text{Hardsigmoid}(x_{i}) = max(0, min(1, \frac{x_{i} + 3}{6})) $<br/>其中,$ x_i $表示输入的元素。 | 145| ACTIVATION_TYPE_THRESHOLDRELU | ThresholdedReLU激活函数。类似ReLU激活函数,min数定义如下:<br/>$ \text{ThresholdedReLU}(x_i) = \min(\max(0, x_i), t) $<br/>其中,$ x_i $是输入元素,$ t $是最大值。 | 146| ACTIVATION_TYPE_LINEAR | Linear激活函数。Linear函数定义如下:<br/>$ \text{Linear}(x_i) = x_i $<br/>其中,$ x_i $表示输入的元素。 | 147| ACTIVATION_TYPE_HARD_TANH | HardTanh激活函数。HardTanh函数定义如下:<br/>$ \text{HardTanh}(x_i) = \begin{cases} \text{max_val} & \text{ if } x_i > \text{ max_val } \\ \text{min_val} & \text{ if } x_i < \text{ min_val } \\ x_i & \text{ otherwise } \\ \end{cases} $<br/>其中,$ x_i $是输入,$ max\_val $是最大值,$ min\_val $是最小值,这两个参数通过[Activation](_activation_v20.md)进行设置。 | 148| ACTIVATION_TYPE_SIGN | Sign激活函数。Sign函数定义如下:<br/>$ Sign(x_i) = \begin{cases} -1, &if\ x_i < 0 \cr 0, &if\ x_i = 0 \cr 1, &if\ x_i > 0\end{cases} $<br/>其中,$ x_i $表示输入的元素。 | 149| ACTIVATION_TYPE_SWISH | Swish激活函数。Swish激活函数定义如下:<br/>$ \text{Swish}(x_i) = x_i \* Sigmoid(x_i) $<br/>其中,$ x_i $表示输入的元素。 | 150| ACTIVATION_TYPE_GELU | GELU(Gaussian error linear unit activation function)高斯误差线性单元激活函数。GELU函数定义如下:<br/>$ GELU(x_i) = x_i\*P(X < x_i) $<br/>其中,$ x_i $是输入元素,$ P $是标准高斯分布的累积分布函数。需要通过[Activation](_activation_v20.md)的approximate参数指定是否使用近似。 | 151| ACTIVATION_TYPE_UNKNOWN | 未知 | 152 153 154### CoordinateTransformMode 155 156``` 157enum CoordinateTransformMode : byte 158``` 159 160**描述** 161 162 163坐标变换模式,仅[Resize](_resize_v20.md)算子使用这些枚举。 以变换 Width 为例, 记 new_i 为resize之后的Tenosr沿x轴的第i个坐标; 记 old_i 为输入Tensor沿x的轴的对应坐标; 记 newWidth 是resize之后的Tensor沿着x的轴的长度; 记 oldWidth 是输入tensor沿x的轴的长度。 可以通过下面的公式计算出 old_i : 164 165- COORDINATE_TRANSFORM_MODE_ASYMMETRIC: 166 $ old_i = newWidth != 0 ? new_i \* oldWidth / newWidth : 0 $ 167 168- COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS: 169 $ old_i = newWidth != 1 ? new_i \* (oldWidth - 1) / (newWidth - 1) $ 170 171- COORDINATE_TRANSFORM_MODE_HALF_PIXEL: 172 $ old_i = newWidth > 1 ? (new_x + 0.5) \* oldWidth / newWidth - 0.5 : 0 $ 173 174**起始版本:** 3.2 175 176| 枚举值 | 描述 | 177| -------- | -------- | 178| COORDINATE_TRANSFORM_MODE_ASYMMETRIC | 不进行对齐,直接按照比例缩放 | 179| COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS | 对齐图像的4个角 | 180| COORDINATE_TRANSFORM_MODE_HALF_PIXEL | 对齐像素点中心 | 181 182 183### DataType 184 185``` 186enum DataType : byte 187``` 188 189**描述** 190 191 192张量的数据类型。需要配合[Tensor](_tensor_v20.md)使用。 193 194**起始版本:** 3.2 195 196| 枚举值 | 描述 | 197| -------- | -------- | 198| DATA_TYPE_UNKNOWN | 数据类型未知 | 199| DATA_TYPE_BOOL | 数据类型是BOOL | 200| DATA_TYPE_INT8 | 数据类型是INT8 | 201| DATA_TYPE_INT16 | 数据类型是INT16 | 202| DATA_TYPE_INT32 | 数据类型是INT32 | 203| DATA_TYPE_INT64 | 数据类型是INT64 | 204| DATA_TYPE_UINT8 | 数据类型是UINT8 | 205| DATA_TYPE_UINT16 | 数据类型是UINT16 | 206| DATA_TYPE_UINT32 | 数据类型是UINT32 | 207| DATA_TYPE_UINT64 | 数据类型是UINT64 | 208| DATA_TYPE_FLOAT16 | 数据类型是FLOAT16 | 209| DATA_TYPE_FLOAT32 | 数据类型是FLOAT32 | 210| DATA_TYPE_FLOAT64 | 数据类型是FLOAT64 | 211 212 213### DeviceStatus 214 215``` 216enum DeviceStatus : int 217``` 218 219**描述** 220 221 222用于AI计算芯片的状态。 223 224**起始版本:** 3.2 225 226| 枚举值 | 描述 | 227| -------- | -------- | 228| AVAILABLE | 芯片当前处于可用状态 | 229| BUSY | 芯片当前处于忙碌状态,可能无法及时响应计算任务 | 230| OFFLINE | 芯片当前处于下线状态,无法响应计算任务 | 231| UNKNOWN | 芯片当前处于未知状态 | 232 233 234### DeviceType 235 236``` 237enum DeviceType : int 238``` 239 240**描述** 241 242 243AI计算芯片的类型。 244 245**起始版本:** 3.2 246 247| 枚举值 | 描述 | 248| -------- | -------- | 249| OTHER | 不属于以下类型的芯片 | 250| CPU | CPU芯片 | 251| GPU | GPU芯片 | 252| ACCELERATOR | AI专用加速芯片,比如NPU、DSP | 253 254 255### EltwiseMode 256 257``` 258enum EltwiseMode : byte 259``` 260 261**描述** 262 263 264元素级别运算支持的计算类型,需要配合[Eltwise](_eltwise_v20.md)算子使用。 265 266**起始版本:** 3.2 267 268| 枚举值 | 描述 | 269| -------- | -------- | 270| ELTWISE_MODE_PROD | 两个tensor对应元素乘积。 | 271| ELTWISE_MODE_SUM | 两个tensor对应元素之差。 | 272| ELTWISE_MODE_MAXIMUM | 两个tensor对应元素的最大值。 | 273| ELTWISE_MODE_UNKNOWN | 未知。 | 274 275 276### Format 277 278``` 279enum Format : byte 280``` 281 282**描述** 283 284 285算子数据排布。需要配合[Tensor](_tensor_v20.md)使用。 286 287**起始版本:** 3.2 288 289| 枚举值 | 描述 | 290| -------- | -------- | 291| FORMAT_NONE | 用于数据排列,作为Format初始的值。 | 292| FORMAT_NCHW | 数据排列为NCHW。 | 293| FORMAT_NHWC | 数据排列为NHWC。 | 294 295 296### NearestMode 297 298``` 299enum NearestMode : byte 300``` 301 302**描述** 303 304 305临近算法类型。需要配合[Resize](_resize_v20.md)算子使用。 306 307**起始版本:** 3.2 308 309| 枚举值 | 描述 | 310| -------- | -------- | 311| NEAREST_MODE_NORMAL | 四舍五入取整 | 312| NEAREST_MODE_ROUND_HALF_DOWN | 向负无穷取整,例如23.5取整为23,−23.5取整为−24 | 313| NEAREST_MODE_ROUND_HALF_UP | 向正无穷取整,例如23.5取整为24,−23.5取整为−23 | 314| NEAREST_MODE_FLOOR | 向下取临近的整数,例如23.5取整为23,−23.5取整为−24 | 315| NEAREST_MODE_CEIL | 向上取临近的整数整,例如23.5取整为24,−23.5取整为−23 | 316 317 318### NNRT_ReturnCode 319 320``` 321enum NNRT_ReturnCode : int 322``` 323 324**描述** 325 326 327NNRt定义的专用错误码,为HDI接口的返回值。 328 329**起始版本:** 4.0 330 331| 枚举值 | 描述 | 332| -------- | -------- | 333| NNRT_SUCCESS | 成功 | 334| NNRT_FAILED | 失败 | 335| NNRT_NULL_PTR | 空指针 | 336| NNRT_INVALID_PARAMETER | 非法参数 | 337| NNRT_MEMORY_ERROR | 内存错误 | 338| NNRT_OUT_OF_MEMORY | 内存不足 | 339| NNRT_OPERATION_FORBIDDEN | 禁止的操作 | 340| NNRT_INVALID_FILE | 非法文件 | 341| NNRT_INVALID_PATH | 非法路径 | 342| NNRT_INSUFFICIENT_BUFFER | 缓存不足 | 343| NNRT_NO_CHANGE | 无变化 | 344| NNRT_NOT_SUPPORT | 不支持 | 345| NNRT_SERVICE_ERROR | 服务错误 | 346| NNRT_DEVICE_ERROR | 设备错误 | 347| NNRT_DEVICE_BUSY | 设备忙碌 | 348| NNRT_CANCELLED | 操作取消 | 349| NNRT_PERMISSION_DENIED | 拒绝访问 | 350| NNRT_TIME_OUT | 超时 | 351| NNRT_INVALID_TENSOR | 非法tensor | 352| NNRT_INVALID_NODE | 非法节点 | 353| NNRT_INVALID_INPUT | 非法输入 | 354| NNRT_INVALID_OUTPUT | 非法输出 | 355| NNRT_INVALID_DATATYPE | 非法数据类型 | 356| NNRT_INVALID_FORMAT | 非法数据布局 | 357| NNRT_INVALID_TENSOR_NAME | 非法tensor名称 | 358| NNRT_INVALID_SHAPE | 非法shape | 359| NNRT_OUT_OF_DIMENTION_RANGES | 超出维度范围 | 360| NNRT_INVALID_BUFFER | 非法缓存 | 361| NNRT_INVALID_BUFFER_SIZE | 非法缓存大小 | 362| NNRT_INVALID_PERFORMANCE_MODE | 非法性能模式 | 363| NNRT_INVALID_PRIORITY | 非法优先级 | 364| NNRT_INVALID_MODEL | 非法模型 | 365| NNRT_INVALID_MODEL_CACHE | 非法模型缓存 | 366| NNRT_UNSUPPORTED_OP | 算子不支持 | 367 368 369### NodeType 370 371``` 372enum NodeType : unsigned int 373``` 374 375**描述** 376 377 378算子类型。 379 380**起始版本:** 3.2 381 382| 枚举值 | 描述 | 383| -------- | -------- | 384| NODE_TYPE_NONE | 算子类型为NONE | 385| NODE_TYPE_ACTIVATION | 激活函数类型 | 386| NODE_TYPE_ADD_FUSION | ADD算子 | 387| NODE_TYPE_ARGMAX_FUSION | ArgMax算子 | 388| NODE_TYPE_AVGPOOL_FUSION | AVGPOOL算子 | 389| NODE_TYPE_BATCH_TO_SPACE_ND | BatchToSpaceND算子 | 390| NODE_TYPE_BIAS_ADD | BiasAdd算子 | 391| NODE_TYPE_CAST | Cast算子 | 392| NODE_TYPE_CONCAT | Concat算子 | 393| NODE_TYPE_CONV2D_FUSION | Conv2D算子,包含了普通卷积、可分离卷积和分组卷积 | 394| NODE_TYPE_CONV2D_TRANSPOSE_FUSION | 二维反卷积算子 | 395| NODE_TYPE_DIV_FUSION | Div算子 | 396| NODE_TYPE_ELTWISE | 元素级别算子 | 397| NODE_TYPE_EXPAND_DIMS | ExpandDims张算子 | 398| NODE_TYPE_FILL | Fill算子 | 399| NODE_TYPE_FULL_CONNECTION | FullConnection算子 | 400| NODE_TYPE_FUSED_BATCH_NORM | BatchNorm算子 | 401| NODE_TYPE_GATHER | Gather算子 | 402| NODE_TYPE_LAYER_NORM_FUSION | LayerNorm算子 | 403| NODE_TYPE_LESS_EQUAL | LessEqual算子 | 404| NODE_TYPE_MATMUL_FUSION | MatMul算子 | 405| NODE_TYPE_MAXIMUM | Maximum算子 | 406| NODE_TYPE_MAX_POOL_FUSION | MaxPool算子 | 407| NODE_TYPE_MUL_FUSION | Mul算子 | 408| NODE_TYPE_ONE_HOT | OneHot算子 | 409| NODE_TYPE_PAD_FUSION | Pad算子 | 410| NODE_TYPE_POW_FUSION | Pow算子 | 411| NODE_TYPE_PRELU_FUSION | PReLU算子 | 412| NODE_TYPE_QUANT_DTYPE_CAST | QuantDTypeCast算子 | 413| NODE_TYPE_REDUCE_FUSION | Reduce算子 | 414| NODE_TYPE_RESHAPE | Reshape算子 | 415| NODE_TYPE_RESIZE | Resize算子 | 416| NODE_TYPE_RSQRT | Rsqrt算子 | 417| NODE_TYPE_SCALE_FUSION | Scale算子 | 418| NODE_TYPE_SHAPE | Shape算子 | 419| NODE_TYPE_SLICE_FUSION | Slice算子 | 420| NODE_TYPE_SOFTMAX | Softmax算子 | 421| NODE_TYPE_SPACE_TO_BATCH_ND | SpaceToBatchND算子 | 422| NODE_TYPE_SPLIT | Split算子 | 423| NODE_TYPE_SQRT | Sqrt算子 | 424| NODE_TYPE_SQUEEZE | SquaredDifference算子 | 425| NODE_TYPE_SQUARED_DIFFERENCE | Squeeze算子 | 426| NODE_TYPE_STACK | Stack算子 | 427| NODE_TYPE_STRIDED_SLICE | StridedSlice算子 | 428| NODE_TYPE_SUB_FUSION | Sub算子 | 429| NODE_TYPE_TILE_FUSION | Tile算子 | 430| NODE_TYPE_TOPK_FUSION | TopK算子 | 431| NODE_TYPE_TRANSPOSE | Transpose算子 | 432| NODE_TYPE_UNSQUEEZE | Unsqueeze算子 | 433 434 435### PaddingMode 436 437``` 438enum PaddingMode : byte 439``` 440 441**描述** 442 443 444填充类型,需要配合[PadFusion](_pad_fusion_v20.md)算子使用。 445 446当输入的张量x= \([[1,2,3],[4,5,6],[7,8,9]]\),paddings= \([[2,2],[2,2]] \) 时效果如下: 447 448- paddingMode==PADDING_MODE_CONSTANT并且constantValue = 0时输出为: 449 $[[0. 0. 0. 0. 0. 0. 0.],\\ [0. 0. 0. 0. 0. 0. 0.],\\ [0. 0. 1. 2. 3. 0. 0.],\\ [0. 0. 4. 5. 6. 0. 0.],\\ [0. 0. 7. 8. 9. 0. 0.],\\ [0. 0. 0. 0. 0. 0. 0.],\\ [0. 0. 0. 0. 0. 0. 0.]]\\ $ 450 451- paddingMode==PADDING_MODE_REFLECT输出为: 452 $[[9. 8. 7. 8. 9. 8. 7.],\\ [6. 5. 4. 5. 6. 5. 4.],\\ [3. 2. 1. 2. 3. 2. 1.],\\ [6. 5. 4. 5. 6. 5. 4.],\\ [9. 8. 7. 8. 9. 8. 7.],\\ [6. 5. 4. 5. 6. 5. 4.],\\ [3. 2. 1. 2. 3. 2. 1.]]\\ $ 453 454- paddingMode==PADDING_MODE_SYMMETRIC输出为: 455 $[[5. 4. 4. 5. 6. 6. 5.],\\ [2. 1. 1. 2. 3. 3. 2.],\\ [2. 1. 1. 2. 3. 3. 2.],\\ [5. 4. 4. 5. 6. 6. 5.],\\ [8. 7. 7. 8. 9. 9. 8.],\\ [8. 7. 7. 8. 9. 9. 8.],\\ [5. 4. 4. 5. 6. 6. 5.]]\\ $ 456 457**起始版本:** 3.2 458 459| 枚举值 | 描述 | 460| -------- | -------- | 461| PADDING_MODE_CONSTANT | 使用常量填充,默认值为0。 | 462| PADDING_MODE_REFLECT | 以数据区的便捷为轴,使填充区和数据区的数据以该轴保持对称。 | 463| PADDING_MODE_SYMMETRIC | 此填充方法类似于 PADDING_MODE_REFLECT,它以待填充区和数据区的交界为轴,使待填充区和数据区的数据以该轴保持对称。 | 464| PADDING_MODE_RESERVED | 预留,暂未使用。 | 465 466 467### PadMode 468 469``` 470enum PadMode : byte 471``` 472 473**描述** 474 475 476填充类型,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md),[AvgPoolFusion](_avg_pool_fusion_v20.md),[Conv2DFusion](_conv2_d_fusion_v20.md),[MaxPoolFusion](_max_pool_fusion_v20.md)使用。 477 478**起始版本:** 3.2 479 480| 枚举值 | 描述 | 481| -------- | -------- | 482| PAD_MODE_PAD | 在输入的高度和宽度方向上填充0。 若设置该模式,算子的padding参数必须大于等于0。 | 483| PAD_MODE_SAME | 输出的高度和宽度分别与输入整除 stride 后的值相同。 若设置该模式,算子的padding参数必须为0。 | 484| PAD_MODE_VALID | 在不填充的前提下返回有效计算所得的输出。不满足计算的多余像素会被丢弃。 若设置此模式,则算子的padding参数必须为0。 | 485 486 487### PerformanceMode 488 489``` 490enum PerformanceMode : int 491``` 492 493**描述** 494 495 496芯片执行AI计算的性能模式。 497 498**起始版本:** 3.2 499 500| 枚举值 | 描述 | 501| -------- | -------- | 502| PERFORMANCE_NONE | 不指定任何性能模式,具体运行模式由芯片定义 | 503| PERFORMANCE_LOW | 低性能模式,执行AI计算速度慢,功耗低 | 504| PERFORMANCE_MEDIUM | 中性能模式,执行AI计算速度较慢,功耗较低 | 505| PERFORMANCE_HIGH | 高性能模式,执行AI计算速度较快,功耗较高 | 506| PERFORMANCE_EXTREME | 最高性能模式,执行AI计算速度快,功耗高 | 507 508 509### Priority 510 511``` 512enum Priority : int 513``` 514 515**描述** 516 517 518AI计算任务的优先级。 519 520**起始版本:** 3.2 521 522| 枚举值 | 描述 | 523| -------- | -------- | 524| PRIORITY_NONE | 不指定任何任务优先级,具体执行策略由芯片定义 | 525| PRIORITY_LOW | 低优先级,若有更高优先级的任务,芯片会执行更高优先级的任务 | 526| PRIORITY_MEDIUM | 中等优先级,若有更高优先级的任务,芯片会执行更高优先级的任务 | 527| PRIORITY_HIGH | 高优先级,高优先级任务最先执行 | 528 529 530### QuantType 531 532``` 533enum QuantType : byte 534``` 535 536**描述** 537 538 539量化类型。需要配合[Node](_node_v20.md)使用。 540 541**起始版本:** 3.2 542 543| 枚举值 | 描述 | 544| -------- | -------- | 545| QUANT_TYPE_NONE | 不使用量化 | 546| QUANT_TYPE_ALL | int8全量化 | 547 548 549### ReduceMode 550 551``` 552enum ReduceMode : byte 553``` 554 555**描述** 556 557 558用于维度移除的方法,需要配合[ReduceFusion](_reduce_fusion_v20.md)算子使用。 559 560**起始版本:** 3.2 561 562| 枚举值 | 描述 | 563| -------- | -------- | 564| REDUCE_MODE_MEAN | 使用指定维度所有元素的平均值代替该维度的其他元素,以移除该维度。 | 565| REDUCE_MODE_MAX | 使用指定维度所有元素的最大值代替该维度的其他元素,以移除该维度。 | 566| REDUCE_MODE_MIN | 使用指定维度所有元素的最小值代替该维度的其他元素,以移除该维度。 | 567| REDUCE_MODE_PROD | 使用指定维度所有元素的乘积代替该维度的其他元素,以移除该维度。 | 568| REDUCE_MODE_SUM | 使用指定维度所有元素的加和代替该维度的其他元素,以移除该维度。 | 569| REDUCE_MODE_SUM_SQUARE | 使用指定维度所有元素的平方和替该维度的其他元素,以移除该维度。 | 570| REDUCE_MODE_ASUM | 使用指定维度所有元素的绝对值和代替该维度的其他元素,以移除该维度。 | 571| REDUCE_MODE_ALL | 使用指定维度所有元素的逻辑与代替该维度的其他元素,以移除该维度。 | 572 573 574### ResizeMethod 575 576``` 577enum ResizeMethod : byte 578``` 579 580**描述** 581 582 583调整尺寸的方法。需要配合[Resize](_resize_v20.md)算子使用。 584 585**起始版本:** 3.2 586 587| 枚举值 | 描述 | 588| -------- | -------- | 589| RESIZE_METHOD_UNKNOWN | 未知,默认值。 | 590| RESIZE_METHOD_LINEAR | 双线性插值。 假设需要计算未知函数f在点$ (x,y) $的值其中$ x_1 < x < x_2, y_1 < y < y_2$,并且已知四个坐标点的值$ Q_{11} = (x_1, y_1), Q_{12} = (x1, y2), Q_{21} = (x_2, y_1),Q_{22} = (x_2, y_2) $,并且$ f(Q_{11}),f(Q_{12}),f(Q_{21}),f(Q_{22}) $表示四个点的数值,则通过如下公式可计算$ f(x,y) $的值:<br/>$ f(x,y_1) = \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) $<br/>$ f(x,y_2) = \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) $<br/>$ f(x,y) = \frac{y_2-y}{y_2-y_1}f(x,y_1)+\frac{y-y_1}{y_2-y_1}f(x,y_2) $ | 591| RESIZE_METHOD_NEAREST | 最近临近插值。假设需要计算未知函数f在点$ (x,y) $的值其中$ x_1 < x <x_2, y_1 < y < y_2 $,并且已知四个坐标点的值$ Q_{11} = (x_1, y_1), Q_{12} = (x1, y2), Q_{21} = (x_2, y_1),Q_{22} = (x_2, y_2) $,则从4个点中选择距离点$ (x,y) $最近的点的数值作为$ f(x,y) $的值。 | 592| RESIZE_METHOD_CUBIC | 双三次插值。 双三次插值是取采样点周围16个点的值的加权平均来计算采样点的数值。该参数需要配合[Resize](_resize_v20.md)的cubicCoeff和coordinateTransformMode参数使用。 当coordinateTransformMode==COORDINATE_TRANSFORM_MODE_HALF_PIXEL时,cubicCoeff=-0.5,其他情况cubicCoeff=-0.75。插值函数的权重函数如下:<br/>$ W(x) = \begin{cases} (cubicCoeff+2)\|x\|^3 - (cubicCoeff+3)\|x\|^2 +1 , &\text{if } \|x\| \leq 1; \cr cubicCoeff\|x\|^3 - 5cubicCoeff\|x\|^2 + 8cubicCoeff\|x\| - 4a, &\text{if } 1 \lt \|x\| \leq 2; \cr 0, &\text{otherwise.} \end{cases} $ | 593 594 595### RoundMode 596 597``` 598enum RoundMode : byte 599``` 600 601**描述** 602 603 604小数取整算法,需要配合[AvgPoolFusion](_avg_pool_fusion_v20.md)算子使用。 605 606**起始版本:** 3.2 607 608| 枚举值 | 描述 | 609| -------- | -------- | 610| ROUND_MODE_FLOOR | 向下取临近的整数,例如23.5取整为23,−23.5取整为−24 | 611| ROUND_MODE_CEIL | 向上取临近的整数整,例如23.5取整为24,−23.5取整为−23 | 612