尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

154、MLIR的Spatial Architecture(空间架构)编译

154、MLIR的Spatial Architecture(空间架构)编译 MLIR的Spatial Architecture(空间架构)编译上周五晚上十一点,我在调试一个AI加速器的数据流映射时,发现PE阵列的利用率死活上不去。盯着MLIR的affine dialect输出看了半小时,突然意识到问题出在空间映射的tile size选择上——编译器把循环体展开到了错误的维度,导致数据重用率暴跌。这种问题在传统编译器里几乎不会出现,但在空间架构上,一个错误的调度策略就能让硬件利用率从85%掉到30%。空间架构的编译困境先说说为什么需要专门讨论空间架构。传统CPU是时间驱动的——指令顺序执行,寄存器临时存数据。但空间架构(比如脉动阵列、粗粒度可重构阵列CGRA、或者谷歌TPU那样的SIMD阵列)是空间驱动的——计算在物理空间上展开,数据在阵列中流动。MLIR的multi-level设计在这里发挥了关键作用。你可以在不同抽象层次描述空间映射:从高层的tiling策略,到中层的循环分块,再到低层的PE间通信模式。但问题在于,这些层次之间的转换很容易引入错误。我见过最典型的坑是:在Linalg level做了完美的tiling,结果到affine level时循环顺序被重排,导致数据依赖断裂。更隐蔽的是,有些空间架构要求数据按特定pattern广播,但MLIR的默认lowering会把它优化成点对点传输——性能直接腰斩。从循环到空间:tiling的物理含义空间架构编译的核心是把循环迭代空间映射到物理PE阵列。这个映射不是简单的循环展开,而是要考虑三个约束:
返回列表