E X P
正努力加载中…
  • 编辑
  • 评论
  • 标题
  • 链接
  • 查错
  • 图文
  • 拼 命 加 载 中 ...

    简单来讲在现代计算机环境下的日常使用中,整点运算性能影响如压缩与解压缩,计算机进程调度,编译器语法分析,计算机电路辅助设计,游戏AI处理类型的操作。而浮点运算单元主要影响CPU的科学计算性能,如流体力学,量子力学等,而更贴近我们日常能见到的应用就是多媒体相关的应用,如音视频的编解码,图像处理等操作。


    ZEN的核心架构图

    而我们通常在测试CPU时使用如Sandra 2018,Super Pi,wPrime,Fritz Chess Benchmark,WinRAR,7-zip,x264 FHD Benchmark等软件,这些测试软件就能够体现处理器理论整数运算单元和浮点运算单元性能的。

    在具体使用的软件中,如压缩解压软件WinRAR,7-zip,程序员使用的GCC编译器,网络路由的选择,游戏中的AI以及我们日常试用操作系统调度都是整点运算。而我们在使用lightroom等图像处理软件,语音识别,视频的编解码,以及科学家使用Matlab进行科学计算时都用到了浮点运算能力。

    对于玩家最关心的就是这些到底对游戏有什么影响。首先CPU承担着整个计算机中的任务进程分配问题,所以如果游戏代码优化不好,进行频繁的Draw Call操作,会非常消耗CPU任务调度资源。同时现在游戏AI做操作行为判断时,也是使用整点运算单元的。而现在很多游戏加入了防盗版机制,在运行游戏时频繁的加解密会消耗浮点运算性能。所以有朋友使用较老的硬件运行新游戏时,会非常影响游戏运行帧率。

    所以整点运算性能和浮点运算性能都反映了CPU处理数据的能力。但是整点运算性能还反映了控制程序流的的能力。

    在计算机中,定点数不一定是整数,而浮点数也不一定是小数。在计算机中,定点数是指小数点固定的数,而浮点数是指小数点不固定的数。在计算机中采用IEEE 754标准进行浮点数的存储的,他可以精确的的表示某一个数据。

    在早期浮点运算单元并没有一开始就加入到CPU设计中的。但是在计算机中,运算单元都是逻辑电路,由浮点数的定义我们可以知道,在早期仅有整点数运算单元而不带有浮点数处理单元的 处理器上,处理浮点数的阶码、尾数的计算以及规格化就成为了很困难的事情,导致早期CPU在科学计算中依旧非常的缓慢。所以Intel就设计了独立于8086和8088处理器外的8087数学辅助处理器。到后来随着计算机不再是科学家的工具,也逐渐进入了公众视野,Intel在80486DX处理器核心内首次集成了浮点运算单元。


    Intel 8087协处理器


    Intel Core i7 7700k处理器的CPU-Z信息

    早期的Intel x87系列数学运算辅助处理器只是作为一个提高浮点运算速度的处理器,而在现代处理器中,浮点计算功能会通过SIMD(Single Instruction Multiple Data,单指令多数据流)的技术实现并行计算能力。在打开CPU-Z后,开支持指令集一栏可以看到,现代处理器带有的SSE指令集就有处理浮点运算的能力。而在之后的发展中,也逐渐引入了SSE2,SSE3,SSE4,AVX,FMA等更加适用于现代软件开发的拥有强大浮点运算能力的指令集。

    那接下来就有问题了,现代处理器加入了很多高度并行化的浮点运算单元,相较以往单纯CPU的浮点运算能力有了非常大的飞跃,但是相对于现代的图形处理器来说,这么些浮点运算能力是不够看的,那为什么不像几十年前一样不在CPU中集成浮点运算单元呢??


    Nvidia Geforce 256核心照片

    对于这个问题,首先大家要了解为什么会独立出来图形处理器这种专有硬件的。在20世纪90年代,计算机多媒体逐渐开始兴盛起来,在1998年到1999年间,Intel和AMD的CPU中已经拥有了SSE或3DNow!这样的SIMD浮点运算指令集。但是随着电子游戏的发展,计算机的使用者对于计算机的图形性能有了更高的要求,但是此时的CPU内浮点运算性能并不满足需求,所以在此后图形处理器开始负担更多的浮点运算工作。


    Nvidia CUDA核心工作流程

    但图形处理器的使用者看到如此高效能的浮点运算处理器的时候就在思考如何能让这类设备承担除了图形计算之外的浮点计算性能。乘着GPGPU(General-purpose GPU)概念的逐渐兴起,显卡上的统一渲染架构的出现,也让这种计算方式真正成为现实。Nvidia在2007年正式发布了CUDA并行计算平台。之后也出现了如openCL的通用计算API(应用程序编程接口)。

    到此我们突然发现,GPU都来抢CPU的浮点运算饭碗了,但为什么CPU非但没有取消浮点运算单元,反而其浮点运算性能越来越强??


    AMD推土机架构示意图

    其实并不是没有人想到这样的情况,而是已经与产品这么做了,就是AMD的推土机架构。这个架构放弃了之前的一个核心就由一套整数运算单元和浮点运算单元的组合,而是让两个核心共享一个浮点运算单元组成一个簇,而AMD将这种架构叫做CMT,又称为群集多线程技术,之后又将相对与Intel有优势的GPU核心集成进CPU中,产生了APU处理器。AMD当时还为此成立了HSA基金会,为解决CPU和GPU的内存统一寻址问题,也提出了hUMA技术并用在了Sony的PS4游戏机上。


    Sony Playstation 4主机,CPU和GPU共享8GB GDDR5内存

    那为什么厂商做了这么多还是做不到用大规模的GPU取代CPU中的浮点运算单元呢?运算精度才是重点。CPU中的浮点运算单元是为了更高精度浮点运算准备的。如在最新Intel处理器中的AVX指令集可以处理512位扩展数据,这样大大提升了计算精度和速度。而GPU中的处理器都是为高度并行计算而设计的结构相对简单的核心,这些核心每一个都是SIMD处理器,但是能够处理的数据精度是有限的,在Nvidia以及AMD图形处理器上支持的数据精度大多是单精度和双精度浮点计算(FP32和FP64),甚至随着机器学习,深度学习,神经网络的流行,最新的图形处理器甚至支持了半精度浮点运算(FP16)。其次,由于在计算精度上相较于CPU中的浮点运算单元不高,所以在这些处理器中也没有内置数据校验和数据补偿处理的运算单元。所以对于使用GPU进行科学计算的人,需要在编程阶段就避免这样的问题。同时CPU和GPU在设计上就是非常不同的,CPU的浮点单元个数很少,但是单个浮点运算单元所提供的性能是很强的。而GPU中是用过海量的SIMD单元堆砌出来的浮点运算能力。在CPU设计时,还需要设计大量的多级缓存来提高CPU的运算速度。而GPU中通常只为这些SIMD处理单元内置不多的缓存,而提供大量的内存(显存)。

    所以综合上面的分析,我们可以得出的结论是虽然GPU拥有更强大的浮点运算性能,但是限于其计算单元的设计,统一内存架构的设计,其还是不能完全取代CPU中的浮点运算核心。CPU中的整点运算单元在肩负着如压缩解压,编译器编译程序,网络路由,控制程序流等任务同时,其浮点运算核心也依旧在处理着图像处理,科学计算等需要更高精度计算的任务。

    ×
    热门文章
    1NVIDIA正式推出GeForce RTX 2080 Ti Cyberpunk 2077 Edition限量版GPU
    2华为P40系列或用索尼IMX700传感器,可能比“夜视仪”更“夜视仪”
    3AMD表示媒体评测有误:Win10专业版足以满足Threadripper 3990X的要求
    4华擎宣布TRX40 Taichi主板打破锐龙TR 3990X超频记录,主频冲向5.7GHz
    5联想将于2月20日下午召开小新Air 14 2020发布会
    6我们还没用上折叠屏,TCL下周就带着侧拉屏来了
    7三星Galaxy Fold 2不叫概念机,屏下摄像头技术却很概念
    8苹果或在3月31日举行特别活动,新iPhone将于4月初上市
    9苹果在2023年前都将使用高通5G基带
    已有 9 条评论,每一条合规评论都是对我们的褒奖。
    • 这些评论亮了
    • 游客 2019-03-05 17:55

      怪不得显卡硬件加速压出来的视频完全不能跟靠CPU的x264比

      支持(42)  |   反对(2)  |   举报  |   回复

      2#

    • hianghokung终极杀人王 2019-03-05 17:36

        这类科普文章超能以后多一点。

      支持(43)  |   反对(0)  |   举报  |   回复

      1#

    • alex310110博士 2019-03-06 06:03

      这科普有问题,区别不是精度问题。精度不是随意搞的,是得符合IEEE规范的。CPU和GPU本质在于编程模式、模型不一样,一个擅长高速顺序,一个擅长大吞吐并行,根据应用、算法不同才会选择不同的设备。GPU吞吐高但延迟高、利用效率考验算法、码农;CPU反之。

      支持(12)  |   反对(0)  |   举报  |   回复

      9#

    • 游客 2019-03-06 05:21

      换个人写就有好文了,上次那写有问有答的人不行啊

      支持(2)  |   反对(0)  |   举报  |   回复

      8#

    • 游客 2019-03-06 00:18

      精度是一方面,延迟也是另外一个重要原因。在现实应用当中IO较多的浮点计算任务里,CPU跟高度并行化的GPU相比,耗时差距是不相伯仲的。

      支持这类科普文章

      支持(5)  |   反对(0)  |   举报  |   回复

      7#

    • 游客一代宗师 2019-03-05 23:21

      仙德法歌 博士

      怪不得爱剪辑用 CPU 压出来的片子还算清晰,

      快剪辑同时勾选 CPU+老黄CUDA 加速就开始模糊了!
      2019-03-05 21:42
    • 支持(11)  |   反对(0)  |   举报  |   回复
    • 本来就是,很多人只是粉丝不会去理解的吹

      已有2次举报

      支持(2)  |   反对(0)  |   举报  |   回复

      6#

    • 游客 2019-03-05 22:17

      我觉得这样的科普文章比那天天华为华为的强太多了。

      已有1次举报

      支持(14)  |   反对(1)  |   举报  |   回复

      5#

    • 仙德法歌博士 2019-03-05 21:42

      游客

      怪不得显卡硬件加速压出来的视频完全不能跟靠CPU的x264比
      2019-03-05 17:55
    • 支持(42)  |   反对(2)  |   举报  |   回复
    • 怪不得爱剪辑用 CPU 压出来的片子还算清晰,

      快剪辑同时勾选 CPU+老黄CUDA 加速就开始模糊了!

      支持(11)  |   反对(0)  |   举报  |   回复

      4#

    • QQ23870862终极杀人王 2019-03-05 20:41

      看不懂,买贵就是对的!

      已有14次举报

      支持(1)  |   反对(10)  |   举报  |   回复

      3#

    我来评论
    为你推荐