GPU编程市场应用


GPU全称是Graphics Processing Unit,中文成为图形处理器,所以GPU编程也叫图形学编程,它是针对的显卡中的芯片编程,游戏引擎的更新换代发展的一个重要阶段是显卡芯片的出现,引擎的渲染能力得到极大提升。GPU 加速器于 2007 年由 NVIDIA® 率先推出,引擎的更新换代也是跟GPU硬件息息相关的,从固定流水线变成了可编程流水线,画面品质得到了质的飞跃。总的来说,GPU编程主要分为两大分支:

现在流行的大数据计算,采用的就是GPU集群编程,从事GPU集群编程可以从事一些高端的行业,比如大数据分析计算等等。另外,作为高性能计算新的应用领域,深度学习(Deep Learning)是近年来机器学习的热点,以GPU集群方式对数据或深度网络模型进行并行化,加速程序执行效率。已广泛应用于Google、百度、Facebook,阿里,京东,华为等公司以及中国的高性能计算机。

我在读研究生期间,我们经常利用GPU集群解决海量数据的计算问题,比如:计算海量模型数据的网格分割,通过GPU集群后计算速度非常快。另外,GPU集群还用于动漫的模型和场景渲染,网上有很多提供渲染服务的渲染农场,专用于对数以几百万面的模型渲染。

使用GPU在游戏中的渲染,我们利用GPU渲染模型材质和场景,不论是模型材质还是每帧运行的游戏图片,它的内部都是由RGB或者RGBA元素组成,换句话说,它是由数据矩阵组成的,利用GPU对图片数据进行再加工,就可以得到非常绚丽的画面,GPU对矩阵计算效率非常高,我们只是简单的利用了单GPU的计算能力就足以应付游戏的渲染了。下图是我们研发的引擎实现的游戏截图如下所示:

总之,我们不论做GPU集群还是只是用GPU做渲染,都是利用了GPU强大的加速计算能力。

GPU编程前景如何?

GPU集群这块给读者简单的介绍一下,它的前景非常好,也是未来一个发展趋势,进入大数据时代,无人驾驶,机器人时代,这些都需要GPU处理,另外,市场上有很多大数据公司招聘需要GPU集群能力的工程师,前景是非常看好的,市场需求很大。但是本课程主要针对的是GPU渲染编程,本课程会针对这方面进行重点讲解。

目前国内最流行的引擎是Unity和UE4,二者都是国外制作的,虽然各大游戏公司也有自己的引擎,实话实说,自研引擎跟商业引擎还是有些差距的,在这里不是贬低国内自研引擎,不说别的,看看国内开发者对Unity和UE4引擎的使用就可以看出当前国内程序员的水平。下面是国外公司利用Unity渲染的效果,如下图所示:

Unity引擎和UE4引擎虽然提供了Shader库,但是在游戏制作过程中还会有提一些新的需求,需要我们自己编程实现的效果。这些需求的实现就体现了GPU编程的水平了。

UE4渲染也是一样的,国内的开发者对GPU编程的使用无法真正的发挥出它的渲染功力,我们看看国外公司制作的游戏渲染画面,如下图所示:

我们经常说游戏的评级:S级大作,A级大作,B级,C级,评级一方面是看画面品质,一方面是看游戏策划,游戏的第一印象还是画面品质,这个就会涉及到GPU渲染。GPU渲染遍及游戏的各个方面,从物体的渲染,粒子的渲染到整个场景的渲染,处处都有GPU的影子。

要想在激烈的IT竞争中立于不败之地,作为程序员必须要不断地提升自己的编程技能,除了掌握一门技术外,必须要再掌握一门技术,而且这门技术市场需求要大,不论你选择是GPU集群还是GPU渲染编程,虽然方向不同,但是都是利用GPU强大的计算以及加速能力。游戏渲染这个分支市场需求同样大,大家看看最近腾讯,网易公司招聘图形学工程师薪资截图:

还有很多的IT公司这里就不一一列举了,大家在百度或者招聘网站搜索:图形学工程师招聘,可以看到许多大大小小的公司对图形学工程师的需求,而且薪资相对逻辑编程高一大截,前景形势一片大好。

其实不论是使用Unity引擎和UE4引擎还是自研引擎,都离不开GPU编程,检验引擎其中一个非常重要的指标就是渲染。

如何学习GPU编程?

既然GPU编程前景这么好,作为初级程序员或者想学习GPU编程的开发者该如何系统的学习呢?这个也是我们的课程所要解决的核心问题。学习一门语言,我们还是要寻找一门能够系统的学习的课程,这个也是我们多年的工作经验积累结果,市面上有很多关于GPU编程的书,比较经典的书籍《GPU Gems》系列,中文名字:《GPU编程精粹》,对于这些大部头的书籍,并不适合初学者学习。而本课程的内容专门为初学者及以上的程序员量身打造的,主要分三大篇:

基础篇:GPU编程常用的向量,矩阵,四元数运算以及GPU与CPU的通信原理等等这些都是经过提炼后的知识,非常实用;

进阶篇:掌握了基础模块的知识后,接下来就要进一步学习与GPU相关的知识了,着色器,纹理,混合,模板等等都是与GPU编程相关的技术点,掌握这些技术点,为深入学习GPU编程打下坚实的基础。

提高篇:本篇讲解的都是与实际案例相关的技术,市面上运行的游戏都与这些技术点相关,掌握了它们可以直接将其应用到自己的项目中;

在这里我把学习大纲给读者列一下:

下面就说说我设计这个课程的一些想法,严格来说我也是跨行业的,以前是搞服务器的,读研究生时方向变成了图形学,刚接触GPU编程,跟大多数程序员一样的,对此啥都不懂,不管怎样既然选择了就要走下去,经过十多年的学习,逐步有了一些心得体会。目前国内学习图形学的程序员相对来说比较少,在此也想把自己的一点经验分享给哪些想从事图形学开发的爱好者。

首先看基础篇的内容,选择了向量和矩阵运算,这两个运算不仅在GPU中使用的频繁,在游戏引擎中也是最基础的部分,非常重要。我也会在课程中详细的介绍向量和矩阵的运算,这样在后面的实战项目里面用起来就得心用手了。渲染管线的出现是引擎发展的一个里程碑,在没有GPU之前,我们使用的是固定流水线,这个也是当时主流引擎使用的,我还专门为此写过一本书《手把手教你架构3D游戏引擎》电子出版社,感兴趣的读者可以看看。另外也出过CSDN视频教程:
《3D游戏开发套餐》这些也是关于学习GPU编程的基础,基本的向量和矩阵运算,GPU出现后,以前的固定流水线变成了可编程流水线。GPU强大的计算能力,不仅应用于渲染,也加速了人工智能,深度学习这些大数据平台的发展。可编程渲染管线从DX9开始到现在比较成熟的DX12,自身也经历了发展,从顶点着色器,可编程着色器,到几何渲染,软件与硬件相互促进,效果也越来越好,效率也在逐步提升。给读者展示一下DX12的可编程流水线:

上图是DX11,DX12的固定流水线示意图,明显比以前的DX8,DX9多了很多项,这些都增加了渲染效果。会在后面的课程中详细介绍,这里给读者提示一下。

CPU与GPU交互,我们在游戏优化时,会看这几个指标,DrawCall的数量,内存占用,其中DrawCall的数量涉及到CPU与GPU的交互,为了让读者真正的明白二者的交互,会单独拿出一节课讲解。掌握了这些知识,对于学习GPU前期准备工作足够了,接下来我们就需要进阶了。

进阶课程的中会用到我们基础教程中的知识,我们的课程是环环相扣的,着色器编程作为Shader语言最基本的操作,作为开发者必须要掌握的,不论可编程流水线怎么变换,顶点着色器和像素着色器一直存在的。我们的GPU渲染说的直白一些,渲染是针对图片进行的,也就是我们说的纹理,游戏运行也是一张张图片快速播放。纹理存储的是RGB或者RGBA的像素矩阵,GPU对矩阵的计算是非常钟爱的,速度非常快。混合模式在渲染中比较常用,它针对的是需要镂空的物体,比如树叶渲染就会用到混合。

进阶课程的后面的技术从模板到环境光散射,列这些技术的目的是让读者知道它们实现的原理,它们是GPU编程中的核心技术,这些技术在渲染中被广泛应用,比如我们使用的Unity引擎和UE4引擎,二者都提供了这些技术点的实现。渲染并不是这些单一技术点的实现而是组合起来使用效果更佳,我们讲解的技术点都是以实用实战为主。

提高篇也是实战篇为了方便读者更快的掌握Shader编程我们使用了Unity这个应用最广泛的引擎作为基础,我们只需要关心Shader的编写就可以了,而无需关心引擎内部的实现及优化。提高篇列举的GPU实现知识点是游戏项目实战中经过检验过的,它们大部分都取自游戏项目的开发。

我们这个课程设计了以上三个阶段学习,是一个逐步进阶的过程,也是GPU编程提升的过程,这么设计的其中一个重要原因是让开发者分阶段学习,也是一个逐步提升,循序渐进的过程。项目中涉及到GPU编程,也会涉及一些优化技术讲解,这样读者不仅会编写GPU程序,也会在此基础上进行优化。

总结

学习GPU编程,上面提到学习课程是最基础的,必须要掌握的,但是GPU编程的学习远远不止这些,真正使用好了GPU编程,它能为我们做很多事情,甚至可以使用GPU编写小游戏。现在游戏中使用的批处理,是CPU与GPU通信的频率,随着硬件的革新,GPU的可编程流水线也会越来越容易。

手把手教你成为Shader编程实战达人—GPU相关推荐

  1. 手把手教你成为Shader编程达人系列概述

    最近,很多大型的游戏公司或者虚拟现实公司,都在大量招聘从普通的引擎程序员到资深的引擎程序员或者引擎主管等职位.对于从事游戏开发的程序员,尤其是客户端程序员掌握GPU编程非常重要,由于项目分工的缘故,大 ...

  2. 手把手教你学习网络编程(1)

    手把手教你学习网络编程(1) 目录: 1) 什么是套接字? 2) Internet 套接字的两种类型 3) 网络理论 4) 结构体 5) 本机转换 6) IP 地址和如何处理它们 7) socket( ...

  3. matplotlib绘图_手把手教你使用Matplotlib绘图实战

    点击上方"早起Python",关注并星标公众号 和我一起玩Python 大家好,昨天我们讲解了如何使用Matplotlib官方文档来绘制并调整我们想要的图,那么今天将使用真实数据来 ...

  4. 手把手教你安装MINIGUI编程环境 (MINIGUI版本3.2.0)

    0. MINIGUI MiniGUI 是一款面向嵌入式系统的高级窗口系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明 ...

  5. java适合舰旗_飘扬的旗帜!shader 编程实战!Cocos Creator!

    > 用 shader + mesh 立个 flag 吧! 文章底部获取完整代码! 效果预览 使用方法 创建一个空节点 添加用户脚本组件 mesh-texture-flag 添加图片 修改对应属性 ...

  6. 真良心干货保姆级手把手教你Python网络编程,学不会我去你家教你

    Python网络编程 基本概念(计算机网络基础) IP地址与端口 IP地址 端口 网络通信协议 网络通信协议 网络协议的分层 TCP/UDP 套接字编程 socket()函数介绍 UDP 编程 实现U ...

  7. idea创建工程到指定文件夹------手把手教东哥学编程(1)

    我要开一个专栏记录东哥的问题! 也就是一些小问题,我东哥能不会了? 第一步:打开idea 第二步:搞一个maven项目,选择骨架搭建吧 第三步:修改名字和目录文件夹 第四步:检查一下,这个有没有 第五 ...

  8. activeperl安装不成功_手把手教你:Windows系统上安装GPU深度学习环境

    前言 在入手学习深度学习的过程当中,有好几个朋友都咨询过我如何安装深度学习环境,之前写过一篇在Ubuntu环境下安装深度学习环境,但是有部分朋友在Windows电脑上安装深度学习环境遇到过许多的问题, ...

  9. TensorFlow手把手教你概率编程:TF Probability内置了开源教材,新手友好

    晓查 栗子 发自 凹非寺  量子位 出品 | 公众号 QbitAI 大家可能知道,要做概率编程 (Probabilistic Programming) 的话,TensorFlow Probabilit ...

最新文章

  1. python兼职程序员工资一般多少-做Python程序员,工资一般多少?
  2. 经典类与新式类的继承顺序
  3. 前端之登录注册页面案例
  4. mavne的依赖、继承、聚合
  5. Linux下学C语言开发要学些什么‏
  6. 求一个序列中最大的子序列_最大的斐波那契子序列
  7. getActionBar()报空指针异常
  8. 长城 宽带 +招商银行专业版
  9. linux Centos 配置本地yum源
  10. python画条形图-Python数据可视化:基于matplotlib绘制「条形图」
  11. [2018.03.14 T3] 圈圈(cyclic)
  12. optisystem仿真 光源线宽与干涉
  13. CATIA怎么约束快捷键_CATIA快捷键和Solidworks快捷键
  14. 在pycharm中使用pyqt5时clicked().后面connect不自动补全问题解决办法
  15. Ubuntu安装、更新显卡驱动
  16. 物联网期末大作业—睡眠质量检测系统(精修版)
  17. C语言1加到100的递归方法,递归调用实现1到100的累加
  18. qt中如何模拟按钮点击_Qt 实现按钮点击切换按钮图片
  19. c语言atof函数_atof()函数与C ++中的示例
  20. 体育计算机培训心得体会,关于体育培训学习心得体会5篇

热门文章

  1. 一文看懂Modbus, Rtu, Rs485等名词的联系
  2. 用Kindle阅读PDF最简单的3个方法!
  3. Kettle【实践 01】Linux环境下使用Azkaban定时调用Kettle的KJB或KTR脚本实现自动化数据处理(完整流程实例分享:包含sql+ktr+shell+flow相关文件云资源)
  4. 1.数学建模比赛前期准备
  5. 曾鸣:互联网的本质是什么?| 内部干货
  6. Java 图形界面(满天星星)
  7. 污水处理成本高怎么办?智能网关+云平台提供你完美解决方案
  8. 使用Docker安装MySQL
  9. 2个相同的 stm32 can通讯不成功_CAN通讯系列--CAN通讯简介1
  10. JavaScript头像上传器的实现