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

    GPGPU,简称通用计算技术,是一种让显卡来参与本来CPU计算任务的技术,它从提出到现在不过十余年时间,但是发展堪称神速,本期超能课堂就带大家来了解一下这项技术,并寻找在我们身边GPGPU的应用。

    什么是GPGPU

    举个最经典的例子,在十多年前,高清视频刚流行起来的时候,当时编码高清视频对于当时的电脑来说,还是一件很困难的事情。视频编码过程中,大部分运算都是浮点类型的,而GPU对于这种类型的计算相当拿手,计算起来量又大又快,所以人们就想到,能不能利用GPU来编码高清视频。正巧当时业界的研究重点转向了GPGPU,英伟达第一个推出了一套比较完整的解决方案,将原本使用CPU的运算搬到了GPU之上,使得视频编码速度比原先快了几倍之多。如果有DIY资历比较老的读者可能还依稀记得,当时许多文章都介绍如何使用显卡加速解码蓝光视频,对于视频的编解码加速,便是最早离我们距离最近的GPGPU应用。

    为什么要GPGPU呢?

    CPU因为有着通用性的需求,所以往往它上面单个核心会设计的非常大而全面,并且由于CPU计算的特性,核心中很大一部分面积用来构建缓存(一个核心中往往有L1和L2两级缓存)和控制单元(解码器与分支预测等前端单元),而实际用来运算的单元面积可能仅仅只占整个核心的一半甚至不到(如图)。种种原因使得CPU没有办法做非常大的规模,一个核心中能塞入的东西有限,而总体的核心数需要控制在一个合理范围中,多了就可能会发生各种各样的问题。


    八核Coffee Lake的核心图,可以看到四个核心的面积已经接近右边的集成GPU

    而GPU的设计理念就不一样了,本身图形计算就是一项简单而暴力的“粗活”,复杂度远不如CPU要负责的各种各样不同类型的活,想要提高图形计算速度的一个很简单的办法就是扩大处理器中含有的单元数量。所以GPU对于特定的计算任务,因为有着更大的计算单元,所以很容易就可以达到比CPU更高的计算速度,表现出来就是现在的GPU在浮点运算吞吐量上远超CPU


    CPU与GPU在构造上的不同

    各种GPGPU的实现

    因为GPU更加适合用来进行大批量特定计算的特性,几大图形软硬件厂商都纷纷推出了自己的GPGPU计算解决方案,主要有以下几种:

    ATI Stream

    首先提出GPGPU实现的厂商是被收购前的ATI,并专门提供了一套开发工具包(SDK)给程序员以调用GPU来参与计算的能力。不过由于各种限制和AMD收购ATI后产生的混乱,这套SDK在与NVIDIA CUDA的竞争中处于下风,后来因为AMD官方转向支持OpenCL,这套SDK最终停止了开发。


    ATI Stream Logo

    NVIDIA CUDA

    CUDA是NVIDIA在G80时代推出的一项技术,全称Compute Unified Device Architechture,统一计算架构。从G80那代核心开始,NVIDIA率先采用了一种统一设计的架构,将原本的管线分工式设计转变为统一化的处理器设计。CUDA就伴随着G80核心的发布一起公之于众,这套平台可以让程序员用C和C++来编写用GPU运行的程序,学习成本比ATI Stream要低一些。


    NVIDIACUDA Logo

    CUDA也是目前应用最为广泛的一种GPGPU实现,在NVIDIA的强力推广之下,CUDA在许多领域大放异彩。

    OpenCL

    上面两个GPGPU的实现都是有平台针对性的,要想用他们的解决方案你就得用他们家的硬件,而OpenCL就不一样了。

    OpenCL最早是一组由苹果公司开发出来的用于异构计算的框架,苹果公司将这套框架的草案提交到Khronos组织,作为一种开放标准供业界使用。在2008年末,1.0版本正式公开,目前Intel、AMD与NVIDIA的GPU都支持这套框架。


    OpenCL Logo

    不过OpenCL并不仅限于在x86平台上面提供异构计算的框架,由于跨平台和开放标注的特性,它还可以使用专门的可编程电路来加速计算。所以业界对于它的支持非常广泛,下图就是OpenCL联盟成员。


    OpenCL联盟

    DirectCompute

    DirectCompute是微软从DirectX 10开始加入的用于通用计算目的的API集,可以调用GPU进行加速计算。从Vista开始,Windows的各种桌面特效就开始采用DirectCompute来加速计算。在DirectX 11中,微软完善了这套API,并且在Windows系统上更多地使用GPU来加速计算系统界面的各种特效。


    GPU-Z显示该GPU支持的通用计算特性

    具体应用

    媒体编码加速

    在十年多以前,H.264等面向高清应用的视频编码格式刚流行起来的时候,因为CPU的性能限制,编码一段H.264的视频是一件相当耗费时间的事情,所以人们想到了用GPU来加速视频的编码。NVIDIA刚推出CUDA的时候,就将加速视频编码作为该技术的一大卖点来宣传,并免费提供了一个支持CUDA技术来转码的软件BadaBoom。不过后来,NVIDIA在显卡上加入了专门用于视频编解码的硬件电路,并开放了名为NVENC的编码API供软件调用,通用计算也就此离开了这个可以说是最早利用它,也是离我们最近的领域。


    BadaBoom加速视频转码

    Adobe也很早就在旗下的CS和CC系列软件中加入了GPGPU的支持,比如Premiere Pro和After Effect都支持OpenCL来加速视频的实时预览和特效。

    视频补帧与画面优化

    在英伟达、英特尔和AMD三家相继在自己的GPU中加入专用计算电路用以加速编解码视频之后,通用计算就离开了这个领域。但是有些不满足于既有的视频品质的人们又开发出了新的可以利用GPGPU的功能:视频补帧。

    视频补帧指的是在原本低帧数的视频,通过上下帧的计算,渲染出一帧原本不存在的画面补在两帧之间,使其观感更加流畅。比如将24帧的视频补帧至60帧,因为这个过程的计算量过于庞大,使用CPU跟不上视频播放的速度,没法做到实时补帧,所以开发者就将这个功能搬到了GPU上来运行,比如很多人都在用的SVP4,就是一个利用GPGPU的补帧软件。


    SVP4补帧软件界面

    在视频画面优化领域,目前地球上最强的视频渲染器MadVR也是利用GPGPU来优化视频画面表现,比如视频播放中出现的色带、色环,还有在压制过程中出现的瑕疵等,都可以使用GPGPU在视频的播放过程中进行实时的弥补。

    人工智能与深度学习

    人工智能与深度学习是近年来非常热门的两个有关联的领域,训练人工智能需要非常大的数据计算量,这时候就可以利用上GPU的特长,比如热门的深度学习框架TensorFlow就可以使用CUDA来加速学习。

    NVIDIA在这两年也不断展示了他们在机器学习方面的一些结果,比如在RTX系列上引入的DLSS(深度学习抗锯齿)技术就是利用机器学习来达成的。


    DLSS技术

    科研领域的应用


    科研领域的应用

    上图是CUDA在科研领域的一些应用,可以看到GPU确实在很多方面开始默默影响着我们的生活。

    超级计算机

    老黄从G80开始就一直同步推出同架构的纯计算卡,归于Tesla品牌之下。于是就诞生了很多用Tesla计算卡来组建的超级计算机,比如竞争贝尔·戈登奖的六个入围者中,有五个使用了由NVIDIA GPU提供支持的超级计算机。最近英伟达还联手ARM,在超级计算机领域中继续发力,预计未来采用GPGPU技术的超级计算机将会越来越多。


    Tesla V100加速模块

    总结

    GPGPU这个相对于PC整个历史还算是比较新的概念,经过十余年的发展已经不仅局限于PC,还走向了其他领域,扎根于我们生活的每个角落。GPGPU已经在许多云计算平台上得到了应用,相信在以后,GPU会更加深入我们电子生活的方方面面,在那里默默地发热。

    ×
    热门文章
    1Windows 10更新又惹祸,KB4532693补丁可能会把你的文件隐藏或删除
    2有问有答:口罩该怎样安全消毒和再生利用?
    3三星Galaxy Z Flip屏幕的超薄玻璃,似乎并没比塑料强多少
    4NVIDIA正式推出GeForce RTX 2080 Ti Cyberpunk 2077 Edition限量版GPU
    5AMD表示媒体评测有误:Win10专业版足以满足Threadripper 3990X的要求
    6联想将于2月20日下午召开小新Air 14 2020发布会
    7苹果在2023年前都将使用高通5G基带
    8华擎宣布TRX40 Taichi主板打破锐龙TR 3990X超频记录,主频冲向5.7GHz
    9三星Galaxy Fold 2不叫概念机,屏下摄像头技术却很概念
    已有 9 条评论,每一条合规评论都是对我们的褒奖。
    • 游客 2019-07-05 13:10

      QQ23870862 终极杀人王

      好复杂看不懂,我只买成品!
      2019-07-04 23:15 已有8次举报
    • 支持(1)  |   反对(10)  |   举报  |   回复
    • 其实,基本上没说什么东西。

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

      9#

    • QQ23870862终极杀人王 2019-07-04 23:15

      好复杂看不懂,我只买成品!

      已有8次举报

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

      8#

    • 游客 2019-07-04 21:42

      这文章写的可以,就是开篇第一句话有点拗口

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

      7#

    • 游客 2019-07-04 21:03

      游客

      怎么9102年还有人吹VLIW架构的……效率被爆了几条街还吹……
      2019-07-04 20:17 已有1次举报
    • 支持(4)  |   反对(1)  |   举报  |   回复
    • 效率被爆?张口就来!9.5亿晶体管的HD4870性能打平14亿晶体管的GTX260+,这效率还差?公版HD5870的性能又明显超过公版gtx560ti,两者晶体管数量差不多,这效率差?倒是后来的VLW4架构的HD6970是个渣,晶体管数量增加30%+,同频性能却提升不到10%,垃圾

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

      6#

    • 游客 2019-07-04 20:17

      游客

      VLW5架构是非常适合3D图形的,2007年的R600由于只有64组运算单元,加上AA性能差,游戏性能不太好。而R700改进了AA性能,并且在晶体管数量增长不到40%的情况下,运算单元暴涨150%,从而成就一代神卡HD4850/4870。再往后的HD5870在不到20亿晶体管的情况下,运算单元堆到了320组(1600个单元),并且支持DX11。如果不是因为通用计算,VLW5架构现在都可以继续发挥实力,像Fury X的89亿晶体管给VLW5架构是可以堆2048组运算单元(10240个),游戏性能绝对在Fury X之上。GCN架构对于3D图形并非进步,而是一大退步!GCN架构生来就是为通用计算
      2019-07-04 20:10
    • 支持(2)  |   反对(0)  |   举报  |   回复
    • 怎么9102年还有人吹VLIW架构的……效率被爆了几条街还吹……

      已有1次举报

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

      5#

    • 游客 2019-07-04 20:10

      Elwin 教授

      说这玩意就要提提老古董ATI R520/580,和前几年的夏威夷一样,都是技术理念先进市场表现差劲的东西。ATI依仗的是R500家族的可编程像素着色单元,与传统的固定管线结构不同,虽然我们把R520也称为16管线,但ATI自己不这么看,他们认为R520最大的特色是16个可由程序员编程灵活使用的ps单元,到了R580更是提升到48个。虽然是专用单元,但灵活调度已经有了统一着色引擎的最主要功能,而xbox360上使用的xenos则直接配置了48个标准的统一着色单元。一时间玩家奔走相告,ATI似乎制霸只是时间问题,老黄已经在家考虑上吊了。然而后来的事实真心让人费解,nvidia的g80把us发扬光大,并且从fermi开始了cuda元年,注意是fermi,并不是g80,虽然g80和gt200都可以兼容。而ATI搞个Vliw5的R600让人不知所谓。虽说Vliw架构在hd4800/5800身上大放异彩,但是论绝对性能顶端还是nvidia us结构更胜一筹。
      2019-07-04 19:05
    • 支持(0)  |   反对(0)  |   举报  |   回复
    • VLW5架构是非常适合3D图形的,2007年的R600由于只有64组运算单元,加上AA性能差,游戏性能不太好。而R700改进了AA性能,并且在晶体管数量增长不到40%的情况下,运算单元暴涨150%,从而成就一代神卡HD4850/4870。再往后的HD5870在不到20亿晶体管的情况下,运算单元堆到了320组(1600个单元),并且支持DX11。如果不是因为通用计算,VLW5架构现在都可以继续发挥实力,像Fury X的89亿晶体管给VLW5架构是可以堆2048组运算单元(10240个),游戏性能绝对在Fury X之上。GCN架构对于3D图形并非进步,而是一大退步!GCN架构生来就是为通用计算

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

      4#

    • 游客 2019-07-04 19:26

      Elwin 教授

      说这玩意就要提提老古董ATI R520/580,和前几年的夏威夷一样,都是技术理念先进市场表现差劲的东西。ATI依仗的是R500家族的可编程像素着色单元,与传统的固定管线结构不同,虽然我们把R520也称为16管线,但ATI自己不这么看,他们认为R520最大的特色是16个可由程序员编程灵活使用的ps单元,到了R580更是提升到48个。虽然是专用单元,但灵活调度已经有了统一着色引擎的最主要功能,而xbox360上使用的xenos则直接配置了48个标准的统一着色单元。一时间玩家奔走相告,ATI似乎制霸只是时间问题,老黄已经在家考虑上吊了。然而后来的事实真心让人费解,nvidia的g80把us发扬光大,并且从fermi开始了cuda元年,注意是fermi,并不是g80,虽然g80和gt200都可以兼容。而ATI搞个Vliw5的R600让人不知所谓。虽说Vliw架构在hd4800/5800身上大放异彩,但是论绝对性能顶端还是nvidia us结构更胜一筹。
      2019-07-04 19:05
    • 支持(0)  |   反对(0)  |   举报  |   回复
    • R600定位影音娱乐游戏卡,能通吃解码 NV还是只能玩玩游戏,只是在意游戏以外功能的人很少吹游戏的居多。R600游戏定位就一个市场错误判断,架构大改对老游戏不算友好,对新游戏又过于前瞻高估,导致核心利用率不足。但是在当时非编专业市场还是很给力的玩游戏的怎么会懂

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

      3#

    • Elwin教授 2019-07-04 19:24

      cuda最贴近我们生活的应用应该是影视后期和游戏开发了。漫威的电影特效,老片的高清化,都是通过quadro的cuda单元实现的,在fermi之前这些事情的工作量是不可想象的。

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

      2#

    • Elwin教授 2019-07-04 19:05

      说这玩意就要提提老古董ATI R520/580,和前几年的夏威夷一样,都是技术理念先进市场表现差劲的东西。ATI依仗的是R500家族的可编程像素着色单元,与传统的固定管线结构不同,虽然我们把R520也称为16管线,但ATI自己不这么看,他们认为R520最大的特色是16个可由程序员编程灵活使用的ps单元,到了R580更是提升到48个。虽然是专用单元,但灵活调度已经有了统一着色引擎的最主要功能,而xbox360上使用的xenos则直接配置了48个标准的统一着色单元。一时间玩家奔走相告,ATI似乎制霸只是时间问题,老黄已经在家考虑上吊了。然而后来的事实真心让人费解,nvidia的g80把us发扬光大,并且从fermi开始了cuda元年,注意是fermi,并不是g80,虽然g80和gt200都可以兼容。而ATI搞个Vliw5的R600让人不知所谓。虽说Vliw架构在hd4800/5800身上大放异彩,但是论绝对性能顶端还是nvidia us结构更胜一筹。

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

      1#

    我来评论
    为你推荐