Part 01
GPU主要用途及相关API标准
本期内容探索的GPU主要用途包括:图形渲染、计算加速、视频编解码。
图形渲染:GPU可以加速三维图形的渲染,使得复杂的三维场景可以以流畅的帧率显示在屏幕上;也能支持多种图形效果,如阴影、反射、抗锯齿等,可以提高图像的真实感和美观度。
计算加速:GPU拥有比CPU更强的并行计算能力,可以加速各种计算密集型任务,例如对图像进行滤波、变换等操作。
视频编解码:GPU可以加速视频编解码的过程,使得视频的压缩和解压缩速度更快。GPU可以通过硬件加速的方式来处理视频编解码,从而减轻CPU的负担,提高视频处理的速度和效率。
基于这些主要用途,每个分类都有对应的API标准支持,分别是图形渲染API标准、通用计算API标准和视频编解码API标准。
Part 02
图形渲染API标准
GPU的图形渲染API标准主要有:OpenGL、Vulkan、DirectX。(注意:本文中OpenGL泛指OpenGL家族相关API,包括:OpenGL、OpenGL ES、WebGL等。)
图片
2.1 OpenGL
OpenGL(Open Graphics Library)是一种用于渲染2D和3D图形的跨平台图形库,它提供了一组功能强大的API,用于管理图形渲染流程和图形硬件的交互。它可以在多个操作系统和硬件平台上运行:
Windows:OpenGL在Windows操作系统上广泛支持,甚至Windows95也能找到OpenGL的支持。
Linux:几乎所有的Linux发行版都支持OpenGL。
MacOS:OpenGL是MacOS的默认图形库。
Android:开发者可以使用OpenGL ES(OpenGL for Embedded Systems)来创建移动设备上的图形应用程序。
iOS:与Android类似,可以通过OpenGL ES来创建iOS设备(如:iPhone、iPad等)上的图形应用程序。
Web:在Web浏览器中,可以通过WebGL(Web Graphics Library)来实时渲染2D或3D图形。WebGL是一种基于OpenGL ES的Web标准。
2.2 Vulkan
Vulkan与OpenGL一样由Khronos Group开发,它旨在提供更高效、更可扩展的图形和计算性能,同时保持跨平台兼容性。相对于OpenGL,Vulkan有以下优势:
更高的性能:Vulkan能够更好地利用多核处理器和GPU的并行计算能力,提供更高的帧率和更低的延迟。
更好的可扩展性:Vulkan的设计允许开发者更好地管理资源和内存,并能够更好地适应不同的硬件平台。
更严格的验证:Vulkan强制执行更严格的规则和验证,以避免错误,提高稳定性和可靠性。
更灵活的管道:Vulkan的管道可以通过自定义扩展来适应不同的需求,从而提供更大的灵活性。
更好的跨平台兼容性:Vulkan支持更多的操作系统,可以在各种平台上实现更高的性能。
但也有以下劣势:
学习曲线陡峭:开发过程需要维护更多与GPU硬件交互的细节,需要更多的时间和精力来学习和掌握。
缺乏成熟的工具和库:相对于OpenGL,Vulkan的支持工具和库还不够成熟,需要更多的自行开发和定制。
更多的代码:相对于OpenGL,Vulkan需要更多的代码来实现相同的功能,需要更多的开发时间和劳动力。
图片
2.3 DirectX
DirectX是微软开发的一套多媒体编程接口,包含Direct3D、Direct2D等等多个不同用途的子部分,用于游戏开发、图像处理等领域。它主要支持:2D渲染、3D渲染、多媒体处理、输入输出设备管理、网络通信等。
相对于OpenGL与Vulkan:
DirectX只能在Windows或者Xbox系统上使用;
采用C++编程开发,不支持多语言开发;
Part 03
通用计算API标准
GPU的通用计算API标准主要有:OpenCL、CUDA。
图片
3.1 OpenCL
OpenCL(Open Computing Language)是一个为异构平台编写程序的框架,提供了基于任务分割和数据分割的并行计算机制。OpenCL的主要功能特性如下:
并行计算:支持并行执行计算任务,使得计算速度提高。
跨平台支持:是一个跨平台的开发框架,可以在不同的操作系统和硬件上运行,比如:Windows、Linux、MacOS、Android等。但是,OpenCL的支持程度取决于硬件厂商和驱动程序的实现。通常,NVIDIA、AMD、Intel等主流GPU厂商在硬件以及驱动层面都提供了对OpenCL的支持,国产大部分GPU厂商也提供了对OpenGL的支持,如:摩尔线程、景嘉微、芯动科技、格兰菲等。
多设备支持:支持多种设备,包括CPU、GPU、DSP、FPGA等。
多线程支持:支持多线程执行计算任务,可以充分利用多核CPU和GPU的性能。
动态编译:支持动态编译,可以根据不同的硬件环境进行优化。
内存管理:提供了内存管理功能,可以对内存进行分配、释放、传输等操作。
数学库支持:提供了数学库支持,可以进行向量、矩阵计算等操作。
图像处理:提供了图像处理功能,可以进行图像处理、滤波、变换等操作。
3.2 CUDA
CUDA(Compute Unified Device Architecture)是NVIDIA推出的一种用于GPU并行计算的平台和编程模型。它允许开发者使用GPU来加速计算密集型应用程序,包括科学计算、深度学习、图形处理、大规模数据分析等领域。CUDA提供了一种高效的编程模型和工具链,使得开发者可以充分利用GPU的并行计算能力,从而加速应用程序的运行速度。
CUDA支持的主要功能如下:
并行计算:允许程序在GPU上并行执行,从而充分利用GPU的并行计算能力。开发者可以使用CUDA C/C++语言编写并行计算程序,或者使用CUDA工具链将现有的C/C++代码转化为CUDA代码。
GPU加速:提供一种高效的GPU加速技术,可以将计算密集型任务移植到GPU上,从而大大提高应用程序的运行速度。
大规模数据处理:处理大规模数据,包括图像数据、视频数据等。开发者可以利用CUDA的并行计算能力,快速处理这些数据,从而加速应用程序的运行速度。
深度学习:提供了一种高效的深度学习平台,可以加速深度学习模型的训练和推理。开发者可以使用CUDA加速深度学习框架,如TensorFlow、PyTorch等。
图形处理:加速图形处理任务,如图像处理、计算机视觉等。
Part 04
视频编解码API标准
基于GPU的视频编解码API标准主要有:OpenMAX DL、VDPAU、VA-API、NVENC/NVDEC等。
图片
4.1 OpenMAX DL
OpenMAX是一个不需要授权、跨平台的用来处理多媒体内容的软件抽象层API集合。OpenMAX包含三层API:应用层(OpenMAX AL)、整合层(OpenMAX IL)、开发层(OpenMAX DL)。涉及视频编解码标准的API则位于OpenMAX DL。
OpenMAX DL API定义了一组低层级的多媒体内核或媒体处理API标准,包含多个方面:
a.信号处理(signal processing):通用音频处理函数
b.图像处理(image processing):通用图像处理函数
c.音频编解码(audio coding):音频编解码器(MP3 解码器和 AAC 解码器组件)
d.图像编解码(image coding):图像编解码器(JPEG 组件)
e.视频编解码(video coding):视频编解码器(H.264 和 MP4 组件)
4.2 VDPAU
VDPAU(Video Decode and Presentation API for Unix) 是为UNIX 系统视频解码/显示制定的开源的API标准。VDPAU 允许视频程序访问 GPU 上的专用视频解码组件(ASIC),以将部分视频解码和视频处理过程从 CPU 调度到 GPU进行。
当前能够通过VDPAU调度到GPU上的处理过程包括对MPEG-1、MPEG-2、H.263/MPEG-4 ASP、H.264/MPEG-4 AVC、H.265/HEVC、VC-1、WMV3、WMV9等编码视频的Deblocking工作。
4.3 VA-API
VA-API(Video Acceleration API)是一种允许视频程序使用GPU提供的硬件视频加速功能的API规范。最初由Intel为其特有GPU硬件设计,目前已不局限于Intel特定硬件,其他厂商的硬件也可以免费使用并支持这个开放API标准。
类似VDPAU,VA-API 的主要目的也是为视频编解码的过程中的多个环节提供硬件加速功能。VA-API主要支持的编码格式包括:MPEG-2、H.263/MPEG-4 ASP、H.264/MPEG-4 AVC、H.265/HEVC、VC-1、VP9等。
4.4 NVENC/NVDEC
NVIDIA GPU通过独立于 CUDA 核心的编/解码器(对应NVENC/NVDEC)为几种主要的编码格式提供基于硬件的视频编解码加速,包括:AV1、MPEG-2、H.264/MPEG-4 AVC、H.265/HEVC、VC-1、VP8、VP9等。
Part 05
国产GPU支持现状及总结
结合团队目前调研的云VR渲染应用场景,我们重点关注国产GPU的以下方面:
- 虚拟化,使得一张物理GPU支持多个虚拟机。
- 图形渲染算力及API支持情况。
- 操作系统支持,主流及国产OS。
综合以上维度,国内最新GPU产品详细对比如下(通用计算领域GPU除外):
图片
综上对比信息,MTT S3000和风华1号在云渲染领域具有较大优势。