毕昇编译器核心AscendNPU IR开源,华为架构师海丽娟详解技术进展,支持Triton等算子生态

毕昇编译器核心AscendNPU IR开源,华为架构师海丽娟详解技术进展,支持Triton等算子生态

💡 原文中文,约5800字,阅读约需14分钟。
📝

内容提要

华为AscendNPU IR编译器架构师海丽娟在技术沙龙中介绍了其开源底座,该底座基于MLIR构建,提供Tile级抽象,支持多语言接入昇腾硬件,适配A2/A3至昇腾950架构,优化CV流水并行、寄存器融合、SIMT支持及多核切分,提升算子开发效率。项目已开源,社区提供任务和免费算力。

🔎

延伸解读

开源底座降低多语言接入昇腾门槛

AscendNPU IR 基于 MLIR 构建,提供 Tile 级抽象,使 Triton 等第三方语言和编译器能够接入昇腾硬件。这种开放架构让开发者无需深入了解底层硬件细节,即可使用熟悉的语言编写算子,从而降低开发门槛,提升效率。

昇腾950新特性聚焦性能优化

针对昇腾950,AscendNPU IR 引入了 Regbased SIMD 和 SIMT 支持,优化了寄存器融合和 CV 流水并行。这些改进旨在提升 Attention 等算子的性能,通过紧耦合数据交互和自动多核切分,充分利用硬件算力。

社区共建与免费算力支持

AscendNPU IR 和 Triton-Ascend 已开源,社区提供 SIG 例会、开源实习和社区任务,并免费提供 HiDevLab 算力平台(100小时时长)。开发者可参与生态共建,获取实践机会和奖励。

Q&A

AscendNPU IR是什么?它基于什么构建?

AscendNPU IR是华为毕昇编译器的组件,是基于MLIR构建的昇腾硬件Tile级抽象,服务于底层编译优化,向下对接LLVM IR,最终编译到昇腾硬件二进制。

Triton编程语言为什么高效易用?

Triton使用类Python语法,提供Block Level Tile级编程,屏蔽底层硬件细节,降低算子开发门槛。它基于MLIR构建多级IR抽象,支持针对不同硬件的深度优化。

AscendNPU IR的架构分为哪两层?各自的作用是什么?

AscendNPU IR分为硬件无关层HFusion和硬件相关层HIVM。HFusion负责上层多维度融合优化,包括数据类型和OP规范化预处理及Auto Schedule;HIVM负责昇腾硬件的高层抽象,包括核映射、片上内存映射和处理单元映射。

昇腾950相比A2/A3在架构上有哪些主要变化?

昇腾950在硬件相关层HIVM从MemBased SIMD扩展到支持Regbased SIMD和SIMT,CV融合编译从通过Global Memory交互改为紧耦合方式,实现更高效的数据交互。

昇腾950的Vector Regbased SIMD架构对编译优化有哪些影响?

影响包括:面向Regbased的向量化,数据基于寄存器计算;寄存器粒度融合,减少Load-Store;AVE方言抽象,屏蔽硬件掩码差异,使能随路优化。

昇腾950新增的SIMT单元有什么作用?编译流程如何处理SIMT和SIMD?

SIMT单元支持离散访存场景加速,使Vector核有三种计算模式:纯SIMD、纯SIMT、混合交替。编译流程先做融合分析,识别适合SIMT的部分,分别编译后再合并,并进行建模分析。

CV紧耦合数据交换对Attention算子优化有什么帮助?

昇腾950上Cube和Vector核通过片上内存直接交换数据,避免了Global Memory的往返,大幅提升Attention类算子的性能。

AscendNPU IR最新版本在CV数据交互方面做了哪些增强?

新版本增强了InsertCVLoadStore Pass,通过全局跨复杂控制流的推导补齐CV数据交互,插入确定性锚点,进行强制类型转换操作,解决不同内存层级冲突,并针对不同代际采用不同打通方式。

MultiBuffer在复杂控制流下如何实现?

引入独立Buffer计数器,跟随复杂控制流进行分支轮转,准确跟踪Slot变化;同时alloc操作需在Cube和Vector公共循环层可见,保证变换一致性。

AutoBlockify是什么?它有什么作用?

AutoBlockify是多核变换技术,将不同逻辑核归并到一个for循环,交给软件循环调度,可应用MultiBuffer和流水并行优化,提升开箱性能。

🏷️

标签

➡️

继续阅读