Skip to content

asc_copy_l12ub

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:不支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:不支持

功能说明

将数据从L1 Buffer搬运到Unified Buffer中。

函数原型

  • 高维切分搬运

    C++
    __aicore__ inline void asc_copy_l12ub(__ubuf__ void* dst_addr, __cbuf__ void* src_addr, bool sub_blockid, uint16_t n_burst, uint16_t len_burst, uint16_t src_gap, uint16_t dst_gap)
    
  • 同步搬运

    C++
    __aicore__ inline void asc_copy_l12ub_sync(__ubuf__ void* dst_addr, __cbuf__ void* src_addr, bool sub_blockid, uint16_t n_burst, uint16_t len_burst, uint16_t src_gap, uint16_t dst_gap)
    

参数说明

表1 参数说明

参数名输入/输出描述
dst_addr输出目的操作数起始地址。
src_addr输入源操作数起始地址。
sub_blockid输入使用的子块ID。
n_burst输入待搬运的连续传输数据块个数。
len_burst输入待搬运的每个连续传输数据块的长度,单位为DataBlock(32字节)。
src_gap输入源操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。
单位为DataBlock(32字节)。
dst_gap输入目的操作数相邻连续数据块的间隔(前面一个数据块的尾与后面一个数据块的头的间隔)。
单位为DataBlock(32字节)。

返回值说明

流水类型

PIPE_MTE1

约束说明

  • 各存储单元的空间大小和对齐要求请参考存储单元说明
  • 操作数地址重叠约束请参考通用地址重叠约束
  • 由于此接口实现了Cube核与Vector核间的数据搬运,所以如果核函数调用了该接口,则不能使用__cube__或__vector__的执行空间修饰符,否则会导致执行失败。

调用示例

C++
constexpr uint16_t n_burst = 1;
constexpr uint16_t len_burst = 1;
constexpr uint16_t src_gap = 0;
constexpr uint16_t dst_gap = 1;
__cbuf__ half src[256];
__ubuf__ half dst[256];
asc_copy_l12ub(dst, src, false, n_burst, len_burst, src_gap, dst_gap);

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