《Unity Shader 与 计算机图形学》第一章
问题:
入
图形学
大坑这么久,看了不少书,却发现一个严重的问题。大部分时间在知其然不知其所以然。没有一篇文章从GPU讲到游戏引擎再到游戏。
这种自底向上的架构性的东西对于图形学程序员来说可谓至关重要 我初学的时候就无时不刻在为GPU怎么参与图形运算
shader是干吗的? 管线是个什么鬼? 那些牛逼闪闪的demo效果为什么的那么好?
所以:
这个系列三篇文章将从GPU工作到绘图过程~从一个史诗级unity 官方demo的shader技术~最终清楚地描述
GPU/OPEN GL/D3D/Shader/管线/渲染器/实时渲染算法/等等一大堆名词之间的关系,最终,我们将分析unity和unreal的画质究竟为什么会有差异,并以一个工程来证明,unity的画质也可以很好。
提示:
本系列文章分为
硬件
编程入门
工程实践
因为硬件部分比较枯燥和陌生。所以如果对于硬件没有兴趣可以直接关注后续文章。本系列从2106年12月开始月更 在2017年2月之前更新完三篇
最底层——GPU/硬件原理
硬件的工作原理其实简单理解起来用一个视频就能说明
Mythbusters Demo GPU versus CPU
但是基于明确的说明 我们还是用Nvdia的文档来了解一下GPU的不同之处和工作机制
这是现代典型GPU和CPU的不同之处 我们看到真正的计算单元也就是绿色的部分
GPU采用来大量的计算核心也就是Nvdia口中的Cuda核心来进行高数据密度的运算
#铺垫:
先来了解计算机内部这些运算器控制器都是用来干嘛的~
1.ALU:Arithmetic Logic Unit 算数逻辑单元
大部分ALU都可以完成以下运算∶
整数算术运算(加、减,有时还包括乘和除,不过成本较高)
位逻辑运算(与、或、非、异或)
移位运算(将一个字向左或向右移位或浮动特定位,而无符号延伸),移位可被认为是乘以2或除以 2。
Alu可以说是计算机处理器的核心部件之一
2.Cache:
通常人们所说的Cache就是指缓存SRAM。 SRAM叫静态内存,“静态”指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变。
由于CPU的速度比内存和硬盘的速度要快得多,所以在存取数据时会使CPU等待,影响计算机的速度。SRAM的存取速度比其它内存和硬盘都要快,所以它被用作电脑的高速缓存(Cache)。
对于一个典型的CPU来说
Alu部分会很强大 可以在很少的时钟周期内完成算数计算
对于一个64bit双精度的CPU来说 浮点加法和乘法只需要1-3个时钟周期
而相比动辄2GHZ 10^9 的cpu来说对于逻辑和算数运算的处理能力就非常强了
大的cache也将延时降低很多 结合了现在的各种高级调节技术比如超线程 多核 等技术CPU对于复杂逻辑的运算能力得到了极大提升
对于典型的GPU来说
ALU的数量会非常大 功能会更少 能耗很低 cache就会很小
这样带来的好处就是针对大吞吐量的需要简单计算的数据来说 处理效率就高了非常多。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据保存在dram中而不是cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候是数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。
GPU的控制单元(左边黄色区域块)可以把多个的访问合并成少的访问。
GPU的虽然有dram延时,却有非常多的ALU和非常多线程. 为啦平衡内存延时的问题,我们可以中充分利用多的ALU的特性达到一个非常大的吞吐量的效果。尽可能多的分配多的线程.通常来看GPU ALU会有非常重的pipeline就是因为这样。
对比结构
我们可以先得出一个简单结论,那就是。针对今天的显卡来说。更适合做高并行,高数据密度,简单逻辑的运算。

最低0.47元/天 解锁文章
4329

被折叠的 条评论
为什么被折叠?



