C API

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

数据结构

结构名 说明
asc_load3d_v2_config Load3Dv2接口的repeat参数
asc_store_atomic_config 原子操作使能位与原子操作类型的值
asc_fill_value_config fill_value的初始化参数结构体,包含asc_fill_l0a/asc_fill_l0b/asc_fill_l1接口需要配置的各种初始化参数。

矢量计算

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

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

数据搬运

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

API名称 说明
asc_copy_l0c2gm 将L0C中的数据搬运到GM中。
asc_copy_l0c2l1 矩阵计算完成后,对结果进行量化处理,之后将处理结果搬运到GM中。
asc_set_l13d_rpt 用于设置Load3Dv2接口的repeat参数。
asc_fill_l0a 将L0A Buffer的Local Memory初始化为某一具体数值。
asc_fill_l0b 将L0B Buffer的Local Memory初始化为某一具体数值。
asc_fill_l1 将L1 Buffer的Local Memory初始化为某一具体数值。
asc_set_l13d_size 设置asc_copy_l12l0a/asc_copy_l12l0b的3D格式搬运接口在L1 Buffer的边界值。
asc_load_image_to_cbuf 将图像数据从Global Memory搬运到L1 Buffer。
asc_copy_l12bt 将数据从L1 Buffer搬运到BiasTable Buffer中,BiasTable Buffer用于存放矩阵计算中的Bias。
asc_copy_l12fb 将数据从L1 Buffer搬运到Fixpipe Buffer中,Fixpipe Buffer用于存放量化参数。
asc_copy_l12l0a 用于搬运存放在L1 Buffer里的512B大小的矩阵到L0A Buffer里。
asc_copy_l12l0b 用于搬运存放在L1 Buffer里的512B大小的矩阵到l0b Buffer里。
asc_copy_l12l0b_sparse 用于搬运存放在L1 Buffer里的512B大小的稠密权重矩阵到L0B Buffer里,同时读取128B大小的索引矩阵用于稠密矩阵的稀疏化。
asc_copy_l12l0b_trans 该接口实现带转置的2D格式数据从L1 Buffer到L0B Buffer的加载。
asc_set_l0c_copy_params DataCopy(CO1->GM、CO1->A1)过程中进行随路格式转换(NZ格式转换为ND格式)时,通过调用该接口设置格式转换的相关配置。
asc_set_l0c_copy_prequant 数据搬运过程中进行随路量化时,通过调用该接口设置量化流程中的标量量化参数。
copy_gm2l1 将数据从Global Memory搬运到 Level 1 cache。
copy_gm2l1_nd2nz 将数据从Global Memory搬运到 Level 1 cache,支持在数据搬运时进行ND格式到NZ格式的转换。
asc_set_l13d_padding 设置Pad属性描述,用于在调用asc_copy_l12l0a接口时配置填充数值。
asc_copy_ub2ub 将数据从Unified Buffer搬运到Unified Buffer。
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位分块拷贝操作。

标量操作

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

API名称 说明
asc_clz 计算参数前导零的数量(二进制从最高位到第一个1共有多少个0)。
asc_set_nthbit 计算一个uint64_t类型数字的指定二进制位置为1,其余位保持不变。
asc_sflbits 计算一个int64_t类型数字的二进制中,从最高数值位开始与符号位相同的连续比特位的个数。
asc_clear_nthbit 位操作函数,用于将一个uint64_t整数bits的第idx位设置为0。
asc_ffs FindFirstSet接口,输入数据的二进制表示中从最低位向最高位查找第一个值为1的位,并返回其位置,如果没找到则返回-1。
asc_ffz 获取一个uint64_t类型数字的二进制表示中从最低有效位开始的第一个0出现的位置,如果没找到则返回-1。
asc_popc 获取一个uint64_t类型数字的二进制中1的个数。
asc_zero_bits_cnt 获取一个uint64_t类型数字的二进制中0的个数。

矩阵计算

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

API名称 说明
asc_set_mmad_direction_m 设置mmad计算时优先通过M/N中的N方向,然后通过M方向产生结果,M为矩阵的行,N为矩阵的列。
asc_set_mmad_direction_n 设置mmad计算时优先通过M/N中的M方向,然后通过N方向产生结果,M为矩阵的行,N为矩阵的列。
asc_enable_hf32_trans 设置HF32模式取整方式,需要先使用asc_enable_hf32开启HF32取整模式。
asc_mmad 完成矩阵乘加操作。
asc_mmad_sparse 完成矩阵乘加操作,传入的左矩阵A为稀疏矩阵,右矩阵B为稠密矩阵。
asc_set_fp32_mode 用于设置Mmad计算开启FP32模式,开启该模式后L0A Buffer/L0B Buffer中的FP32数据在参与Mmad计算之前不做舍入处理。
asc_set_l0c2gm_config 数据搬运过程中进行随路量化时,通过调用该接口设置量化流程中的矢量量化参数。
asc_enable_hf32 用于设置Mmad计算开启HF32模式,开启该模式后L0A Buffer/L0B Buffer中的FP32数据将在参与Mmad计算之前被舍入为HF32。

同步控制

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

API名称 说明
asc_sync_notify 设置同步标志。
asc_sync_wait 等待同步标志。
asc_sync_pipe 等待指定流水线操作完成。
asc_sync 等待所有流水线操作完成。
asc_sync_vec 同步所有流水线。
asc_sync_mte3 等待PIPE_MTE3流水完成。
asc_sync_mte2 等待PIPE_MTE2流水完成。
asc_sync_data_barrier 用于阻塞后续的指令执行,直到所有之前的内存访问指令(需要等待的内存位置可以通过参数控制)执行结束。
asc_sync_block_arrive 该指令用于发送同步信息数据到核间同步寄存器,设置同步点。
asc_sync_block_wait asc_sync_block_arrive配合使用(通过flagID关联),用于等待所有同步对象到达flagID对应的同步点。

系统变量

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

API名称 说明
asc_get_block_num 获取AI核数。
asc_get_block_idx 获取当前运行核的索引。
asc_get_core_id 获取当前核的编号。
asc_get_sub_block_id 获取AI Core上Vector核的ID。
asc_get_sub_block_num 分离模式下,获取一个AI Core上Cube Core(AIC)或者Vector Core(AIV)的数量。
asc_set_ctrl 设置CTRL寄存器(控制寄存器)的值。
asc_get_ctrl 读取CTRL寄存器(控制寄存器)的值。
asc_get_phy_buf_addr 基于偏移量获取片上实际物理地址。
asc_get_system_cycle 获取当前系统cycle数。
asc_get_arch_ver 获取当前AI处理器架构版本号。
asc_get_program_counter 获取程序计数器的指针,程序计数器用于记录当前程序执行的位置。
asc_get_ffts_base_addr 获取核间同步寄存器的基地址。
asc_set_ffts_base_addr asc_sync_block_arriveasc_sync_block_wait之前使用,设置核间同步寄存器的基地址。

缓存控制

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

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

原子操作

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

API名称 说明
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_int 设置对后续的从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_int 设置计算结果以原子比较的方式传输到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_int 设置计算结果以原子比较的方式传输到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_store_atomic_config_v1 设置原子操作使能位与原子操作类型的值,适用于Atlas A3 训练系列产品/Atlas A3 推理系列产品和Atlas A2 训练系列产品/Atlas A2 推理系列产品。
asc_set_store_atomic_config_v2 设置原子操作使能位与原子操作类型的值,适用于Ascend 950PR/Ascend 950DT。
asc_get_store_atomic_config 获取原子操作使能位与原子操作类型的值。
asc_set_atomic_none 清空原子操作的状态。

其他操作

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

Reg数据搬运

API名称 说明
asc_loadalign 对齐数据搬运接口,从UB连续对齐搬入目的操作数,支持多种搬入模式。
asc_storealign reg计算数据搬运接口,适用于从矢量数据寄存器连续对齐搬出到UB的场景,并支持多种搬出模式。
asc_gather 根据索引位置index将源操作数src按元素收集到目的操作数dst中。
asc_gather_datablock 给定源操作数在UB中的基地址和索引,根据索引位置将源操作数按DataBlock收集到目的操作数中。
asc_get_mask_spr 从特殊寄存器SPR{MASK1, MASK0}读取mask值并根据数据类型格式返回对应的mask数据,MASK0、MASK1均为64bit的寄存器。
asc_load reg计算数据搬运接口,支持从UB非32字节对齐的源地址src搬运至矢量数据寄存器,搬运量为VL。
asc_loadunalign reg计算数据搬运接口,适用于从UB非32B对齐的起始地址连续搬入矢量数据寄存器的场景。
asc_loadunalign_pre 用于在进行非对齐数据搬入前的初始化,需配合asc_loadunalign接口使用。
asc_store reg计算数据搬运接口,适用于从矢量数据寄存器搬出到UB的场景,不区分是否对齐,在追求极致性能时,应尽量避免使用该接口。
asc_storeunalign reg计算数据搬运接口,适用于从矢量数据寄存器连续非32B对齐的起始地址连续搬出到UB的场景。
asc_storeunalign_postupdate reg计算数据搬运接口,适用于从矢量数据寄存器连续非32B对齐的起始地址连续搬出到UB的场景。

Reg矢量计算

API名称 说明
asc_abs 逐元素计算绝对值。
asc_abs_sub 逐元素计算差的绝对值。
asc_add 按元素执行加法运算。
asc_addc 按元素执行带进位的加法运算。
asc_add_scalar 按元素执行矢量和标量的加法运算。
asc_and 对掩码寄存器操作:根据mask对源操作数src0、src1的有效bit进行逻辑与运算,得到新的掩码寄存器。
asc_arange 以传入的value为起始值,生成递增/递减的索引,并将生成的索引保存在dst中。
asc_axpy 根据mask对源操作数src、value进行按元素做乘加操作,将结果写入目的操作数dst。
asc_bfloat162e1m2x2 将bfloat16_t类型转换为fp4x2_e1m2_t类型,并支持多种舍入模式。
asc_bfloat162e2m1x2 将bfloat16_t类型转换为fp4x2_e2m1_t类型,并支持多种舍入模式。
asc_bfloat162float 将bfloat16_t类型转换为float类型,无舍入模式。
asc_bfloat162half 将bfloat16_t类型转换为half类型,并支持多种舍入模式和饱和/非饱和模式。
asc_bfloat162int32 将bfloat16_t类型数据转换为int32_t类型,并支持多种舍入模式。
asc_clear_ar_spr 对AR寄存器进行清理,AR寄存器通常由asc_squeeze接口使用。
asc_copy 完成数据在寄存器内的搬运。
asc_create_iter_reg 地址寄存器通过该接口初始化,然后在循环之中使用地址寄存器存储地址偏移量。
asc_create_mask 根据入参生成相应的掩码寄存器。
asc_cumulative_histogram 对直方图数据进行累计统计。
asc_deintlv 给定源操作数src0和src1,将src0和src1中的元素解交织存入结果操作数dst0和dst1中。
asc_div 按元素执行除法运算。
asc_duplicate 根据mask将源操作数src的最低位元素填充到目的操作数dst。
asc_duplicate_scalar 根据mask将value填充到目的操作数dst。
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_eq 对源操作数逐元素比较是否相等。
asc_eq_scalar 对源操作数逐元素比较是否与标量相等。
asc_exp 对源操作数逐元素计算指数。
asc_exp_sub 将src0与src1相减,差值作为e的指数计算。
asc_float2bfloat16 将float类型转换为bfloat16_t类型,并支持多种舍入模式。
asc_float2e4m3 将float类型转换为fp8_e4m3fn_t类型,支持RINT舍入模式。
asc_float2e5m2 将float类型数据转换为fp8_e5m2类型。
asc_float2half 将float类型转换为half类型,并支持多种舍入模式。
asc_float2hif8 将float类型转换为hifloat8_t类型,并支持多种舍入模式。
asc_float2int16 将float类型转换为int16_t类型,并支持多种舍入模式。
asc_float2int32 将float类型转换为int32_t类型,并支持多种舍入模式。
asc_float2int64 将float类型转换为int64_t类型,并支持多种舍入模式。
asc_frequency_histogram 对直方图数据进行频率统计。
asc_ge ge(greater than or equal to),对源操作数执行逐元素比较。
asc_ge_scalar ge(greater than or equal to),对源操作数与标量执行逐元素比较。
asc_gt gt(greater than),对源操作数执行逐元素比较。
asc_gt_scalar gt(greater than),对源操作数与标量执行逐元素比较。
asc_half2bf16 将half类型数据转换为bfloat16_t类型,并支持多种舍入模式。
asc_half2float 将half类型数据转换为float类型。
asc_half2hif8 将half类型转换为hifloat8_t类型,并支持多种舍入模式。
asc_half2int16 将half类型数据转换为int16_t类型,并支持多种舍入模式。
asc_half2int32 将half类型数据转换为int32_t类型,并支持多种舍入模式。
asc_half2int4x2 将half类型数据转换为int4x2_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_int322uint8 将int32_t类型转换为uint8_t类型。
asc_int4x22bfloat16 将int4x2_t类型转换为bfloat16_t类型,无舍入模式。
asc_int4x22half 将int4x2_t类型数据转换为half类型。
asc_int4x22int16 将int4x2_t类型转换为int16_t类型。
asc_int642float 将int64_t类型数据转换为float类型,并支持多种舍入模式。
asc_int642int32 将int64_t类型转换为int32_t类型。
asc_int82half 将int8_t类型转换为half类型。
asc_int82int16 将int8_t类型转换为int16_t类型。
asc_int82int32 将int8_t类型转换为int32_t类型。
asc_intlv 将源操作数src0和src1中的元素交织存入目的操作数dst0和dst1中。
asc_le le(less than or equal to),对源操作数执行逐元素比较。
asc_leakyrelu 按元素执行Leaky ReLU(Leaky Rectified Linear Unit)操作。
asc_le_scalar le(less than or equal to),对源操作数与标量执行逐元素比较。
asc_ln 对源操作数逐元素计算自然对数。
asc_lt lt(less than),对源操作数执行逐元素比较。
asc_lt_scalar lt(less than),对源操作数与标量执行逐元素比较。
asc_madd madd(multiply-add),对源操作数执行逐元素乘法和加法。
asc_max 按元素求最大值。
asc_max_scalar 按元素求矢量和标量的最大值。
asc_mem_bar Reg计算宏函数内不同流水线之间的同步指令。
asc_min 根据mask对源操作数src0、src1进行按元素求最小值操作,将结果写入目的操作数dst。
asc_min_scalar 源操作数矢量内每个元素与标量比较,取较小值。
asc_mul 对源操作数src0和src1进行乘法运算,将结果写入目的操作数dst。
asc_mull 根据mask对输入数据src0、src1按元素相乘,将结果写入dst0,溢出部分写入dst1。
asc_muls 对源操作数src和value进行乘法运算再按照数据类型转换的ROUND舍入模式转成half类型,根据mask将结果写入目的操作数dst。
asc_mul_scalar 对源操作数src、value进行按元素乘法操作,将结果写入目的操作数dst。
asc_ne ne(not equal),对源操作数执行逐元素比较。
asc_neg 根据mask对源操作数src进行取相反数操作,将结果写入目的操作数dst。
asc_ne_scalar src中的每个元素逐个与标量value比较大小,如果src_i != value,则输出结果dst对应比特位为1,否则为0。
asc_not 执行矢量非运算。
asc_or 对源操作数src0和src1进行或(
asc_pack 将源操作数中的元素选取低8位(b16)、低16位(b32)、低32位(b64)写入目的操作数的低半部分或高半部分。
asc_pair_reduce_sum PairReduceSum: 相邻两个(奇偶)元素求和,结果写入dst。
asc_prelu 源操作数src0大于0的情况下直接将src0写入目的操作数dst,否则将src0 * src1的结果写入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_relu 逐元素执行ReLU运算。
asc_select 根据mask的比特位值,从源操作数src0、src1中选择元素,得到目的操作数dst。
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_sqrt 逐元素计算平方根。
asc_squeeze 将src中被mask选择的有效元素依次复制到dst,有效元素在dst上连续排列。
asc_sub 按元素执行减法运算。
asc_subc 按元素执行带借位的减法运算。
asc_truncate 将源操作数的浮点数元素截断到整数位,同时源操作数的数据类型保持不变,并支持多种舍入模式。
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_uint322uint8 将uint32_t类型转换为uint8_t类型。
asc_uint82half 将uint8_t类型转换为half类型。
asc_uint82uint16 将uint8_t类型转换为uint16_t类型。
asc_uint82uint32 将uint8_t类型转换为uint32_t类型。
asc_unpack 矢量解包操作。
asc_unsqueeze 根据mask进行解压缩,将生成的数据输出到dst。
asc_update_mask 根据value大小生成对应的掩码寄存器中的值。
asc_xor 根据mask对输入的src0、src1按元素异或(^)进行操作,将结果写入dst。