copy |
在 Vector Core 的不同内部存储单元(VECIN, VECCALC, VECOUT)之间进行数据搬运。 |
cross_core_set_flag |
面向分离架构的核间同步控制接口。 该接口和cross_core_wait_flag接口配合使用。使用时需传入核间同步的标记ID(flagId),每个ID对应一个初始值为0的计数器。执行cross_core_set_flag后ID对应的计数器增加1;执行cross_core_wait_flag时如果对应的计数器数值为0则阻塞不执行;如果对应的计数器大于0,则计数器减一,同时后续指令开始执行。 同步控制分为以下几种模式: - 模式0:AI Core核间的同步控制。对于AIC场景,同步所有的AIC核,直到所有的AIC核都执行到cross_core_set_flag时,cross_core_wait_flag后续的指令才会执行;对于AIV场景,同步所有的AIV核,直到所有的AIV核都执行到cross_core_set_flag时,cross_core_wait_flag后续的指令才会执行。 - 模式1:AI Core内部,AIV核之间的同步控制。如果两个AIV核都运行了cross_core_set_flag,cross_core_wait_flag后续的指令才会执行。 - 模式2:AI Core内部,AIC与AIV之间的同步控制。在AIC核执行cross_core_set_flag之后,两个AIV上cross_core_wait_flag后续的指令才会继续执行;两个AIV都执行cross_core_set_flag后,AIC上cross_core_wait_flag后续的指令才能执行。 |
cross_core_wait_flag |
面向分离架构的核间同步控制接口。该接口和cross_core_set_flag接口配合使用。具体使用方法请参考cross_core_set_flag。 |
data_cache_clean_and_invalid |
用来刷新Cache,保证Cache与Global Memory之间的数据一致性。 |
data_cache_preload |
从源地址所在的特定GM地址预加载数据到data cache中。 |
data_copy |
DataCopy系列接口提供全面的数据搬运功能,支持多种数据搬运场景,并可在搬运过程中实现随路格式转换和量化激活等操作。 该接口支持Local Memory与Global Memory之间的数据搬运,以及Local Memory内部的数据搬运。 |
data_copy_pad |
DataCopyPad接口提供数据非对齐搬运的功能,其中从Global Memory搬运数据至Local Memory时,可以根据开发者的需要自行填充数据。 |
data_sync_barrier |
用于阻塞后续的指令执行,直到所有之前的内存访问指令(需要等待的内存位置可通过参数控制)执行结束。 |
dump_acc_chk_point |
基于算子工程开发的算子,可以使用该接口 Dump 指定 Tensor 的内容。 同时支持打印自定义的附加信息(仅支持 uint32_t 类型的信息), 例如用于打印当前执行位置、行号等调试信息。 与 dump_tensor 不同的是,该接口支持指定 Tensor 的偏移位置进行 Dump,适用于精细化调试和问题定位。 |
dump_tensor |
基于算子工程开发的算子,可以使用该接口Dump指定Tensor的内容。 |
duplicate |
将一个变量或立即数复制多次并填充到向量中。 |
fixpipe |
矩阵计算完成后,对结果进行处理,例如对计算结果进行量化操作,并把数据从CO1搬迁到Global Memory中。 |
get_block_idx |
获取当前核的index,用于代码内部的多核逻辑控制及多核偏移量计算等。 |
get_block_num |
获取当前任务配置的核数,用于代码内部的多核逻辑控制等。 |
get_cmp_mask |
用于获取compare(结果存入寄存器)指令的比较结果。 |
get_data_block_size_in_bytes |
获取当前芯片版本一个datablock的大小,单位为byte。 开发者可以根据datablock的大小来计算API指令中待传入的repeatTime、 DataBlock Stride、Repeat Stride等参数值。 |
get_hccl_context |
获取指定Index通信域的context(消息区)地址。 |
get_icache_preload_status |
获取ICACHE的PreLoad的状态。 |
get_program_counter |
获取程序计数器的指针,程序计数器用于记录当前程序执行的位置。 |
get_sub_block_idx |
获取 AI Core 上 Vector 核的 ID。 |
get_system_cycle |
获取当前系统cycle数,若换算成时间需要按照50MHz的频率,时间单位为us,换算公式为:time = (cycle数/50) us 。 |
get_sys_workspace |
获取系统workspace指针。 |
get_task_ratio |
分离模式下,获取一个AI Core上Cube Core(AIC)或者Vector Core(AIV)的数量与AI Core数量的比例。耦合模式下,固定返回1。 |
ib_set |
当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。 调用ib_set设置某一个核的标志位,与ib_wait成对出现配合使用,表示核之间的同步等待指令,等待某一个核操作完成。 |
ib_wait |
当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。 ib_wait与ib_set成对出现配合使用,表示核之间的同步等待指令,等待某一个核操作完成。 |
icache_preload |
从指令所在DDR地址预加载指令到ICache中。 |
load_data |
源操作数/目的操作数的数据类型为uint8_t/int8_t时,分形矩阵大小在A1/A2上为16*32, 在B1/B2上为32*16。 源操作数/目的操作数的数据类型为uint16_t/int16_t/half/bfloat16_t时,分形矩阵在A1/B1/A2/B2上的大小为16*16。 源操作数/目的操作数的数据类型为uint32_t/int32_t/float时,分形矩阵大小在A1/A2上为16*8, 在B1/B2上为8*16。 支持如下数据通路: GM->A1; GM->B1; GM->A2; GM->B2; A1->A2; B1->B2。 |
load_data_with_transpose |
该接口实现带转置的2D格式数据从A1/B1到A2/B2的加载。 |
load_image_to_local |
将图像数据从GM搬运到A1/B1。 搬运过程中可以完成图像预处理操作:包括图像翻转,改变图像尺寸(抠图,裁边,缩放,伸展),以及色域转换,类型转换等。 图像预处理的相关参数通过set_aipp_functions进行配置。 |
metrics_prof_start |
用于设置性能数据采集信号启动,和asc.metrics_prof_stop()配合使用。 使用msProf工具进行算子上板调优时,可在kernel侧代码段前后分别调用asc.metrics_prof_start()和asc.metrics_prof_stop()来指定需要调优的代码段范围。 |
metrics_prof_stop |
设置性能数据采集信号停止,和asc.metrics_prof_start()配合使用。 使用msProf工具进行算子上板调优时,可在kernel侧代码段前后分别调用asc.metrics_prof_start()和asc.metrics_prof_stop()来指定需要调优的代码段范围。 |
mmad |
完成矩阵乘加(C += A * B)操作。矩阵ABC分别为A2/B2/CO1中的数据。 ABC矩阵的数据排布格式分别为ZZ,ZN,NZ。 |
mrg_sort |
将已经排好序的多个队列合并成一条队列,结果按照指定顺序排序。 |
mrg_sort4 |
将已经排好序的最多4条Region Proposals队列,排列并合并成1条队列,结果按照score域由大到小排序。 |
notify_next_block |
多核同步接口,通过写入 Global Memory 中的标志位,通知下一个 AI Core 当前核的操作已完成。 |
pipe_barrier |
阻塞相同流水,具有数据依赖的相同流水之间需要插入此同步。 |
printf |
该接口提供CPU域/NPU域调试场景下的格式化输出功能。 在算子kernel侧实现代码中需要输出日志信息的地方调用printf接口打印相关内容。 |
proposal_concat |
将连续元素合入Region Proposal内对应位置,每次迭代会将16个连续元素合入到16个Region Proposals的对应位置里。 |
proposal_extract |
与proposal_concat功能相反,从Region Proposals内将相应位置的单个元素抽取后重排,每次迭代处理16个Region Proposals,抽取16个元素后连续排列。 |
reset_mask |
恢复mask的值为默认值(全1),表示矢量计算中每次迭代内的所有元素都将参与运算。 |
rp_sort16 |
根据Region Proposals中的score域对其进行排序(score大的排前面),每次排16个Region Proposals。 |
scatter |
给定一个连续的输入张量和一个目的地址偏移张量,scatter指令根据偏移地址生成新的结果张量后将输入张量分散到结果张量中。 将源操作数src中的元素按照指定的位置(由dst_offset和dst_base共同作用)分散到目的操作数dst中。 |
select |
给定两个源操作数src0和src1,根据sel_mask(用于选择的Mask掩码)的比特位值选取元素,得到目的操作数dst。 |
set_aipp_functions |
设置图片预处理(AIPP,AI core pre-process)相关参数。和load_image_to_local(ISASI)接口配合使用。 设置后,调用load_image_to_local(ISASI)接口可在搬运过程中完成图像预处理操作。 |
set_atomic_add |
调用该接口后,可对后续的从VECOUT/L0C/L1到GM的数据传输开启原子累加, 通过dtype参数设定不同类型的数据。 |
set_atomic_max |
原子操作函数,设置后续从VECOUT传输到GM的数据是否执行原子比较: 将待拷贝的内容和GM已有内容进行比较,将最大值写入GM。 可通过设置模板参数来设定不同的数据类型。 |
set_atomic_min |
原子操作函数,设置后续从VECOUT传输到GM的数据是否执行原子比较, 将待拷贝的内容和GM已有内容进行比较,将最小值写入GM。 可通过设置模板参数来设定不同的数据类型。 |
set_atomic_none |
清空原子操作的状态。 |
set_atomic_type |
通过设置模板参数来设定原子操作不同的数据类型。 |
set_cmp_mask |
为Select不传入mask参数的接口设置比较寄存器。 |
set_deq_scale |
设置DEQSCALE寄存器的值。 |
set_fix_pipe_pre_quant_flag |
DataCopy(CO1->GM、CO1->A1)过程中进行随路量化时,通过调用该接口设置量化流程中标量量化参数。 |
set_hf32_mode |
调用该接口后,可设置 Mmad 计算是否开启 HF32 模式。 开启 HF32 模式后,L0A/L0B 中的 FP32 数据在参与矩阵乘法计算之前将被舍入为 HF32 精度。 |
set_hf32_trans_mode |
调用该接口后,可设置 Mmad 的 HF32 取整模式,仅在 HF32 模式开启时有效。 在 HF32 模式下,将按照给定模式对 FP32 数据进行舍入。 |
set_flag |
同一核内不同流水线之间的同步指令,具有数据依赖的不同流水指令之间需要插此同步。 |
set_hccl_context |
设置通算融合算子每个通信域对应的context(消息区)地址。 |
set_load_data_boundary |
设置 load_3d 时 A1/B1 边界值。 如果 load_3d 指令在处理源操作数时,源操作数在 A1/B1 上的地址超出设置的边界,则会从 A1/B1 起始地址开始读取数据。 |
set_load_data_padding_value |
用于调用 load_3d_v1接口/load_3d_v2 接口时设置 Pad 填充的数值。 load_3d_v1/load_3d_v2 的模板参数 isSetPadding 设置为 true 时,用户需要通过本接口设置 Pad 填充的数值,设置为 false 时,本接口设置的填充值不生效。 |
set_load_data_repeat |
用于设置 load_3d_v2 接口的 repeat 参数。设置 repeat 参数后,可以通过调用一次 load_3d_v2 接口完成多个迭代的数据搬运。 |
set_mask_count |
设置掩码模式为 Counter 模式。在该模式下, 矢量计算时不需要开发者显式指定迭代次数和处理非对齐尾块,只需调用 SetMaskCount 即可自动推断。 |
set_mask_norm |
设置掩码模式为 Normal 模式,这是掩码操作的默认模式。 |
set_mm_layout_transform |
调用该接口后,可设置 Mmad 的 M/N 方向优先顺序, 控制矩阵乘加计算时先按 N 再按 M 方向还是先按 M 再按 N 方向。 |
set_pad_value |
设置asc.data_copy_pad需要填充的数值。支持的通路如下:GM->VECIN/GM->VECOUT填充值。 |
set_vector_mask |
用于在矢量计算时设置mask。使用前需要先调用 set_mask_count/set_mask_norm 设置 mask 模式。 在不同模式下,mask的含义不同: |
sort |
排序函数,按照数值大小进行降序排序。 |
sort32 |
排序函数,一次迭代可以完成32个数的排序。 |
sync_all |
当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。 目前多核同步分为硬同步和软同步,硬件同步是利用硬件自带的全核同步指令由硬件保证多核同步,软件同步是使用软件算法模拟实现。 |
transpose |
用于实现16 * 16的二维矩阵数据块转置或者[N,C,H,W]与[N,H,W,C]数据格式互相转换。 |
trans_data_to_5hd |
数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式,也可用于二维矩阵数据块的转置。 相比于Transpose接口,本接口单次repeat内可处理512Byte的数据(16个datablock), 支持不同shape的矩阵转置,还可以支持多次repeat操作。 |
trap |
在Kernel侧调用,NPU模式下会中断AI Core的运行,CPU模式下等同于assert。可用于Kernel侧异常场景的调试。 |
wait_flag |
同一核内不同流水线之间的同步指令,具有数据依赖的不同流水指令之间需要插此同步。 |
wait_pre_block |
多核同步接口,通过读取 Global Memory 中的标志位,等待上一个 AI Core 完成操作。 |