首页 > 其他分享 >量化存储墙以及功耗优化空间

量化存储墙以及功耗优化空间

时间:2024-11-22 16:58:15浏览次数:1  
标签:存储 功耗 能耗 times 计算 memory pJ 量化

CMOS 计算和存储工艺发展步调并不一致,SOTA Memory 最高频率的远远低于 SOTA CMOS。如下图所示[1]

memory_wall

除了性能,能耗上存储也远远高于计算能耗,存储能耗受诸多譬如大小、宽度等参数影响,但不妨粗略进行数量级估计计算,如图 2014 年 ISSCC 经典的数据 45 nm 0.9V 下,计算和能耗开销[2]

ISSCC

而为了尽可能发挥 CMOS 的性能,现有体系架构穿插了一层又一层的 memory hierarchy,发掘数据复用度从而发掘存储、计算系统最大 utilization。这就将算法-硬件自然地联系在一起,如 roofline model。

Roofline model 针对性能而言,本文延续 software-hardware 从能耗角度分析优化的边界所在。

compute idensity 自然地将算法和硬件、计算和存储结合在一张表上,简洁、优雅、对称,在工程领域难得有如此优雅的公式。

存储到计算的鸿沟:Gp 值

回到 ISSCC 图标,将所以计算能耗统一放缩到 64 bit 下:

Operation Bit-width Energy (Original) Energy (Scaled to 64b) Scaled Energy (Relative)
IAdd 8b 0.03pJ 0.24pJ 1.2x
IAdd 32b 0.1pJ 0.2pJ 1.0x
IMul 8b 0.2pJ 1.6pJ 8.0x
IMul 32b 3.1pJ 6.2pJ 31.0x
FAdd 16b 0.4pJ 1.6pJ 8.0x
FAdd 32b 0.9pJ 1.8pJ 9.0x
FMul 16b 1.1pJ 4.4pJ 22.0x
FMul 32b 3.7pJ 7.4pJ 37.0x
IFma 8b 0.23pJ 1.84pJ 9.2x
IFma 32b 3.2pJ 6.4pJ 32.0x
FFma 16b 1.5pJ 6.0pJ 30.0x
FFma 32b 4.6pJ 9.2pJ 46.0x

因为 AI 领域最常用的基础计算是乘加(FMA, Fused Multiply Add),补充了乘加的能耗数据。

整数加法的门复杂度随着 bit 位数线性变化,IAdd 8b 和 IAdd 32b 放缩后能耗近似符合假设。按理 IAdd 8bit 放缩后应当比 IAdd 32bit 更加节能(8 个 8 bit Adder 对比 2 个 32bit Adder,相当于一部分 Full Adder 替换为 Half Adder ),结果相反的原因大概率是舍入误差,不影响深入分析。

将计算功耗统一 bit 位数是为了和存储对齐,存储功耗数据如下:

Memory Size Energy
Cache 8KB 10pJ
Cache 32KB 20pJ
Cache 1MB 100pJ
DRAM(min) - 1.3nJ
DRAM(max) - 2.6nJ

每次执行一次二元操作(乘法除法),读取两个操作数,输出一个操作数,要进行三次 memory access 操作,进行一次三元操作(乘加),则要进行四次 memory access 操作。

计算 \(Gp = \frac{\text{Memory Operators} \times \text{Memory Energy}}{\text{Scaled Energy}}\),结果如下:

Memory/Operator Iadd 8bit Fmul 32bit Ifma 8bit Ffma 16bit Ffma 32bit
Cache 8KB 125x 4.05x 21.7x 6.67x 4.35x
Cache 32KB 250x 8.11x 43.5x 13.3x 8.70x
Cache 1MB 1250x 40.5x 217x 66.7x 43.5x
DRAM min 16300x 527x 2830x 867x 565x
DRAM max 32500x 1050x 5650x 1730x 1130x

Gp 值的含义是,如果数据没有任何的复用,并且系统中只存在对应的存储和计算组件(比如只有 DRAM 和 Ffma 32bit 计算单元)时,存储能耗相比计算能耗的比例,一个非常理想的边界值,相当直观地揭示了存储能耗和计算能耗的差距(Gap)。

再计算一个 \(G = \frac{ \text{Memory Energy}}{\text{Scaled Energy}}\) ,其作用后文再提及。

Memory/Operator Iadd 8bit Fmul 32bit Ifma 8bit Ffma 16bit Ffma 32bit
Cache 8KB 41.7x 1.35x 5.43x 1.67x 1.09x
Cache 32KB 83.3x 2.70x 10.9x 3.33x 2.17x
Cache 1MB 417x 13.5x 54.3x 16.7x 10.9x
DRAM min 5420x 176x 707x 217x 141x
DRAM max 10800x 351x 1410x 433x 283x

量化功耗优化空间

实际系统数据存在复用度,且系统中有多层memory,对于某一层的 hierarchy,不是所有的数据都会经过。为了理论分析,只考虑一层 memory 的能耗,进而对理论修正复用度。

先前计算大都以 FLOPS 的视角推导,而这次我们将从数据量的视角开始。系统的总能耗为:

\[\begin{align*} E =& E_{\text{memory}} + E_{\text{compute}}\\ =& Operands \times (e_{\text{memory}} / RU + RC \times e_{\text{compute}} / P) \end{align*} \]

  • Operands :代表数据量,比如一次乘法涉及3个操作数
  • \(e_{memory}, e_{compute}\) :对齐 bit 的存储计算能耗
  • P: Pattern, operands 和 FLOPS 的桥梁,表示进行一次计算需要 operands 的数量,即前文的 Memory Operators [3]
  • RU:Reuse,表示实际运行时的所有数据复用度的平均值(而非依赖图理论最高复用度)
  • RC:Recomputation,重复运行相同计算操作的平均次数,由于底层 memory 存储有限,中间量需要复用,存在低级 memory 复用消耗存储空间进而影响其他变量的复用度,而写回去又有能耗性能损失,不如保留源操作数放弃中间变量,需要时重新计算[4]

由于单位能耗 \(e_{memory}\) 远远大于 \(e_{compute}\),系统中能耗一般 bottle neck 在存储能耗开销,而计算能耗对于一定的算法、一定的计算量能耗就是固定的 [5],存储开销缺少硬件参数、调度策略等等决策空间极大。“优化系统能耗”基本等价于“优化存储能耗”,为了量化优化的程度,引入比值

\[O = \frac{E_{memory}}{E_{compute}} = P \times \frac{e_{memory}}{e_{compute}}\times \frac{1}{RU\times RC} = \frac{G \times P}{RU \times RC} = \frac{Gp}{RU \times RC} \]

一般来说 O > 1,这个值越小,优化结果越好。Gp 和执行计算种类以及硬件能耗表现有关,如果纯架构不涉及电路,G 一般可看作定值。可见优化的目标是使 \(RU \times RC\) 值最小。


  1. AI and Memory Wall ↩︎

  2. Computing’s Energy Problem (and what we can do about it), ISSCC 2014 ↩︎

  3. 比如前文的 3、4 ,SambaNova 中将数据模式归类为 Map、Zip、Reduce 三类,详细见 https://sambanova.ai/hubfs/23945802/SambaNova_Accelerated-Computing-with-a-Reconfigurable-Dataflow-Architecture_Whitepaper_English-1.pdf ↩︎

  4. Stereo Matching Accelerator With Re-Computation Scheme and Data-Reused Pipeline for Autonomous Vehicles ↩︎

  5. 除非修改算法做等价变换,类似 A = A x 5 / 5,额外增加了两次计算量,等价变换可能是可以增大 reuse 程度,进而提高整体功耗和性能,比如 FlashAttention ↩︎

标签:存储,功耗,能耗,times,计算,memory,pJ,量化
From: https://www.cnblogs.com/devil-sx/p/18563196

相关文章

  • 【SqlServer】datetime存储精度问题探究
    最近使用sqlserver2012的时候注意到datetime类型的毫秒的精度是存在问题的,好奇是怎么回事,特意来研究一下问题复现如下的sql执行UPDATEAlarmItemSETcreate_time='2024-01-0100:00:00.000'Whereid=1;UPDATEAlarmItemSETcreate_time='2024-01-0100:00:00.001'Whe......
  • LInux基础——裸金属宿主机挂载后端存储数据盘丢失
    裸金属宿主机挂载后端存储数据盘丢失1、问题描述物理机批量底层块设备丢失问题; 2、问题分析i.物理卷、卷组、逻辑卷发现块设备打开失败;检查物理卷状态:pvscan检查卷组状态:vgscan检查逻辑卷状态:lvscan初步判断问题原因:查看物理卷pv、卷组vg、逻辑卷lvs报错“Nosuchdevic......
  • 实验三 存储管理
    一、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。二、主要仪器设备、试剂或材料     VMa......
  • WEB攻防-XSS跨站&反射型&存储型&DOM型&标签闭合&输入输出&JS代码解析
    XSS跨站-输入输出-原理&分类&闭合漏洞原理:接受输入数据(如前端JS代码进行执行),输出显示数据后解析执行(先分析,在输入,有闭合绕闭合,有过滤绕过滤)反射(非持续型攻击)有一些浏览器会阻止不确定用户会不会点击利用:可以制造一个钓鱼网站基础类型:反射(非持续),存储(持续),DOM......
  • 掘金量化策略运行时,如何防止程序中断导致的数据丢失?
    背景掘金量化策略运行时,有些客户需要将电脑带回家/带去上班,或者遇到断网、断电、电脑更新等情况导致的关机等,策略就需要重新启动,但启动后历史数据就缺失了,尤其是一些更策略有关的变量,例如实盘交易的开仓时间,持仓周期,持仓以来最高点/最低点等自定义信息。那有这种需求的时候,就......
  • 【Python】0基础学Python——字符串编码、base64编码、不可逆加密、公私钥存储、公钥
    0基础学Python——字符串编码、base64编码、不可逆加密、公私钥存储、公钥加密私钥解密、签名和认证、函数标注类型字符串编码base64编码地址解码-1地址解码-2不可逆加密md5加密sha256加密公私钥存储获取密钥对获取字符串流存储到文件公钥加密私钥解密公钥加密1.字符......
  • label 是一个用于 设置或更改磁盘分区的标签(卷标)的命令。卷标是一个可以帮助你识别存
    label|MicrosoftLearn LABEL/?创建、更改或删除磁盘的卷标。LABEL[drive:][label]LABEL[/MP][volume][label] drive:     指定驱动器号。 label     指定卷标。 /MP      指定卷应被视为装入点或卷名。 volume  ......
  • 网络爬虫——常用存储方式
    在网络爬虫中,根据爬取的数据类型和业务需求,可以选择多种存储方式。本节将详细讲解将数据存储为CSV和Excel文件、SQLite数据库和MongoDB等NoSQL数据库的使用方法。1.存储为CSV和Excel文件1.1CSV文件存储1.1.1什么是CSV文件?CSV(Comma-SeparatedValues)......
  • 量化交易软件和普通交易软件有哪些不一样的地方?
    炒股自动化:申请官方API接口,散户也可以python炒股自动化(0),申请券商API接口python炒股自动化(1),量化交易接口区别Python炒股自动化(2):获取股票实时数据和历史数据Python炒股自动化(3):分析取回的实时数据和历史数据Python炒股自动化(4):通过接口向交易所发送订单Python炒股自动化(5):......
  • 简述下html5的离线存储原理,同时说明如何使用?
    HTML5离线存储的核心原理是利用浏览器缓存机制,允许Web应用程序在用户离线时仍然可以访问和使用本地缓存的资源,从而提供更好的用户体验。主要涉及以下几个关键技术:1.Manifest文件:这是离线应用的核心,一个简单的文本文件,列出了需要缓存的资源。浏览器会根据manifest文件的内......