PTO-ISA 指令详解:TPUSH——Cube 与 Vector 核心间的 FIFO 数据推送与核间同步
人工智能指令集算子库CANNAscend【免费下载链接】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点击查看免费下载导读TPUSH是 CANN Parallel Tile OperationPTO虚拟指令集ISA中负责将生产者 tile 推入 FIFO的核心指令是 Cube矩阵与 Vector向量核心之间数据搬运与核间同步的基石。本文以 docs/isa/TPUSH_zh.md 为骨架结合仓库中 TPush.hpp、TPop.hpp、fixpipe.hpp 等源码与 tpushpop_fixpipe 测试用例系统讲解 TPUSH 的操作语义、C Intrinsic 接口、约束条件、TConfigfixpipe配置以及完整可运行的示例代码。读完本文你将掌握如何用 TPUSH 配套 TPOP/TFREE/TALLOC 搭建 Cube↔Vector 生产者—消费者流水线并理解不同硬件平台Atlas A2/A3 与 Ascend 950PR/950DT下切分行为与同步语义的差异。TPUSH 的定位与核心职责在 PTO 的 tile 级编程模型中Cube 核心负责矩阵乘法TMATMUL等计算Vector 核心负责逐元素类运算。两者通过FIFO先进先出队列进行生产—消费解耦生产者把 tile 数据推进 FIFOTPUSH消费者把数据弹出TPOP槽位空间由TFREE释放。TPUSH 位于这条链路的入口同时承担两类职责数据搬运把TileData类型Acc/Vec/Ctrl的生产者 tile 按切分模式写入当前 FIFO 槽位核间同步通过set_intra_block/wait_intra_block等硬件 flag 操作为消费者记录数据就绪事件并等待槽位空闲事件从而在 Cube/Vector 核心之间建立跨核同步。除 TileData 流程外TPUSH 还支持GlobalData重载配合TALLOC/TPOP/TFREE将 FIFO 槽位以GlobalTensor视图方式暴露以及带TConfig模板参数的 fixpipe 重载在推送时完成布局转换、量化/反量化与 ReLU 融合。操作语义三种数据流TileData 流程生产者 tile 直接搬运对于普通 tile 数据生产者与消费者按以下三步协作TPUSH(Pipe, TileData, Split)将生产者 tile 存入当前 FIFO 槽位并为消费者记录数据就绪同步。生产者 tile 索引在槽位地址计算完成后递增。TPOP(Pipe, TileData, Split)等待生产者的数据就绪同步将当前 FIFO 槽位加载到消费者 tile 中。消费者 tile 索引同样在槽位地址计算完成后递增。TFREE(Pipe, Split)释放 FIFO 槽位空间。注意平台差异——Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品上此接口为空操作TPOP内部已执行空闲空间通知Ascend 950PR/Ascend 950DT上则会真正释放TPOP使用的 FIFO 槽位空间。以 A5 后端 TPush.hpp 中的TPUSH_IMPL为例TileData 流程的 NPU 实现可归纳为三步// 1. 跨核等待空闲槽位稀疏同步由 SyncPeriod 控制 bool isAllocate pipe.prod.getAllocateStatus() Pipe::shouldWaitFree(pipe.prod.tileIndex); if (isAllocate) { pipe.prod.template allocateSplit(); } // 2. 地址计算 数据写入 FIFO 槽位 pipe.prod.template pushTileProd, Split(pipe.fifo, tile, /* subBlockId */); pipe.prod.tileIndex; // 生产者 tile 索引在地址计算完成后递增 // 3. 跨核提交记录数据就绪 if (isRecord) { pipe.prod.template recordSplit(); }其中allocate()与record()内部会根据 pipe 方向C2V/V2C/BOTH选择不同的硬件 pipe 与 flag例如 C2V 方向record()在 Cube 侧通过set_intra_block(PIPE_FIX, FlagID)置位wait()在 Vector 侧通过wait_intra_block(PIPE_V, FlagID)等待DIR_BOTH还会额外使用FlagID 2record与FlagID 3wait/free。GlobalData 流程槽位视图 显式存储当不想把数据真正搬入本地 tile、而希望直接把 FIFO 槽位当作GlobalTensor视图使用时使用 GlobalData 四步协议TALLOC(Pipe, GlobalData)从TPipe中分配一个生产者 FIFO 槽位并将其暴露为GlobalTensor视图。生产者之后通过TSTORE等指令向该槽位写入数据。TPUSH(Pipe, GlobalData)为已经由TALLOC分配的槽位记录数据就绪同步把 FIFO 槽位提交给消费者。它本身不会存储 tile 数据A5 后端中对应实现仅调用pipe.prod.template recordSplit()见 TPush.hpp。TPOP(Pipe, GlobalData)等待数据就绪将gmTensor赋值为当前 FIFO 槽位地址并递增消费者 tile 索引。它不会把数据加载到本地 tile也不会释放槽位消费者通过TLOAD等指令从槽位中读取。TFREE(Pipe, GlobalData)释放由TPOP(Pipe, GlobalData)返回的 FIFO 槽位视图通知生产者该槽位空间已空闲。这种模式适合数据量较大、需要避免多一次本地拷贝的场景如 flash attention 性能示例 中把中间结果写入 GM FIFO 再由另一侧TLOAD读取。TConfig 重载fixpipe 转换路径TPUSHPipe, TileProd, TConfig(pipe, tile)是 fixpipe 专用重载TConfig模板参数用于配置fixpipe 转换与布局。NPU 后端将其应用于L0C→GM / UB 路径CPU_SIM 则将转换结果写入主机 FIFO 槽位。典型用途是在推送 accumulator tile 的同时完成 NZ→行主序/列主序布局转换、fp32→fp16 转换或反量化从而省去额外的 TMOV/TSTORE 指令。C Intrinsic 接口TPUSH的全部重载声明位于 include/pto/common/pto_instr.hppPTO_COMM_NOT_SUPPORTED未定义时生效文档给出的签名如下template typename Pipe, typename TileProd, TileSplitAxis Split, std::enable_if_tis_tile_data_vTileProd, int 0, typename... WaitEvents PTO_INST RecordEvent TPUSH(Pipe pipe, TileProd tile, WaitEvents ... events); template typename Pipe, typename TileProd, TileSplitAxis Split, typename... WaitEvents PTO_INST RecordEvent TPUSH(Pipe pipe, TileProd tile, int32_t subBlockId, WaitEvents ... events); template typename TileData, typename Pipe, typename... WaitEvents PTO_INST RecordEvent TPUSH(TileData tile, Pipe pipe, WaitEvents ... events); template typename Pipe, typename GlobalData, TileSplitAxis Split, std::enable_if_tis_global_data_vGlobalData, int 0, typename... WaitEvents PTO_INST RecordEvent TPUSH(Pipe pipe, GlobalData gmTensor, WaitEvents ... events); template typename Pipe, typename TileProd, typename TConfig, typename... WaitEvents PTO_INST RecordEvent TPUSH(Pipe pipe, TileProd tile, WaitEvents ... events);各重载的语义差异重载适用类型说明TPUSH(pipe, tile, Split)TileData标准形式显式指定切分轴TPUSH(pipe, tile, subBlockId, Split)TileData显式指定 subblock ID用于选择 split laneTPUSH(tile, pipe)TileData参数反转的简化形式内部使用TILE_NO_SPLIT语义TPUSH(pipe, gmTensor, Split)GlobalData提交TALLOC分配的槽位仅记录同步TPUSH(pipe, tile)TConfigTileDataAccfixpipe 转换路径所有重载在入口处都会先执行detail::PtoWaitEvents(events...)等待事件并统一返回RecordEvent供后续指令作为事件依赖。PipeFIFO 管道类型Pipe通常是所选后端TPush.hpp中声明的TPipe类型包括 include/pto/cpu/TPush.hpp、include/pto/npu/a2a3/TPush.hpp 和 include/pto/npu/a5/TPush.hpptemplate uint8_t FlagID, uint8_t DirType, uint32_t SlotSize, uint32_t SlotNum, uint32_t LocalSlotNum 2, bool IsNoSplit false, bool EN_UNIT_FLAG false struct TPipe;模板参数含义FlagID同步 flag 基号。A5 后端中FlagID 1不得超过MAX_SYC_ID即 15见 fifo.hppDIR_BOTH/DIR_BOTH_GM会使用到FlagID 3同时使用两个方向时同样要求FlagID 3 MAX_SYC_ID源码中通过static_assert强制校验。DirType通信方向取值见 fifo.hpp 中的Direction枚举——DIR_C2VCube 生产、Vector 消费、DIR_V2CVector 生产、Cube 消费、DIR_BOTH双向、DIR_V2C_CTRL控制信号以及 A5 特有的DIR_C2V_GM/DIR_V2C_GM/DIR_BOTH_GMGM FIFO 方向。SlotSize单个 FIFO 槽位的字节数必须足以容纳一个逻辑 FIFO 条目。SlotNumFIFO 槽位数量要求 1。LocalSlotNum本地 FIFO 槽位数消费者本地轮转缓冲区默认 2。IsNoSplit是否以 no-split 语义创建管道C2V no-split 时一个生产者槽位可协调一个或两个 vector 消费者 subblock。EN_UNIT_FLAG是否使能 unit-flag存储阶段粒度同步。方向与同步节奏的对应关系在TPipe中通过编译期常量刻画例如 A5 后端的SyncPeriod (SlotNum 2) ? SlotNum : SlotNum / 2见 TPush.hpp它决定了空闲空间等待的稀疏度。切分轴TileSplitAxisSplit使用 fifo.hpp 中的TileSplitAxis枚举enum TileSplitAxis : uint8_t { TILE_NO_SPLIT 0, // 1:1 模式不切分使用 AIV0 TILE_UP_DOWN 1, // 按行切分AIV0上半区AIV1下半区行数必须为偶数 TILE_LEFT_RIGHT 2, // 按列切分AIV0左半区AIV1右半区列数必须为偶数 TILE_UP_DOWN_ODD 3, // 奇数行切分AIV0rows/21AIV1rows/2 TILE_LEFT_RIGHT_ODD 4, // 奇数列切分AIV0cols/21AIV1cols/2 };约束条件TileData 类型生产者TileProd::Loc必须是TileType::Acc、TileType::Vec或TileType::Ctrl。Direction::DIR_C2VCube 生产 accumulator tile供 vector 消费走 L0C→UB 通路A5 上还有 L0C→GM 的DIR_C2V_GM变体。Direction::DIR_V2CVector 生产 vector tile供 cube 消费走 UB→L1 通路A5 上还有 UB→GM 的DIR_V2C_GM变体。Direction::DIR_BOTH同一个 pipe 类型同时支持 C2V 与 V2C 生产者两个方向各自维护独立的环形队列与同步状态。Tile 类型支持TPUSH/TPOPTile 类型归属核心用途TileType::Acc累加器 TileCube 核心C2V 方向通信TileType::Vec向量 TileVector 核心V2C 方向通信TileType::Ctrl控制 TileVector 核心V2C_CTRL 方向的控制信号通信切分行为按平台Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品TILE_NO_SPLIT不做切分。使能此切分模式需要 AIV0、AIV1 陪跑同步操作即两个向量核都参与执行保持 flag 同步。TILE_UP_DOWN向量子块映射到上、下两个行半区。TILE_LEFT_RIGHT向量子块映射到左、右两个列半区。Ascend 950PR/Ascend 950DTTILE_NO_SPLIT不做切分。TILE_UP_DOWN数据按上下切分。Cube→Vector 方向且 L0C→UB 通路时仅支持数据类型为 b32sizeof(T) 4且 srcTile 的validRows必须为 2 的整数倍Vector→Cube 方向且 UB→L1 通路时vector 子块会分别插入上、下两个行区域。TILE_LEFT_RIGHT数据按左右切分成两个列半区。Cube→Vector 方向且 L0C→UB 通路时仅支持 b32 且 srcTile 的validCols必须为 32 的整数倍Vector→Cube 方向且 UB→L1 通路时validCols必须是 32 字节的整数倍。这些约束在 A5 源码中以static_assert编译期与PTO_ASSERT运行期双重校验例如 TPush.hpp 中 C2V 的DualModeSplitM/DualModeSplitN分支static_assert( (ProdM % 2 0) (sizeof(T) 4), Fix: For C2V(L0C- UB), only support up-down split with ProdM being multiple of 2 due to hardware requirement.);其他约束要点简化版接口TPUSH(TileData, Pipe)内部使用TILE_NO_SPLIT语义TileData::Loc必须为TileType::Acc或TileType::Vec。TConfig 接口TConfig是实现定义的推送行为配置类型TileProd::Loc必须为Acc/Vec/Ctrl且 A5 实现仅支持 Acc tilestatic_assert(TileProd::Loc TileType::Acc, ...)。NPU 同步空闲空间等待是稀疏的由Pipe::SyncPeriod控制每次TPUSH都会发出数据就绪记录。GlobalData 生产者gmTensor必须是由TALLOC返回的 FIFO 槽位视图调用TPUSH(Pipe, GlobalData)前数据必须已写入TPUSH 本身忽略 tensor 内容只提交槽位。CPU_SIM FIFO 模型FIFO 状态由主机线程共享TPUSH通过互斥锁 条件变量等待空闲槽位并提交数据见 cpu/TPush.hpp 中SharedState与cv.wait的实现。TileData 数据使用主机 FIFO 状态拥有的存储即使构造TPipe时传入非空 NPU GM workspace 也不会访问该 workspace。DIR_BOTH为 C2V 与 V2C 分别维护独立环形队列每方向各SlotNum个槽位及独立的数据存储、游标和同步状态一个方向占满不会占用另一方向容量提交序号用于保持各方向内部 FIFO 顺序。CPU_SIM 切分模式根据当前 subblock 上下文选择 laneTILE_NO_SPLIT使用一个生产者 lane启用IsNoSplit的 C2V 管道会根据运行时 subblock 数量协调一个或两个 vector 消费者 subblock。CPU_SIM 目前未实现显式传入int32_t subBlockId的重载也未实现 GlobalData 重载。payload 布局细节TILE_NO_SPLIT下槽位 payload 按实际搬运窗口的形状所推送 Tile 的有效形状排布因此推送宽 Tile 的窄视图时行与消费者弹出的 Tile 保持对齐split 轴则按生产者 Tile 的声明形状排布 payloadCPU 侧对应实现见 TPush_c2v/TPush_v2c。定义 TConfigFixpipeParamsTPUSHPipe, TileProd, TConfig(pipe, tile)中的TConfig是一个编译期配置结构体用于控制推送过程中的 fixpipe 行为。PTO 提供FixpipeParams实现声明于 include/pto/common/fixpipe.hpptemplate LayoutMode_t layoutMode LayoutMode_t::NZ2ND, QuantMode_t quantMode QuantMode_t::NoQuant, ReluPreMode reluMode ReluPreMode::NoRelu, STPhase phase STPhase::Unspecified, uint8_t subBlockId 0, AtomicType atomicT AtomicType::AtomicNone, ClipReluMode_t clipReluMode ClipReluMode_t::NOCLIP_RELU, bool isChannelSplit false struct FixpipeParams { static constexpr LayoutMode_t LayoutMode layoutMode; static constexpr QuantMode_t QuantPre quantMode; static constexpr ReluPreMode ReluMode reluMode; static constexpr STPhase Phase phase; static constexpr uint8_t SubBlockId subBlockId; static constexpr AtomicType AtomicT atomicT; static constexpr ClipReluMode_t ClipReluMode clipReluMode; static constexpr bool IsChannelSplit isChannelSplit; };字段说明字段类型说明默认值LayoutModeLayoutMode_t输出数据布局NZ2NZNZ→NZ、NZ2NDNZ→行主序、NZ2DNNZ→列主序。枚举定义见 fixpipe.hppNZ2NDQuantPreQuantMode_t量化/反量化模式由 CANN 定义控制 fixpipe 推送过程中的数据类型转换NoQuantReluModeReluPreModeReLU 激活模式NoRelu或NormalReluNoReluPhaseSTPhase存储阶段unit-flag 路径Unspecified、Partial或FinalUnspecifiedSubBlockIduint8_t子块标识符用于累加器到向量搬运模式映射仅 Ascend 950PR/Ascend 950DT0AtomicTAtomicTypeGM 写入的原子操作类型AtomicNone或AtomicAddAtomicNoneClipReluModeClipReluMode_tClip ReLU 模式NOCLIP_RELU或CLIP_RELU。枚举定义见 fixpipe.hppNOCLIP_RELUIsChannelSplitbool是否启用通道切分false量化模式 QuantMode_tQuantPre支持的模式非常丰富fixpipe 中注释列举了主要取值fixpipe.hpp不使能NoQuant类型转换F322F16float→half、F322BF16float→bfloat16_t反量化int32 → half/bf16/int16scalar 量化DEQF16、DEQS16反量化tensor 量化变体VDEQF16、VDEQS16量化到 int8/uint8scalarQF322B8_PRE、QF162B8_PRE、REQ8量化到 int8/uint8tensorVQF322B8_PRE、VQF162B8_PRE、VREQ8量化到 int4scalar/tensorQF162S4_PRE、REQ4、VQF162S4_PRE、VREQ4量化到 int16scalar/tensorQF162S16_PRE、VQF162S16_PREA5 专用QF322HIF8_PRE→hifloat8_t、QF322FP8_PRE→float8_e4m3_t见 fixpipe.hpp消费者侧数据类型由FixpipeConsDType_tQuantPre, SrcType推导half 系F322F16/QF322F16_PRE/DEQF16/VDEQF16映射为halfbf16 系映射为bfloat16_tint8 系映射为int8_t其余保持源类型。TConfig 使用示例#include pto/pto-inst.hpp using namespace pto; template typename T AICORE void example_tconfig_push(__gm__ void *fifoMem) { constexpr uint32_t M 128; constexpr uint32_t N 128; constexpr uint32_t FlagID 0; constexpr uint32_t FifoDepth 2; using Pipe TPipeFlagID, Direction::DIR_C2V, M * N * sizeof(T), FifoDepth; using AccTile TileAccfloat, M, N, M, N; // 定义 TConfigNZ→行主序布局反量化到 half启用 ReLU using MyConfig FixpipeParamsLayoutMode_t::NZ2ND, QuantMode_t::DEQF16, ReluPreMode::NormalRelu; Pipe pipe(fifoMem, 0x0, 0x0); AccTile acc; TASSIGN(acc, 0x0); TPUSHPipe, AccTile, MyConfig(pipe, acc); }这正是仓库 tpushpop_fixpipe 测试用例 的用法Cube 侧执行TMATMUL后在PIPE_FIX上置位再以TPUSHMatPipe, AccTile, FixpipeConfig(pipe, accTile)完成 fixpipe 推送Vector 侧TPOPMatPipe, VecTile, TileSplitAxis::TILE_NO_SPLIT(pipe, vecTile)取数、TADDS运算后TFREE释放槽位。测试中同时覆盖了FixpipeParamsLayoutMode_t::NZ2ND, QuantMode_t::F322F16fp32→fp16 转换与FixpipeParamsLayoutMode_t::NZ2ND, QuantMode_t::DEQF16反量化两种配置。完整示例以下示例均与文档保持一致可直接作为编写 CV FIFO kernel 的起点。C2V Accumulator PushCube 生产、Vector 消费#include pto/pto-inst.hpp using namespace pto; template typename T AICORE void example_c2v(__gm__ void *fifoMem) { constexpr uint32_t M 128; constexpr uint32_t N 128; constexpr uint32_t FlagID 0; constexpr uint32_t FifoDepth 2; using Pipe TPipeFlagID, Direction::DIR_C2V, M * N * sizeof(float), FifoDepth; using AccTile TileAccfloat, M, N, M, N; Pipe pipe(fifoMem, 0x0, 0x0); AccTile acc; TASSIGN(acc, 0x0); // Fill acc with a cube computation before pushing. TPUSHPipe, AccTile, TileSplitAxis::TILE_NO_SPLIT(pipe, acc); }V2C Vector PushVector 生产、Cube 消费#include pto/pto-inst.hpp using namespace pto; template typename T AICORE void example_v2c(__gm__ void *fifoMem) { constexpr uint32_t M 128; constexpr uint32_t N 128; constexpr uint32_t FlagID 0; constexpr uint32_t FifoDepth 2; using Pipe TPipeFlagID, Direction::DIR_V2C, M * N * sizeof(T), FifoDepth; using VecTile TileTileType::Vec, T, M, N, BLayout::RowMajor, M, N; Pipe pipe(fifoMem, 0x0, 0x0); VecTile tile; TASSIGN(tile, 0x0); TPUSHPipe, VecTile, TileSplitAxis::TILE_NO_SPLIT(pipe, tile); }GlobalData 推送示例槽位视图协议#include pto/pto-inst.hpp using namespace pto; template typename T AICORE void example_globaldata(__gm__ void *fifoMem) { constexpr uint32_t M 128; constexpr uint32_t N 128; constexpr uint32_t FlagID 0; constexpr uint32_t FifoDepth 2; using Pipe TPipeFlagID, Direction::DIR_C2V, M * N * sizeof(T), FifoDepth; using SlotGlobal GlobalTensorT, Shape1, 1, 1, M, N, Stride1, 1, 1, N, 1; using VecTile TileTileType::Vec, T, M, N, BLayout::RowMajor, M, N; Pipe pipe(fifoMem, 0x0, 0x0); SlotGlobal slot; VecTile tile; TASSIGN(tile, 0x0); TALLOCPipe, SlotGlobal, TileSplitAxis::TILE_NO_SPLIT(pipe, slot); TSTORE(slot, tile); TPUSHPipe, SlotGlobal, TileSplitAxis::TILE_NO_SPLIT(pipe, slot); }对应的消费者侧完整闭环含TLOAD与TFREE可参考 TPOP 文档 中的 GlobalData 槽位弹出示例TPOPPipe, SlotGlobal, TileSplitAxis::TILE_UP_DOWN(pipe, slot); TLOAD(tile, slot); TFREEPipe, SlotGlobal, TileSplitAxis::TILE_UP_DOWN(pipe, slot);与 TPOP/TFREE/TALLOC 的协同关系TPUSH 是 CV FIFO 流水线的一半另一半由TPOP弹出消费者 tile、TFREE释放槽位与TALLOC分配 GM 槽位视图构成。它们的完整 Intrinsic 声明同样位于 pto_instr.hpp且文档相互配套TPOP_zh.md消费者侧语义——C2V vector 消费者会把 tile 分配到C2V_CONSUMER_BUF并使用本地 FIFO 轮转V2C matrix 消费者分配到V2C_CONSUMER_BUF。CPU_SIM 下 TileData 按消费者 Tile 的声明形状读回因此该形状必须与生产者推送的窗口一致。TFREE_zh.md 与 TALLOC_zh.md槽位释放与分配的配套指令。以仓库 flash attention 性能 kernel 为例生产-消费循环中正是以TPUSH(qkAccTile, qkPipe)、TPOP(pMatTile, pPipe)、TFREE(pPipe)的组合在 Cube 与 Vector 之间流转中间结果并配合prod.setAllocateStatus/setRecordStatus/setEntryOffset实现子 tile 粒度上的稀疏同步与字节偏移。关于 ASM 形式当前公开的汇编参考尚未为TPUSH定义稳定的 PTO-AS 写法手写 CV FIFO 程序时请使用 C intrinsic 形式。小结TPUSH 的核心职责是把生产者 tile 推入 FIFO 并记录数据就绪同步按 TileData / GlobalData / TConfig 三种重载分别支持直接搬运、槽位视图提交与 fixpipe 转换。TPipeFlagID, DirType, SlotSize, SlotNum, LocalSlotNum, IsNoSplit, EN_UNIT_FLAG是 FIFO 管道的类型载体方向、深度、同步 flag 与切分能力均由模板参数在编译期确定。切分行为与硬件平台强相关Atlas A2/A3 与 Ascend 950PR/950DT 在TILE_UP_DOWN/TILE_LEFT_RIGHT下有不同的数据排布与对齐约束TILE_NO_SPLIT在 A2/A3 上需要 AIV0/AIV1 陪跑同步。FixpipeParams通过 8 个编译期字段把布局NZ2ND/NZ2DN/NZ2NZ、量化/反量化QuantMode_t、ReLU、存储阶段、原子写与通道切分融合进一次 TPUSH是消除额外数据搬移指令的关键手段。编写生产代码时请优先参考仓库内已落地的用例A2A3 的 tpushpop_fixpipe、tpushpop_cv_nosplit、tpushpop_dir_both 等 ST 测试以及 fa_performance_kernel.cpp 这类端到端性能示例。赞分享人工智能指令集算子库CANNAscend【免费下载链接】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点击查看免费下载相关推荐PTO ISA TNOTIFY 指令详解Ascend NPU 间轻量级标志同步PTO ISA TNOTIFY 指令详解Ascend NPU 间轻量级标志同步 导读 TNOTIFY 是 CANN PTOParallel Tile Ope人工智能指令集算子库CANNAscendCANN PTO-ISA SYNCALL 指令详解跨核同步屏障的硬模式与软模式实现CANN PTO ISA SYNCALL 指令详解跨核同步屏障的硬模式与软模式实现 SYNCALL 是 CANN pto isaParallel Tile人工智能指令集算子库CANNAscendCANN pto-isa 虚拟指令集核心术语指南从 Tile、GlobalTensor 到 Valid Region 与事件同步CANN pto isa 虚拟指令集核心术语指南从 Tile、GlobalTensor 到 Valid Region 与事件同步 PTOParallel T人工智能指令集算子库CANNAscend上一篇api-spec-converter命令行详解高效转换Swagger与RAML的秘诀下一篇从玩家改名到权限丢失Docker Minecraft服务器的管理员权限危机终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Simulink建模本质:时间驱动的混合系统求解器原理

Simulink建模本质:时间驱动的混合系统求解器原理

1. 为什么Simulink入门不是“点开软件画个框”——一个老手带你看清建模本质Simulink入门,这个词在MATLAB用户圈里被反复提起,但多数人卡在第一步:打开软件,新建模型,拖几个模块,连几根线,运行一…

2026/9/20 7:32:19 阅读更多 →
Motion Canvas 样条曲线绘制指南:Spline 组件的最小 Knot 要求与手柄控制

Motion Canvas 样条曲线绘制指南:Spline 组件的最小 Knot 要求与手柄控制

Motion Canvas 样条曲线绘制指南&#xff1a;Spline 组件的最小 Knot 要求与手柄控制 【免费下载链接】motion-canvas Visualize Your Ideas With Code 项目地址: https://gitcode.com/gh_mirrors/mo/motion-canvas 导读 在 Motion Canvas 中&#xff0c;<Spline>…

2026/9/20 7:32:19 阅读更多 →
MicroPython pyb.CAN 模块详解:在 pyboard 上使用经典 CAN 与 CAN FD 总线

MicroPython pyb.CAN 模块详解:在 pyboard 上使用经典 CAN 与 CAN FD 总线

MicroPython pyb.CAN 模块详解&#xff1a;在 pyboard 上使用经典 CAN 与 CAN FD 总线 【免费下载链接】micropython MicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems 项目地址: https://gitcode.com/gh_mirrors/mi…

2026/9/20 7:32:19 阅读更多 →

最新新闻

外贸建站用什么平台好?新手入门避坑指南

外贸建站用什么平台好?新手入门避坑指南

外贸建站用什么平台好?新手入门避坑指南 网站做好了没人访问,这是90%外贸新手最崩溃的时刻。你花了几万块定制开发,页面精美得像杂志,但打开百度或谷歌搜产品,根本找不到你。别慌,这通常不是内容的问题,而是 技术选型 从一开始就错了。…

2026/9/21 9:45:18 阅读更多 →
一个服务器上有两个网站要备案两次吗?源码下载避坑指南

一个服务器上有两个网站要备案两次吗?源码下载避坑指南

一个服务器上有两个网站要备案两次吗?源码下载避坑指南 别再死磕那些丑得令人发指的模板网站了,真的,看着都尴尬。很多新手为了省事,直接去搜“源码下载”,结果装出来的页面配色像上世纪的网吧,布局挤得像早高峰的地铁,客户一眼就能看穿你的不专业。更头疼的是,当你终于搞定两个网站,准备绑上服务器时,卡在了备案…

2026/9/21 9:30:07 阅读更多 →
个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑

个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑

个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑 域名解析报错 502,服务器内存爆满,这种“代码写得好,上线就抓瞎”的尴尬,是不是你写个人博客网页设计论文时的真实写照?很多同学在选题和实操阶段,死磕 CSS 动画或 JS 交互,却对最底层的域名绑定和服务器配置一知半解。…

2026/9/21 9:16:31 阅读更多 →
2026最新:破解软件下载网站哪个好,自建系统全解析

2026最新:破解软件下载网站哪个好,自建系统全解析

2026最新:破解软件下载网站哪个好,自建系统全解析 改个需求建站公司拖一周,这种憋屈事儿我见得太多了。很多设计师转前端的朋友,手里有活儿,但苦于没有稳定的流量入口,想搭个软件下载站,却又被外包公司的拖延症搞崩溃。其实, 2026最新…

2026/9/21 8:58:55 阅读更多 →
3招搞定网站标识代码怎么加,避开性能优化大坑

3招搞定网站标识代码怎么加,避开性能优化大坑

3招搞定网站标识代码怎么加,避开性能优化大坑 域名解析配错、服务器环境没选对,90%的新手在搞SEO时都栽在这。你辛辛苦苦写了篇长文,结果用户打开页面转圈加载,搜索引擎爬虫也抓不到核心数据,这锅谁背?别怪算法变了,很多时候是基础代码没埋对,尤其是那些看似不起眼的网站标识代码,一旦加错位置或格式,不仅…

2026/9/21 8:45:18 阅读更多 →
3类高危漏洞:网页制作模板中文源码下载安全自查

3类高危漏洞:网页制作模板中文源码下载安全自查

3类高危漏洞:网页制作模板中文源码下载安全自查 域名服务器搞不懂,是无数运营推广人员接手“网页制作模板中文”项目时的噩梦。你手里拿着一个看起来很漂亮的模板,后台却像个黑盒,更别提那些藏在代码深处的安全隐患。…

2026/9/21 8:30:15 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析&#xff1a;从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南&#xff1a;src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin &#x1f680;ViteVue3Gin拥有AI辅助的基础开发平台&#xff0c;企业级业务AI开发解决方案&#xff0c;内置mcp辅助服务&#xff0c;内置skills管理&#xff0c;…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址&#xff1a; https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件&#xff08;Full-featured Plugin&#xff09;是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →