Skip to content

C API

C API文档目录,整体使用时可以引入asc_simd.h,C API列表如下:

数据结构

表1 数据结构列表

结构名说明
asc_fill_value_configfill_value的初始化参数结构体,包含asc_fill_l0a/asc_fill_l0b/asc_fill_l1接口需要配置的各种初始化参数。
asc_l13d_fmatrix_config用于设置asc_copy_l12l0a/asc_copy_l12l0b3D格式搬运接口的Feature map属性参数。
asc_load3d_v2_configLoad3Dv2接口的repeat参数。
asc_ndim_pad_count_config用于asc_set_ndim_pad_count接口中,设置asc_ndim_copy_gm2ub接口的各个维度左右侧的padding元素个数。
asc_store_atomic_config原子操作启用位与原子操作类型的值。

矢量计算

矢量计算类API,单独使用时可以引入vector_compute.h,此类API列表如下:

表2 矢量计算API列表

API名称说明
asc_abs按元素取绝对值。
asc_add按元素求和。
asc_add_relu按元素求和,再进行Relu计算(结果和0对比取较大值),并提供转换最终结果的数据类型的功能(s162s8、f322f16、f162s8)。
asc_add_scalar矢量内每个元素与标量求和。
asc_and执行矢量与运算。
asc_axpy源操作数src中每个元素与标量value求积后和目的操作数dst中的对应元素相加。
asc_bfloat162float数据类型转换。将bfloat16_t类型的数据转换为float类型。
asc_bfloat162int32数据类型转换。将bfloat16_t类型的数据转换为int32_t类型。
asc_bitsortScore和Index分别存储在src0和src1中,按Score进行排序(Score大的元素排前面),排序后的Score与其对应的Index一起以(Score,Index)的结构存储在dst中。
asc_brcb将源操作数中的每一个数填充到目的操作数的一个DataBlock中。
asc_copy将数据从Unified Buffer搬运到Unified Buffer。支持高维切分。
asc_datablock_reduce_max对每个DataBlock内所有元素求最大值。
asc_datablock_reduce_min对每个DataBlock内所有元素求最小值。
asc_datablock_reduce_sum对每个DataBlock内所有元素求和。
asc_deq_int162b8将int16_t类型转换为int8_t或uint8_t类型,并将数据存放在每个DataBlock的上半块或下半块。
asc_deq_int322half对输入的int32_t类型的数据按元素做量化并转换为half类型。
asc_div按元素求商。
asc_duplicate将一个变量或立即数填充到一个矢量中。
asc_eq比较src0与src1在对应索引位置的元素大小。若比较结果为真,则输出结果的对应比特位设为1,否则设为0。
asc_eq_scalar执行矢量与标量的比较运算,如果值相等则输出1,否则输出0。
asc_exp按元素取自然指数。
asc_float2bfloat16数据类型转换。将float类型的数据转换为bfloat16_t类型。
asc_float2float数据类型转换。将float类型的数据转换为float类型。
asc_float2half数据类型转换。将float类型的数据转换为half类型。
asc_float2int16将float类型数据转换为int16_t类型。
asc_float2int32将float类型数据转换为int32_t类型。
asc_float2int64将float类型数据转换为int64_t类型。
asc_fma按元素将src0和src1相乘并和dst相加,将最终结果存放进dst中。
asc_gather将源操作数按照给定的偏移按元素收集到目的操作数中。
asc_gather_datablock根据偏移地址按照DataBlock的粒度将源操作数收集到目的操作数中。
asc_geGe(greater than or equal to),逐元素比较src0 >= src1是否成立,成立则输出结果为1,否则输出结果为0,每个元素的比较结果占一个bit。
asc_ge_scalar按元素判断src >= value是否成立,若成立则输出结果为1,否则为0。
asc_get_cmp_mask获取Compare操作的比较结果。
asc_get_reduce_max_cnt获取执行asc_repeat_reduce_max操作后的最大值,以及第一个最大值时的索引。
asc_get_reduce_min_cnt获取执行asc_repeat_reduce_min操作后的最小值,以及第一个最小值时的索引。
asc_get_rsvd_count获取GatherMask操作后剩余的元素数量。
asc_get_vms4_sr获取执行asc_mrgsort4操作后的队列中,每个队列已经理过的Region Proposal个数。
asc_gt按元素比较两个矢量的大小关系,若比较后的结果为真,则输出结果的对应比特位为1,否则为0。
asc_gt_scalarsrc中的每个元素逐个与标量value比较大小,如果某个位置上的元素大于value,则输出结果dst上的对应比特位为1,否则为0。
asc_half2float数据类型转换。将half类型的数据转换为float类型。
asc_half2int16数据类型转换。将half类型的数据转换为int16_t类型。
asc_half2int32数据类型转换。将half类型的数据转换为int32_t类型。
asc_half2int4数据类型转换。将half类型的数据转换为int4b_t类型。
asc_half2int8数据类型转换。将half类型的数据转换为int8_t类型。
asc_half2uint8将half类型数据转换为uint8_t类型,支持多种舍入模式。
asc_int162float数据类型转换。将int16_t类型的数据转换为float类型。
asc_int162half数据类型转换。将int16_t类型的数据转换为half类型。
asc_int322float将int32_t类型数据转换为float类型。
asc_int322int16数据类型转换。将int32_t类型的数据转换为int16_t类型。
asc_int322int64数据类型转换。将int32_t类型的数据转换为int64_t类型。
asc_int42half数据类型转换。将int4b_t类型的数据转换为half类型。
asc_int642float将int64_t类型数据转换为float类型。
asc_int642int32数据类型转换。将int64_t类型的数据转换为int32_t类型。
asc_int82half数据类型转换。将int8_t类型的数据转换为half类型。
asc_le按元素判断src0 <= src1是否成立,若成立则输出结果为1,否则为0。
asc_le_scalar按元素判断src <= value是否成立,若成立则输出结果为1,否则为0。
asc_leakyrelu执行矢量Leaky Relu运算。
asc_log按元素取自然对数。
asc_lt按元素判断src0 < src1是否成立,若成立则输出结果上的对应比特位为1,否则为0。
asc_lt_scalar执行矢量中每个位置和标量比较,如果值小于标量值则为1,否则为0,结果为每个bit位按小端序排布。
asc_max按元素求最大值。
asc_max_scalar矢量内每个元素与标量求最大值。
asc_min按元素求最小值。
asc_min_scalar源操作数矢量逐元素与标量相比,取较小值。
asc_mrgsort4将已经排好序的最多4条队列,合并排列成1条队列,结果按照score域由大到小排序。
asc_mul按元素求积。
asc_mul_add执行矢量的乘加运算。
asc_mul_add_relu按元素将src0和dst相乘并加上src1,再进行Relu计算(结果和0对比取较大值),最终结果存放进dst中。
asc_mul_cast_half2int8按元素求积,并将结果转换为int8_t类型。
asc_mul_cast_half2uint8按元素求积,并将结果转换为uint8_t类型。
asc_mul_scalar矢量内每个元素与标量求积。
asc_ne按元素判断src0 != src1是否成立,若成立则输出结果为1,否则为0。
asc_ne_scalar按元素判断是否不等于输入标量,若成立则输出结果上的对应比特位为1,否则为0。
asc_not按元素做按位取反,计算公式如下。
asc_or每对元素按位或运算。
asc_pair_reduce_sum对输入数据做归约操作,得到数据总和。
asc_rcp执行矢量的取倒数运算。
asc_reduce以内置固定模式对应的二进制或者用户自定义输入的数值对应的gather mask(数据收集的掩码),从源操作数中选取元素写入目的操作数中。
asc_relu按元素做线性整流Relu。
asc_repeat_reduce_max对每个Repeat内所有元素求最大值。
asc_repeat_reduce_min对每个Repeat内所有元素求最小值。
asc_repeat_reduce_sum对每个Repeat内所有元素求和。
asc_rsqrt按元素进行开方后取倒数的计算。
asc_select根据掩码,从两个源操作数中选取元素,输出到目的操作数。
asc_set_cmp_mask为Select操作设置用于选择的掩码。
asc_set_deq_scale设置DEQSCALAR寄存器的值。
asc_set_mask_count设置Mask模式为Counter模式。
asc_set_mask_norm设置Mask模式为Normal模式。
asc_set_va_reg用于设置transpose的地址,将操作数地址序列与地址寄存器关联。
asc_set_vector_mask设置Mask值。
asc_shiftleft将所有元素左移distance位。
asc_shiftright对源操作数中的每个元素执行右移。
asc_sqrt对元素进行开方。
asc_squeeze通过比较掩码src1,将src0中的向量压缩成更短的向量,存储到dst中。
asc_sub按元素求差。
asc_sub_relu按元素求差,再进行Relu计算(结果和0对比取较大值),并提供转换最终结果的数据类型的功能(s162s8、f322f16、f162s8)。
asc_sub_scalar矢量内每个元素与标量求差。
asc_transto5hd数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式。
asc_transpose用于实现16*16的二维矩阵数据块转置。
asc_uint82half数据类型转换。将uint8_t类型的数据转换为half类型。
asc_vdeq_int162b8将int16_t类型转换为int8_t或uint8_t类型,并将数据存放在每个DataBlock的上半块或下半块。

数据搬运

数据搬运类API,单独使用时可以引入vector_datamove.h和cube_datamove.h,此类API列表如下:

表3 数据搬运API列表

API名称说明
asc_copy_gm2ub将数据从Global Memory搬运到Unified Buffer。
asc_copy_gm2ub_align提供数据非对齐搬运的功能,将数据从Global Memory搬运到Unified Buffer,并支持8位/16位/32位数据类型搬运。
asc_copy_ub2gm将数据从Unified Buffer搬运到Global Memory。
asc_copy_ub2gm_align将数据从Unified Buffer搬运到Global Memory,支持8位/16位/32位分块拷贝操作。
asc_copy_ub2l1将数据从Unified Buffer (UB)搬运到L1 Buffer。
asc_copy_ub2ub将数据从Unified Buffer搬运到Unified Buffer。
asc_ndim_copy_gm2ub多维数据搬运接口,将数据从Global Memory (GM)搬运到Unified Buffer (UB)。
asc_set_copy_pad_val和asc_copy_gm2ub_align或asc_copy_ub2gm_align接口配合使用,设置连续搬运数据块左右两侧需要填补的数据值。
asc_set_gm2ub_loop_size使用asc_copy_gm2ub_align将数据从Global Memory (GM)搬运到Unified Buffer (UB)时,设置数据搬运流程中的循环次数。
asc_set_gm2ub_loop1_stride使用asc_copy_gm2ub_align将数据从Global Memory (GM)搬运到Unified Buffer (UB)时,设置内层循环中相邻迭代数据块间的间隔。
asc_set_gm2ub_loop2_stride使用asc_copy_gm2ub_align将数据从Global Memory (GM)搬运到Unified Buffer (UB)时,设置外层循环中相邻迭代数据块间的间隔。
asc_set_ndim_loop_stride设置asc_ndim_copy_gm2ub在进行多维搬运时每个维度内的源操作数与目的操作数的元素之间的间隔,最多设置5个维度。
asc_set_ndim_pad_count设置asc_ndim_copy_gm2ub接口各个维度左右侧的Padding元素个数。
asc_set_ndim_pad_value设置asc_ndim_copy_gm2ub接口Padding的填充固定值。
asc_set_ub2gm_loop_size使用asc_copy_ub2gm_align将数据从Unified Buffer (UB)搬运到Global Memory (GM)时,设置内层循环和外层循环的次数。
asc_set_ub2gm_loop1_stride使用asc_copy_ub2gm_align将数据从Unified Buffer (UB)搬运到Global Memory (GM)时,设置内层循环中源操作数在相邻迭代间的数据块间隔,以及目的操作数在相邻迭代间的数据块间隔。
asc_set_ub2gm_loop2_stride使用asc_copy_ub2gm_align将数据从Unified Buffer (UB)搬运到Global Memory (GM)时,设置外层循环中源操作数在相邻迭代间的数据块间隔,以及目的操作数在相邻迭代间的数据块间隔。
asc_copy_gm2l0a将GM中的数据搬运到L0A中。
asc_copy_gm2l0b将GM中的数据搬运到L0B中。
asc_copy_gm2l1将GM中的数据搬运到L1中。
asc_copy_gm2l1_align将GM中的数据padding后搬运到L1中。
asc_copy_gm2l1_dn2nz将GM中的数据搬运到L1中,在此过程中执行DN->NZ/NCHW->NC1HWC0/NCHW->C1HWNC0操作。
asc_copy_gm2l1_nd2nz将GM中的数据搬运到L1中。
asc_copy_l0c2gm将L0C中的数据搬运到GM中。
asc_copy_l0c2l1矩阵计算完成后,对结果进行量化处理,之后将处理结果搬运到L1中。
asc_copy_l0c2ub将L0C中的数据搬运到UB中。
asc_copy_l12bt将MMAD指令的Bias数据从L1 Buffer搬运到BiasTable Buffer中。
asc_copy_l12fb将数据从L1 Buffer搬运到Fixpipe Buffer中,Fixpipe Buffer用于存放量化参数。
asc_copy_l12gm将数据从L1搬运到GM。
asc_copy_l12l0a用于搬运存放在L1 Buffer里的512B大小的矩阵到L0A Buffer里。
asc_copy_l12l0a_mx将Mx scale矩阵从L1 Buffer搬运到L0A Buffer。
asc_copy_l12l0a_trans该接口实现带转置的2D格式数据从L1 Buffer到L0A Buffer的加载。
asc_copy_l12l0b用于搬运存放在L1 Buffer里的512B大小的矩阵到L0B Buffer里。
asc_copy_l12l0b_mx将Mx scale矩阵从L1 Buffer搬运到L0B Buffer。
asc_copy_l12l0b_sparse用于搬运存放在L1 Buffer里的512B大小的稠密权重矩阵到L0B Buffer里,同时读取128B大小的索引矩阵用于稠密矩阵的稀疏化。
asc_copy_l12l0b_trans该接口实现带转置的2D格式数据从L1 Buffer到L0B Buffer的加载。
asc_copy_l12l0c将矩阵由L1 Buffer搬运到L0C Buffer中。
asc_copy_l12ub将数据从L1 Buffer搬运到Unified Buffer中。
asc_fill_l0a将L0A Buffer的Local Memory初始化为某一具体数值。
asc_fill_l0b将L0B Buffer的Local Memory初始化为某一具体数值。
asc_fill_l1将L1 Buffer的Local Memory初始化为某一具体数值。
asc_load_image_to_cbuf将图像数据从Global Memory搬运到L1 Buffer。
asc_set_gm2l1_loop_size将数据从GM搬运到L1 Buffer时,设置数据搬运流程中的循环次数。
asc_set_gm2l1_loop1_stride将数据从GM搬运到L1 Buffer时,设置内层循环中相邻迭代数据块间的间隔。
asc_set_gm2l1_loop2_stride将数据从GM搬运到L1 Buffer时,设置外层循环中相邻迭代数据块间的间隔。
asc_set_gm2l1_pad将数据从GM非对齐搬运到L1 Buffer时,设置连续搬运数据块左右两侧的填充值。
asc_set_l0c_copy_paramsDataCopy从L0C Buffer搬运到Global Memory或L1 Buffer过程中进行随路格式转换(NZ格式转换为ND格式)时,通过调用该接口设置格式转换的相关配置。
asc_set_l0c_copy_prequant数据搬运过程中进行随路量化时,通过调用该接口设置量化流程中的标量量化参数。
asc_set_l0c2gm_lrelu_alpha用于设置asc_copy_l0c2l1或asc_copy_l0c2gm接口计算过程中使用的Leaky ReLU alpha值。该值只支持half和float两种数据类型。
asc_set_l13d_fmatrix设置Feature map属性描述,用于在调用asc_copy_l12l0a/asc_copy_l12l0b的3D格式搬运接口时配置填充数值。从左矩阵获取FeatureMap的属性时使用该接口。
asc_set_l13d_fmatrix_b设置Feature map属性描述,用于在调用asc_copy_l12l0a/asc_copy_l12l0b的3D格式搬运接口时配置填充数值。从右矩阵获取FeatureMap的属性时使用该接口。
asc_set_l13d_padding设置Pad属性描述,用于在调用asc_copy_l12l0a接口时配置填充数值。
asc_set_l13d_rpt用于设置Load3Dv2接口的repeat参数。
asc_set_l13d_size设置asc_copy_l12l0a/asc_copy_l12l0b的3D格式搬运接口在L1 Buffer的边界值。
asc_set_gm2ub_pad(废弃)使用asc_copy_gm2ub_align将数据从Global Memory (GM)搬运到Unified Buffer (UB)且源操作数非对齐时,设置连续搬运数据块左右两侧需要填补的数据值。

标量操作

标量操作类API,单独使用时可以引入scalar_compute.h,此类API列表如下:

表4 标量操作API列表

API名称说明
asc_clear_nthbit位操作函数,用于将一个uint64_t整数bits的第idx位设置为0。
asc_clz计算参数前导零的数量(二进制从最高位到第一个1共有多少个0)。
asc_ffsFindFirstSet接口,输入数据的二进制表示中从最低位向最高位查找第一个值为1的位,并返回其位置,如果没找到则返回-1。
asc_ffz获取一个uint64_t类型数字的二进制表示中从最低有效位开始的第一个0出现的位置,如果没找到则返回-1。
asc_float2int32将float类型转化为int32_t类型,并支持多种舍入模式。
asc_popc获取一个uint64_t类型数字的二进制中1的个数。
asc_set_nthbit计算一个uint64_t类型数字的指定二进制位置为1,其余位保持不变。
asc_sflbits计算一个int64_t类型数字的二进制中,从最高数值位开始与符号位相同的连续比特位的个数。
asc_store_dev不经过DCache向GM地址上写数据。
asc_zero_bits_cnt获取一个uint64_t类型数字的二进制中0的个数。
asc_atomic_add对Global Memory中的数据与指定数据执行原子加操作。
asc_atomic_sub对Global Memory中的数据与指定数据执行原子减操作。
asc_atomic_or对Global Memory中的数据与指定数据执行原子或操作。
asc_atomic_xor对Global Memory中的数据与指定数据执行原子异或操作。
asc_atomic_and对Global Memory中的数据与指定数据执行原子与操作。
asc_atomic_max对Global Memory中的数据与指定数据执行原子求最大值操作。
asc_atomic_min对Global Memory中的数据与指定数据执行原子求最小值操作。
asc_atomic_inc对Global Memory中address指向的计数器执行原子递增操作,如果address上的数值大于等于指定数值val,则对address赋值为0,否则将address上数值加1。
asc_atomic_dec对Global Memory中address指向的计数器执行原子递减操作,如果address上的数值等于0或大于指定数值val,则对address赋值为val,否则将address上数值减1。
asc_atomic_exch对Global Memory中address指向的元素执行原子赋值操作。
asc_atomic_cas对Global Memory中address指向的元素执行原子比较赋值操作,如果address上的数值等于指定数值compare,则对address赋值为指定数值val,否则address的数值不变。

矩阵计算

矩阵计算类API,单独使用时可以引入cube_compute.h,此类API列表如下:

表5 矩阵计算API列表

API名称说明
asc_enable_hf32用于设置Mmad计算开启HF32模式,开启该模式后L0A Buffer/L0B Buffer中的FP32数据将在参与Mmad计算之前被舍入为HF32。
asc_set_hf32_round_mode设置HF32模式舍入方式,使用该接口前需要先调用asc_enable_hf32开启HF32模式。
asc_enable_hf32_trans设置HF32模式取整方式,需要先使用asc_enable_hf32开启HF32取整模式。
asc_enable_hif8用于设置Mmad计算开启HiF8模式,开启该模式后L0A Buffer/L0B Buffer中的8bit数据将在参与矩阵乘法运算前被转化为hifloat8_t类型数据。
asc_enable_fp8用于设置Mmad计算开启FP8模式,开启该模式后L0A Buffer/L0B Buffer中的FP8数据在参与Mmad计算之前不会被转化为hifloat8_t类型数据。
asc_get_l0c2gm_prequant数据搬运过程中进行随路量化时,通过调用该接口获取量化操作前矢量的起始地址。
asc_get_l0c2gm_relu数据搬运过程中进行随路量化时,通过调用该接口获取ReLU操作前矢量的起始地址。
asc_get_l0c2gm_unitflag数据搬运过程中进行随路量化时,通过调用该接口获取unit_flag设置。
asc_mmad完成矩阵乘加操作。
asc_mmad_mx完成包含放缩功能的矩阵乘加操作。
asc_mmad_sparse完成矩阵乘加操作,传入的左矩阵A为稀疏矩阵,右矩阵B为稠密矩阵。
asc_set_fp32_mode用于设置Mmad计算开启FP32模式,开启该模式后L0A Buffer/L0B Buffer中的FP32数据在参与Mmad计算之前不做舍入处理。
asc_set_l0c2gm_config数据搬运过程中进行随路量化时,通过调用该接口设置量化流程中的矢量量化参数。
asc_set_l0c2gm_nz2nd数据搬运过程中进行随路格式转换(NZ格式转换为ND格式)时,设置格式转换的相关配置。
asc_set_mmad_direction_m设置mmad计算时优先通过M/N中的M方向生成结果,然后通过N方向产生结果,M为矩阵的行,N为矩阵的列。
asc_set_mmad_direction_n设置mmad计算时优先通过M/N中的N方向生成结果,然后通过M方向产生结果,M为矩阵的行,N为矩阵的列。

同步控制

同步控制类API,单独使用时可以引入sync.h,此类API列表如下:

表6 同步控制API列表

API名称说明
asc_lock用于AI Core内部异步流水线同步的接口。
asc_sync等待所有流水线操作完成。
asc_sync_block_arrive该指令用于发送同步信息数据到核间同步寄存器,设置同步点。
asc_sync_block_waitasc_sync_block_arrive配合使用(通过flag_id关联),用于等待所有同步对象到达flag_id对应的同步点。
asc_sync_data_barrier用于阻塞后续的指令执行,直到所有之前的内存访问指令(需要等待的内存位置可以通过参数控制)执行结束。
asc_sync_inter_arriveasc_sync_inter_wait配合使用(通过flag_id关联),用于组间block的信号同步。
asc_sync_inter_wait等待block内同步标志。
asc_sync_intra_arrive向核间同步寄存器发送同步信号。
asc_sync_intra_wait等待核间同步寄存器同步标志。
asc_sync_mte2等待PIPE_MTE2流水完成。
asc_sync_mte3等待PIPE_MTE3流水完成。
asc_sync_notify设置同步标志。
asc_sync_pipe等待指定流水线操作完成。
asc_sync_subblock_arriveasc_sync_subblock_wait配合使用(通过flag_id关联),用于组内subblock间的信号同步。
asc_sync_subblock_wait等待subblock间同步标志。
asc_sync_vec同步所有流水线。
asc_sync_wait等待同步标志。
asc_unlock释放缓存。

系统变量

系统变量类API,单独使用时可以引入sys_var.h,此类API列表如下:

表7 系统变量API列表

API名称说明
asc_get_arch_ver获取当前AI处理器架构版本号。
asc_get_squeeze_status读取squeeze操作后保存至AR特殊寄存器的有效数据长度值。
asc_get_block_idx获取当前运行核的索引。
asc_get_block_num获取AI核数。
asc_get_core_id获取当前核的编号。
asc_get_ctrl读取CTRL寄存器(控制寄存器)的值。
asc_get_ffts_base_addr获取核间同步寄存器的基地址。
asc_get_phy_buf_addr基于偏移量获取片上实际物理地址。
asc_get_phy_stack_base获取物理堆栈基地址。
asc_get_program_counter获取程序计数器的指针,程序计数器用于记录当前程序执行的位置。
asc_get_smmu_tag_version获取SMMU(System Memory Management Unit)版本信息。
asc_get_status获取状态信息。
asc_get_sub_block_id获取AI Core上Vector核的ID。
asc_get_sub_block_num分离模式下,获取一个AI Core上Cube Core(AIC)或者Vector Core(AIV)的数量。
asc_get_sys_virtual_base获取系统虚拟基地址。
asc_get_system_cycle获取当前系统cycle数。
asc_get_vf_len获取Tensor位宽VL(Vector Length)的大小。
asc_set_ctrl设置CTRL寄存器(控制寄存器)的值。
asc_set_ffts_base_addrasc_sync_block_arriveasc_sync_block_wait之前使用,设置核间同步寄存器的基地址。
asc_set_gm2l1_nz_para设置MTE2_NZ_PARA寄存器的值。
asc_set_l0c2gm_channel_para对通道步长参数的专用寄存器的比特位进行设置。
asc_set_l0c2gm_quant_post设置QUANT_POST寄存器的值。
asc_set_l0c2gm_relu_alpha设置RELU_ALPHA寄存器的值。
asc_set_l12l0_padding_val设置PADDING_B寄存器的值。
asc_set_l3d_rpt_b用于设置接口asc_copy_l12l0a、asc_copy_l12l0b的2D格式搬运的repeat参数。
asc_get_ar_spr(废弃)读取指定特殊寄存器的值。

缓存控制

缓存控制类API,单独使用时可以引入cache_ctrl.h,此类API列表如下:

表8 缓存控制API列表

API名称说明
asc_datacache_preload从源地址所在的特定GM地址预加载数据到Data Cache中。
asc_dcci用于刷新Cache,保证Cache的一致性。
asc_dci数据缓存失效,使整个数据缓存无效化。
asc_get_icache_preload_status获取ICache的Preload的状态。
asc_icache_preload从指令所在GM地址预加载数据到对应的cacheline中。

原子操作

原子操作类API,单独使用时可以引入atomic.h,此类API列表如下:

表9 原子操作API列表

API名称说明
asc_get_store_atomic_config获取原子操作启用位与原子操作类型的值。
asc_set_atomic_add_bfloat设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为bfloat16_t。
asc_set_atomic_add_float设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为float。
asc_set_atomic_add_float16设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为half。
asc_set_atomic_add_int32设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为int32_t。
asc_set_atomic_add_int8设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为int8_t。
asc_set_atomic_add_int16设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为int16_t。
asc_set_atomic_max_bfloat设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的bfloat16_t数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_max_float设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的float数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_max_float16设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的half数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_max_int32设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int32_t数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_max_int8设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int8_t数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_max_int16设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int16_t数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_min_bfloat设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的bfloat16_t数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_atomic_min_float设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的float数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_atomic_min_float16设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的half数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_atomic_min_int32设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int32_t数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_atomic_min_int8设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int8_t数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_atomic_min_int16设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int16_t数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_atomic_none清空原子操作的状态。
asc_set_store_atomic_config_v1设置原子操作启用位与原子操作类型的值,适用于Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品。
asc_set_atomic_add_int(废弃)设置对后续的从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的数据传输开启原子累加。累加的数据类型为int32_t。
asc_set_atomic_max_int(废弃)设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int32_t数据与GM中已有数据进行逐元素比较,并将最大值写入GM。
asc_set_atomic_min_int(废弃)设置计算结果以原子比较的方式传输到GM。在拷贝前,将待传输的int32_t数据与GM中已有数据进行逐元素比较,并将最小值写入GM。
asc_set_store_atomic_config_v2(废弃)设置原子操作启用位与原子操作类型的值,适用于Ascend 950PR/Ascend 950DT。

其他操作

表10 其他操作API列表

API名称说明
asc_init初始化NPU状态。

Reg数据搬运

Reg数据搬运类API,单独使用时可以引入reg_load.h,此类API列表如下:

表11 Reg数据搬运API列表

API名称说明
asc_get_mask_spr从特殊寄存器SPR{MASK1, MASK0}读取mask值并根据数据类型格式返回对应的mask数据,MASK0、MASK1均为64bit的寄存器。
asc_loadalign对齐数据搬运接口,从UB连续对齐搬入目的操作数,NORM搬入模式。
asc_gather根据索引位置index将源操作数src按元素收集到目的操作数dst中。
asc_gather_datablock给定源操作数在UB中的基地址和索引,根据索引位置将源操作数按DataBlock收集到目的操作数中。
asc_loadreg计算数据搬运接口,支持从UB非32字节对齐的源地址src搬运至矢量数据寄存器,搬运量为VL。
asc_loadalign_brc_datablock对齐数据搬运接口,从UB连续对齐搬入目的操作数,读取一个DataBlock并广播到VL。
asc_loadalign_brc_datablock_postupdate对齐数据搬运接口,读取一个DataBlock并广播到VL,启用Post Update。
asc_loadalign_brc_elem对齐数据搬运接口,从UB连续对齐搬入目的操作数,搬运一个元素并广播到VL。
asc_loadalign_brc_elem2datablock对齐数据搬运接口,从UB连续对齐搬入目的操作数,将每个元素广播到一个DataBlock中。
asc_loadalign_brc_elem2datablock_postupdate对齐数据搬运接口,将每个元素广播到一个DataBlock中,启用Post Update。
asc_loadalign_brc_elem_postupdate对齐数据搬运接口,搬运一个元素并广播到VL,启用Post Update。
asc_loadalign_deintlv对齐数据搬运接口,从UB连续对齐搬入目的操作数,随路完成deinterleave操作。
asc_loadalign_deintlv_postupdate对齐数据搬运接口,从UB连续对齐搬入目的操作数,随路完成deinterleave操作,启用postupdate模式,自动更新UB地址参数。
asc_loadalign_downsample对齐数据搬运接口,从UB连续对齐搬入目的操作数,2倍下采样模式。
asc_loadalign_downsample_postupdate对齐数据搬运接口,2倍下采样模式,启用Post Update。
asc_loadalign_postupdate将数据从UB搬入MaskReg,使能post mod。
asc_loadalign_unpack对齐数据搬运接口,从UB连续对齐搬入目的操作数,解压缩模式。
asc_loadalign_unpack4对齐数据搬运接口,从UB连续对齐搬入目的操作数,解压缩模式。
asc_loadalign_unpack4_postupdate对齐数据搬运接口,解压缩模式,启用Post Update。
asc_loadalign_unpack_postupdate对齐数据搬运接口,解压缩模式,启用Post Update。
asc_loadalign_upsample对齐数据搬运接口,从UB连续对齐搬入目的操作数,2倍上采样模式。
asc_loadalign_upsample_postupdate对齐数据搬运接口,2倍上采样模式,启用Post Update。
asc_loadunalignreg计算数据搬运接口,适用于从UB非32B对齐的起始地址连续搬入矢量数据寄存器的场景。
asc_loadunalign_postupdate数据搬运接口,适用于从UB非32B对齐地址起始连续搬入,并自动更新源操作数地址。
asc_loadunalign_pre用于在进行非对齐数据搬入前的初始化,需配合asc_loadunalign接口使用。
asc_storealignreg计算数据搬运接口,从矢量数据寄存器连续对齐搬出到UB,NORM搬出模式。
asc_scatter根据索引值index将源操作数src中的元素分散到目的操作数dst中。
asc_storereg计算数据搬运接口,适用于从矢量数据寄存器搬出到UB的场景,不区分是否对齐,在追求极致性能时,应尽量避免使用该接口。
asc_storealign_1streg计算数据搬运接口,忽略mask向dst搬出src第一个元素。
asc_storealign_1st_postupdatereg计算数据搬运接口,忽略mask向dst搬出src第一个元素,启用Post Update。
asc_storealign_intlvreg计算数据搬运接口,将src0和src1中的元素交错搬出到UB。
asc_storealign_packreg计算数据搬运接口,根据mask将src中有效元素的低半部分数据连续存储于dst中。
asc_storealign_pack_postupdatereg计算数据搬运接口,根据mask压缩搬出,启用Post Update。
asc_storealign_pack_quarterreg计算数据搬运接口,根据mask将src中有效元素的低8bits数据连续存储于dst中。
asc_storealign_pack_quarter_postupdatereg计算数据搬运接口,根据mask将src中有效元素的低8bits数据连续存储于dst中,启用Post Update。
asc_storealign_postupdatereg计算数据搬运接口,从矢量数据寄存器连续对齐搬出到UB,NORM搬出模式,启用Post Update。
asc_storeunalignreg计算数据搬运接口,适用于从矢量数据寄存器连续非32B对齐的起始地址连续搬出到UB的场景。
asc_storeunalign_postreg计算数据搬运接口,适用于从矢量数据寄存器连续非32B对齐的起始地址搬出到UB的尾块场景。
asc_storeunalign_post_postupdatereg计算数据搬运接口,适用于从矢量数据寄存器连续非32B对齐的起始地址搬出到UB的尾块场景,并自动更新目的操作数地址。
asc_storeunalign_postupdatereg计算数据搬运接口,适用于从矢量数据寄存器连续非32B对齐的起始地址连续搬出到UB的场景。
asc_loadalign_v1(废弃)对齐数据搬运接口,从UB连续对齐搬入目的操作数,支持多种搬入模式,源操作数地址由用户更新。
asc_loadalign_v2(废弃)对齐数据搬运接口,通过地址寄存器传入偏移,用户可选择更新偏移或源操作数地址。
asc_loadalign_v3(废弃)对齐数据搬运接口,通过int32_t传入偏移,用户可选择更新偏移或源操作数地址。
asc_loadalign_v4(废弃)对齐数据搬运接口,通过int32_t传入偏移并由硬件自动执行Post Update。
asc_loadalign_v5(废弃)对齐数据搬运接口,使用repeat stride模式。
asc_loadalign_v6(废弃)reg数据搬运接口,适用于从UB搬入MaskReg。
asc_storealign_v1(废弃)reg计算数据搬运接口,支持从矢量数据寄存器或掩码寄存器连续对齐搬出到UB,目的操作数地址由用户更新。
asc_storealign_v2(废弃)reg计算数据搬运接口,通过地址寄存器传入偏移,用户可选择更新偏移或目的操作数地址。
asc_storealign_v3(废弃)reg计算数据搬运接口,通过int32_t传入偏移,用户可选择更新偏移或目的操作数地址。
asc_storealign_v4(废弃)reg计算数据搬运接口,通过int32_t传入偏移并由硬件自动执行Post Update。
asc_storealign_v5(废弃)reg计算数据搬运接口,适用于从矢量数据寄存器连续对齐搬出到UB,使用repeat stride模式。
asc_scatter(废弃)根据索引值index将源操作数src中的元素分散到目的操作数dst中。

Reg矢量计算

Reg矢量计算类API,单独使用时可以引入reg_vector.h,此类API列表如下:

表12 Reg矢量计算API列表

API名称说明
asc_update_addr_reg地址寄存器通过该接口初始化,然后在循环之中使用地址寄存器存储地址偏移量。
asc_create_mask根据入参生成相应的掩码寄存器。
asc_update_mask根据value大小生成对应的掩码寄存器中的值。
asc_copy完成数据在寄存器内的搬运。
asc_abs逐元素计算绝对值。
asc_add按元素执行加法运算。
asc_add_scalar按元素执行矢量和标量的加法运算。
asc_addc按元素执行带进位的加法运算。
asc_div按元素执行除法运算。
asc_exp对源操作数逐元素计算指数。
asc_leakyrelu按元素执行Leaky ReLU(Leaky Rectified Linear Unit)操作。
asc_ln对源操作数逐元素计算自然对数。
asc_max按元素求最大值。
asc_max_scalar按元素求矢量和标量的最大值。
asc_min根据mask对源操作数src0、src1进行按元素求最小值操作,将结果写入目的操作数dst。
asc_min_scalar源操作数矢量内每个元素与标量比较,取较小值。
asc_mul对源操作数src0和src1进行乘法运算,将结果写入目的操作数dst。
asc_mul_scalar对源操作数src、value进行按元素乘法操作,将结果写入目的操作数dst。
asc_mull根据mask对输入数据src0、src1按元素相乘,将结果写入dst0,溢出部分写入dst1。
asc_neg根据mask对源操作数src进行取相反数操作,将结果写入目的操作数dst。
asc_prelu源操作数src0大于0的情况下直接将src0写入目的操作数dst,否则将src0 * src1的结果写入dst。
asc_relu逐元素执行ReLU运算。
asc_sqrt逐元素计算平方根。
asc_sub按元素执行减法运算。
asc_subc按元素执行带借位的减法运算。
asc_abs_sub逐元素计算差的绝对值。
asc_axpy根据mask对源操作数src、value进行按元素做乘加操作,将结果写入目的操作数dst。
asc_maddmadd(multiply-add),对源操作数执行逐元素乘法和加法。
asc_and对掩码寄存器操作:根据mask对源操作数src0、src1的有效bit进行逻辑与运算,得到新的掩码寄存器。
asc_not执行矢量非运算。
asc_or对源操作数src0和src1进行或(
asc_shiftleft根据掩码mask对输入数据src0,按照src1对应元素进行左移操作,完成后将结果写入dst中。
asc_shiftleft_scalar根据mask对源操作数src执行左移,左移的位数由输入参数value决定,将结果写入目的操作数dst。
asc_shiftright根据掩码mask对输入数据src0,按照src1对应元素进行右移操作,完成后将结果写入dst中。
asc_shiftright_scalar根据mask对源操作数src执行右移,右移的位数由输入参数value决定,将结果写入目的操作数dst。
asc_xor根据mask对输入的src0、src1按元素异或(^)进行操作,将结果写入dst。
asc_eq对源操作数逐元素比较是否相等。
asc_eq_scalar对源操作数逐元素比较是否与标量相等。
asc_gege(greater than or equal to),对源操作数执行逐元素比较。
asc_ge_scalarge(greater than or equal to),对源操作数与标量执行逐元素比较。
asc_gtgt(greater than),对源操作数执行逐元素比较。
asc_gt_scalargt(greater than),对源操作数与标量执行逐元素比较。
asc_lele(less than or equal to),对源操作数执行逐元素比较。
asc_le_scalarle(less than or equal to),对源操作数与标量执行逐元素比较。
asc_ltlt(less than),对源操作数执行逐元素比较。
asc_lt_scalarlt(less than),对源操作数与标量执行逐元素比较。
asc_nene(not equal),对源操作数执行逐元素比较。
asc_ne_scalarsrc中的每个元素逐个与标量value比较大小,如果src_i != value,则输出结果dst对应比特位为1,否则为0。
asc_select根据mask的比特位值,从源操作数src0、src1中选择元素,得到目的操作数dst。
asc_squeeze将src中被mask选择的有效元素依次复制到dst中,有效元素从低到高连续排列,剩余位置元素置为0。
asc_squeeze_with_status将src中被mask选择的有效元素依次复制到dst,并将有效数据大小保存至AR寄存器。
asc_bfloat162float将bfloat16_t类型转换为float类型,无舍入模式。
asc_bfloat162half将bfloat16_t类型转换为half类型,并支持多种舍入模式和饱和/非饱和模式。
asc_bfloat162int32将bfloat16_t类型数据转换为int32_t类型,并支持多种舍入模式。
asc_ceil将源操作数中的浮点数元素按照CEIL(向正无穷方向舍入)模式舍入到整数值,结果保持原浮点数据类型。
asc_float2bfloat16将float类型转换为bfloat16_t类型,并支持多种舍入模式。
asc_floor将源操作数中的浮点数元素按照FLOOR(向负无穷方向舍入)模式舍入到整数值,结果保持原浮点数据类型。
asc_float2half将float类型转换为half类型,并支持多种舍入模式。
asc_float2int16将float类型转换为int16_t类型,并支持多种舍入模式。
asc_float2int32将float类型转换为int32_t类型,并支持多种舍入模式。
asc_float2int64将float类型转换为int64_t类型,并支持多种舍入模式。
asc_half2bfloat16将half类型数据转换为bfloat16_t类型,并支持多种舍入模式。
asc_half2float将half类型数据转换为float类型。
asc_half2hif8将half类型转换为hifloat8_t类型,并支持多种舍入模式。
asc_half2int16将half类型数据转换为int16_t类型,并支持多种舍入模式。
asc_half2int32将half类型数据转换为int32_t类型,并支持多种舍入模式。
asc_half2int8将half类型转换为int8_t类型,并支持多种舍入模式。
asc_half2uint8将half类型转换为uint8_t类型,并支持多种舍入模式。
asc_hif82half将hifloat8_t类型数据转换为half类型。
asc_int162float将int16_t类型转换为float类型。
asc_int162half将int16_t类型转换为half类型。
asc_int162int32将int16_t类型转换为int32_t类型。
asc_int162uint32将int16_t类型转换为uint32_t类型。
asc_int162uint8将int16_t类型转换为uint8_t类型。
asc_int322float将int32_t类型转换为float类型,并支持多种舍入模式。
asc_int322int16将int32_t类型转换为int16_t类型。
asc_int322int64将int32_t类型转换为int64_t类型。
asc_int322uint16将int32_t类型转换为uint16_t类型。
asc_int642float将int64_t类型数据转换为float类型,并支持多种舍入模式。
asc_int642int32将int64_t类型转换为int32_t类型。
asc_int82half将int8_t类型转换为half类型。
asc_int82int16将int8_t类型转换为int16_t类型。
asc_rint将源操作数中的浮点数元素按照RINT(四舍六入五成双)模式舍入到整数值,结果保持原浮点数据类型。
asc_round将源操作数中的浮点数元素按照ROUND(四舍五入)模式舍入到整数值,结果保持原浮点数据类型。
asc_trunc将源操作数中的浮点数元素按照TRUNC(向零方向截断)模式截断到整数值,结果保持原浮点数据类型。
asc_uint162uint32将uint16_t类型转换为uint32_t类型。
asc_uint162uint8将uint16_t类型转换为uint8_t类型。
asc_uint322int16将uint32_t类型转换为int16_t类型。
asc_uint322uint16将uint32_t类型转换为uint16_t类型。
asc_uint82half将uint8_t类型转换为half类型。
asc_uint82uint16将uint8_t类型转换为uint16_t类型。
asc_pair_reduce_sumPairReduceSum:相邻两个(奇偶)元素求和,结果写入dst。
asc_reduce_max根据mask对源操作数src进行归约最大值操作,将结果写入目的操作数dst。
asc_reduce_max_datablock找出DataBlock中的最大值,并将最终的计算结果依次保存在dst中的最低位。
asc_reduce_min根据mask对源操作数src进行归约最小值操作,将结果写入目的操作数dst。
asc_reduce_min_datablock根据mask将每个DataBlock(32B)中的最小值,依次保存在dst中的最低位。
asc_reduce_sum归约求和功能,用于将src中的所有参与计算的元素求和,得到的结果保存在dst中。
asc_reduce_sum_datablock归约求和功能,用于将src每个DataBlock(32B)中参与计算的元素求和,得到的结果依次保存在dst中。
asc_pack_to_low将源操作数中的元素选取低8位(b16)、低16位(b32)、低32位(b64)写入目的操作数的低半部分(当数据类型为vector_bool时,每2bit选取其中的低位1bit)。
asc_pack_to_high将源操作数中的元素选取低8位(b16)、低16位(b32)、低32位(b64)写入目的操作数的高半部分(当数据类型为vector_bool时,每2bit选取其中的低位1bit)。
asc_unpack矢量解包操作。
asc_unsqueeze根据mask进行解压缩,将生成的数据输出到dst。
asc_duplicate根据mask将源操作数src的最低位元素填充到目的操作数dst。
asc_duplicate_scalar根据mask将value填充到目的操作数dst。
asc_deintlv给定源操作数src0和src1,将src0和src1中的元素解交织存入结果操作数dst0和dst1中。
asc_intlv将源操作数src0和src1中的元素交织存入目的操作数dst0和dst1中。
asc_cumulative_histogram对直方图数据进行累计统计。
asc_frequency_histogram对直方图数据进行频率统计。
asc_arange以传入的value为起始值,生成递增/递减的索引,并将生成的索引保存在dst中。
asc_mem_barReg计算宏函数内不同流水线之间的同步指令。
asc_clear_ar_spr对AR寄存器进行清理,AR寄存器通常由asc_squeeze_with_status接口使用。
asc_create_iter_reg(废弃)该接口已废弃,请使用asc_update_addr_reg实现此功能。
asc_muls(废弃)对源操作数src和value进行乘法运算再按照数据类型转换的ROUND舍入模式转成half类型,根据mask将结果写入目的操作数dst。
asc_exp_sub(废弃)将src0与src1相减,差值作为e的指数计算。
asc_squeeze(废弃)将src中被mask选择的有效元素依次复制到dst,有效元素在dst上连续排列。
asc_bfloat162e1m2x2(废弃)将bfloat16_t类型转换为fp4x2_e1m2_t类型,并支持多种舍入模式。
asc_bfloat162e2m1x2(废弃)将bfloat16_t类型转换为fp4x2_e2m1_t类型,并支持多种舍入模式。
asc_e1m2x22bfloat16(废弃)将fp4x2_e1m2_t类型转换为bfloat16_t类型。
asc_e2m1x22bfloat16(废弃)将fp4x2_e2m1_t类型转换为bfloat16_t类型。
asc_e4m32float(废弃)将fp8_e4m3fn_t类型转换为float类型。
asc_e5m22float(废弃)将vector_fp8_e5m2_t类型的源操作数以256B为单位分为四部分,读取其中一部分元素,将其转换成vector_float类型并写入目的操作数。
asc_float2e4m3(废弃)将float类型转换为fp8_e4m3fn_t类型,支持RINT舍入模式。
asc_float2e5m2(废弃)将float类型数据转换为fp8_e5m2类型。
asc_float2hif8(废弃)将float类型转换为hifloat8_t类型,并支持多种舍入模式。
asc_half2int4x2(废弃)将half类型数据转换为int4x2_t类型,并支持多种舍入模式。
asc_hif82float(废弃)将hifloat8_t类型数据转换为float类型。
asc_int322uint8(废弃)将int32_t类型转换为uint8_t类型。
asc_int4x22bfloat16(废弃)将int4x2_t类型转换为bfloat16_t类型,无舍入模式。
asc_int4x22half(废弃)将int4x2_t类型数据转换为half类型。
asc_int4x22int16(废弃)将int4x2_t类型转换为int16_t类型。
asc_int82int32(废弃)将int8_t类型转换为int32_t类型。
asc_uint322uint8(废弃)将uint32_t类型转换为uint8_t类型。
asc_uint82uint32(废弃)将uint8_t类型转换为uint32_t类型。
asc_pack(废弃)将源操作数中的元素选取低8位(b16)、低16位(b32)、低32位(b64)写入目的操作数的低半部分或高半部分。

枚举类型

表13 枚举类型列表

枚举类名说明
asc_hf32_round_mode表示Mmad计算开启HF32模式时由FP32舍入到HF32的舍入模式管理策略。
asc_load_l2_cache_mode表示数据从GM搬运到UB时的L2 cache策略。
asc_store_l2_cache_mode表示数据从UB搬运到GM时的L2 cache策略。

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区