news 2026/7/17 14:50:20

cann/asc-devkit TQue分配Tensor函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cann/asc-devkit TQue分配Tensor函数

AllocTensor

【免费下载链接】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:支持

功能说明

头文件路径为:"basic_api/kernel_tpipe.h"

从Que中分配Tensor,Tensor所占大小为InitBuffer时设置的每块内存长度。

函数原型

  • non-inplace接口:构造新的Tensor作为内存管理的对象

    template <typename T> __aicore__ inline LocalTensor<T> AllocTensor()
  • inplace接口:直接使用传入的Tensor作为内存管理的对象,可以减少Tensor反复创建的开销,具体使用指导可参考Tensor原地操作。

    template <typename T> __aicore__ inline void AllocTensor(LocalTensor<T>& tensor)

参数说明

表1模板参数说明

参数名

说明

T

Tensor的数据类型,支持的类型请见LocalTensor相关描述。

表2参数说明

参数名称

输入/输出

含义

tensor

输入

inplace接口需要传入LocalTensor作为内存管理的对象。

约束说明

  • 同一个TPosition上的所有Queue,连续调用AllocTensor接口申请的Tensor数量,根据AI处理器型号的不同,有数量约束。申请Buffer时,需要满足该约束。
    • Ascend 950PR/Ascend 950DT不超过8个。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品不超过8个。
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品不超过8个。
    • Atlas 200I/500 A2 推理产品不超过8个。
    • Atlas 推理系列产品AI Core不超过8个。
    • Atlas 推理系列产品Vector Core不超过8个。
    • Atlas 训练系列产品不超过4个。
    • Kirin X90不超过8个。
    • Kirin 9030不超过8个。
  • non-inplace接口分配的Tensor内容可能包含随机值。
  • non-inplace接口,需要将TQueBind的depth模板参数设置为非零值;inplace接口,需要将TQueBind的depth模板参数设置为0。

返回值说明

non-inplace接口返回值为LocalTensor对象,inplace接口没有返回值。

调用示例

  • 示例一

    // 使用AllocTensor分配Tensor AscendC::TPipe pipe; AscendC::TQue<AscendC::TPosition::VECOUT, 2> que; int num = 2; int len = 1024; pipe.InitBuffer(que, num, len); // InitBuffer分配内存块数为2,每块大小为1024Bytes AscendC::LocalTensor<half> tensor1 = que.AllocTensor<half>(); // AllocTensor分配Tensor长度为1024Bytes
  • 示例二

    // 连续使用AllocTensor的限制场景举例如下: AscendC::TQue<AscendC::TPosition::VECIN, 1> que0; AscendC::TQue<AscendC::TPosition::VECIN, 1> que1; AscendC::TQue<AscendC::TPosition::VECIN, 1> que2; AscendC::TQue<AscendC::TPosition::VECIN, 1> que3; AscendC::TQue<AscendC::TPosition::VECIN, 1> que4; AscendC::TQue<AscendC::TPosition::VECIN, 1> que5; // 不建议: // 比如,算子有6个输入,需要申请6块buffer // 通过6个队列为其申请内存,分别为que0~que5,每个que分配1块,申请VECIN TPosition上的buffer总数为6 // 假设,同一个TPosition上连续Alloc的Buffer数量限制为4,超出该限制后,使用AllocTensor/FreeTensor会出现分配资源失败 // 在NPU上可能体现为卡死等异常行为,在CPU Debug场景会出现报错提示 pipe.InitBuffer(que0, 1, len); pipe.InitBuffer(que1, 1, len); pipe.InitBuffer(que2, 1, len); pipe.InitBuffer(que3, 1, len); pipe.InitBuffer(que4, 1, len); pipe.InitBuffer(que5, 1, len); AscendC::LocalTensor<T> local1 = que0.AllocTensor<T>(); AscendC::LocalTensor<T> local2 = que1.AllocTensor<T>(); AscendC::LocalTensor<T> local3 = que2.AllocTensor<T>(); AscendC::LocalTensor<T> local4 = que3.AllocTensor<T>(); // 第5个AllocTensor会出现资源分配失败,同一个TPosition上同时Alloc出来的Tensor数量超出了4个的限制 AscendC::LocalTensor<T> local5 = que4.AllocTensor<T>(); // 此时建议通过以下方法解决: // 如果确实有多块buffer使用,可以将多个buffer合并到一块buffer,通过偏移使用 pipe.InitBuffer(que0, 1, len * 3); pipe.InitBuffer(que1, 1, len * 3); /* * 分配出3块内存大小的LocalTensor, local1的地址为que0中buffer的起始地址, * local2的地址为local1的地址偏移len后的地址,local3的地址为local1的地址偏移 * len * 2的地址 */ int32_t offset1 = len; int32_t offset2 = len * 2; AscendC::LocalTensor<T> local1 = que0.AllocTensor<T>(); AscendC::LocalTensor<T> local2 = local1[offset1]; AscendC::LocalTensor<T> local3 = local1[offset2];
  • 示例三:inplace接口

    AscendC::TPipe pipe; AscendC::TQue<AscendC::TPosition::VECIN, 0> que; int num = 2; int len = 1024; pipe.InitBuffer(que, num, len); // InitBuffer分配内存块数为2,每块大小为1024Bytes AscendC::LocalTensor<half> tensor1; que.AllocTensor<half>(tensor1); // AllocTensor分配Tensor长度为1024Bytes

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

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

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

Akamai Cloud Manager完全指南:从入门到精通Linode服务管理

Akamai Cloud Manager完全指南&#xff1a;从入门到精通Linode服务管理 【免费下载链接】manager The Akamai Cloud Manager is an open-source, single-page application serving as the official UI for interacting with the Linode API. It is trusted by hundreds of thou…

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

终极指南:如何用Linkinator快速检测和修复网站死链

终极指南&#xff1a;如何用Linkinator快速检测和修复网站死链 【免费下载链接】linkinator Broken link checker that crawls websites and validates links. Find broken links, dead links, and invalid URLs in websites, documentation, and local files. Perfect for SEO…

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

CANN/Ascend C SIMT-API FP8转换函数

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

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

贾子的相变:当历史的筛选机制遇见认知的临界点

核心内容摘要该文章于2026年7月17日14:25:04发布&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;同时被收录进《Kucius Theory》《AI&AGI》两大专栏&#xff0c;核心内容可从四大维度完整梳理&#xff1a;核心核心主旨文章提出历史记忆并非随机发生&#xff0c;而是通过…

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

BetterDB Monitor Webhook配置:实时通知与自动化工作流集成

BetterDB Monitor Webhook配置&#xff1a;实时通知与自动化工作流集成 【免费下载链接】monitor Real-time monitoring, slowlog analysis, and audit trails for Valkey and Redis 项目地址: https://gitcode.com/gh_mirrors/monitor53/monitor BetterDB Monitor是一款…

作者头像 李华