# AI计算需求的抽象

### 算子角度

1. 信息维度映射，信息过滤，信息选择 ：Dot / GEMM => Join+Reduce
2. 激活 ： ElementWise Broadcast
3. 统计、动态选择、排序 ： Reduce 、G/S
4. 随机数生成
5. 是不是可以把所有的计算都抽象成查找表的方式
    1. 操作的方式由操作码+密码数来指定，实际上是定义一个查找表
    2. 操作码可以是指令的imm，密码数可以是约定的，也可能是提前载入的
    3. 乘法等价？
    4. [![企业微信截图_17333877918295.png](https://agix.host/uploads/images/gallery/2026-04/0mc17333877918295-png.png)](AI计算需求的抽象/0MC17333877918295-png.png)

### 信息加工的角度

1. 一堆向量和另外一堆向量**交叉**计算相关度
    1. 存内计算只是保持一支数据更靠近计算单元
2. 一堆向量的变换

### 数字电路的特性

#### 电路

1. 电路模块不能太大，所以要大量的相同功能进行组合
2. 组合带来了复杂的判断逻辑，需要流水化提高throughput
3. 流水化带来的latency需要用复杂的同步机制
    1. 微观上说，各种scoreboard，forwarding，多级调度，都是在控制pipeline的精密配合
    2. 宏观上说，mailbox，barrier是在更高的维度进行同步
4. 复杂同步对软件和应用有一定的要求
5. 以上几个因素根据不同的设计都有非常大的弹性，整体的方案设计难度大
6. 各种硬件(比如roq，sram读写口等)的数量是有限制的，不像软件视角不感知这个冲突。
7. 各种操作，运算都是有延迟的，都不是实时单拍完成的

#### 加速芯片

1. 存储和传输
    1. 大量，大力度的并行搬运数据
    2. 各个级别的速度不一样
    3. 各个级别的暂存容量大小不一样
2. 并行计算
    1. 大量的充分的并行计算
    2. 大量的数据复用
    3. 卷积，矩阵乘
3. 同步

#### 硬件微架构（电路）的难点和优势

##### 难点/不适合

1. 难以做复杂的算法（调度、分析、统计）
2. 难以做逻辑深度比较深的计算
    1. latency的长和不确定，模块间的时间不确定性
    2. 需要大量实现“异步”逻辑,消耗大量的面积
    3. 需要很大的buffer存储用于状态footprint,消耗大量的面积
    4. 增加外部控制的复杂度，
    5. PC需要对所有的操作异步化，降低实时性
    6. 为了高频、增加很多级流水线
        1. 浪费大量用于同步的逻辑
        2. 容易撞到功耗墙
        3. latency的延长和调度不确定性

##### 优势/适合

1. 并行任务非常适合，适合简单的、重复的、大量的计算，比如MMU
2. 带宽足够，可以做大量的并发处理
3. 实时性好，可以做到cycle级别的调度
4. 可以利用数字电路表达的特点加速
    1. 对2的幂次的乘除运算
    2. 固定算法的hash，mmu等处理
    3. 查找表计算：cuda的LOP3.LUT指令
    4. 通过软件的静态预先计算，最大化压缩硬件需要处理的表达空间