news 2026/7/17 8:29:58

CANN/asc-devkit GetTensorC接口文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/asc-devkit GetTensorC接口文档

GetTensorC

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

产品支持情况

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

功能说明

Iterate后,获取一块或者两块C矩阵片,可以直接输出到GM tensor中,也可以输出到UB(VECIN)tensor中。当MatmulConfig参数中的ScheduleType取值为ScheduleType::INNER_PRODUCT时,获取一块C矩阵片;当MatmulConfig参数中的ScheduleType取值为ScheduleType::OUTER_PRODUCT时,获取两块C矩阵片。

该接口和Iterate接口配合使用,用于在调用Iterate完成迭代计算后,根据MatmulConfig参数中的ScheduleType取值获取一块或两块baseM * baseN大小的矩阵分片。

迭代获取C矩阵分片的过程分为同步和异步两种模式:

  • 同步:执行完一次Iterate后执行一次GetTensorC,需要同步等待C矩阵分片获取完成。
  • 异步:调用Iterate后,无需立即调用GetTensorC同步等待,可以先执行其他逻辑,待需要获取结果时再调用GetTensorC。异步方式可以减少同步等待,提高并行度,开发者对计算性能要求较高时,可以选用该方式。

函数原型

  • 获取C矩阵,输出至UB(VECIN)

    template <bool sync = true> __aicore__ inline void GetTensorC(const LocalTensor<DstT>& co2Local, uint8_t enAtomic = 0, bool enSequentialWrite = false)
    • 支持同步模式
    • 支持异步模式
  • 获取C矩阵,输出至GM

    template <bool sync = true> __aicore__ inline void GetTensorC(const GlobalTensor<DstT>& gm, uint8_t enAtomic = 0, bool enSequentialWrite = false)
    • 支持同步模式
    • 支持异步模式
  • 获取C矩阵,同时输出至GM和VECIN

    template <bool sync = true> __aicore__ inline void GetTensorC(const GlobalTensor<DstT>& gm, const LocalTensor<DstT>& co2Local, uint8_t enAtomic = 0, bool enSequentialWrite = false)
    • 支持同步模式
    • 支持异步模式
    • 纯Cube模式(只有矩阵计算)模式暂不支持该接口
    • Atlas 200I/500 A2 推理产品暂不支持同时输出至GM和VECIN
  • 获取异步场景用于缓存结果的Workspace上的C矩阵,后续使用过程由开发者自行控制

    C矩阵输出到VECIN时,分配给VECIN的Unified Buffer的大小会影响Matmul计算的力度,分配给VECIN的大小过小时,无法充分利用硬件算力。提供该接口支持返回缓存在Workspace上的C矩阵,由开发者自行控制后续使用过程。

    注意,在初始化时,C矩阵的逻辑位置应设置为TPosition::VECIN,调用该接口获取缓存的C矩阵后,自行拷贝到Unified Buffer。

    template <bool sync = true> __aicore__ inline GlobalTensor<DstT> GetTensorC(uint8_t enAtomic = 0, bool enSequentialWrite = false)
    • 支持异步模式

以下接口中的doPad、height、width、srcGap、dstGap参数待废弃,使用过程中无需传入,保持默认值即可;上文介绍的输出至VECIN的原型实际为不传入默认值的函数原型。

template <bool sync = true, bool doPad = false> __aicore__ inline void GetTensorC(const LocalTensor<DstT>& c, uint8_t enAtomic = 0, bool enSequentialWrite = false, uint32_t height = 0, uint32_t width = 0, uint32_t srcGap = 0, uint32_t dstGap = 0)

参数说明

表1模板参数说明

参数名描述
sync设置同步或者异步模式:同步模式设置为true;异步模式设置为false。

Ascend 950PR/Ascend 950DT支持异步模式。

Atlas A3 训练系列产品/Atlas A3 推理系列产品支持异步模式。

Atlas A2 训练系列产品/Atlas A2 推理系列产品支持异步模式。

Atlas 推理系列产品AI Core不支持异步模式。

Atlas 200I/500 A2 推理产品不支持异步模式。

Kirin X90支持异步模式。

表2接口参数说明

参数名输入/输出描述
c/co2Local输出取出C矩阵到UB(VECIN)。不同型号支持的数据类型请参考支持的数据类型。不同型号支持的数据格式请参考支持的数据格式。
gm输出取出C矩阵到GM,数据格式可以为ND或NZ。不同型号支持的数据类型请参考支持的数据类型。
enAtomic输入是否开启Atomic操作,默认值为0。

参数取值:

0:不开启Atomic操作

1:开启AtomicAdd累加操作

2:开启AtomicMax求最大值操作

3:开启AtomicMin求最小值操作

对于Atlas 推理系列产品AI Core,只有输出位置是GM才支持开启Atomic操作。

对于Atlas 200I/500 A2 推理产品,只有输出位置是GM才支持开启Atomic操作。
enSequentialWrite输入是否开启连续写模式(连续写,写入[baseM, baseN];非连续写,写入[singleCoreM, singleCoreN]中对应的位置),默认值false(非连续写模式)。

注意:非连续写模式,内部会按照迭代顺序算好偏移,开发者不需要关注;如果开发者需要决定排布顺序,可以选择连续写模式,自行按照设定的偏移进行搬运操作。

对于Atlas 200I/500 A2 推理产品,只支持非连续写模式。

图1非连续写模式示意图
![](https://raw.gitcode.com/cann/asc-devkit/raw/1680a8274bf627fb844cc7e09f9e1a9e99e24425/docs/zh/api/figures/非连续写模式示意图.png "非连续写模式示意图"?utm_source=gitcode_repo_files)

图2连续写模式示意图
![](https://raw.gitcode.com/cann/asc-devkit/raw/1680a8274bf627fb844cc7e09f9e1a9e99e24425/docs/zh/api/figures/连续写模式示意图.png "连续写模式示意图"?utm_source=gitcode_repo_files)

返回值说明

约束说明

  • 传入的C矩阵地址空间大小需要保证不小于baseM * baseN。

  • 异步场景时,需要使用一块临时空间来缓存Iterate计算结果,调用GetTensorC时会在该临时空间中获取C的矩阵分片。临时空间通过SetWorkspace接口进行设置。SetWorkspace接口需要在Iterate接口之前调用。

  • 当开启MixDualMaster(双主模式)场景时,即模板参数enableMixDualMaster设置为true,不支持使用该接口。

  • 支持的数据类型

    Ascend 950PR/Ascend 950DT,支持的数据类型为:half、float、bfloat16_t、int32_t、int8_t、fp8_e4m3fn_t、hifloat8_t。

    Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持的数据类型为:half、float、bfloat16_t、int32_t、int8_t。

    Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持的数据类型为:half、float、bfloat16_t、int32_t、int8_t。

    Atlas 推理系列产品AI Core,支持的数据类型为:half、float、int8_t、int32_t。

    Atlas 200I/500 A2 推理产品,支持的数据类型为:half、float、bfloat16_t、int32_t。

    Kirin X90,支持的数据类型为:half、int8_t、int32_t。

    Kirin 9030,支持的数据类型为:half。

  • 支持的数据格式

    Ascend 950PR/Ascend 950DT,支持的数据类型为:ND、NZ。

    Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持的数据类型为:ND、NZ。

    Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持的数据类型为:ND、NZ。

    Atlas 推理系列产品AI Core,支持的数据类型为:NZ。

    Atlas 200I/500 A2 推理产品,支持的数据类型为:ND、NZ。

调用示例

  • 获取C矩阵,输出至UB(VECIN)

    // 同步模式样例 while (mm.Iterate()) { mm.GetTensorC(ubCmatrix); } // 异步模式样例 mm.template Iterate<false>(); // 其他操作 for (int i = 0; i < singleM / baseM * singleN / baseN; ++i) { mm.template GetTensorC<false>(ubCmatrix); // 其他操作 }
  • 获取C矩阵,输出至GM,同步模式样例

    while (mm.Iterate()) { mm.GetTensorC(gm); }
  • 获取C矩阵,同时输出至GM和VECIN,同步模式样例

    while (mm.Iterate()) { mm.GetTensorC(gm, ubCmatrix); }
  • 获取API接口返回的GM上的C矩阵,手动拷贝至UB,异步模式样例

    // BaseM * BaseN = 128 *256 mm.SetTensorA(gmA); mm.SetTensorB(gmB); mm.SetTail(singleM, singleN, singleK); mm.template Iterate<false>(); // 其他操作 for (int i = 0; i < singleM / baseM * singleN / baseN; ++i) { // 获取每次计算的BaseM*BaseN的数据128*256 GlobalTensor<T> global = mm.template GetTensorC<false>(); for (int j = 0; j < 4; ++j) { LocalTensor local = que.AllocTensor<half>(); // 分配64*128大小的UB空间 DataCopy(local, global[64 * 128 * i], 64 * 128); // 将GM的数据拷贝进UB中,进行后续的Vector操作 // 其他Vector操作 } }

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 8:29:52

uos-uwsgi-exporter核心组件剖析:理解指标收集器的工作原理

uos-uwsgi-exporter核心组件剖析&#xff1a;理解指标收集器的工作原理 【免费下载链接】uos-uwsgi-exporter A Prometheus exporter for uwsgi. 项目地址: https://gitcode.com/openeuler/uos-uwsgi-exporter 前往项目官网免费下载&#xff1a;https://ar.openeuler.or…

作者头像 李华
网站建设 2026/7/17 8:29:45

CANN/Ascend C Matmul模板参数

Matmul模板参数 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/7/17 8:29:24

终极指南:如何用QtScrcpy在5分钟内实现Android投屏控制

终极指南&#xff1a;如何用QtScrcpy在5分钟内实现Android投屏控制 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 你是否曾想过在大屏幕上流畅操作手机应用&#xff1f;或者希望用…

作者头像 李华
网站建设 2026/7/17 8:28:17

3分钟掌握网易云音乐NCM解密:ncmdump让你的音乐自由播放

3分钟掌握网易云音乐NCM解密&#xff1a;ncmdump让你的音乐自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经为网易云音乐下载的NCM格式文件无法在其他设备上播放而烦恼&#xff1f;这些加密的音乐文件只能在网易云…

作者头像 李华
网站建设 2026/7/17 8:27:14

LLM Agent规划能力构建:从任务分解到动态调整的五大核心维度

1. 项目概述&#xff1a;为什么“规划”是LLM Agent的命门&#xff1f; 最近和不少做LLM应用的朋友聊天&#xff0c;发现一个挺有意思的现象&#xff1a;大家一窝蜂地都在搞“Agent”&#xff0c;但聊到深处&#xff0c;十个里有八个会卡在“规划”这个环节上。一个Agent&#…

作者头像 李华
网站建设 2026/7/17 8:24:36

WSL2图形化界面配置指南:使用VcXsrv与xfce4

1. 为什么要在WSL2上使用图形化界面&#xff1f; Windows Subsystem for Linux 2&#xff08;WSL2&#xff09;作为微软推出的Linux子系统&#xff0c;已经成为开发者日常工作的利器。但默认情况下&#xff0c;WSL2只提供命令行界面&#xff0c;这对于需要图形界面&#xff08;…

作者头像 李华