TENET - A Framework for Modeling Tensor Dataflow Based on Relation-centric Notation
Info
Link: arxiv
摘要&结论¶
目的:建立精确性能模型,评估不同数据流性能
动机:基于计算(compute-centric)和基于数据(data-centric)的数据流表达能力差,导致优化机会受限,性能模型不准确
内容:使用基于关系(relation-centric)的记号形式化表达张量计算中的数据流;使用关系刻画硬件数据流、PE互联、数据分配
优势:
- 具有更强的表现力:使用复杂的反射变换
- 可识别更复杂的硬件数据流,具有更大的数据流设计空间和更多张量基准
- 支持更精确的性能估计:数据重用、延迟、能耗
- 方法:使用整数集结构和运算对关系计数
引言¶
空间架构(spatial architectures):
- 概念:并行计算架构,使用多个处理单元在空间分布上同时处理多个任务
- 构成:计算单元(PE)阵列 + 片上缓存(scratchpad memory) + PE片上互联
- 性质:存在大量硬件数据流变体
硬件数据流(hardware dataflow):
- 张量操作表示:循环嵌套
- 硬件数据流表示:
- 循环实例在PE阵列上的分配
- 循环实例在PE上的执行顺序
- 硬件数据流决定PE利用率、数据访存模式和片上带宽需求
- 问题:缺乏形式化表达
- 理想的形式化表达应满足:
- 系统地覆盖完整的数据流设计空间
- 促进简单而准确的性能建模
- 现有形式化表达方案:基于计算,基于数据
- 问题:
- 表达能力差,只能表达硬件数据流的一个子集
- 无法表达倾斜循环/张量数据流(需仿射变换以进行循环实例到空间架构的映射)
- 无法支持精确地性能分析
- 基于计算的模型未对数据迁移重用直接建模
- 基于数据的模型在张量维度未显式指定时无法精确计算指标(基于数据的模型通过计算关于参数的多项式对指标进行建模)
- 表达能力差,只能表达硬件数据流的一个子集
- 问题:
- 理想的形式化表达应满足:
TENET:对空间架构上张量应用程序的数据流进行建模的框架
- 核心:基于关系的表示(relation-centric notation)
- 关系:可表为pair的集合,使用整数集合运算进行计算
- 循环实例与执行计算的PE之间的关系(循环实例在哪里执行 where)
- 循环实例与其在PE中的执行顺序的关系(循环实例何时执行 when)
- PE和对应分配的张量元素的关系(张量元素在何时何地被访问 where & when)
- PE和互联网络的关系(张量元素如何遍历PE,如脉动阵列 how)
- 优势:
- 仅使用关系刻画复杂硬件数据流
- 完整的数据流设计空间
- 数据流 + 数据分配 + 内部连接的关系表示 => 完整硬件数据流设计空间
- 支持对各种重要性能指标进行简单而准确的建模
- 基本量:总体数据量、重用数据量以及需要在 PE 和片上缓存之间传输的最小数据量
- 使用基本量推导其余硬件指标
- 作用:可评估多种硬件指标:数据重用、延迟、PE通信带宽和片上内存带宽
背景¶
空间架构¶
空间架构:
- 概念:具有一系列PE、PE间互联和内存层级的一类架构
- PE:具有ALU用于执行特定计算,寄存器堆用于数据存储
- PE间互联:增加数据重用机会,降低带宽要求
- 数据重用:时间重用,空间重用
- 时间重用:同一数据在不同周期使用(数据 -> CC1,...,n)
- 空间重用:同一数据在不同PE使用(数据 -> PE1,...,n)
- 数据重用:时间重用,空间重用
- 内存层级:3层
- PE寄存器级
- 片上缓存器级
- 片外存储器级
- 模型假设:
- ALU具有执行1次乘积累加(MAC)操作的能力
- 相邻PE通过片上互联进行的数据传输需要1周期
硬件数据流:
- 概念:特定张量应用在某个空间架构上的实现
- 张量应用通常使用循环嵌套表示
- 表示:
- 循环实例在哪个PE上执行
- 循环实例在PE上的执行顺序
循环 编译优化记号¶
循环下标
计算实例
循环迭代空间
张量空间
张量映射函数(访问函数)
例:矩阵乘法
计算实例
张量空间:
, 映射函数:
现有数据流记号的局限性¶
数据流表示:
- 基于计算:
- 循环转移指令:重排、阻塞、并行
- 表示:
- 执行顺序:循环顺序
- 负载分配:需额外的
parallel
指令
- 优势:以命令式风格灵活地描述计算的执行过程
- 基于数据:
- 数据映射指令:时间 / 空间映射、数据移动顺序
- 表示:
- 执行顺序:
Temporal Map
指令描述数据在某一维度上跨时间戳移动(同一PE) - 负载分配:
Spatial Map
指令 (不同PE)
- 执行顺序:
- 优势:易于计算数据重用
- 问题:需手写指令,复杂数据流难处理
- 时空变换(STT):
- 将循环映射到脉动阵列上
- 问题:
- 不具备性能模型
- 不支持非脉动阵列架构
局限性:表达能力 & 性能建模能力
- 无法包含完整的数据流设计空间:
- 仅能表达矩形数据流,斜数据流需要做仿射变换
- 斜数据流须手动对原有张量应用进行转化,导致性能分析困难
- 仅粗粒度的对数据重用进行分析:
- 仅使用简单多项式计算数据流动
- 本质:仅能对部分张量的数据流进行建模
模型架构¶
- 输入C语言编写的张量操作,硬件描述
- 生成基于关系的表示:数据流、数据分配、互联、时空戳映射关系
- 数据流关系:将每个循环实例与PE相关联
- 方法:设计空间自动探索(DSE), 手动指定
- 数据分配关系:结合张量操作的访问函数和数据流关系得到
- 互联关系:描述PE间连接方式,从架构中推出
- 时空戳关系:针对特定的数据流,计算多钟时空戳映射关系,用于性能估计
- 数据流关系:将每个循环实例与PE相关联
- 计算关键性能指标
- 提供常用空间架构仓库
基于关系的记号¶
4类关系:
- 数据流关系:计算实例 -> 时空戳
- 戳:由于排序、放置的依据
- 空间戳:执行循环实例的PE的坐标
- 时间戳:决定PE内循环实例的执行顺序
- 循环实例的执行顺序由时间戳的字典序决定
- 表示:
- 时空戳
为循环下标 的仿射变换(线性映射)- 空间戳维度与PE阵列拓扑一致
- 当迭代空间大于PE阵列时,时间戳为多维
- 准仿射变换,引入除法、取模运算
- 时空戳的每一维都是循环下标的线性组合
- 具体计算过程表示:带入具体的时空约束,解得循环实例的时空分配
- 时空戳
- 数据流设计空间:
- 假设:
- PE只有一个MAC单元
- PE阵列为2D
- 数据顺序流动
- 基于数据的记号size = offset = 1
- 基于关系的记号变换系数为1
- 基于数据:
条原语全排列,由于PE阵列为2D,有两条SpatialMap
- 基于关系:
- n维到n维线性映射,表示为
矩阵,由于系数为1,故 ,共 种矩阵
- n维到n维线性映射,表示为
- 假设:
- 戳:由于排序、放置的依据
- 数据分配关系:时空戳 -> 张量
- 定义:
- 作用:发现时空重用机会
- 定义:
- 互联关系:PE1 -> PE2
- 表示:
:拓扑坐标, :拓扑约束
- 作用:描述可能的数据流动方式
- 互联:数据重用
- 不互联:通过片上缓存读取
- 常见片连拓扑:记
- 2D脉动阵列:
- 片上网络:
- 1D多广播:
- 2D脉动阵列:
- 表示:
- 时空映射关系:由数据分配、互联关系决定,通过关联不同时空戳,对连续时空戳空间的硬件行为进行建模
- 表示:
- 作用:计算性能指标
- 例:识别数据重用
- 令PE不变:时间重用
- 令PE相邻:空间重用
- 例:识别数据重用
- 表示:
例:矩阵乘法 (GEMM算子)
- 数据流关系:
时数据分布:即 ,令 ,s.t. ,解得- 当循环迭代空间大于PE阵列(
)时,表示为
- 数据到张量
的分配关系: - 互联关系:
- 时空戳映射:
在
性能模型¶
性能指标:数据传输量,数据重用,延迟,能量(?)
数据量¶
- 表示:
sum(·)
集合基数 - 4种数据量:
- 总数据量:所有时空戳对某张量访问的总次数
- 计算:
- 性质:PE与片上缓存间所需传输的最大数据量
- 计算:
- 重用数据量:跨多个时空戳的重用数据量,即相邻时空戳的重叠数据量(第一次出现不算重用)
- 计算:
:相邻时空戳- 空间重用量:跨不同空间戳数据重用量
由片联拓扑限制(仅满足片联拓扑约束的PE对空间重用量有贡献)
- 时间重用量:同一PE内跨不同时间戳数据重用量(限制同一PE避免与空间重用量重叠)
- 同一PE,
由时间间隔限制(在某一时间间隔内的数据可被重用)- 脉动阵列:假设时间间隔为1的数据可重用(PE间传输需要一个时钟周期),设时间间隔为1
- 多广播:设时间间隔为0(数据通过wire进行重用)
- 同一PE,
- 关系:
- 空间重用量:跨不同空间戳数据重用量
- 计算:
- 唯一数据量:访问不同张量数据的数量(不能从相邻时空戳中获得的数据),即新加入的数据总量
- 计算:
- 性质:PE与片上缓存间所需传输的最小数据量
- 计算:
- 重用因子:一个数据平均重用次数
- 计算:
- 计算:
- 总数据量:所有时空戳对某张量访问的总次数
例:矩阵乘法中的张量A
时空戳 | PE[0,0] | PE[0,1] | PE[1,0] | PE[1,1] |
---|---|---|---|---|
t=0 | A[0][0] | |||
t=1 | A[0][1] | A[0][0] | A[1][0] | |
t=2 | A[0][2] | A[0][1] | A[1][1] | A[1][0] |
t=3 | A[0][3] | A[0][2] | A[1][2] | A[1][1] |
- 总数据量:
- 重用数据量:
- 唯一数据量:
- 重用因子:
延迟与带宽模型¶
模型假设:数据流延迟 =
- 通信延迟:片上缓存和PE寄存器间数据传输引起(当PE可从自身或相邻PE获取数据时,无需从片上缓存获取数据)
- 估计:
- 其中带宽为片上缓存带宽(每秒能传输的数据量)
- 估计:
- 计算延迟:计算实例的总量和可用PE数之比(一个计算实例即一次MAC运算)
- 估计:
- 其中
为PE平均利用率
- 其中
- 估计:
- 带宽要求:数据传输速度需与计算速度相匹配,在计算所需的时间内数据需传输到位
- PE间带宽:
- PE间传输的为空间重用数据
- PE、片上缓存间带宽:
- 唯一数据量代表PE、片上缓存间传输的数据总量
- PE间带宽:
实验¶
Benchmark:
- 2D-CONV:
- GEMM:
- MTTKRP:
- MMc:
- Jacobi-2D:
- 现实应用:
- GoogLeNet
- MobileNet
- ALS
- Transformer
数据流记号:(空间戳 - P | 时间戳 - T)
- 仿射变换:将所有维度名放在一起
- 特殊符号:
fl(·)
下取整%
取模
数据流比较¶
结论:
- 基于关系的表示法表达能力比基于数据的表示法强
- 从而基于关系的表示法为寻找更优数据流提供了机会(TENET能建模比基于数据的MAESTRO得到的最优数据流更优的数据流)
- 原因:基于关系的表示法识别到了更加复杂的数据流
建模速度比较¶
结论:
- TENET将数据流建模视作线性规划问题,考虑更多架构细节
- MAESTRO仅使用简单多项式进行性能计算,快而不准
- PE连接方式越复杂,建模时间越长;对PE大小不敏感
设计空间探索:由于TENET表达能力强,相应的设计空间更大
- 通过限制数据空间流动、分配关系对设计空间进行剪枝
- 性质:在仿射变换下,数据流动始终沿直线
- 操作:
- 根据PE互联枚举数据移动方式
- 枚举边界上PE的可能数据分配
性能指标评估¶
结论:好的数据流应同时具有高PE利用率和数据重用
- 高数据重用不是低延迟的必要条件
数据流由于 维度与PE阵列大小不匹配,导致PE利用率低,导致高延迟 数据流由于输入 具有低重用,导致载入数据具有高延迟
- 2D空间戳可展现更多重用机会
- TENET可分别捕获时空重用
带宽分析¶
互联建模:同一周期多广播
结论:增加互联PE数量不是降低片上缓存带宽需求的必要条件
- 不同架构对同一数据流带宽要求类似
- 张量应用通常具有规则的计算和数据访问,鲜少有长距离跨PE通信
- 当数据流变化时,带宽需求来自不同的张量
- 数据重用需和硬件架构相匹配
2D-CONV, Jacobi-2D数据流,mesh拓扑IBW大于其它架构,SBW小于其它架构,该数据流发掘了对角数据重用,而脉动阵列不支持 2D-CONV数据流,1D脉动阵列的IBW低于2D脉动阵列的IBW,而SBW类似,IBW之差由张量B静止导致的时间重用引起
性能建模比较¶
PE利用率估计:
结论:TENET提高了性能估计准确率
- TENET通过仿射变换,具有建模复杂数据流的能力
- TENET通过遍历整个时空戳判断PE是否被分配,而不是使用简单的多项式进行PE利用率估计
- MAESTRO缺陷:
- MAESTRO需要所有数据维度被显式指定,故无法计算输出重用
- MAESTRO只分析最内层的时空重用
- MAESTRO不支持将多个数据维度映射到单个PE维度上