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 交替工作将 TLOADMTE2和 TSTOREMTE3重叠时间 → 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),仅供参考