关于GPU的几点建议

1.GPU的基础背景知识

GPU,也叫显卡,图形加速器。一般叫加速卡的都不是特别的核心组件,和现在苹果使用的M7协处理器地位差不多。做图像显示、图形加速时,有GPU更好,没有也不是不行,因为基本的图形输出就可以接显示器了,满足最基础的需求。但到了20世纪初,随着PC的普及,Windows系统这样的市场霸主的出现,为了简化越来越庞杂的图形计算,越来越丰富的UI界面的工作量,图形硬件厂商开始生产各种图形处理器,即显卡。

 

图 1

图(1)(图片来自Nvidia官方文档)给出了CPU和GPU架构的不同。其中绿色是计算单元,橙红色的是存储单元,橙黄色的是控制单元。GPU使用了数量众多的计算单元和超长流水线,只有非常简单的控制逻辑并省去了Cache。而CPU有很大的Cache空间,还有复杂的控制逻辑和优化电路,但同时计算能力也缩小了很多。简而言之,CPU擅长复杂逻辑控制和通用类型数据运算,GPU则擅长大规模并发计算(尤其擅长图形数据渲染加速和图像数据卷积滤波计算)。

衡量GPU性能的参数包括核心频率、显存、位宽、像素管线、像素填充等,可以使用GPU-Z(如下图2)或者Geeks3D GPU Caps Viewer这样的PC端专业评测工具进行系统级GPU性能评估。

 

图 2

 

2.为什么一定要用GPU

在计算机中运行的程序从性能的角度可以大致分作三类:(1)I/O密集型,多出现在分布式集群,网络通信/硬盘读写操作中;(2)内存访问密集型,大部分的应用程序都属于此类型,这种程序优化起来也不是很容易,很多寄存器上面设计和优化的技巧还值得深入思考;(3)计算密集且易于并行设计型。相比较于前两者,GPU在第三类程序设计上起到了巨大的作用。

同时,观察OpenGL/GLSL,OpenGL ES/GLES, OpenCL的演变历史(图(3)),不难发现GPU可编程式渲染管线在大数据并发程序设计上带来的无与伦比的优势[1]。

 

图 3

特别的,针对移动设备上的OpenGL ES,它是在OpenGL基础上针对手机、PDA和游戏主机等嵌入式设备专门专门裁剪而成的三维图形API子集。OpenGL ES 1.x是针对固定管线硬件的,如OpenGL ES 1.0以OpenGL 1.3规范为基础。而随后OpenGL ES 2.x则提供了包括遮盖器技术在内的可编程3D图形算法,OpenGL ES 2.0(2007年)以OpenGL 2.0(2004年)规范为基础。而2014年Khronos Group在GDC2014大会上发布的OpenGL ES 3.1,版本号虽然缩小,但却加速地成为继承了OpenGL 4.x多项重要功能的子集。特别是在OpenGL 4.3(2012年)重点推出的Compute Shader功能,通过它可以使GPU执行通用目的的的计算任务(具体案例可以参考GPU红宝书中的图像滤波、图像边缘提取[2]),与图形渲染紧密相连,大大增强了移动设备的计算性能。

 

3.怎么用GPU

从移动芯片硬件厂商的开发社区,以及与众多第三方的软件开发公司交流中,容易分析出一个结论,即是——GPU将在SOC移动设备系统中扮演着不可或缺的较色,GPU在通用计算上面价值的挖掘,得到了从软件应用开发者到硬件厂商(Arm,Imagination,Nvidia),OS系统厂商(Android,ios),以及用户的一众支持,GPU技术的发展已经得到了良性循环并且迅猛成长。

为了充分发挥CPU、GPU各自的架构优势,设计出足够灵活且稳定的程序并不是一件特别容易的事。在Android嵌入式平台上,除了有OpenGL ES,还有OpenCL,RenderScript,OpenVX等依靠GPU设计的并发API可选,实际的嵌入式应用开发者需要在充分测试嵌入式GPU实际性能基础上,结合应用软件的目标需求,有针对性地做出合理的取舍与优化[3]。

需要指出的是,开发效率也是一种宝贵的人力资源值得谨慎使用。相比较于发展比较成熟体系的OpenGL,OpenGL ES无论是在厂商驱动支持力度,还是在性能调优工具上都比较薄弱,相关的示例性Demo还相对缺乏。同样的情况出现在OpenCL full profile和OpenCL embedded profile两个不同版本上面。所以,作为入门级学习,我推荐先调试通过PC端用OpenGL一些简单API编写的示例Demo,弄清楚了着色器基本语法,管线渲染基本流程,帧缓存的创建和消除,纹理图像数据存储的区别,视角窗口的基本变换,基础数据的封装与传输等技巧之后,再迁移至嵌入式OpenGL ES应用开发,会得心应手很多。无论是做图像算法优化,图形纹理贴图,GPU通用计算,还是UI界面性能需求分析,书籍方面,GPU红宝书——《OpenGL编程指南》,是基础知识讲解很浅显易懂,值得参考的宝贵资料。

 

4.基于Android平台的嵌入式GPU优化技巧

现阶段,GPU除了在游戏领域继续发挥着图形变换,纹理渲染的传统优势,越来越多的被引用到图像,视频流媒体领域,发挥着它与日俱增的通用并发计算能力。

特别在Android 5.0官方全面支持OpenGL ES 3.1的API之后,OpenGL ES新引入的Compute Shader功能,与OpenCL中Shader相似功能与区别也引起了大家的广泛讨论。一个可见的共识是,Android官方支持OpenGL ES 3.1,而不官方支持OpenCL 1.1,但相关的嵌入式GPU硬件厂商早已将自家的OpenCL技术hack进入了Android平台下,这对于应用技术开发者利好,同时也给平台的稳定性带来了一定的维护难度和风险。另一方面,单单从技术开发的角度看,OpenCL更偏重于复杂的通用并发应用开发(举例:如2014年,基于M76双gpu平台我写了一个视频录像防抖,算法性能调优的基础是使用30帧/秒的高清(1080P)视频数据),Compute Shader作为图形管线的一部分,在OpenGL ES应用程序开发中并不是一个必要的阶段,他可以处理应用程序中所创建和使用的缓存数据,使结构化数据处理(包括3D graphic data、2D image data及1D buffer data)相对传统图形光栅渲染机制更加高效灵活[2](举例:如系统级定制的毛玻璃应用,可以基于不同的渲染管线机制,采用不同的着色器搭配使用,能够更高效率低功耗地实现模糊效果)。

最后,推荐两个我基于Android 4.4平台写的评测嵌入式gpu性能的小工具,[4]可以获取EGL/OpenGL ES的性能参数,[5]可以获取OpenCL的性能参数。同时,基于公司内部小组的具体应用开发的需求分析,另一个将2维图像作为原始数据输入的异构高性能计算框架的编写也在不断完善和优化中[6]。当然,这里还没有涉及针对OS系统级的GPU性能分析,希望更多的图像图形爱好者加入到GPU的学习当中,对GPU应用开发相关技术感兴趣,在讨论交流中共同成长。

 

参考目录:

[1]https://www.opengl.org/registry/

[2]OpenGL编程指南(原书第8版)

[3]GPU通用计算你有兴趣吗?http://blog.csdn.net/chen_nan/article/details/44649973
[4]https://github.com/cnanlmlin/ListEGLConfigs

[5]https://github.com/cnanlmlin/TestOCL

[6]https://github.com/cnanlmlin/heterogeneous_computing_framework

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于YOLOv5的GPU配置,您需要确保以下几点: 1. 安装GPU驱动程序:请确保您的计算机上已正确安装了与您的GPU型号和操作系统相匹配的最新GPU驱动程序。您可以从GPU制造商的官方网站上下载并安装适用于您的GPU型号的驱动程序。 2. 安装CUDA:YOLOv5使用CUDA加速深度学习计算。您需要安装与您的GPU驱动程序版本对应的CUDA Toolkit。您可以从NVIDIA官方网站下载适用于您的GPU驱动程序版本的CUDA Toolkit,并按照说明进行安装。 3. 安装cuDNN:cuDNN是一个用于深度学习加速的GPU库。请确保您安装了与您的CUDA版本兼容的cuDNN版本。您可以从NVIDIA开发者网站下载适用于您的CUDA版本的cuDNN,并按照说明进行安装。 4. 安装Python环境:YOLOv5是用Python编写的,因此您需要安装Python环境。建议使用Anaconda或Miniconda来管理Python环境。 5. 安装YOLOv5:您可以从YOLOv5的官方GitHub仓库中克隆或下载源代码。将代码克隆到本地后,按照官方文档中的说明进行设置和配置。 6. 配置训练数据集和模型参数:根据您的需求,准备相应的训练数据集,并根据您的任务设置模型参数。 7. 启动训练或推理:根据您的需求,可以使用命令行工具或编写Python脚本来进行YOLOv5的训练或推理。 请注意,YOLOv5的GPU配置可能因您的操作系统、硬件和软件环境而有所不同。建议参考YOLOv5官方文档和GitHub仓库中的说明进行具体配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值