高性能稀疏卷积神经网络计算核心Phantom解析
立即解锁
发布时间: 2025-08-31 00:09:43 阅读量: 4 订阅数: 9 AIGC 

### 高性能稀疏卷积神经网络计算核心Phantom解析
#### 1. 现有稀疏卷积计算方案的不足
在稀疏卷积神经网络(Sparse CNNs)的计算中,存在着多种不同的方案,但它们都或多或少存在一些问题。
- **Tensaurus**:引入了压缩交错稀疏切片(CISS)数据流来加速密集和稀疏张量分解,但仅能支持单边稀疏性。
- **部分稀疏GEMM加速器**:
- **Extensor和Sigma**:采用输出固定(内积)数据流进行稀疏矩阵乘法。然而,对于高度稀疏的矩阵,内积数据流效率低下,因为即使有效计算(非零×非零)较少,也必须遍历行和列的每个元素,导致大量计算资源浪费。
- **SpArch和OuterSPACE**:使用输入固定(或外积)数据流,避免了内积数据流的低效问题。但外积数据流的输出重用性较差,因为生成的部分输出数量多于最终输出,会导致显著的内存流量问题。
- **MatRaptor**:引入了通道循环稀疏行(C2SR)数据流,以提高重用性和内存效率。它是CSR格式的改进版本,但输出矩阵需要复杂的编码。
- **SCNN、SparTen和Eyeriss v2**:能够利用完全双边稀疏性,但存在一些问题,如微架构效率低下、不支持全连接(FC)层和非单位步长卷积、PE设计复杂以纳入压缩稀疏列(CSC)压缩格式,或存在系统性负载不平衡。
#### 2. Phantom核心的主要贡献
Phantom核心针对上述问题,提供了两个主要贡献:
- **同时考虑激活和权重稀疏性**:提前查看未来的计算,以确定仅有的有效乘加(MAC)操作(非零权重×非零激活)。
- **动态非线性数据调度**:由于处理元素(PE)采用多线程设计,数据调度根据输入和权重矩阵的稀疏性以动态、非线性的方式进行。这确保了只有有效的计算被映射到多线程PE上,避免了计算周期的浪费。与那些以恒定方式将数据调度到PE中,并在读取到零值时停止计算的设计不同,Phantom核心不会浪费计算周期。
#### 3. 卷积示例及问题分析
以一个3×3卷积为例,一个3×8的输入与一个3×3的滤波器进行卷积,产生一个1×6的输出。从这个示例中可以看出,平均有55%的计算涉及与零的乘法,这导致大量计算周期被浪费,有效吞吐量显著下降。Phantom核心通过前瞻掩码(look-ahead masking)来解决这个问题,跳过涉及零的无效计算,从而最大化有效吞吐量。
#### 4. 稀疏掩码表示
Phantom核心使用一种称为稀疏掩码的二进制掩码来表示权重和激活数据,与最近使用压缩稀疏行(CSR)或CSC格式表示非零数据的方法不同。稀疏掩码提供了一种高效且简单的数据表示方式,无需显式存储零值,也不需要CSC(和CSR)格式所需的计数和数据指针存储。
对于特定矩阵,以列主序格式存储两个数组:
- **数据数组**:包含非零数据。
- **二进制数组**:包含稀疏掩码。稀疏掩码数组中的1表示存储的非零值的位置,0表示未存储的零数据。
为了处理特定类型的卷积,稀疏掩码和数据数组被分割成块并调度到核心。下面是一个输入矩阵和权重矩阵的稀疏掩码表示示例:
| 矩阵类型 | 数据数组 | 稀疏掩码数组 |
| ---- | ---- | ---- |
| 权重矩阵(W) | wa1, wa2, wb0, wb1, wc0, wc1 | 0 1 1 1 1 0 |
| 输入矩阵(IA) | a0, a1, a2, b1, b2, c0, c1, d0, d2, e1, e2, f0, f2, g0, h0, h1 | 1 1 1 1 1 0 0 0 1 1 1 0 1 1 0 0 |
#### 5. 核心架构
Phantom核心接受稀疏掩码格式的数据,由五个主要块组成,其架构如下:
```mermaid
graph TD
A[Lookahead Masking (LAM)] --> B[Top-down Selector (TDS)]
B --> C[Thread Mapper (TM)]
C -->
```
0
0
复制全文
相关推荐










