systolic array(SA)即脉动阵列。对于大规模的乘累加运算,SA将单个乘累加单元和数据流控制部件组成的process element(PE)进一步组织成大规模阵列,数据在PE之间打拍脉动传输。由于深度学习时代,计算负载以大规模的general matrix multiplication(GEMM)操作为核心,而SA在计算GEMM时,具备在较低访存需求的情况下实现高计算吞吐率,可拓展性强等优势,因此成为了被众多加速器广泛采用的GEMM计算单元架构,典型的就是Google的TPU系列芯片。

SA可以根据驻留数据的类型不同,区分为input stationary(IS),weight stationary(WS)和output stationary(OS)三种模式,如下图所示:

上述讨论的是GEMM的情况,对于卷积运算等其他运算类型还有更多的模式,例如Eyeriss的row stationary(RS)模式。但本文只对上述三种最经典的数据流模式进行介绍。

对于IS,WS,OS三种模式来说,工作负载类型会严重影响各自的性能表现。由于驻留的数据对象不同,在不同的数据复用场景下,各自有各自的优劣势空间。例如,对于输入数据高度复用的场景,输入驻留的IS模式会有最好的性能表现;对于权重数据高度复用的场景,权重驻留的WS模式会有最好的性能表现;对于输出数据高度复用的场景,输出驻留的OS模式会有最好的性能表现。

由于不同的负载的数据复用特性存在较大的差异,甚至同一类负载中,不同的层次都有很大的数据复用特性差异(例如transformer模型的self-attention层次,Q,K,V矩阵是跟随输入变化,动态生成然后直接参与到下一次计算的,因此适合输出数据复用的OS模式,但transformer中的fc层又是典型的权重高度复用的计算类型,因此适合权重数据复用的WS模式)。因此我们无法说哪一种数据流模式是最优的,只有最适合的。

正是源于SA这种对负载的数据复用特性的敏感性,目前大量的学术工作致力于实现可以支持多种数据流模式的新型混合SA结构,例如Flex-TPU同时支持了IS,WS,OS三种模式,其PE设计如下图所示:

可根据负载情况,动态配置为(a) IS模式,(b) OS模式,(c) WS模式。

还有UCB开源的gemmini加速器,采用了WS和OS混合的设计模式:

但混合数据流SA也会引入额外的设计和控制上的复杂度,并且由于引入了冗余的数据 & 控制部件,因此在特定场景下效率会低于单一数据流模式的SA,目前混合数据流SA结构仍然是一个前沿的学术研究方向。

除了数据流问题之外,SA的规模缩放问题,也是一个重要的问题。具体来说,为了追求更高的计算吞吐率,SA有scale up和scale out两种设计选项,如下图所示(一个褐色的R×C矩阵代表在一个SA上进行的运算):

(a) 为scale up方式,即增大单一SA的规模,从而计算更大的负载;(b) 为scale out方式,采用多个并行的小型SA同时计算,将更大的计算负载分担到多个SA上。

scale up的方式简单,但SA的规模增大也会导致计算的总延时线性增大,并且如果计算的矩阵形状不确定,scale up方式容易陷入低利用率的状态;而scale out的方式需要对多个SA进行组织调度,设计的难度增大,但单个SA的延时相对小,且可以更加灵活的支持变化的负载,始终保持均衡的利用率。因此两种方式的trade-off也是一个重要的前沿研究问题。 相关的学术研究工作可以参考:AxonSOSA

systolic array架构设计综述的更多相关文章

  1. 【转】App架构设计经验谈:接口的设计

    App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 安全机制的设计 现在,大部分App的接口都采用REST ...

  2. Atitit.架构设计趋势 设计模式 ---微服务架构  soa

    Atitit.架构设计趋势 设计模式 ---微服务架构  soa 什么是微服务架构?1 .微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现1 微服务与康威定律2 微服务的一些 ...

  3. App架构设计学习(一)---- 接口的设计

    一.哎,最近换了家工作,结果工作很出的我意外,没有干熟悉的根据需求写代码,反而让我一个小菜鸟去重构一下App的架构(他们公司的app,已经上线了1.0版本了),没办法,只有硬着头皮去先学习学习,再总结 ...

  4. 分布式发布订阅消息系统 Kafka 架构设计[转]

    分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开 ...

  5. 谈一款MOBA游戏《码神联盟》的服务端架构设计与实现

    一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者 ...

  6. Hybrid APP 架构设计思路

    关于Hybrid模式开发app的好处,网络上已有很多文章阐述了,这里不展开. 本文将从以下几个方面阐述Hybrid app架构设计的一些经验和思考. 原文及讨论请到 github issue 通讯 作 ...

  7. PHP实现微信随机红包算法和微信红包的架构设计简介

    微信红包的架构设计简介: 原文:https://www.zybuluo.com/yulin718/note/93148 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微 ...

  8. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现(更新优化思路)

    注:本文仅用于在博客园学习分享,还在随着项目不断更新和完善中,多有不足,暂谢绝各平台或个人的转载和推广,感谢支持. 一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是 ...

  9. 苏宁OLAP架构设计

    一. 功能综述 OLAP引擎为存储和计算二合一的引擎,自身内部涵盖了对数据的管理以及提供查询能力.底层数据完全规划在引擎内部,外部系统不允许直接操作底层数据,而是需要通过暴露出来的接口来读写引擎内部数 ...

  10. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

随机推荐

  1. 迁移学习&在线学习

    简介 英文: transfer learning 以已训练好的模型A为起点,在新场景中,根据新数据建立模型B 目的:将某个领域或任务上学习到的知识或模式,应用到不同但相关的领域或问题中. 特征提取 使 ...

  2. leetcode 需要了解的知识点储备

    简介 周赛的最好成绩3道题. 常用算法 lower_bound 二分查找 寻找比值小的 upper_bound 二分查找 lower_bound( )和upper_bound( )都是利用二分查找的方 ...

  3. hot_driver's 评语

    1)没有学会用面向对象的思维去分析和设计,比如:当我们要抽象出一个LED类,那么我们应该定义它的属性和操作.而我看到LED只有属性,而没有操作.常见的操作是关灯.开灯.调整亮度.调整颜色:而这些操作被 ...

  4. 只需一行命令,Win11秒变Linux开发主机!

    大家好,我是六哥,今天为大家分享,只需一行命令,就能拥有原生的Linux系统体验! 本文以真实操作为例,带你一步步解决常见问题,轻松搞定WSL+Docker环境. 一.只需一行命令,开启WSL 在Po ...

  5. SciTech-Mathmatics-https://www.desmos.com: we want to help everyone learn math, love math, and grow with math. CAASPP: Student Performance and Progress (CAASPP) System

    https://www.caaspp.org https://blog.desmos.com/articles/the-desmos-guide-to-building-great-digital-m ...

  6. Note -「Variational Auto-Encoder」VAE 学习与 MNIST 实战

    目录 \(1\) 数学基础 \(1.1\) KL 散度 \(1.2\) Evidence Lower BOund (ELBO) \(2\) 模型结构 \(2.1\) 基本假设 \(2.2\) Marg ...

  7. 携程apollp快速部署DVE集群

    1.环境准备: 这里只部署DEV环境 系统环境: 系统 ip ubuntu-18.04-live-server-amd64 192.168.1.112 ubuntu-18.04-live-server ...

  8. C语言数据结构-哈希表

    1.什么是哈希表? 哈希表是一种值映射地址的关系,是一种对应关系.要知道的两个概念,不知道不行. (1)哈希构造函数 用来描述值和地址的关系的,构造函数是由自己选择的,选择什么函数都可以.y=x这种函 ...

  9. T621307's std

    #include <bits/stdc++.h> using namespace std; void solve() { int T; cin >> T; while (T-- ...

  10. Program-List of 32th

    name function from memo date a01-oeis02.py oeis解析 OEIS 爬虫  OEIS format  书栈网文档 简洁,涉及python3.13的urllib ...