事件与同步【免费下载链接】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-isaPTO Tile Lib 支持显式事件event模型用于表达操作之间的依赖关系而不必为每条指令都引入全局屏障。本文档描述include/pto/common/pto_instr.hpp与include/pto/common/event.hpp中使用的 C 事件类型。注意具体的pto::EventSrcOp, DstOp类型仅在设备构建__CCE_AICORE__中定义。CPU 仿真后端通常将TSYNC视为 no-op并依赖单线程的普通程序顺序来验证语义。关键类型pto::Oppto::Op是类似 opcode 的枚举用于对操作分类。每个Op映射到一个硬件流水线PIPE_V、PIPE_MTE2等。pto::RecordEvent许多内建接口例如TADD、TLOAD、TSTORE会返回pto::RecordEvent。它是一个标记值可赋给EventSrcOp, DstOp用于在该 op 结束后记录一个 token。pto::EventSrcOp, DstOp仅设备在设备构建__CCE_AICORE__中include/pto/common/event.hpp定义template Op SrcOp, Op DstOp struct Event { void Wait(); void Record(); Event operator(RecordEvent); };Wait()阻塞直到 producer 侧 token 满足。Record()在 producer 流水线上设置 token。evt OP(...)从RecordEvent赋值会自动记录 token。模板参数编码 producer/consumer 的 opcode用于选择正确的流水线对。TSYNCOpCode()单流水线屏障TSYNCOpCode()是单 op 的屏障形式由TSYNC_IMPLOpCode()实现在设备上当前实现将单 op 形式限制在向量流水线 opPIPE_V上。在 CPU 仿真后端__CPU_SIM中TSYNC_IMPL为 no-op。内建接口中的WaitEvents...机制include/pto/common/pto_instr.hpp中多数内建接口在参数末尾带有WaitEvents... events可变参包模式为内建接口调用TSYNC(events...)。TSYNC(events...)调用WaitAllEvents(events...)对每个 event 调用events.Wait()。指令执行后内建接口返回RecordEvent。这支持一种“SSA 风格”的 C 写法将 event token 作为 C 变量保存。将它们传给下一条 op 以表达顺序约束。将 op 返回的RecordEvent赋给 event 变量以记录新 token。抽象层面的顺序建议事件主要用于表达流水线类之间的顺序例如“内存加载完成后向量计算才能消费该 Tile”。没有显式数据或事件依赖的操作在设备上可能乱序执行。通过事件建立依赖链的操作必须满足Wait()/Record()所隐含的顺序。当顺序对正确性有影响时docs/isa/指令页会说明相关约束中文参考页参见docs/isa/README_zh.md。最小示例#include pto/pto-inst.hpp using namespace pto; void pipeline(__gm__ float* in0, __gm__ float* in1, __gm__ float* out) { using TileT TileTileType::Vec, float, 16, 16; using GShape Shape1, 1, 1, 16, 16; using GStride BaseShape2Dfloat, 16, 16, Layout::ND; using GT GlobalTensorfloat, GShape, GStride, Layout::ND; GT gin0(in0), gin1(in1), gout(out); TileT a, b, c; EventOp::TLOAD, Op::TADD e0; EventOp::TLOAD, Op::TADD e1; EventOp::TADD, Op::TSTORE_VEC e2; e0 TLOAD(a, gin0); e1 TLOAD(b, gin1); e2 TADD(c, a, b, e0, e1); TSTORE(gout, c, e2); }【免费下载链接】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),仅供参考