AI计算需求的抽象 算子角度 信息维度映射,信息过滤,信息选择 :Dot / GEMM => Join+Reduce 激活 : ElementWise Broadcast 统计、动态选择、排序 : Reduce 、G/S 随机数生成 是不是可以把所有的计算都抽象成查找表的方式 操作的方式由操作码+密码数来指定,实际上是定义一个查找表 操作码可以是指令的imm,密码数可以是约定的,也可能是提前载入的 乘法等价? 信息加工的角度 一堆向量和另外一堆向量 交叉 计算相关度 存内计算只是保持一支数据更靠近计算单元 一堆向量的变换 数字电路的特性 电路 电路模块不能太大,所以要大量的相同功能进行组合 组合带来了复杂的判断逻辑,需要流水化提高throughput 流水化带来的latency需要用复杂的同步机制 微观上说,各种scoreboard,forwarding,多级调度,都是在控制pipeline的精密配合 宏观上说,mailbox,barrier是在更高的维度进行同步 复杂同步对软件和应用有一定的要求 以上几个因素根据不同的设计都有非常大的弹性,整体的方案设计难度大 各种硬件(比如roq,sram读写口等)的数量是有限制的,不像软件视角不感知这个冲突。 各种操作,运算都是有延迟的,都不是实时单拍完成的 加速芯片 存储和传输 大量,大力度的并行搬运数据 各个级别的速度不一样 各个级别的暂存容量大小不一样 并行计算 大量的充分的并行计算 大量的数据复用 卷积,矩阵乘 同步 硬件微架构(电路)的难点和优势 难点/不适合 难以做复杂的算法(调度、分析、统计) 难以做逻辑深度比较深的计算 latency的长和不确定,模块间的时间不确定性 需要大量实现“异步”逻辑,消耗大量的面积 需要很大的buffer存储用于状态footprint,消耗大量的面积 增加外部控制的复杂度, PC需要对所有的操作异步化,降低实时性 为了高频、增加很多级流水线 浪费大量用于同步的逻辑 容易撞到功耗墙 latency的延长和调度不确定性 优势/适合 并行任务非常适合,适合简单的、重复的、大量的计算,比如MMU 带宽足够,可以做大量的并发处理 实时性好,可以做到cycle级别的调度 可以利用数字电路表达的特点加速 对2的幂次的乘除运算 固定算法的hash,mmu等处理 查找表计算:cuda的LOP3.LUT指令 通过软件的静态预先计算,最大化压缩硬件需要处理的表达空间