Tiling设计原则
根据shape的维度不同并结合昇腾AI处理器硬件能力,考虑不同的Tiling设计策略,总体设计原则包括:
- 充分利用硬件Vector计算性能。
TIK的Vector指令每个cycle能处理256Byte的数据,并提供mask功能调整计算的数据,同时在时间上支持repeat操作,完成一连串的数据计算。由于Unified buffer上的物理限制,要求数据存储必须保持32Byte对齐。计算时相同指令运算数据尽可能连续存储,充分利用repeat操作,提高Vector利用率。 比如,对于NCHW格式数据,当C远大于H*W时,C通道占优,应该尽可能将数据由原来的CHW排布转换为HWC,保障C通道的数据连续存储。
- 减少AICore与外部数据的搬运频度。
AI Core与外部数据交互需要经过CPU数据总线,频繁调度可能会导致性能瓶颈。TIK代码设计时应尽可能减少AI Core与外部数据搬运次数。对于NCHW数据较小时,可考虑一次搬入Unified Buffer空间,数据较大时,应该尽可能最大利用Unified Buffer空间。
- 充分利用多核/流水线技术。
昇腾AI处理器存在多个AI Core, 应该充分均衡利用多核计算能力,将TIK核心计算部分均衡分配到多个AI Core上。同时,AI Core内部Cube/Vector计算单元均保留一定大小的Buffer缓存空间,数据从AI Core外部空间到Unified Buffer、Unified Buffer到外部空间可独立搬运,设计时应该考虑PingPong流水线操作,减少Vector指令的等待时间。
以BatchNorm算子为例,可将外部数据分成偶数块,在本次Vector计算过程中,可同步进行数据搬运,准备下一次Vector计算数据,等待下一次Vector运算时,数据已经准备好,大大减少数据搬运的等待时间。
父主题: 概述