news 2026/6/13 5:38:53

CANN/pto-isa 交织指令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/pto-isa 交织指令

# TINTERLEAVE

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

指令示意图

简介

将两个源 Tile(src0src1)交织到两个目标 Tile(dst0dst1)中。该操作以交替模式组合src0src1的元素:交织流的偶数位置元素放入dst0,奇数位置元素放入dst1。每个目标 Tile 各持有交织流的一半,在中点处拆分。

TInterleaveTDeInterleave的逆操作。

数学语义

双源形式

给定两个具有相同有效形状(validRows, validCols)的源 Tilesrc0src1,为每行构造长度为2 × validCols的交织流:

$$ \mathrm{interleaved}{2k} = \mathrm{src0}{i, k}, \quad \mathrm{interleaved}{2k+1} = \mathrm{src1}{i, k}, \quad 0 \le k < \mathrm{validCols} $$

然后将交织流拆分为两半:

$$ \mathrm{dst0}{i, j} = \mathrm{interleaved}{j}, \quad 0 \le j < \mathrm{validCols} $$ $$ \mathrm{dst1}{i, j} = \mathrm{interleaved}{\mathrm{validCols} + j}, \quad 0 \le j < \mathrm{validCols} $$

其中validRows = dst0.GetValidRow()validCols = dst0.GetValidCol()

汇编语法

PTO-AS 形式:参见 PTO-AS 规范。

同步形式:

%dst0, %dst1 = tinterleave %src0, %src1 : !pto.tile<...>

AS Level 1(SSA)

%dst0, %dst1 = pto.tinterleave %src0, %src1 : (!pto.tile<...>, !pto.tile<...>) -> (!pto.tile<...>, !pto.tile<...>)

AS Level 2(DPS)

pto.tinterleave ins(%src0, %src1 : !pto.tile_buf<...>, !pto.tile_buf<...>) outs(%dst0, %dst1 : !pto.tile_buf<...>, !pto.tile_buf<...>)

C++ 内建接口

声明于include/pto/common/pto_instr.hpp

template <typename TileDataDst, typename TileDataSrc, typename... WaitEvents> PTO_INST RecordEvent TInterleave(TileDataDst &dst1, TileDataDst &dst0, TileDataSrc &src1, TileDataSrc &src0, WaitEvents &...events);

注意:参数顺序为(dst1, dst0, src1, src0)dst0接收交织流的前半部分(位置0 … validCols-1),dst1接收后半部分(位置validCols … 2×validCols-1)。

约束

  • 实现检查 (A5):
    • TileData::DType必须是以下之一:int32_tuint32_tfloatint16_tuint16_thalfbfloat16_tuint8_tint8_t
    • Tile 布局必须是行主序(TileData::isRowMajor)。
    • 所有 Tile(dst0dst1src0src1)必须具有相同的DType, 相同的有效形状。
    • 所有 Tile 的validCol必须为偶数(dst0.GetValidCol() % 2 == 0)。由于所有 Tile 共享相同的有效形状,这等价于要求dst0.GetValidCol() % 2 == 0
  • 有效区域:
    • 该操作使用dst0.GetValidRow()/dst0.GetValidCol()作为迭代域;假定src0/src1/dst1是兼容的。

示例

自动(Auto)

#include <pto/pto-inst.hpp> using namespace pto; void example_auto() { using TileT = Tile<TileType::Vec, float, 16, 64>; TileT src0(16, 64), src1(16, 64); TileT dst0(16, 64), dst1(16, 64); TInterleave(dst1, dst0, src1, src0); }

手动(Manual)

#include <pto/pto-inst.hpp> using namespace pto; void example_manual() { using TileT = Tile<TileType::Vec, half, 16, 256, BLayout::RowMajor, 16, 256>; TileT src0, src1, dst0, dst1; TASSIGN(src0, 0x1000); TASSIGN(src1, 0x2000); TASSIGN(dst0, 0x3000); TASSIGN(dst1, 0x4000); TInterleave(dst1, dst0, src1, src0); }

汇编示例(ASM)

自动模式

# 自动模式:由编译器/运行时负责资源放置与调度。 %dst0, %dst1 = pto.tinterleave %src0, %src1 : (!pto.tile<...>, !pto.tile<...>) -> (!pto.tile<...>, !pto.tile<...>)

手动模式

# 手动模式:先显式绑定资源,再发射指令。 # 可选(当该指令包含 tile 操作数时): # pto.tassign %src0, @tile(0x1000) # pto.tassign %src1, @tile(0x2000) # pto.tassign %dst0, @tile(0x3000) # pto.tassign %dst1, @tile(0x4000) %dst0, %dst1 = pto.tinterleave %src0, %src1 : (!pto.tile<...>, !pto.tile<...>) -> (!pto.tile<...>, !pto.tile<...>)

PTO 汇编形式

%dst0, %dst1 = tinterleave %src0, %src1 : !pto.tile<...> # AS Level 2 (DPS) pto.tinterleave ins(%src0, %src1 : !pto.tile_buf<...>, !pto.tile_buf<...>) outs(%dst0, %dst1 : !pto.tile_buf<...>, !pto.tile_buf<...>)

相关指令

  • TDeInterleave - 将两个 Tile 反交织回原始的偶/奇流(TInterleave 的逆操作)。

【免费下载链接】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/6/13 5:34:52

用LangGraph构建可解释的多视角股票分析智能体

1. 项目概述&#xff1a;用 LangGraph 构建可解释、可调试的多视角股票分析智能体我做量化分析工具开发快八年了&#xff0c;从最早手写 Excel 宏跑财务模型&#xff0c;到后来搭 Python 脚本调 Yahoo Finance API&#xff0c;再到用 Streamlit 做内部看板——一路踩过太多坑。…

作者头像 李华
网站建设 2026/6/13 5:14:46

Notebook到生产:机器学习模型交付的三大硬性要求与分层架构

1. 项目概述&#xff1a;这不是一次模型训练&#xff0c;而是一场工程交付“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着一个被太多人轻描淡写、却让无数团队在临门一脚时彻底卡死的真相&#xff1a;Notebook 是思考的草稿纸&…

作者头像 李华
网站建设 2026/6/13 5:13:59

TensorFlow 2.x端到端实战:从数据加载到生产部署

1. 这不是又一本“Hello World”式教程&#xff1a;为什么你真正需要的是一次可落地的TensorFlow深度学习实战穿透“Introduction to Deep Learning with TensorFlow”——这个标题在技术社区里出现频率高得有点刺眼。但说实话&#xff0c;我翻过不下二十本标着同样名字的书、上…

作者头像 李华
网站建设 2026/6/13 5:13:56

私有化MCP服务架构:Notion与GitHub安全协同实战

1. 项目概述&#xff1a;一个真正能落地的私有化MCP服务架构 “How to Build and Ship a Self‑Hosted MCP Server (Notion GitHub) with Auth, Rate Limits”——这个标题不是概念演示&#xff0c;也不是玩具级Demo&#xff0c;而是一份面向真实业务场景的工程化交付清单。我…

作者头像 李华
网站建设 2026/6/13 5:12:54

关于android studio

我的正文android studio是一款手机综合软件。

作者头像 李华