[object Object]
以下示意区分硬件(FFTS)与软件(GM轮询)两条路径(概念图,非规范绑定):
[object Object] 是跨核同步屏障,支持Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品和Ascend 950PR/Ascend 950DT NPU后端。通过模板参数 [object Object] 选择核类型模式:
- AIV-only(默认):
[object Object]同步所有AIV核。 - AIC-only:
[object Object]同步所有AIC核(Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品支持硬件和软件模式;Ascend 950PR/Ascend 950DT仅支持硬件模式)。 - MIX(AIC+AIV):
[object Object]同步AIC和AIV混合核。
通过 [object Object](在带workspace的重载中显式给出)选择 硬件模式(FFTS) 或 软件模式(GM轮询)。无workspace的重载对应硬件路径。
不适用逐元素算术语义。[object Object] 表达的是 barrier(屏障)到达 关系:
- 在某一动态程序点上,凡属于当前
[object Object]所划定参与者集合的core,均须执行到该[object Object]调用之后,任一参与者方可越过该点继续执行后续代码。 - 硬件模式:由FFTS旗标与设备侧
[object Object]等原语保证跨核可见顺序。 - 软件模式:由GM中各参与者独占slot的单调计数与
[object Object]/[object Object]等一致性原语,在轮询中判定「全员已到达当前代数」。
该语义不对barrier之后的GM或其它buffer内容作额外保证;跨核数据可见性需调用方自行维护,详见「跨核GM通信注意事项」。
声明于 [object Object]。软件模式接口使用类型安全的 [object Object] 和 [object Object] 参数(通过SFINAE约束):
[object Object]
[object Object]:[object Object](在Ascend C与[object Object]并存时,建议写全[object Object],避免与编译器内置头中的[object Object]枚举同名冲突)。软件模式使用的GM workspace,调用前需要初始化为0。每个参与core占用8个[object Object](按cache line隔离同步计数)。[object Object]:[object Object](模板参数固定为[object Object],即每核一个cache line槽位)。AIV-only和MIX软件模式使用的UB scratch,运行时后备内存容量须至少为[object Object](实现通过裸指针访问,不校验模板容量;示例中以编译期最大参与核数 ×[object Object]声明以保证后备内存充足)。[object Object]:[object Object]。AIC-only和MIX软件模式使用的L1(cbuf)scratch,用于[object Object]填充同步值后经DMA搬移到GM。[object Object]: 参与软件barrier的core数。为0时自动推算——AIV-only / AIC-only使用[object Object],MIX使用[object Object](即[object Object])。
下列场景需在ELF中手写 [object Object],供runtime正确调度:Hard AIV-only、Soft AIC-only、以及 register-ELF的MIX(如1:1 hard)。[object Object] 自动拆分场景由Bisheng生成meta,见本节末尾。宏定义于 [object Object]:
[object Object]
使用示例
Hard AIV-only(单kernel,chevron启动):
Soft AIC-only(单kernel,chevron启动):
register-ELF通用配对(AIC侧指定比例 + AIV侧)。注意:当前 [object Object] ST的MIX 1:2已改用 [object Object] 自动拆分、无需手写meta;下例仅演示register-ELF路径的宏配对写法:
register-ELF MIX 1:1 hard(AIC与AIV两侧均用 [object Object],AIV侧不要用 [object Object]):
无需手写meta的常见场景(完整对照见下文「编译与调度指南」场景速查表):
- AIV-only Soft(
[object Object]) - MIX 1:2 Hard / Soft、Hard AIC-only(Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品,
[object Object]自动拆分) - MIX 1:1 Soft(双流chevron)
[object Object]
本节以ST用例 为准,说明不同 [object Object] / 模式 / AIC:AIV比例下应采用的编译arch、Meta 与 Host启动方式。Host侧通过 在运行时决定launch grid(910B1:24 AIC + 48 AIV;910B4:20 AIC + 40 AIV),同一套kernel二进制可跨芯片复用。
Hard与Soft kernel 不可共用同一 [object Object](AIV-only / AIC-only等场景下soft会污染hard的FFTS配置导致hang);MIX 1:2的hard与soft因均走dav-c220自动拆分,可放在同一源文件的同一 [object Object] 中。
- 编译:单个源文件 + 对应arch(
[object Object]或[object Object]),产出独立[object Object]。 - 启动:
[object Object],[object Object]与[object Object]由Host在运行时传入(ST中来自[object Object])。 - Hard AIV-only须在kernel上声明
[object Object]。
- 编译:
[object Object];CMake使用[object Object]。 - 启动:单次chevron
[object Object];runtime按物理1:2拉起全部MIX参与者。 - Kernel参数:
[object Object]与[object Object]作为标量从Host传入(AIC/AIV两侧读同一参数),以支持910B1/910B4等不同cube数。 - Hard AIC-only特例:纯
[object Object]无法建立AIC-only硬同步所需的FFTS上下文。须用[object Object]MIX编译:AIC执行[object Object],AIV为空stub;[object Object]由Host传入。
- 原因:ccec/bisheng路径下
[object Object]恒为 2,[object Object]自动拆分物理固定 1:2,无法得到真1:1。 - 编译:同一源文件分别以
[object Object]([object Object])和[object Object]([object Object])各编一份[object Object],链接为一个[object Object];CMake使用[object Object]。 - 启动:AIC与AIV分别在两个
[object Object]上chevron[object Object]与[object Object];[object Object]/[object Object]由Host运行时传入。
- 原因:Hard MIX同步需要单一MIX FFTS上下文;chevron自动拆分在ccec下做不到真1:1。
- 编译:cube / vec各编带
[object Object]的[object Object],再以[object Object]生成register专用[object Object],经[object Object]合成registration ELF;CMake使用[object Object]。 - 启动:
[object Object]+[object Object];device侧用[object Object]推导参与者数(register路径仅传[object Object]三个参数)。
- 软件模式各平台GM写入路径:
- Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品(AIC-only与MIX的AIC侧):AIC通过
[object Object](L1→GM DMA)写GM slot;MIX的AIV侧通过UB workspace写入。 - Ascend 950PR/Ascend 950DT MIX:Ascend 950PR/Ascend 950DT AIC(
[object Object])不支持[object Object],改为通过[object Object]信号委托同block的AIV subblock 0代写UB→GM。
- Atlas A2/A3 训练系列产品/Atlas A2/A3 推理系列产品(AIC-only与MIX的AIC侧):AIC通过
- Ascend 950PR/Ascend 950DT平台限制原因(对应「模式支持矩阵」):
- AIC-only软件不可用:Ascend 950PR/Ascend 950DT AIC缺少
[object Object]等独立写GM的DMA路径,无法实现GM轮询。 - 硬件MIX不可用:
[object Object]在Ascend 950PR/Ascend 950DT([object Object])返回[object Object](207000),取不到FFTS基地址。 - AIC-only硬件:通过
[object Object]+[object Object]实现,不需要[object Object]。
- AIC-only软件不可用:Ascend 950PR/Ascend 950DT AIC缺少
- 软件模式要求所有参与core以相同顺序进入同一组barrier(基于单调代数计数,进入次数/顺序不一致会导致错配或死锁)。
[object Object]不参与PTO的Event自动依赖编排:既不接受[object Object],也不返回可被后续指令等待的[object Object]。因此它不会自动等待前序数据指令(如[object Object])完成,[object Object]前后与数据指令之间的顺序与可见性需调用方自行保证(见「跨核GM通信注意事项」)。- 在auto构建路径(
[object Object])下,[object Object]为no-op,不发射跨核硬件同步(与[object Object]等一致);真实同步只在manual kernel中发生。
[object Object] 只提供barrier 到达语义(hard / soft皆然),不保证barrier前后业务数据的跨核cache可见性。当算子在barrier前各核写GM、barrier后各核读他核GM(如跨核histogram / 前缀和)时,调用方需自行满足以下两点,否则会读到脏数据或发生丢写。
- 写方:
[object Object]/[object Object]之后接[object Object]+[object Object],把数据刷出到DDR。 - 读方:读前
[object Object](invalidate)+[object Object],确保读到DDR最新值而非本核旧cache。 - 仅有
[object Object]/[object Object](核内流水同步)不足以保证跨核可见性。 - 该要求与barrier模式无关:硬件FFTS barrier同样不刷cache,只保证「全员到达」的控制面顺序。
[object Object]内部对自己的同步槽位已做完整[object Object]+[object Object]处理,但不会替调用方刷业务数据。
[object Object]/ DMA以 32Byte cache line 为粒度操作;若相邻核slot共享同一条cache line,跨核刷新会互相覆盖 / 丢写。- 每核slot应按32Byte对齐并独占一条cache line(
[object Object]场景即stride = 8,而非4)。 [object Object]自身的同步槽位即按此设计:[object Object](见[object Object]),调用方的业务workspace也应遵循同样的隔离原则。
软件模式需传入 已清零 的GM workspace与合法容量的UB/L1 Tile。[object Object] 须为 [object Object]([object Object] 时忽略workspace,行为同无参 [object Object])。
MIX软件模式需同时提供UB与L1(Mat)Tile;Ascend 950PR/Ascend 950DT AIC侧通过代理路径写GM,详见「约束」一节。