Re: [情报] NVIDIA显卡爆发式飞跃揭秘:悄然上平铺式

楼主: jk21234 (BL2400PT真不错)   2016-08-02 22:36:11
※ 引述《KotoriCute (Lovelive!)》之铭言:
: http://news.mydrivers.com/1/493/493738.htm
我去查了原文 , 他是说Maxwell采用的是Tile-Based Immediate Rendering
不过既然讲到Tile Based Rendering,
就可以顺便提一下历史上的PowerVR
PowerVR 1 = Matrox M3D
PowerVR 2 -> Sega Dreamcast,Naomi
PowerVR 3 = Kyro (PC独立显卡)
然后就从NEC手中被英国公司Imagination收购,
这家公司又刚好在ARM对面.最后PowerVR和ARM
也联手也分别打下Mobile市场
PowerVR虽然是最早以Tile Based Rendering命名技术的
不过他的做法因为后来又出现其他种Tile Based Rendering,
所以比较精确指称的话,他可以称为Tile Based Deffered Rendering
相对的后来其他家不太一样,也叫自己为Tile Based Rendering的做法就有差
所以本文后面除非回到历史名词,不然会以TBDR代称PowerVR的技术
TBIR代称其他家的TBR.
那TBDR最重要的是Deferred Rendering,意思是说,画面上通常会有很多个物件
没有画以前会有重叠的可能,传统做法是一个相关的物件一起画,但可能A画好,
B又把他盖掉,等于浪费掉了(overdraw)
所以能早点知道B在A前面,就直接先画B,再画A没被盖到的部分,
这样最节省频宽.PowerVR会切成小Tile再排序A和B谁在前面,
确保一定先画前面


NV30和Radeon 200以后的GPU,基本上也有作TBR的情况,只是不以
Deferred Rendering的方式,而是EarlyZ/HyperZ,提早在pipeline前端
切掉超过范围的东西.......算了 早点进入主题
现代GPU普遍的使用Tile Based Rendering,但他可能是基于其他理由.
根据实验,Intel 的Haswell GPU的绘图顺序如此图


这个是把Pixel绘图的顺序,变成B+G+R的颜色.
也就是Pixel 1就是(0,0,1),Pixel 255就是(0,0,255),
Pixel 65535就是(0,255,255)
可以看出 他绘图的顺序是8x8个pixel为一个小单元,然后小单元之间
像是贪食蛇这样连接,而不是单纯以X,Y轴为顺序
这样是做什么?
我们把情况简化,假设萤幕总分辨率是4x4
如果最传统的图学,资料顺序是
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
当我们照这个顺序的时候,有很多机会 你要去查邻近的Pixel是什么颜色
7如果查旁边6/8两个 还算连续,3/11就跟你不连续了
如果你是1080P的画面 已经在几百kB外的资料了
但内存传递可以是连续的,一次很多,那如果能传进来的时候,
同时把你四周的点都准备好 那可能会比较省时间
从2x2来看
1 2
3 4 好像随便排都很近
把这想法先扩大一倍看看
1 2 5 6
3 4 7 8
9 10 13 14
11 12 15 16
至少我保证只要一次传4个pixel,有一半的机会你的邻居也好了
如果不这样做就是
1 2 3 4 当你要查6的时候,要等下次
5 6 7 8
9 10 11 12
13 14 15 16
类似的实行法不只上面那个,我举的这种叫做Z-ORDER CURVE
wiki上有图示会比较清楚
https://en.wikipedia.org/wiki/Z-order_curve
还有比较复杂的比如Hilbert Curve
https://en.wikipedia.org/wiki/Hilbert_curve
那么 综合而言,TBIR(如果不考虑舍弃overdraw的三角面)
是打算达成什么效果呢?
1.先将要画图的画面,切成N*N的pixel的方块 一次进入显示卡的
Pipeline或者同一单位的Shader群绘制
为什么?因为缩减了范围,Data Locality相对提高
针对贴图的Cache命中率就会高很多
2.不同Tile的顺序是以Z-order Curve或者Hilbert Curve等顺序完成
这可以得到两个效果
A.由内存连续送进来的东西比较有机会是你会用到的
反之也可以说是 你和你的邻居可以被打包成一次传送
B.你要重新查询隔壁的东西 他很有机会还在Cache中没被挤出去
不用再读取一次
3.(顺便的) 贴图的储存顺序也会照同一个方式储存
如果说要用这种方式储存
那内存位置跟X,Y轴的对应关系就变得很复杂了
所以所有相关的电路都会因此多花费电晶体但省掉内存频宽
事实上GPU的进步中这是很常见的事情 用更多的电晶体
换更少的内存频宽消耗量,内存频宽才是有限资源.
如果要说有无采用TBIR,我认为目前的AMD/nVidia/Intel/ARM GPU都是
并不是nVidia专属,当然这个东西也不影响画出来的效果,不属于任何
投机的范围
(ARM有一个专利 因为TBR有Tile,可以数出已经画了画面上的百分之多少,
如果已经超额完成任务 可以把GPU的内存存取暂停让给CPU使用.
另外Samsung和nVidia也有申请TBR的相关专利....)
==
补充:PowerVR败退自PC原因是因为自身的TBDR,虽然省了内存频宽
但需要较多的内存量 成本优势有限 加上TBDR会在透明色/多重贴图/
Vertex Shader的情况有较多劣势....
但成为Mobile GPU无可跨越的霸主也可算是在TBDR.
因为Mobile GPU实在是无法浪费多少电给你在内存频宽上
作者: greenpeace21 (梦见街)   2016-08-02 23:25:00
难怪Dreamcast的游戏不太用透明色和多重贴图

Links booklink

Contact Us: admin [ a t ] ucptt.com