讲解一下GPU的内存带宽与CPU的不同

在先前的文章中我们谈到GPU相比CPU有更大的内存带宽,此言不虚,这也是众核GPU有源源不断数据弹药供给,能够发挥强大算力的主要原因。如下表所示(GDDR和HBM都是GPU的显存规格),基本上GPU的内存带宽要比CPU多一个数量级。但是考虑到GPU运算核心的数量,平均下来显存带宽真的足够富裕吗?参考资料1的《Memory bandwidth》文章提供了很有趣的视角,我们在这里介绍下。MOS 6502发布于1975年,是微型计算机发展史上非常重要的一块芯片。6502一般运行在1M时钟频率,每个时钟可以访问1Byte内存数据,6502的一条指令需要花费3~5个时钟,所以平均下来每条指令大概可以获得4B内存数据。与此相对照,Intel的Core i7-7700K是一款目前比较主流的桌面CPU,运行频率4.2G,内存带宽大概50GB/s。i7-7700K一共有4个处理核心,所以每个核心大概可以均摊到12.5GB/s的内存带宽,也就是每个时钟可以访问约3B的内存数据。该CPU的IPC(Instruction Per Clock)为1,极优化的代码可以达到的IPC为3,按此计,每条指令可得1B的内存数据,跟老前辈6502相比,已经落后不少。更进一步,现代CPU支持256位长度的SIMD指令,每个时钟最多执行3条指令,类比GPU,我们以32位为一个通道作为单独执行线程,这样每个时钟我们一共有24条指令执行,所以每条指令可以访问0.125B内存数据或者说每8条指令得到1B内存数据。我们再回过头来看看GPU的情形。以NVidia GeForce GTX 1080Ti为例,内存带宽484GB/s,处理单元工作频率为1.48G,所以对整个GPU来说,每个时钟大概可以访问327B内存数据。这个GPU一共有28个SM(类似CPU的处理核心),每个SM有128个SP,所以总共有3584个SP(类似先前SIMD32位通道)。这样每个SM一个时钟大概可以访问11.7B的内存数据,平均到128个SP,一个SP一个时钟得到0.09B数据,换个好听的说法就是每11条指令可以得到1B内存数据,比CPU的指标还恶劣。需要再次重申的是,因为设计目标的问题,CPU其实更关注访存延迟指标,所以相形之下,内存带宽的压力对GPU更为显著。这也是为什么我们先前说过的GPU也开始配置多级Cache的原因,除了改善访存延迟,也可以降低内存带宽压力。另外我们在《GPU历史之二三事》里也提到Nvidia和AMD都开始拥抱移动GPU常用的TBR(Tile Based Rendering)的绘制技术,内存带宽的压力也应该是重要的驱动因素。而作为软件人员,在设计算法的时候,我们要重视算法的运算强度(见《Roofline模型初步》),要充分利用片上内存包括硬件Cache和软件Cache(Shared Memory),以及注意内存的合并访问(Memory Coalescing)等等来优化内存带宽。

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/6478.html

(0)
晴川运维晴川运维
上一篇 2025年6月8日
下一篇 2025年6月8日

相关推荐

  • DNS在什么场景下选择TCP与UDP协议

    DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类。但很少有人知道DNS分别在什么情况下使用这两种协议。 TCP与…

    Linux系统 2025年6月8日
  • Linux下防御SYN Flood工具

    SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击。效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。 如果…

    Linux系统 2025年9月22日
  • D语言基础教程

    D语言是一种编程语言,具备多范型,例如面向对象、指令式。由沃尔特·布莱特和安德烈·亚历山德雷斯库所开发,起源自C++,深受C++的影响,然而其不是C++的变种,而是重新设计来自C+…

    Linux系统 2025年10月25日
  • C++中double类型保留三位小数点

    我们知道C语言中,如果要求输出结果保留三位小数,我们可以使用pritf()函数轻松的解决。但是的输出运算符 我以一个例子作为讲解: 已知线段的两个端点坐标是A(xa,ya),B(x…

    Linux系统 2025年6月8日
  • Linux下XWiki的安装和使用

    XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台,是一个具有强大的扩展功能(如在页面嵌入脚本),集成插件以及高度模块化架构的专业wiki系统,下面为大家…

    Linux系统 2025年6月8日
  • Ubuntu 18.04 LTS部署Rsyslog日志服务

    Rsyslog 是一个 syslogd 的多线程增强版。它提供高性能、极好的安全功能和模块化设计。虽然它基于常规的 syslogd,但 rsyslog 已经演变成了一个强大的工具,…

    Linux系统 2025年6月8日
  • 详解OpenStack 的 metadata

    在云计算中,Metadata 并不是一个陌生的概念。从字面上看,Metadata 是元数据的意思。而在云计算中,Metadata 服务能够向虚机注入一些额外的信息,这样虚机在创建之…

    Linux系统 2025年10月9日
  • 对你的Linux进行冻结或锁定

    冻结终端窗口并锁定屏幕意味着什么 – 以及如何在 Linux 系统上管理这些活动。 如何在 Linux 系统上冻结和“解冻”屏幕,很大程度上取决于这些术语的含义。有时“冻结屏幕”可…

    Linux系统 2025年6月28日
  • Linux中安装并使用Sigil具体方法

    Sigil 是一个免费的、开源的、多平台的电子书编辑器,使用Qt(和QtWebEngine)。它被设计用来编辑ePub格式的书籍(包括ePub 2和ePub 3),本篇文章重点为大…

    Linux系统 2025年9月23日
  • 详chcon命令使用方法

    chcon命令是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。 语法 chcon [选项]… 环…

    Linux系统 2025年10月19日

发表回复

登录后才能评论