CANN极大规模Amin归约优化
2026/5/23 3:06:48 网站建设 项目流程

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

name: triton-ascend-case-reduction-amin-large description: "极大规模1D归约(amin)优化:二次切分避免超UB+计算重组减少归约次数,网格数接近AI Core数量(grid=32)、UB用满、无尾块时性能最优(9.61us),适用于极大规模1D数据(400万级元素)的全量归约场景" category: example version: "1.0.0" metadata: backend: ascend dsl: triton-ascend hardware: "Atlas A2, Atlas A3"

极大规模 1D Amin 归约优化

任务特征

  • 数据尺寸:(4194304,),极大规模1D数据

优化 1:二次切分

pid = tl.program_id(0) for start in range(0, BLOCK_SIZE, SUB_BLOCK_SIZE): offsets = pid * BLOCK_SIZE + start + tl.arange(0, SUB_BLOCK_SIZE)

优化 2:计算重组

# 错误:简单 row_min = float('inf') for n_start in range(0, BLOCK_SIZE, SUB_BLOCK_SIZE): curr_min = tl.min(block_data) row_min = tl.minimum(curr_min, row_min) # 正确:优化 curr_min = tl.full((SUB_BLOCK_SIZE,), float('inf'), dtype=tl.float32) for start in range(0, BLOCK_SIZE, SUB_BLOCK_SIZE): curr_min = tl.minimum(curr_min, block_data) min_val = tl.min(curr_min)

Autotune 配置

# (AI core=40) # 1. grid=16<40, UB用满 -> 15.12 us triton.Config({'BLOCK_SIZE': 262144, 'SUB_BLOCK_SIZE': 16384}) # 2. grid=32<40, UB用满 -> 9.61 us 最优 triton.Config({'BLOCK_SIZE': 131072, 'SUB_BLOCK_SIZE': 16384}) # 3. grid=32, UB未用满 -> 10.29 us triton.Config({'BLOCK_SIZE': 131072, 'SUB_BLOCK_SIZE': 8192}) # 4. grid=40, UB用满, 有尾块 -> 10.17 us triton.Config({'BLOCK_SIZE': 104858, 'SUB_BLOCK_SIZE': 16384}) # 5. grid=64>40, UB用满 -> 11.64 us triton.Config({'BLOCK_SIZE': 65536, 'SUB_BLOCK_SIZE': 32768})

总结

网格数接近AI Core数量、UB用满、无尾块时性能最优。二次切分避免超出硬件缓存。

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询