Domain-Specific Architectures¶
Abstract
Chapter 7: Domain-Specific Architectures of Computer Architecture: A Quantitative Approach
- Introduction
- Guidelines
- Example Designs
- Google's Tensor Processing Unit
- Microsoft Catapult
- Intel Crest
- Pixel Visual Core
- Cross-Cutting Issues
- Putting It All Together: CPUs Versus GPUs Versus DNN Accelerators
Introduction¶
-
Motivation:
- Moore 预测了 50 年后晶体管的消亡。
- Dennard 定律,多的晶体管现在意味着更多的功率。能源预算没有增加,我们已经用多个高效核心取代了单个低效处理器。因此,我们没有什么办法可以继续大幅改进通用架构的性价比和能源效率。由于能量预算有限,如果我们想要更高的性能(ops/s),我们需要降低 energy per operation。
Energy Example
如果保持通用性,我们修改 core,可能获得 10% 的提升。但是如果想获得数量级的改进,就需要将每条指令的算术运算数量从 1 增加到数百。为此要从 general-purpose cores 转向 domain-specific architectures(DSAs)。
-
Such computers will be much more heterogeneous than the homogeneous multicore chips of the past.
- 计算机将由标准处理器组成,用于运行传统的大型程序如 OS,以及仅执行有限范围任务的 DSAs。
- 过去几十年利用 Moore 的架构创新可能不太适合某些领域,如 cache, out-of-order。我们可以针对特定领域进行更好地资源复用,提高 energy efficiency。
- Challenges:
- 找到需求足够大的目标,以证明在 SOC 甚至定制芯片上分配专用芯片是合理的。
- 一个方法是利用可重构的设备,如 FPGA,这样可以提高适用范围。但是相应地,这样的硬件没用定制芯片 efficient。
- 如何移植软件到 DSA 上。
- 找到需求足够大的目标,以证明在 SOC 甚至定制芯片上分配专用芯片是合理的。
Guidelines¶
使用下面的准则,可以带来更简单的设计;更好地匹配 99% 的 response-time deadlines。
- Use dedicated memories to minimize the distance over which data is moved. 使用专用内存来最小化数据之间的移动距离。
- Invest the resources saved from dropping advanced microarchitectural optimizations into more arithmetic units or bigger memories. 将节省的资源(不使用高级的微架构优化)投入到更多的算术单元或更大的内存中。
- Use the easiest form of parallelism that matches the domain. 使用匹配领域的最简单的并行模式。
- Reduce data size and type to the simplest needed for the domain. 减少数据大小和类型到领域所需的最简单形式。
- Use a domain-specific programming language to port code to the DSA. 使用领域特定的编程语言来移植代码到 DSA 上。
Guideline Example
Example Designs¶
Example Domain: Dennard¶
Google's Tensor Processing Unit¶
- an Inference Data Center Accelerator
-
Architecture
- TPU 是通过 PCIe I/O bus 的协处理器,可以插入到现有的 servers。
- 为了简化设计,由 host server 通过 PCIe bus 发送指令,而不是 TPU 自己读取从内存读指令。
- 内部 blocks 之间由 256B 的路径连接。
- MMU 是一个 256\(\times\)256 的 ALU 阵列,每个 ALU 可以执行 8-bit MAC 操作;16-bit 结果在 4MiB 的 32-bit Accumulator 累加。
- 如果混合使用 8-bit weight 和 16-bit activation 时(反之亦然),矩阵单元以 ½ 速度计算,而当两者都是 16-bit 时,它以 ¼ 速度计算。
- 它每个时钟周期读取和写入 256 个值,并且可以执行矩阵乘法或卷积。
- 非线性函数由 Activation 硬件计算(Accumulator 下方)。
- Weights 通过片上 Weight FIFO 进行分级,该 FIFO 从 Weight Memory(片外 8 GiB DRAM)中读取(对于推理,权重是 read-only 的;8 GiB 支持许多同时活动的模型)。
- 中间结果保存在 24 MiB 片上 Unified Buffer 中,可用作矩阵乘法单元的输入和输出。也可以通过 DMA 与 CPU 传输数据。
-
Microarchitecture
- 设计哲学:keep MMU(Matrix Multiply Unit) busy. 即将其他操作(读权重,读写激活值)与 MMU 的操作 overlap。
-
读大 SRAM 会消耗大量 energy,因此 MMU 采用 systolic array 来节省 energy(减少了读写 unified buffer 的次数)。
-
systolic array 是 2D array,每个算术单元独立地计算部分结果。它依赖于来自不同方向的数据以规则的间隔到达数组中的单元格,然后将它们组合起来。
Systolic Array
-
在 systolic array 中,输入数据只会从内存中读取依次,输出数据也只会写入内存一次。这样可以减少内存访问的次数,从而减少能耗。
-
-
ISA
- 使用 CISC 指令,没有 PC 和分支指令,CPI 为 10-20,主要有下面五类:
Read_Host_Memory
,从 CPU host memory 读取到片上 Unified Buffer。Read_Weights
,从 Weight Memory Weight FIFO 以便进入 MMU。MatrixMultiply/Convolve
,执行矩阵乘法,矩阵向量乘,逐元素矩阵乘,逐元素向量乘,或者卷积。矩阵运算采用可变大小的 B\(\times\)256 输入,将其乘以 256\(\times\)256 常量输入,并产生 B\(\times\)256 输出,需要 B 个流水线周期才能完成。Activate
,执行非线性激活函数,如 ReLU,Sigmoid。Write_Host_Memory
,从片上 Unified Buffer 写回到 CPU host memory。
- 使用 CISC 指令,没有 PC 和分支指令,CPI 为 10-20,主要有下面五类:
-
Implementation
- 700MHz,662mm2,65nm,40W。
-
Software: 使用 TensorFlow。
-
Improving over TPU
- 提高内存带宽有最大的效果。
- 时钟频率的收益不大。
- 当 MMU 扩大到 512\(\times\)512 时,性能反而会下降。类似于内存内部碎片的问题。e.g., 600\(\times\)600 的矩阵乘法,可以分成 9 个 256\(\times\)256,即 18us;也可以分成 4 个 512\(\times\)512,即 32us。
Summary: How TPU Follows the Guidelines
- 片上 24MiB Unified Buffer,Weight FIFO。
- 28 MiB of dedicated memory and 65,536 8-bit ALUs,和 server 级别的 CPU 相比有 60% 的内存和 250 倍的 ALU。
- 2D SIMD,利用 MMU 实现。以及有简单的指令 overlap pipeline。相比之下 GPU 依赖多进程、多线程、1D SIMD;CPU 依赖多进程,乱序执行、1D SIMD。
- 只支持 8/16-bit integer,32-bit integer 用于累加。相比之下 CPU GPU 都支持 64-bit integer 和 32/64-bit floating point。
- 使用 TensorFlow,而不是 C++/CUDA/OpenCL。
Microsoft Catapult¶
- a Flexible Data Center Accelerator
- Architecture: 使用 FPGA,提供了 flexibility,以适应不同 server 上的不同应用程序,并重新编程同一服务器以随着时间的推移加速不同的应用程序。
-
Software
- 与 TPU 不同,Catapult 要使用 Verilog/VHDL 这样的 HDL 来编程。
-
code 分为 shell 和 role,其中 shell 相当于系统库,提供了一些可以复用的代码,如数据编组、CPU 到 FPGA 通信、FPGA 到 FPGA 通信、数据移动、重新配置和运行状况监控。
-
CNNs on Catapult
Summary: How Catapult Follows the Guidelines
- Alter V FPGA 有 5MiB 片上内存,可以根据应用程序进行定制。
- Altera V FPGA 有 3926 18-bit ALUs,例如对于 CNN 可以创造 systolic array,对于 ranking 可以有 60-core 进行多进程。
- Catapult 根据应用程序选择并行方式,例如 CNN 使用 2D SIMD,ranking 使用 MISD。
- 可以支持各种数据类型,根据应用程序需要选择。
- 使用 RTL 编程(没有跟随 guideline),希望未来可以有 domain-specific language 进行编程。
Intel Crest¶
- a Data Center Accelerator for Training
- Crest 指令对 32\(\times\)32 矩阵块进行操作。
- 使用 flexpoint 的格式:32\(\times\)32 个 16-bit 数据矩阵共享一个 5-bit 指数,该指数作为指令集的一部分提供。
- Crest 有 12 Processing Cluster。每个集群都包含一个大 SRAM、一个线性代数 PE 以及少量用于片内和片外 routing 的逻辑。
- 四个 8 GiB HBM2 DRAM 模块提供 1 TB/s 的内存带宽,这将为 Crest 芯片带来有吸引力的 Roofline 模型。
-
除了到主内存的高带宽路径之外,Lake Crest 还支持处理 Processing Cluster 内的计算核心之间直接高带宽互连,无需通过共享内存。
Pixel Visual Core¶
- a Personal Mobile Device Image Processing Unit
TODO
Cross-Cutting Issues¶
-
Heterogeneity and System on a Chip (SOC)
- 将 DSA 合并到系统中的简单方法是通过 I/O bus,同时 DSA 具有专用内存来避免从主内中移动数据(要经过 I/O bus)。
- Amdahl's law 告诉我们加速器的性能受到主存和加速器内存之间传输数据的频率的限制。
- 可以把加速器集成到同一个 SoC 中,这就是 IP block。
- IP block 应该要在 PPA 上 scalable,这样可以在不同的 SoC 中使用。
-
An Open Instruction Set
- DSA 的一个挑战是如何协作 CPU 来执行剩下的指令,如果是同一个 SoC 就需要有统一的指令。之前 SOC 的第一步是与一家公司签订合同以锁定指令集。
- 替代方法是设计定制的 RISC 处理器并移植编译器和库。一位 AMD 工程师估计在一个现代微处理器中有 12 个指令集。
- 可以使用 RISC-V 开源指令集,一个可行的免费且开放的指令集,并保留了大量的操作码空间,用于为特定领域的协处理器添加指令。而且对于 DSA 来说,是指令集并不像对通用处理器那么重要。
Putting It All Together: CPUs Versus GPUs Versus DNN Accelerators¶
-
Roofline
-
TPU
-
CPU
-
K80 GPU
-
-
Cost-Performance