GPU 都能做什么
一、GPU的结构
GPU
指 Graphics Processing Unit
,中文名图形处理单元。它最初也是最重要的目的是进行3D图形绘制(有些GPU依然只有这个能力,甚至不包括2D绘制的能力,但可以模拟2D),但GPU目前的能力早已超越图形处理了,其中一个原因是GPU的高并发架构,一般的GPU(包括集成显卡)都有几百个核心,多的可以到几千核,如果算线程数更是轻松上万。现在GPU已经有了针对GPU的编程语言,高级语言比如 GLSL
,HLSL
,汇编类语言比如 GLSL IR
,NIR
等。
VPU
是专门的视频编解码模块;GCA
是核心计算单元,它有成百上千的小的内核构成。
二、现代GPU的能力
-
提供2D和3D图形硬件加速绘制功能;
比如软件界面绘制,视频/图片添加滤镜,高效阴影/粒子特效绘制等;
这方面的API有
OpenGL
,OpenGLES
,Vulkan
,Metal
等。提供的功能包括
texture mapping
,向量计算
,坐标转换
,颜色转换
,顶点旋转
,抗锯齿
,执行可编程的shaders
等。 -
提供视频硬件编解码功能;
比如
H264
,WMV
硬件编解码;这方面的API有
DxVA
,VDPAU
,VAAPI
,XvMC
等。GPU芯片中内置由一个
VPU(Video Processing Unit)
模块,专门用来进行视频编解码。 -
提供超高并发的通用计算功能;(称为
GPGPU
)比如雷达信号处理,挖矿,机器学习。
这方面的API有
OpenCL
,OpenMP
,NVIDIA CUDA
,DirectCompute
等。由于大多数3D图形计算都是针对矩阵和向量的,因此可以使用GPU计算并非图形相关的矩阵或者向量,这就使GPU产生了通用计算能力。以前为了加速某一种计算的性能,可能会开发一个独立的芯片(称为
ASIC
),比如专门的机器学习芯片(TPU
),音频处理芯片,但是由于GPU有了一定的通用计算能力,这些加速就可以通过GPU算法来实现。 -
提供特殊能力;
比如机器学习,自动驾驶,VR,光线追踪等;
这些能力可以通过在GPU中添加新的硬件模块来实现,类似VPU模块。将这些专门的算法的核心算法(比如CNN)拆分成原子算法,并使用硬件来实现这些原子算法来实现硬件加速。
三、哪类程序适合使用GPU计算
-
计算密集型的;
因为GPU有自己的显存,而数据从内存加载到显存是有开销的。 -
可以用高并发来计算的。
程序的计算要能够拆分为并发计算,以便利用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