美文网首页
1.2 GPU VS CPU

1.2 GPU VS CPU

作者: 代码咖啡 | 来源:发表于2018-08-15 13:47 被阅读26次

    文章内容源自《GPU编程与CG语言之阳春白雪下里巴人》,因笔者读书易中途放弃,遂每读一章节,将其移至简书平台,以此作为对自己读书的勉励。笔者用粗体斜体 标注了关键词句,望感兴趣的读者们一起学习共勉。猛戳这里查看更多!

    1.2 GPU VS CPU

    从上节阐述了GPU的发展历史,那么为什么在CPU之外要发展GPU?GPU 的 vertex programmability 和 fragment programmability 究竟在何处有着怎样的优势?引用在文献【2】第 6 页的一段话为:

    Modern GPUs implement a number of graphics primitive operations in a way that make running them much faster than drawing directly to the screen with the host CPU. They are efficient at manipulating and displaying computer graphics, and their highly parallel structure makes them more effective than typical CPUs for a range of
    complex algorithms.

    这段话的意思是,由于 GPU 具有高并行结构(highly parallel structure),所以 GPU 在处理图形数据和复杂算法方面拥有比 CPU 更高的效率。图 1 GPU VS CPU 展示了 GPU 和 CPU 在结构上的差异,CPU 大部分面积为控制器和寄存器, 与之相比,GPU 拥有更多的 ALU(Arithmetic Logic Unit,逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理。CPU 执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行(请回忆 OS 教程上的时间片轮转算法),而 GPU 具有多个处理器核,在一个时刻可以并行处理多个数据

    图1 GPU VS CPU

    GPU 采用流式并行计算模式,可对每个数据进行独立的并行计算,所谓“对数据进行独立计算”,即,流内任意元素的计算不依赖于其它同类型数据,例如,计算一个顶点的世界位置坐标,不依赖于其他顶点的位置。而所谓“并行计算” 是指“多个数据可以同时被使用,多个数据并行运算的时间和 1 个数据单独执行 的时间是一样的”。图 2中代码目的是提取 2D 图像上每个像素点的颜色值,在 CPU 上运算的 C++代码通过循环语句依次遍历像素;而在 GPU 上,则只需要一条语句就足够。

    图 2 CPU 和 GPU 上的代码比较

    可能有人会问道:既然 GPU 在数据处理速度方面远胜 CPU,为什么不用 GPU 完全取代 CPU 呢? 实际上,关于 GPU 取代 CPU 的论调时有出现,但是作者本人并不同意这种观点,因为 GPU 在许多方面与 CPU 相比尚有不如。

    首先,虽然 GPU 采用数据并行处理方式极大加快了运算速度,但正是由于 “任意一个元素的计算不依赖于其它同类型数据”,导致“需要知道数据之间相关性的”算法,在 GPU 上难以得到实现(但在 CPU 上则可以方便的实现),一个典型的例子是射线与不规则物体的求交运算。

    此外,GPU 在控制流方面弱于 CPU,在图中可以看到,GPU 中的控制器少于 CPU,而控制器的主要功能是取指令,并指出下一条指令在内存中的位置, 控制和协调计算机的各个部件有条不紊地工作。 在早期的 OpenGL fp2.0,fp3.0 以及 DirectX 的 ps_4_0 之前的 profile 版本都不支持或不完全支持循环控制流语句(目前在软硬件方面都已得到改进)。由于 GPU 编程完全依赖于图形硬件,故而较早版本的 GPU 并不支持一些常用的编程需要,而现在很多个人电脑或者公司的电脑的更新换代并没有那么快(考虑个人电脑的使用寿命在 4-6 年,所以在 2012 之后,旧式显卡的更新换代会基本结束),这也制约了 GPU 编程技术的使用。

    最后进行 GPU 编程必须掌握计算机图像学相关知识,以及图形处理 API, 入门门槛较高,学习周期较长,尤其国内关于 GPU 编程的资料较为匮乏,这些都导致了学习的难度。在早期,GPU 编程只能使用汇编语言,开发难度高、效率低,不过,随着高级 Shader language 的兴起,在 GPU 上编程已经容易多了。

    相关文章

      网友评论

          本文标题:1.2 GPU VS CPU

          本文链接:https://www.haomeiwen.com/subject/vixwbftx.html