| Files | Last commit | Last update |
|---|---|---|
feat: axpy_v2 arch35 Reg级融合原地改造,tiling 与 kernel DAG 统一 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !6525 merge feat/axpy-v2-fused-inplace into master feat: axpy_v2 arch35 Reg级融合原地改造,tiling 与 kernel DAG 统一 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: > 备选方案:与 #5625 同一优化目标的**原地改造版**(#5625 保持现状不动,二者择一合入)。 ## 与 #5625 的关系 | | #5625(保持现状) | 本 PR | |---|---|---| | DAG 组织 | 新建 *Fused struct,旧链 struct 保留专供 tiling | **原地改造原 struct**,删除旧链(对齐 tanh e913d83a8 先例) | | tiling 与 kernel | 不同构(全仓唯一特例) | **引用同一 DAG struct**(全仓惯例:tanh/div/signbit/axpy 等) | | tiling 行为 | 冻结(tile 按旧链估算,偏保守) | 自动跟随新 DAG(tile 按融合后 UB 足迹推导,放大 ~2-4x) | | 逐位 A/B 验证 | 已完成(tiling 冻结可控制变量) | kernel 逐字节同 #5625,复用其验证结论;tile 边界变化需重验 | ## 改造内容 将 **axpy_v2** 的 fp16/bf16/int8/uint8/bool 5 个 dtype 分支从内置 Op 长链原地改造为 Reg 级融合自定义 Op。float/int32/int64 原链不动(≤2 节点,融合收益≈0)。 | 分支 | 改造前 | 改造后 | 消除中间边 | |---|---|---|---| | fp16/bf16 | Cast×3 + FMA + Cast 长链 | UNPACK + Cast + MulDstAdd(vmadd) + Cast + PACK | 4 条 | | int8/uint8 | 6 节点链(32 位宽域) | UNPACK_B8 + Mul + Add + PACK_B16(uint16 零扩展) | 5 条 | | bool | half 域 5 节点链 | b8 位运算 And/Or(直读直存) | 4 条边 + 4 次 Cast | 优化细节: - int8/uint8 统一 uint16 零扩展:mod 256 下零扩展 ≡ 符号扩展,省掉符号扩展 Cast;双组寄存器交替 2 倍展开,奇数尾 tile 以 if 单独补一次 - bool 位运算:min(x2·α+x1, 1) 在 {0,1} 值域 ≡ x1 | (x2 & α),2 条指令替代 3 条,VL 翻倍至 256 - fp16/bf16 castTrait 与原链 tensor Cast 内部降级实现(CastIntrinsicsImplVF)逐字段一致(SAT + CAST_NONE/CAST_RINT) - 删除仅供旧链使用的 AndFF / CAST_*_MODE / FF;tiling 引用同步适配模板参数 ## tiling 行为变化(与 #5625 的本质差异) BroadcastBaseTiling 现按新 DAG 推导 tile:UB 足迹估算从旧链的 14~28B/elem 降为 4~8B/elem,tile 相应放大 2~4x。估算与 kernel 运行时分配同源(同一 DAG),无两张图不一致的风险;I/O broadcast 绑定结构不变,tiling key / schMode 不变。 ## 验证状态与计划 - **kernel 计算逻辑与 #5625 逐字节一致**(三个融合 Op struct MD5 比对相同);#5625 已完成 9000 条新旧 kernel 逐位一致验证(5000 泛化 + 4000 fp16/bf16 溢出强化,含 188 万 inf lane、65520 舍入平局点、NaN 载荷、次正规下溢、广播、尾块 1~513) - 待重跑:CI 流水线;tiling UT golden(tile 尺寸变化,UB-bound 用例需重出预期值);ST 全量 + 性能全谱系重测(重点确认 tile 放大收益与 2~5μs 中小 shape 桶无多核饥饿回退) - 精度:逐元素语义与 tile 划分无关,预期输出与 #5625 逐位一致,将按此复验 ## 约束遵守 - tiling data 结构 / tiling key / 二进制接口零变化(仅模板参数引用适配) - 全部 dtype 分支 golden 通过(沿用 #5625 验证基线 + 本 PR 复验) See merge request: cann/ops-math!6525 | 20 days ago | |
feat: axpy_v2 arch35 Reg级融合原地改造,tiling 与 kernel DAG 统一 Co-authored-by: HelloWord-LuXin<luxin67@h-partners.com> # message auto-generated for no-merge-commit merge: !6525 merge feat/axpy-v2-fused-inplace into master feat: axpy_v2 arch35 Reg级融合原地改造,tiling 与 kernel DAG 统一 Created-by: HelloWord-LuXin Commit-by: HelloWord-LuXin Merged-by: cann-robot Description: > 备选方案:与 #5625 同一优化目标的**原地改造版**(#5625 保持现状不动,二者择一合入)。 ## 与 #5625 的关系 | | #5625(保持现状) | 本 PR | |---|---|---| | DAG 组织 | 新建 *Fused struct,旧链 struct 保留专供 tiling | **原地改造原 struct**,删除旧链(对齐 tanh e913d83a8 先例) | | tiling 与 kernel | 不同构(全仓唯一特例) | **引用同一 DAG struct**(全仓惯例:tanh/div/signbit/axpy 等) | | tiling 行为 | 冻结(tile 按旧链估算,偏保守) | 自动跟随新 DAG(tile 按融合后 UB 足迹推导,放大 ~2-4x) | | 逐位 A/B 验证 | 已完成(tiling 冻结可控制变量) | kernel 逐字节同 #5625,复用其验证结论;tile 边界变化需重验 | ## 改造内容 将 **axpy_v2** 的 fp16/bf16/int8/uint8/bool 5 个 dtype 分支从内置 Op 长链原地改造为 Reg 级融合自定义 Op。float/int32/int64 原链不动(≤2 节点,融合收益≈0)。 | 分支 | 改造前 | 改造后 | 消除中间边 | |---|---|---|---| | fp16/bf16 | Cast×3 + FMA + Cast 长链 | UNPACK + Cast + MulDstAdd(vmadd) + Cast + PACK | 4 条 | | int8/uint8 | 6 节点链(32 位宽域) | UNPACK_B8 + Mul + Add + PACK_B16(uint16 零扩展) | 5 条 | | bool | half 域 5 节点链 | b8 位运算 And/Or(直读直存) | 4 条边 + 4 次 Cast | 优化细节: - int8/uint8 统一 uint16 零扩展:mod 256 下零扩展 ≡ 符号扩展,省掉符号扩展 Cast;双组寄存器交替 2 倍展开,奇数尾 tile 以 if 单独补一次 - bool 位运算:min(x2·α+x1, 1) 在 {0,1} 值域 ≡ x1 | (x2 & α),2 条指令替代 3 条,VL 翻倍至 256 - fp16/bf16 castTrait 与原链 tensor Cast 内部降级实现(CastIntrinsicsImplVF)逐字段一致(SAT + CAST_NONE/CAST_RINT) - 删除仅供旧链使用的 AndFF / CAST_*_MODE / FF;tiling 引用同步适配模板参数 ## tiling 行为变化(与 #5625 的本质差异) BroadcastBaseTiling 现按新 DAG 推导 tile:UB 足迹估算从旧链的 14~28B/elem 降为 4~8B/elem,tile 相应放大 2~4x。估算与 kernel 运行时分配同源(同一 DAG),无两张图不一致的风险;I/O broadcast 绑定结构不变,tiling key / schMode 不变。 ## 验证状态与计划 - **kernel 计算逻辑与 #5625 逐字节一致**(三个融合 Op struct MD5 比对相同);#5625 已完成 9000 条新旧 kernel 逐位一致验证(5000 泛化 + 4000 fp16/bf16 溢出强化,含 188 万 inf lane、65520 舍入平局点、NaN 载荷、次正规下溢、广播、尾块 1~513) - 待重跑:CI 流水线;tiling UT golden(tile 尺寸变化,UB-bound 用例需重出预期值);ST 全量 + 性能全谱系重测(重点确认 tile 放大收益与 2~5μs 中小 shape 桶无多核饥饿回退) - 精度:逐元素语义与 tile 划分无关,预期输出与 #5625 逐位一致,将按此复验 ## 约束遵守 - tiling data 结构 / tiling key / 二进制接口零变化(仅模板参数引用适配) - 全部 dtype 分支 golden 通过(沿用 #5625 验证基线 + 本 PR 复验) See merge request: cann/ops-math!6525 | 20 days ago |
| Files | Last commit | Last update |
|---|---|---|
| 20 days ago | ||
| 20 days ago |