昇腾社区首页
中文
注册

支持的指令桩

以下是 mssanitizer工具支持的检测指令列表。对于内存检测和竞争检测功能而言,检测工具要注意指令对内存的操作方式和内容,此表格便以指令对内存的操作方式而进行分类介绍。

表1 Atlas A2训练系列产品指令列表

指令类型

说明

指令名称

搬运类指令

dma move类指令

  • 此类指令表示通过数据搬运单元进行整块搬运。
  • 涉及从源地址的读操作和对目的地址的写操作。

copy_ubuf_to_gm

copy_gm_to_ubuf

copy_ubuf_to_ubuf

move align类指令

  • 此类指令表示通过数据搬运单元进行整块搬运,在搬运过程中会对数据做一些对齐处理。
  • 涉及从源地址的读操作和对目的地址的写操作。

copy_gm_to_ubuf_align_b8

copy_gm_to_ubuf_align_b16

copy_gm_to_ubuf_align_b32

copy_ubuf_to_gm_align_b8

copy_ubuf_to_gm_align_b16

copy_ubuf_to_gm_align_b32

vector_dup 指令

仅涉及对目的地址的写操作。

vector_dup

load/store

通过标量的方式对GM或local memory读取或写入。

load

store

cube类搬运指令

  • 此类指令以分形矩阵为基本单元进行数据搬运。
  • 涉及从源地址的读操作和对目的地址的写操作。

load_gm_to_cbuf

load_gm_to_ca

load_gm_to_cb

load_cbuf_to_ca

load_cbuf_to_cb

load_image_to_cbuf

copy_gm_to_cbuf_multi_nd2nz

copy_cbuf_to_bt

set_l0a_2d

set_l0b_2d

set_l1_2d

create_ca_matrix

create_cb_matrix

create_cbuf_matrix

计算类指令

单目计算指令

  • 从源地址读取n个数据,经过一定运算得到新的n个数据,并写入到目的地址。
  • 此类指令涉及从一个源地址中读取数据,并向目的地址中写入数据。

vabs

vadds

vaxpy

vbitsort

vbrcb

vcmpvs

vconv

vcopy

vector_dup

vexp

vgather

vgatherb

vld_va_reg

vln

vlrelu

vmaxs

vmins

vmuls

vnot

vrec

vrelu

vrsqrt

vshl

vshr

vsqrt

vtranspose

双目计算指令

  • 从两个源地址分别读取n个数据,经过一定运算得到新的n个数据,并写入到目的地址。
  • 此类指令涉及从两个源地址中读取数据,并向目的地址中写入数据。

vadd

vaddrelu

vaddreluconv

vand

vbitsort

vcmp

vcmpv

vdiv

vmadd

vmaddrelu

vmax

vmin

vmla

vmrgsort4

vmul

vmulconv

vor

vreduce

vreducev2

vsel

vsub

vsubrelu

vsubreluconv

规约类计算指令

  • 从源地址读取n个数据,经过一定运算得到新的m个数据,并写入到目的地址。此类指令运算过程中可能出现多个数据得到一个数据的情况,因此源地址的数据量与目的地址的数据量可能会不同。
  • 此类指令涉及从一个源地址中读取数据,并向目的地址中写入数据。

vcadd

vcgadd

vcgmax

vcgmin

vcmax

vcmin

vcpadd

Cube类矩阵乘计算指令

此类指令从源地址读取两个矩阵数据,经过矩阵乘运算得到新的矩阵数据,并写入到目的地址。读取和写入数据时以分形矩阵为基本单元。

mad

同步类指令

核内同步类指令

单个AiCore 中,会有多条流水线并行处理不同的任务的情况,如搬运流水、向量运算流水、矩阵运算流水等。当不同流水需要访问同一片内存时,就需要保证访问顺序的正确性,此类指令的功能就是控制各流水之间的同步关系。

set_flag

wait_flag

hset_flag

hwait_flag

pipe_barrier

原子写设置指令

多核场景下,会有多个AiCore向同一块GM写入数据。此类指令可设置原子写的模式和数据类型,以支持各 AiCore原子的写入数据。

set_atomic_none

set_atomic_f32

set_atomic_f16

set_atomic_s16

set_atomic_s32

set_atomic_s8

set_atomic_bf16

set_atomic_add

set_atomic_max

set_atomic_max

核间同步类指令

多核场景下,会有多个AiCore访问同一块GM,需要保证访问顺序的正确性,此类指令的功能就是控制各AiCore之间的同步关系。

ffts_cross_core_sync

wait_flag_dev

表2 Atlas 推理系列产品指令列表

指令类型

说明

指令名称

搬运类指令

dma move类指令

  • 此类指令表示通过数据搬运单元进行整块搬运。
  • 涉及从源地址的读操作和对目的地址的写操作。

copy_cbuf_to_ubuf

copy_gm_to_cbuf

copy_gm_to_ubuf

copy_ubuf_to_cbuf

copy_ubuf_to_gm

copy_ubuf_to_ubuf

cube类搬运指令
  • 此类指令以分形矩阵为基本单元进行数据搬运。
  • 涉及从源地址的读操作和对目的地址的写操作。

load_cbuf_to_ca

load_cbuf_to_ca_s4

load_cbuf_to_cb

load_cbuf_to_cb_s4

load_gm_to_ca

load_gm_to_ca_s4

load_gm_to_cb

load_gm_to_cb_s4

load_gm_to_cbuf

load_gm_to_cbuf_s4

load_b2指令

  • 此类指令以2-bit型分形矩阵为基本单元进行数据搬运。
  • 涉及从源地址的读操作和对目的地址的写操作。

load_cbuf_to_cb_b2

winograd

  • 用于Winograd卷积运算的数据加载,先对源数据进行扩展,然后将结果写入到目的地址。
  • 涉及对目的地址的写操作。

load_cbuf_to_ca_winograd

load_cbuf_to_cb_winograd

vector_dup指令

仅涉及对目的地址的写操作。

vector_dup

vtranspose指令

  • 对源矩阵转置并写到目的地址。
  • 仅涉及对目的地址的写操作。

vtranspose

同步类指令

核内同步类指令

单个AiCore 中,会有多条流水线并行处理不同的任务的情况,如搬运流水、向量运算流水、矩阵运算流水等。当不同流水需要访问同一片内存时,就需要保证访问顺序的正确性,此类指令的功能就是控制各流水之间的同步关系。

set_flag

wait_flag

hset_flag

pipe_barrier

原子写设置指令

多核场景下,会有多个AiCore向同一块GM写入数据。此类指令可设置原子写的模式和数据类型,以支持各 AiCore原子的写入数据。

set_atomic_none

set_atomic_f32

set_atomic_f16

set_atomic_s16

核间同步类指令

多核场景下,会有多个AiCore访问同一块GM,需要保证访问顺序的正确性,此类指令的功能就是控制各AiCore之间的同步关系。

ffts_cross_core_sync

wait_flag_dev