news 2026/5/9 22:08:29

CANN/pto-isa数据搬运优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/pto-isa数据搬运优化

数据搬运优化

【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa

乒乓双缓冲

原理

使用两个 UB Tile 交替工作,将 TLOAD(MTE2)和 TSTORE(MTE3)重叠:

时间 → MTE2: [TLOAD ping] [TLOAD pong] [TLOAD ping] ... MTE3: [TSTORE ping] [TSTORE pong] ... ↑ 无重叠 ↑───── 重叠区 ──────↑

实现模式

TileData pingTile(ROWS, COLS); TileData pongTile(ROWS, COLS); TASSIGN(pingTile, 0x0); TASSIGN(pongTile, TILE_UB_BYTES); // 方式 1:使用内置 ping-pong(推荐) comm::TPUT(dstG, srcG, pingTile, pongTile); comm::TGET(dstG, srcG, pingTile, pongTile); // 方式 2:手动 ping-pong(更灵活) for (int i = 0; i < num_chunks; i++) { bool use_ping = (i % 2 == 0); TileData &curTile = use_ping ? pingTile : pongTile; event_t curEv = use_ping ? EVENT_ID0 : EVENT_ID1; if (i > 0) { TileData &prevTile = use_ping ? pongTile : pingTile; event_t prevEv = use_ping ? EVENT_ID1 : EVENT_ID0; wait_flag(PIPE_MTE2, PIPE_MTE3, prevEv); TSTORE_IMPL<...>(prevDst, prevTile); set_flag(PIPE_MTE3, PIPE_MTE2, prevEv); wait_flag(PIPE_MTE3, PIPE_MTE2, prevEv); } TLOAD(curTile, srcG_i); set_flag(PIPE_MTE2, PIPE_MTE3, curEv); } // 刷新最后一个 tile

何时使用乒乓

场景建议
大量小块传输(多次 TLOAD/TSTORE)强烈推荐
单次大块传输不需要(内置指令已自动分块)
UB 空间紧张使用单缓冲
传输量 > 2 × Tile 大小推荐

内置 vs 手动乒乓

  • 内置(TPUT/TGET 的 ping-pong 重载):简单场景,自动处理流水线同步
  • 手动:需要在 TLOAD/TSTORE 之间插入自定义逻辑(如 AtomicAdd 选择)

Tile 大小选择

考虑因素影响
UB 容量Tile 不能超过 UB 大小(典型 ~192KB)
传输效率大 Tile:更少的传输次数,更高效率
重叠粒度小 Tile:更早开始通信
对齐32B 对齐(行方向)
乒乓需要 2× Tile 空间

推荐基线(half 类型):

UB 约 192KB 乒乓模式需要 2 × Tile 单 Tile ≤ 96KB 128 × 256 × 2B = 64KB → 安全,乒乓后 128KB 64 × 512 × 2B = 64KB → 安全 256 × 256 × 2B = 128KB → 单缓冲可用,乒乓危险

数据对齐

// Tile 列数需要 32B 对齐 constexpr int alignedCols = ((cols * sizeof(T) + 31) / 32) * (32 / sizeof(T)); // Tile 间间隔向上对齐到 1024B constexpr size_t TILE_UB_BYTES = ((M * N * sizeof(T) + 1023) / 1024) * 1024;

GM 数据布局

通信数据在 GM 上的布局影响传输效率:

  • 连续布局:最佳,TPUT/TGET 一次传输完成
  • 带步长布局:自动分块按行传输,有额外开销
  • 异步传输:必须一维连续(TPUT_ASYNC/TGET_ASYNC 的约束)

【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址: https://gitcode.com/cann/pto-isa

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

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

Godot运行时控制台:实时调试与游戏状态交互的瑞士军刀

1. 项目概述&#xff1a;一个为Godot游戏引擎量身打造的开发者控制台 如果你正在用Godot引擎开发游戏&#xff0c;尤其是在调试阶段&#xff0c;你肯定遇到过这样的场景&#xff1a;游戏运行时&#xff0c;你想快速修改一个角色的移动速度&#xff0c;或者想立刻查看当前场景中…

作者头像 李华
网站建设 2026/5/9 22:02:41

CANN/hixl CacheDesc类文档

CacheDesc 【免费下载链接】hixl HIXL&#xff08;Huawei Xfer Library&#xff09;是一个灵活、高效的昇腾单边通信库&#xff0c;面向集群场景提供简单、可靠、高效的点对点数据传输能力。 项目地址: https://gitcode.com/cann/hixl 产品支持情况 产品是否支持Ascend…

作者头像 李华
网站建设 2026/5/9 22:02:40

CANN/opbase SetData函数文档

SetData 【免费下载链接】opbase 本项目是CANN算子库的基础框架库&#xff0c;为算子提供公共依赖文件和基础调度能力。 项目地址: https://gitcode.com/cann/opbase 功能说明 针对通过AllocHostTensor申请得到的host侧tensor&#xff0c;设置指定位置的数据。 函数原…

作者头像 李华
网站建设 2026/5/9 21:56:55

基于3D骨架与GCN的神经退行性疾病步态AI诊断技术解析

1. 项目概述&#xff1a;当AI“读懂”你的步伐在神经退行性疾病的漫长诊疗历程中&#xff0c;医生们一直在寻找更客观、更早期、更敏感的评估工具。传统的诊断&#xff0c;很大程度上依赖于医生的经验观察和患者的主观描述&#xff0c;比如“走路是不是比以前慢了&#xff1f;”…

作者头像 李华
网站建设 2026/5/9 21:56:20

AI编程助手试用机制解析:从环境重置到授权验证的技术实践

1. 项目概述&#xff1a;当AI编程助手遇上“试用”难题如果你是一名开发者&#xff0c;最近肯定没少听说Cursor这个名字。它已经不是那个简单的代码编辑器了&#xff0c;而是集成了强大AI能力的编程伙伴&#xff0c;尤其是其Pro版本&#xff0c;能提供更长的上下文、更快的响应…

作者头像 李华
网站建设 2026/5/9 21:56:19

CANN/ops-nn LogSoftmax算子文档

aclnnLogSoftmax 【免费下载链接】ops-nn 本项目是CANN提供的神经网络类计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-nn &#x1f4c4; 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系…

作者头像 李华