GPU 都能做什么

Published: by Creative Commons Licence

一、GPU的结构

GPUGraphics Processing Unit,中文名图形处理单元。它最初也是最重要的目的是进行3D图形绘制(有些GPU依然只有这个能力,甚至不包括2D绘制的能力,但可以模拟2D),但GPU目前的能力早已超越图形处理了,其中一个原因是GPU的高并发架构,一般的GPU(包括集成显卡)都有几百个核心,多的可以到几千核,如果算线程数更是轻松上万。现在GPU已经有了针对GPU的编程语言,高级语言比如 GLSLHLSL,汇编类语言比如 GLSL IRNIR 等。

gpu

  • VPU 是专门的视频编解码模块;
  • GCA 是核心计算单元,它有成百上千的小的内核构成。

二、现代GPU的能力

  1. 提供2D和3D图形硬件加速绘制功能;

    比如软件界面绘制,视频/图片添加滤镜,高效阴影/粒子特效绘制等;

    这方面的API有 OpenGLOpenGLESVulkan, Metal 等。

    提供的功能包括 texture mapping向量计算坐标转换颜色转换顶点旋转抗锯齿,执行可编程的shaders等。

  2. 提供视频硬件编解码功能;

    比如 H264WMV 硬件编解码;

    这方面的API有 DxVA, VDPAU, VAAPI, XvMC 等。

    GPU芯片中内置由一个 VPU(Video Processing Unit) 模块,专门用来进行视频编解码。

  3. 提供超高并发的通用计算功能;(称为GPGPU

    比如雷达信号处理,挖矿,机器学习。

    这方面的API有 OpenCLOpenMPNVIDIA CUDADirectCompute 等。

    由于大多数3D图形计算都是针对矩阵和向量的,因此可以使用GPU计算并非图形相关的矩阵或者向量,这就使GPU产生了通用计算能力。以前为了加速某一种计算的性能,可能会开发一个独立的芯片(称为ASIC),比如专门的机器学习芯片(TPU),音频处理芯片,但是由于GPU有了一定的通用计算能力,这些加速就可以通过GPU算法来实现。

  4. 提供特殊能力;

    比如机器学习,自动驾驶,VR,光线追踪等;

    这些能力可以通过在GPU中添加新的硬件模块来实现,类似VPU模块。

    将这些专门的算法的核心算法(比如CNN)拆分成原子算法,并使用硬件来实现这些原子算法来实现硬件加速。

三、哪类程序适合使用GPU计算

  1. 计算密集型的;
    因为GPU有自己的显存,而数据从内存加载到显存是有开销的。

  2. 可以用高并发来计算的。
    程序的计算要能够拆分为并发计算,以便利用GPU的多核能力。


参考链接:

  • https://www.lifewire.com/graphics-cards-3d-graphics-834089
  • https://en.wikipedia.org/wiki/Graphics_processing_unit
  • https://ww2.mathworks.cn/company/newsletters/articles/gpu-programming-in-matlab.html
  • http://download.nvidia.com/developer/cuda/seminar/TDCI_Arch.pdf