内存与显存:从同根生到殊途异路的科技演进

news2025/4/9 7:30:25

在现代计算机的世界里,内存和显存是两个不可或缺的硬件组件。它们看似功能相近,却在发展历程中逐渐分道扬镳,各自服务于不同的计算需求。今天,我们将从一根内存条和一块显卡入手,深入探讨内存与显存的异同,揭开它们背后的技术秘密,并分析为何它们在设计理念和技术路径上会如此迥异。


一根内存条与一块显卡:初识内存与显存

在这里插入图片描述

让我们从最基本的硬件开始说起。如上图,左边是一根内存条,它是计算机中CPU(中央处理器)的忠实助手。CPU在执行运算时所需的数据,以及运算完成后产生的结果,都会暂时存储在这根小小的内存条里。内存就像一个高效的临时仓库,为CPU提供快速的数据存取服务。

再来看一块显卡。显卡的核心是一个醒目的芯片——GPU(图形处理器),周围环绕着一圈颗粒状的组件,这些就是显存颗粒。与内存类似,显存也负责存储GPU运算所需的数据和结果。无论是渲染游戏画面还是处理复杂的图形任务,显存都是GPU的得力帮手。

从表面上看,内存和显存的功能几乎一模一样:它们都是数据的临时存储站,为各自的处理器提供支持。然而,深入研究后你会发现,尽管它们有相同的起点,但在技术演进中却走上了截然不同的道路。那么,内存和显存到底有哪些区别?让我们一探究竟。


同根生的起点:显存与内存的早期岁月

在计算机发展的早期,显存和内存并没有明显的分野。那时候,显卡厂商直接采用内存的DDR(Double Data Rate,双倍数据速率)标准来制造显存。DDR内存是一种广泛应用的存储技术,通过在每个时钟周期内进行两次数据传输,大幅提升了数据吞吐量。显卡厂商将这种技术“拿来主义”地应用到显存上,简单高效。

然而,随着GPU技术的飞速发展,这种直接套用DDR标准的做法很快就暴露出了局限性。GPU的运算需求与CPU截然不同,前者对数据吞吐量的要求远远超过了传统DDR内存所能提供的水平。于是,显卡厂商开始意识到,必须为GPU量身定制一种新的存储标准。于是,英伟达(NVIDIA)和ATI(后被AMD收购)联手推出了GDDR标准。

GDDR的全称是“Graphics Double Data Rate”(图形双倍数据速率),顾名思义,它是为图形处理器(GPU)优化的DDR内存变种。那么,GDDR相比DDR究竟做了哪些改进?要回答这个问题,我们需要先从CPU和GPU的工作方式差异说起。


CPU与GPU:计算方式的天壤之别

CPU和GPU虽然都是处理器,但它们的架构设计和应用场景却有着天壤之别。你可能听过这样的说法:CPU拥有少量但强大的核心,而GPU拥有大量但相对弱小的核心。这种差异决定了它们擅长的任务类型。

CPU的核心数量通常在几核到几十核之间,每个核心都具备强大的通用计算能力,适合处理复杂的逻辑运算和串行任务。而GPU则不同,它的核心数量动辄成百上千甚至更多,虽然单个核心的计算能力较弱,但它们能够同时处理大量并行任务。这种特性使得GPU在图形渲染、机器学习等领域大放异彩。

为了更直观地理解两者的区别,我们来看一个经典例子:假设有一张过暗的图片,我想通过计算将它提亮。

CPU的处理方式

如果用CPU来处理这张图片,流程大致如下:

  1. 图片数据存储在内存中。
  2. CPU从内存中读取第一个像素的数据。
  3. 对这个像素进行提亮运算。
  4. 将结果写回内存。
  5. 然后依次处理第二个像素、第三个像素,直到整张图片处理完毕。

当然,现代CPU会通过缓存优化和多线程技术加速这一过程,但总体而言,它的处理方式是“串行”的,一步步完成任务。这种方式就像一个勤奋的搬运工,一次次往返于仓库和加工厂之间。

GPU的处理方式

如果换成GPU来处理,情况就完全不同了:

  1. 图片数据存储在显存中。
  2. GPU的控制器会提前为每个核心分配任务:核心1处理像素1,核心2处理像素2,以此类推。
  3. 一声令下,所有核心同时从显存中读取自己负责的像素数据。
  4. 每个核心并行进行提亮运算。
  5. 最后,所有核心同时将结果写回显存。

这种方式就像一支训练有素的军队,所有士兵在同一时刻执行命令,效率极高。显然,GPU的并行处理能力远远超过了CPU。

数据需求的差异

通过这个例子,我们可以看出CPU和GPU对存储需求的巨大差异。CPU是一趟一趟地搬运数据,每次只需处理少量数据,因此对内存的带宽要求相对较低。而GPU则需要一次性搬运海量数据,所有核心同时访问显存,这就对带宽提出了极高的要求。

正是这种需求差异,促使显卡厂商放弃了通用的DDR标准,转而开发专为GPU优化的GDDR标准。


GDDR的进化:带宽提升的秘密

既然GPU对带宽的需求如此之高,那么GDDR是如何满足这一要求的呢?要理解这一点,我们需要先搞清楚带宽的计算方式。

带宽的构成

带宽的公式很简单:带宽 = 传输速率 × 位宽

  • 传输速率:单位时间内传输的数据次数。
  • 位宽:每次传输的数据宽度,通常以比特(bit)为单位。

用一个比喻来解释:假设有两个城市A和B,我需要在这两个城市之间运输货物。运输能力(带宽)取决于两点:

  1. 公路的数量(位宽):修一条路只能跑一辆车,修十条路就能跑十辆车。
  2. 每条路的运输速度(传输速率):车速越快,单位时间内运送的货物越多。

位宽:显存的“多车道”优势

在计算机中,位宽就像公路的数量。内存的位宽通常是64位,有些主板支持双通道内存,可以组成128位的位宽。而显存的位宽则远超内存。例如,NVIDIA RTX 4090的显存位宽高达384位,传闻中的RTX 5090甚至达到了512位。这种“多车道”的设计让显存在每次传输时能携带更多数据,显著提升了带宽。

但仅仅增加位宽还不够,GPU的带宽需求仍然是个无底洞。于是,GDDR标准在传输速率上也下足了功夫。

传输速率:从DDR到GDDR的飞跃

提升传输速率的起点是DDR技术。传统电路被称为SDR(Single Data Rate,单倍数据速率),在一个时钟周期内只传输一次数据。而DDR通过利用时钟信号的上升沿和下降沿,在一个周期内实现两次传输,因此被称为“双倍数据速率”。

GDDR继承了DDR的核心技术,但并未止步于此。随着GPU需求的不断增长,显存厂商开始在时钟周期内塞入更多传输动作。

GDDR5:四倍速率的突破

在GDDR5标准中,厂商将时钟信号复制四份,并对每个信号进行1/4周期的偏移。这样,每个信号的上升沿都能触发一次传输,一个时钟周期内就能完成四次数据传输。这时,GDDR5的名字其实已经有些名不副实,更准确的叫法应该是“GQDR”(Quad Data Rate,四倍数据速率),但标准名称依然沿用了GDDR。

GDDR6:八倍速率的壮举

到了GDDR6,厂商进一步优化技术,在一个时钟周期内实现了八次传输。这就像在公路上把货车之间的空隙全部填满,最大限度地提升了运输效率。

GDDR6X:PAM4的激进尝试

GDDR6X更进一步,引入了PAM4(Pulse Amplitude Modulation 4,四级脉冲幅度调制)技术。传统传输使用二进制(0和1),而PAM4将信号分为四个电平(00、01、10、11),每次传输可携带2位数据。在GDDR6八倍速率的基础上,PAM4让传输效率翻倍,达到了惊人的16倍速。然而,这种激进的技术也带来了挑战,比如信号稳定性问题,有人戏称“步子迈太大,容易扯着蛋”。

GDDR7:PAM3的保守回归

在最新的GDDR7标准中,厂商回归了更保守的PAM3技术,使用三个电平(三进制)传输数据。虽然速率不如PAM4激进,但稳定性更高,适合大规模商用。

通过位宽和传输速率的双重提升,GDDR将显存的带宽推向了极致,完美适配了GPU的并行计算需求。


内存的“佛系”进化:为何不追赶显存?

反观内存,它的发展路径却显得“佛系”得多。内存的位宽始终停留在64位(双通道128位),每代升级主要靠提升时钟频率,但增幅有限。例如,DDR4到DDR5的频率提升不过从几千MHz到六七千MHz,远不如显存的翻倍式增长。内存为何不跟上显存的步伐,引入PAM3、PAM4等技术疯狂提升带宽呢?

答案在于CPU和GPU的工作方式差异。让我们回到之前的图片提亮例子:GPU之所以快,是因为像素之间没有依赖关系,所有核心可以并行处理。而现实中,许多任务无法并行化。

一个无法并行的例子:累加计算

假设我们要计算1到100的累加和,总共需要99次加法运算。GPU能把这99次加法分配给99个核心并行计算吗?显然不行。因为每次加法都依赖前一次的结果,只能按顺序执行。这种串行任务是CPU的强项,而GPU在这类场景下无能为力。

对于这类任务,CPU每次运算所需的数据量很少,对带宽的需求远不如GPU高。提升CPU性能的关键不在于带宽,而是运算速度。因此,CPU厂商一直在“卷频率”,从几年前的5GHz到如今的更高水平。而GPU的频率,例如RTX 4090满载时不到3GHz,RTX 5090预计3.5GHz,与CPU相比差距明显。

延迟:内存的命门

除了带宽,内存还有另一个关键指标——延迟。延迟是指从CPU发起数据请求到数据到达的时间差。对于串行任务,每次数据访问的延迟都会累积,导致总耗时大幅增加。内存的延迟通常在50-80纳秒之间,但对高速运行的CPU来说仍显缓慢。

为解决这个问题,CPU内部集成了L1、L2、L3等多级缓存。这些缓存的延迟低至几纳秒,大幅减少了对内存的直接访问。而GPU对延迟的敏感度远低于CPU,因为它的核心是并行访问显存,即使延迟稍高(显存延迟常超200纳秒),整体性能影响也不大。


内存与显存的分化:殊途异路的必然

通过以上分析,我们可以看到内存与显存的分化是技术需求驱动的必然结果:

  • 显存:为了满足GPU的高带宽需求,走上了极致并行化的道路,通过高位宽、高速率技术不断突破极限。
  • 内存:服务于CPU的串行计算需求,更注重低延迟和高频率,带宽提升并非首要目标。

从同根生的DDR技术出发,显存和内存逐渐分道扬镳,各自演化出适合自己场景的特性。


结语

从一根内存条到一块显卡,从DDR到GDDR的演进,内存与显存的故事是计算机硬件发展的缩影。它们从相同的起点出发,却因CPU和GPU的不同需求而分化,最终形成了如今的格局。显存追求带宽的极致,内存坚守延迟的底线,两者各司其职,共同支撑起现代计算的辉煌。希望这篇文章能让你对内存与显存的区别有更深刻的理解,也期待下期与你继续探索科技的奥秘!

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

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

相关文章

手搓多模态-04 归一化介绍

在机器学习中,归一化是一个非常重要的工具,它能帮助我们加速训练的速度。在我们前面的SiglipVisionTransformer 中,也有用到归一化层,如下代码所示: class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&am…

【C++】第八节—string类(上)——详解+代码示例

hello,又见面了! 云边有个稻草人-CSDN博客 C_云边有个稻草人的博客-CSDN博客——C专栏(质量分高达97!) 菜鸟进化中。。。 目录 一、为什么要学习string类? 1.1 C语言中的字符串 1.2 面试题(暂不做讲解) …

Java 数组与 ArrayList 核心区别解析:从源码到实战!!!

🌟 Java 数组与 ArrayList 核心区别解析:从源码到实战 💡 Java 开发者必读! 数组(Array)和 ArrayList 是 Java 中最常用的数据存储结构,但它们的底层设计、性能表现和适用场景差异显著。本文通…

【易飞】易飞批量选择品号处理方法,工作效率提升300%

开窗选择品号方式要么手动输入,要么以什么开头、包含、从A物料到B物料查询后返回的有规律的品号。对于没有规律且大量品号的处理方式是否有便捷的方法呢? 尤其在通常在查询多阶材料清单,查询库存明细表,整批变更元件等如品号无规律情况下,只能一个个选择,无法通过EXCEL方…

【最新版】啦啦外卖v64系统独立版源码+全部小程序APP端+安装教程

一.系统介绍 啦啦外卖跑腿平台独立版,使用的都知道该系统功能非常强大,应该说是目前外卖平台功能最全的一套系统。主要是功能非常多,拿来即用,包括客户端小程序、配送端小程序、商户端小程序,还有对应四个端的APP源码…

iproute2 工具集使用详解

目录 一、iproute2 核心命令:ip二、常用功能详解1. 管理网络接口(link 对象)2. 管理 IP 地址(address 对象)3. 管理路由表(route 对象)4. 管理 ARP 和邻居缓存(neigh 对象&#xff0…

AD(Altium Designer)更换PCB文件的器件封装

一、确定是否拥有想换的器件PCB封装 1.1 打开现有的原理图 1.2 确定是否拥有想换的器件PCB文件 1.2.1 如果有 按照1.3进行切换器件PCB封装 1.2.2 如果没有 按照如下链接进行添加 AD(Altium Designer)已有封装库的基础上添加器件封装-CSDN博客https://blog.csdn.net/XU15…

【文献研究】含硼钢中BN表面偏析对可镀性的影响

《B 添加钢的溶融 Zn めっき性に及ぼす BN 表面析出の影響》由JFE公司田原大輔等人撰写。研究聚焦 B 添加钢在低露点退火时 BN 形成对镀锌性的影响,对汽车用高强度钢镀锌工艺优化意义重大。通过多组对比实验,结合多种分析手段,明确了相关因素…

React学习-css

W3Schools Tryit Editor CSS 教程 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明: p { /* 这是个注释 */ color:red; text-align:center; }选择器 CSS Id: #para1{ text-align:center; color:red; } Class: .center {text-align:center;} p…

数据分析-Excel-学习笔记Day1

Day1 复现报表聚合函数:日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格,首先要看这个表格的构成(包含了哪些数据),几行几列,每一列的名称…

树莓派PICO 设备烧录成cmsis dap

文章目录 1. 实际操作2. IO连接 1. 实际操作 2. IO连接

【数据结构】图的存储

目录 邻接矩阵 表示方法 代码定义 结构特点与度的信息 邻接表 表示方法 代码定义 结构特点与度的信息 十字链表 表示方法 第二步,将顶点x的firstIn域与所有headvex域为x的弧连起来。 结构特点与度的信息 邻接多重表 表示方法 结构特点与度的信息 图…

如何解决uniapp打包安卓只出现功能栏而无数据的问题

如何解决uniapp打包安卓只出现功能栏而无数据的问题 经验来自:关于Vue3中调试APP触发异常:exception:white screen cause create instanceContext failed,check js stack -> at useStore (app-service.js:2309:15)解决方案 - 甲辰哥来帮你算命 - 博客…

kotlin,数字滚动选择

用国内的通义灵码和codegeex都没有弄出来,最后只得用墙外的chatgpt才弄出一个满意的。kotlin真的有点难,好在有AI,让学习没这难了。 package com.example.mynumsetimport android.os.Bundle import androidx.activity.ComponentActivity imp…

【4】搭建k8s集群系列(二进制部署)之安装master节点组件(kube-apiserver)

一、下载k8s二进制文件 下载地址: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG -1.20.md 注:打开链接你会发现里面有很多包,下载一个 server 包就够了,包含了 Master 和 Worker Node 二进制文件。…

每日c/c++题 备战蓝桥杯(小球反弹)[镜像思路求解,最小公倍数]

思路: 错解:对于这道题而言,有的同学会选择用计算每次碰撞的坐标,直到坐标等于原点的方法来做,但这种方法实现起来比较繁琐,并且由于碰撞点的坐标有可能是浮点数,而浮点数会丢失精度&#xff0…

新潮透明液体水珠水滴失真故障扭曲折射特效海报字体标题设计ps样机动作素材 Bubble Photoshop Templates

只需单击几下即可创建引人注目的视觉效果!您需要做的就是将您的文本或图像放入智能对象中并应用作。 包中包含: 15 个静态 Photoshop 模板(PS 2019 及更高版本) 01-05 垂直布局 (22504000)06-10 水平布局…

从零开始玩python--python版植物大战僵尸来袭

大家好呀,小伙伴们!今天要给大家介绍一个超有趣的Python项目 - 用pygame制作植物大战僵尸游戏的进阶版本。相信不少小伙伴都玩过这款经典游戏,今天我们就用Python来实现它,让编程学习变得更加有趣!🌟 一、…

Visual Studio Code SSH 连接超时对策( keep SSH alive)

文章目录 问题解决方法一&#xff1a;配置服务端关于ClientAliveInterval和ClientAliveCountMax1、打开终端&#xff0c;打开SSH配置文件&#xff1a;输入以下命令&#xff1a;2、打开配置文件后&#xff0c;添加以下内容&#xff1a;3、添加后&#xff0c;Esc按 <Enter>…

【C语言入门】由浅入深学习指针 【第二期】

目录 1. 指针变量为什么要有类型&#xff1f; 2. 野指针 2.1 未初始化导致的野指针 2.2 指针越界导致的野指针 2.3 如何规避野指针 3. 指针运算 3.1 指针加减整数 3.2 指针减指针 3.3 指针的关系运算 4. 二级指针 5. 指针数组 5.1 如何使用指针数组模拟二维数组 上…