从存储器原理看 cpu 内存墙的本质

news2025/1/12 12:27:21

冯诺伊曼结构是个 cpu 和主存储器的通信结构,一个通信过程时延可分为处理时延,传播时延,排队时延,三者共同构筑了内存墙。其中处理时延最核心也最无解,先看它。

看个作为标准存储单元的双稳态触发器(至少教科书上就这样教的):
在这里插入图片描述

电路简单且高效,一次可直接读写 0 或 1。把这电路铺开,就能存储 8bit,32bit,1kbyte,1M,10M,100M…它可以存储任意大小的数据。

但世界不是线性堆砌的,再次推荐《规模-复杂世界的简单法则》。

在工程学上,系统工作原理一定会随着规模或尺度而发生变化,在本质上是由系统各部分的伸缩率不一致导致,这也是本文的升华,换在其它领域也合适。

一个双稳态触发器需要 6 个 MOS 管存储 1 个 bit,问题就是工程极限在哪里,这极限涉及到两方面,一个是技术极限,主要是人类目前的技术最大集成度,另一个是成本极限,即人们能承受多高的成本批量生产最大集成度的产品。

越来越多的 MOS 管集成在相对固定的面积上,逐渐逼近技术极限和成本极限,当继续这种线性扩展的集成方式变得不划算时,就要做个买卖,用另一种相对可承担的代价换更简单的存储,存储器的工作原理势必要改变,而这个代价就是时间,时间可换一切。

因此,上述双稳态触发器只能构建相对较小的存储器,比如 cpu cache。而相对更大的主存储器,存储单元一定更为简单,但操作速度肯定更慢,这是一笔买卖。

看主存储器的存储单元,它靠一个电容保存 0 或 1:
在这里插入图片描述

比双稳态触发器更简单,显然可集成度更高,适合做大存储。

如果双稳态触发器按照空间展开 “一次性” 读写 0 或 1,那么电容存储器则按照时间展开 “分步骤” 读写 0 或 1,一个时间换空间的 case:

  1. 选择线接通 MOS;
  2. 电压传感器往 “列” 线加 0.5*v 伏电压;
  3. 电压传感器感受到电压变化:如果 C 充电状态,电压传感器将感受到电压逐渐上升,反之则感受到下降;
  4. 如果电压传感器感受到升压,则往 “列” 线加压到 v 伏并给数据线高电平,同时充满 C 以弥补 “破坏性读”,如果感受到降压,则将 “列” 线直降到 0 并给数据线低电平,电容 C 放电。

电容存储器读写显然更慢,但存得更多了。

你不想摊得太大,你就要分很多步骤。你的书桌可以书本掀开,倒扣,摊得很乱,便于随手捡拾上次读到的那本书的那页码,但书房就不能这么搞,必须把书合上并堆叠在一起才能存放更多,取的时候也就要稍微费点事。

说回 cpu 内存墙。我们已经看到主存和 cpu 内部的 cache 相比是多么 “低效” 了,而这个低效又是个交易的固有结果,这堵内存墙已经被这买卖构筑了一大半。

传播时延同样不容小觑,而这依然和时间换集成度有关,又是个买卖。

一次向 cpu 传输大量数据还是多次传输少量数据,这涉及到内存总线宽度,而总线宽度和引脚数量直接关联,这又是个集成度的问题。

由于 cpu 和内存在空间上分离,它们间的部分没有 “硅属性”,换句话说内存,cpu 通道不是集成的,几乎就是焊在主板上的 “裸铜线”。与硅晶体在 < 10nm 级操作不同,铜线的尺度在 ms 级,二者相差 1000000 倍,并排几百根铜线想都别想。这意味着 32,64 根数据线已经够多了,如果要传输几 MB 的数据,必须往来很多次。

按照信号的传输速度 200000km/s,0.5ns 可传输 10cm 的距离,大概就是 cpu 到内存的尺度,往来 100 次就是 50ns,而 DDR5 的读写时延约 15ns,二者几乎在一个尺度,这与 tcp/ip 比就是龟速,相当于 sender 花 20ms 准备好 “浙江温州皮鞋湿” 这句名诗,然后花 20ms 从上海传输到广州,而实际上,sender 准备这句名诗的时间只在 ns 级,和传播时延差至少 5 个数量级。

如果内存读写要 15ns,传播要 50ns,总共 65ns 的时延,这对于 cpu 是必然要抱怨的,再加上多核 cpu 场景下还要拥塞控制,几乎就是 100ns 级时延了。

大容量几乎意味着廉价和共享,二者可以相互解释,没什么可抱怨的,追求性价比的心理对于构建多核心架构的分层存储体系非常必要。既然共享资源,就一定会出现拥塞,而拥塞控制的代价还是时间,这又是一个买卖,随着 cpu 核的增多,这买卖利润越低,越不好做。

以上就是 cpu 内存墙的本质。

最后要升华一下,我觉得冯诺伊曼结构构筑的 cpu 内存墙不是问题而是方案,正是这堵墙让计算机变得廉价可拥有,走向千家万户,走向几乎所有领域。

换句话说,分层存储体系就是可扩展性本身,而一味追求高效的 cpu cache 类存储是没有可扩展性的。如果从冯诺伊曼结构再往前,我们终将遇到图灵机,图灵机的读写头常用而不常有,而纸带无限,这是最基本的可扩性需求,也是图灵机时间换空间的精髓。

所以,不要嫌楼下的全家便利店贵了,你可以徒步去 800 米外的大润发超市,或者开车 1 小时去 30 公里外的批发市场。明白什么是可扩展性本身如何自噬就明白了世界的本质,到处都是内存墙,企图突破它既不可能,也没必要。

至于存内计算,往廉价的电容内存里增加晶体管,至于 DPU,至于在网计算,都需要一定的技术突破或发现新的物质,而不是堆砌现有的技术,否则,历史已经证明这种堆砌虽高效,但不划算。

浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1281872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.1 Linux C 编程

一、Hello World 1、在用户根目录下创建一个C_Program&#xff0c;并在这里面创建3.1文件夹来保存Hellow World程序&#xff1b; 2、安装最新版nvim ①sudo apt-get install ninja-build gettext cmake unzip curl ②sudo apt install lua5.1 ③git clone https://github.…

深入理解Go语言GC机制

1、Go 1.3之前的标记-清除&#xff08;mark and sweep&#xff09;算法 Go 1.3之前的时候主要用的是普通的标记-清除算法&#xff0c;此算法主要由两个主要的步骤&#xff1a; 标记&#xff08;Mark phase&#xff09;清除&#xff08;Sweep phase&#xff09; 1&#xff09…

geemap学习笔记019:监督分类与精度验证(上)

前言 上一节中介绍了非监督分类&#xff0c;今天就详细介绍一下监督分类与精度验证。从这一节开始&#xff0c;我也是配置了本地的geemap&#xff0c;就可以不用colab了&#xff0c;配置也是花了挺长时间&#xff0c;但好在也是能够成功应用了&#xff0c;准备用两节的时间介绍…

【备忘干货】c/c++ (wasm)和js互相调用记录

c/c&#xff08;wasm&#xff09;和js互相调用记录 废话 :)准备工作&#xff1a;安装Emscripten初探&#xff1a;C(wasm)之hello world进一步探究&#xff1a;接口调用1.js调用c&#xff0c;一些基本类型的传递&#xff08;char*&#xff0c;int&#xff0c;float&#xff09;以…

博客访问量到达2万了!

博客访问量到达2万了&#xff01;这也发生的太快了吧&#xff0c;前两天才1万7千访问量&#xff0c;用了平台送的1500的流量券&#xff0c;粉丝从1个&#xff08;N年前的&#xff09;&#xff0c;蹭蹭的往上涨&#xff0c;这也太“假”了吧。关键我也是个菜鸟自学者&#xff0c…

前端组件库开发

通常我们会使用很多组件库&#xff0c;有时候我们会去看源码比如element&#xff0c;antd&#xff0c;然后发现多少是按需导出&#xff0c;和vue.use全局注册&#xff0c;依赖于框架的拓展。 组件库的开发依赖框架的版本和node的版本&#xff0c;这个是需要说明的&#xff0c;然…

Redis--15--缓存穿透 击穿 雪崩

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 缓存穿透 击穿 雪崩运行速度:1 缓存穿透问题描述:如何解决: 2 缓存击穿问题描述:如何解决: 3 缓存雪崩说明:解决方案: 缓存穿透 击穿 雪崩 问题描述: 由于海量的用…

BurpSuite 请求/响应解密插件开发

BurpSuite 请求/响应解密插件开发 本文主要记录如何利用burp官方的新版API即MontoyaApi 写一个请求/响应的解密插件。背景下面是主要的操作步骤&#xff1a;根据上述操作做完之后&#xff0c;生成&#xff0c;然后在burp中加载插件&#xff0c;然后通关抓包看效果&#xff0c;具…

VSCode 中将头文件和头文件函数分离,编译主函数跳出 undefined reference to 的问题解决

VSCode 编写 C &#xff08;.h&#xff0c;.cpp 文件分离&#xff09;代码&#xff0c;编写完成后&#xff0c;编译遇到了编译错误 undefined reference to xxx。 开始还以为使用了 -stdc20 而不能使用 #include “xxx.h" 方式头文件&#xff0c;但仔细一想虽然引入了 im…

Java 不要在父类的构造方法里面调用可以被子类重写的方法

不要在父类的构造方法(代码块)里面调用可以被子类重写的方法 我们从第一天学习Java开始&#xff0c;就对Java的类初始化顺序牢记于心。但是在实际开发过程中&#xff0c;似乎很难能接触这一部分的应用。在这之前&#xff0c;我也认为它只是面试中八股文而已&#xff0c;直到最…

版本依赖冲突问题排查过程记录

问题 开发平台在集成minio时&#xff0c;pom引入了sdk。 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.7</version> </dependency>在调用上传文件API时&#xff0c;控制台报错&…

JDK1.8_X64在LINUX下安装

JDK1.8在LINUX下安装步骤&#xff1a; 在/usr/lib/目录下新建jvm文件夹&#xff0c;如果已有jvm文件夹&#xff0c;则将之前的JDK版本删除&#xff0c;即在jvm目录下执行命令&#xff1a;rm–rf *将JDK文件jdk-8u40-linux-x64.gz拷贝到/home/目录下&#xff1b;在/home/目录下…

探索JavaScript BOM:了解浏览器的内部机制和强大的API

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-BOM的概念和常用API BOM的概念和常用API BOM BOM&#xff08;Browser O…

免费网站快速收录工具,2023最新网站收录方法

在当今数字化时代&#xff0c;拥有一个被搜索引擎快速收录的网站对于个人、企业或机构而言至关重要。网站的快速收录意味着更广泛的曝光和更多的访问流量&#xff0c;这对于网络存在的任何实体都是非常有价值的。 网站快速收录的重要性 在庞大的互联网世界中&#xff0c;一切…

精神衰弱怎么办?如何改变精神衰弱?

精神衰弱也叫神经衰弱&#xff0c;跟个人体质有一定的关系&#xff0c;更多是因为环境因素的长期作用所致&#xff0c;比如长期处于紧张和压力之下&#xff0c;这容易产生精神衰弱。当下有个流行词叫“精神内耗”&#xff0c;这个严重的精神内耗其实同样会导致精神衰弱。 精神…

使用Prometheus监控Padavan路由器

Prometheus监控Padavan路由器 1、背景 近期在Synology&#xff08;群辉&#xff09;中安装一套Prometheus监控程序&#xff0c;目前已经监控Synology&#xff0c;然后家中有有路由器&#xff08;Padavan&#xff09;型号&#xff0c;也准备使用PrometheusGrafan进行监控。 ‍…

计算机网络扫盲(4)——时延

一、概述 在这里&#xff0c;我们考虑分组交换网的情况&#xff0c;因特网可以被看成是一种基础设施&#xff0c;该基础设施为运行在端系统上的分布式应用提供服务。在理想情况下&#xff0c;我们希望因特网服务能够在任意两个端系统之间随心所欲地移动数据而没有任何数据地丢失…

智能优化算法应用:基于海洋捕食者算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于海洋捕食者算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于海洋捕食者算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.海洋捕食者算法4.实验参数设定5.算法结果…

已解决:虚拟机集群xsehll连接不上

问题描述&#xff1a; hadoop102能连上&#xff0c;hadoop103、hadoop104无法连接&#xff0c;以前都能连上&#xff0c;今天突然就连不上了 解决方案&#xff1a; 使用ifconfig命令查看有没有ens33 如果没有的话那就证明你的问题和我一样 依次使用以下命令&#xff1a; sys…

Docker 简介,Docker 安装——3

目录&#xff1a; Docker 简介 什么是虚拟化、容器化&#xff1f;为什么要虚拟化、容器化&#xff1f;虚拟化实现方式 应用程序执行环境分层虚拟化常见类别 虚拟机容器JVM 之类的虚拟机常见虚拟化实现 主机虚拟化(虚拟机)实现容器虚拟化实现 容器虚拟化实现原理容器虚拟化基础…