作者jk21234 (BL2400PT真不错)
站内PC_Shopping
标题Re: [请益] 请问Haswell集显效能提升的问题
时间Wed May 9 00:52:17 2012
※ 引述《ericfriendex (艾力克斯朋友)》之铭言:
: → Khadgar:Virtual MVP不是会有把某些frame skip的状况吗 04/26 02:31
: → Khadgar:仔细想想就知道那根本形同作弊 04/26 02:31
: → Khadgar:跟那些加速器的差别只是他只Skip少一些而已... 04/26 02:33
: → Khadgar:话说的好听,说如果两个frame没有明显改变就不re-render 04/26 02:33
: → Khadgar:这种"看起来智慧式的"东西最容易出问题 04/26 02:34
现在对於这个作弊事件只有两个"旁证",但是这两个目前还算不上直接证据.
这两个证据是.....
1.奇数和偶数frame,相隔时间很短,但是这不只是Virtu,还有SLI和Crossfire
都会发生的,这个现象叫作
micro-stuttering,很多网站都有解释.Tom's hardware,
Anandtech,3D甚麽的....网路搜寻一下可以作个基本了解
但等等底下会解释为甚麽大家都会发生micro-stuttering.
以FPS的观点来看,micro-stuttering则会上下跳动
* * * * * *
/ \ / \ / \ / \ / \ / \ 双GPU
* * * * * * *
----------------------- 单GPU
2.藉由API拦截,发现call "draw a frame"的命令数只有一半
不过我看不懂法文所以除了看截图判断,没办法重现他的测试方式......
所以我不确定这是否是很强的证据
因为Lucid Virtu就算是个黑盒子 他也一定是
使用前 使用後
| |
[ X } [ A ]
| / \
[B] [C]
\ /
[ D ]
|
这样的拆法,那麽原本拦截API的方法,要确定拦截到A或者是D,而如果拦截到B或者是C.
那麽本来数量就会只有一半了......
"为甚麽会发生micro-stuttering,以及,SLI/Crossfire/Virtu等多GPU系统的共通问题"
多重GPU系统下,必须要作的事情是把工作分摊到不同的gpu上.基本上会采用的方法有
1.AFR (Alternate Frame Rendering)
AFR就是把每个frame,依序分配给不同的GPU
原先是:
111111111 22222222 3333333 44444444
111111111 22222222 3333333 44444444
111111111 --> 22222222 --> 3333333 --> 44444444
111111111 22222222 3333333 44444444
AFR就分配成:
AAAAAAAAA BBBBBBBB AAAAAAA BBBBBBBB
AAAAAAAAA BBBBBBBB AAAAAAA BBBBBBBB
AAAAAAAAA --> BBBBBBBB --> AAAAAAA --> BBBBBBBB
AAAAAAAAA BBBBBBBB AAAAAAA BBBBBBBB
AFR的好处是相邻的FRAME计算量都差不多,所以有最好的负载平衡.
在
赛猪公的时候分数会很好看,可是micro-stuttering的问题就是AFR造成的
目前各种系统,2GPU的几乎都预设用AFR,3/4GPU就未必是
2.SFR
同一个Frame切割成上下两半或者左右两半,然後交给各个GPU执行
基本上像是:
AAAAAAAAA AAAAAAAA AAAAAAA AAAAAAAA
AAAAAAAAA AAAAAAAA AAAAAAA AAAAAAAA
BBBBBBBBB --> BBBBBBBB --> BBBBBBB --> BBBBBBBB
BBBBBBBBB BBBBBBBB BBBBBBB BBBBBBBB
这样会有甚麽问题呢?由於任何游戏的上下半部的计算量都不均等.
所以实际上他有很严重的负载不平衡,很容易拖慢FPS,driver中会因应
计算量大小而调整分配画面的比率.
SFR有没有好处?喔,有...除了不发生micro-stuttering之外,画面上半段
和画面下半段所用的贴图通常不太一样.所以AFR会爆贴图记忆体量的,SFR
会
节约一点贴图.怎麽说呢?当你计算画面上半段,就不需要载入地面的贴图,
计算画面下半段 就不需要载入天空的贴图这意思
但SFR在赛猪公上非常吃亏,所以除非特定游戏不然预设多半不是SFR
3. SFR/AFR混血
用於超过2个GPU的场合.通常用在4 GPU的场合,可以分为AFR in SFR或者是
SFR in AFR这两种.简单说原理和前面AFR/SFR一样,差别在先分割画面成两块
还是先分奇偶frame...反正最後结果就类似
AAAAAAAAA BBBBBBBB AAAAAAA BBBBBBBB
AAAAAAAAA BBBBBBBB AAAAAAA BBBBBBBB
CCCCCCCCC --> DDDDDDDD --> CCCCCCC --> DDDDDDDD
CCCCCCCCC DDDDDDDD CCCCCCC DDDDDDDD
4.区块分割,Tile Based(有正式命名嘛?)
比较类似SFR,但不是以一条线分割开来,而是把画面切成非常多个区块,这些区块
分给两个GPU计算
AABBAABBA AABBAABB AABBAABB AABBAABB
AABBAABBA AABBAABB AABBAABB AABBAABB
BBAABBAAB --> BBAABBAA --> BBAABBAA--> BBAABBAA
BBAABBAAB BBAABBAA BBAABBAA BBAABBAA
这是ATI的独门方法.优点在
负载平衡会比SFR好,也没有AFR的micro-stuttering
缺点.当然也不会节约多少显示记忆体啦.
5.由两张显示卡分别计算fsaa的MULTI-sample,再组合起来
可以称为SLI-AA or Crossfire-AA
因为SFAA是在同一个pixel内取多个sample点计算 再把颜色混合起来,
所以这多个sample点会分给两个gpu计算.
大概是这样吧
|--------------------|
| | PIXEL放大版本
| 1 2 3 |
| | 假定没开FSAA,那麽取样点就是O,开了就会是四周的
| O | sub-sample 1~6不等,那麽就平均分配给这些gpu计算
| | 不同的sub-sample...不过实际的位置不是在我画的地方
| 4 5 6 |
| |
----------------------
不过SLI-AA or Crossfire-AA大多数是用来提高最大的AA支援数量,极少用在
提昇效能方面
6.SLI-multiview
nVidia Quadro的独家方法.说起来没甚麽...就是SLI的时候两个gpu的萤幕都可以输出,
画面范围在哪个gpu上就由谁计算.只有cad程式比较有意义.
7.每个物件分开给不同的GPU画
Lucid 的独家技术 有展示过 有没有拿来用就不知道了
基本上同一个画面可能背景给GPU 1画,前面人给GPU2画之类
然後,
为甚麽AFR会造成micro-stuttering??
基本上单一gpu的时候,fps相对很稳定,前面的图重新看一次,就如同
* * * * * *
/ \ / \ / \ / \ / \ / \ 双GPU
* * * * * * *
----------------------- 单GPU
不幸一点的时候会发生
* * * * * *
/ \ / \ / \ / \ / \ / \ 双GPU
--------------------------- 单GPU
* * * * * * *
双GPU的最低FPS还低於单GPU.
改用时间轴而且拉长来看,上面的图则会变成是:
单GPU
1--------2-------3-------4-------5
双GPU
1--2-----3--4----5--6-----7--8-----9--10
为什麽这样喔?因为AFR下,第二个gpu要把整个framebuffer...
双GPU AFR的理想
GPU2
------2----------4-----------6------------8-------
GPU1
1-----------3-----------5------------7------------9
合成後
1-----2-----3----4------5----6-------7----8-------9
实际上
GPU2
-------2
2-----------4
4-----------6
6-----------8
8-------
GPU1 / cmd leg \ copy回来的延迟
1-----------3-----------5------------7------------9
合成後
1-------2---3--------4--5---------6--7---------8--9
由於绘图指令分给第二个GPU的时候可能会比较慢.加上GPU2画好之後.
还要把frame复制回gpu1 (在上图中以22,44,66,88表示这过程)
所以合成後,2-3间比较短,3-4间却很长.如果计算每个frame之间的
时间差,会发现有一半的时间差只比单gpu的时候好一点.这个现象即为
micro-stuttering.
那这个会对玩游戏有甚麽影响呢?
基本上....单gpu的时候假如通常两个frame都相隔20ms,但是双gpu的时候
两个frame有一半相隔18ms,一半相隔6ms,那麽FPS赛猪公,虽然双GPU的fps会是
单gpu的170%,
可是体感的结果,双gpu只比单gpu最快快10%.因为是以最糟糕的两个差距
(18ms:20ms)来算的.
而且实际上.由於这个是交互出现的间隔,所以frame之间以18-6-18-6-....
的间隔,视觉上也可能比20-20-20-20....还惨.因为 (1)人眼会注意到最差的地方
(2) 3D Game的时候,物体的移动量都是以两个相隔的frame差多少时间去算的,
可是micro-stuttering的误差,会造成应用程式误判你每个frame的移动量,以这个例子.
他会当作要以12-12-12-12(ms)去计算移动量.
那麽每个frame的移动量:
18- 6-18- 6-18 -6 .........
12-12-12-12-12-12
快 慢
50 50
% %
每个单数frame计算的移动量多了50%,偶数的frame少了50%,本来平顺的3D游戏
的移动就会变成在抖啊抖的.........冏
总之,
AFR不但让你的眼睛体感没有比单GPU好上多少,操作体感
更有可能退化到不如单GPU,所以采用双 GPU SLI/Crossfire的要有认知,
如果能改最好避免这种只有赛猪公有用的AFR,不过AMD driver没得改,nVidia
以前可以强制SFR现在不行.但是3 GPU/4GPU 通常就不采用纯AFR了(理论上可以
实际上弄下去会更惨),所以micro-stuttering的现象会减轻.
而且,
我也很认真的相信,真的要享受游戏,多GPU绝对不是个好方案
一般来说双GPU建议专业使用比如程式开发者要了解双GPU有甚麽惨剧,
或者你电脑有产值可以藉由显示卡或者是GPGPU程式产生产值再说.
3~4 GPU嘛.....以这东西的实用性应该是GPU厂商
付钱请我们测试,
才不需要由使用者花钱来用好吗(应该没有厂商会鸟你XD)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.78.54
1F:推 ang728:简单易懂 推 05/09 00:56
2F:→ jk21234:以前没试过重点标色的方法 应该要改这样比较好阅读? 05/09 00:58
3F:→ dlikeayu:快出来拜神 05/09 00:59
4F:→ kill0210:还是单GPU比较实在。 05/09 01:04
5F:推 friedpig:有神快拜!!! 这次的好像有点懂 又好像不太懂... 05/09 01:09
6F:推 white4go1:Qrz 这篇比以前找到的英文讨论容易懂点 05/09 01:10
7F:推 pomelo168168:就是这样 喵 05/09 01:16
8F:推 evonre:请教一下,NV新的 Adaptive VSync 有可能是解答吗? 05/09 01:30
9F:推 Alex00611:推 05/09 01:43
10F:推 Bohm:写得太好了 以後买单卡就好! 05/09 01:49
11F:推 kagayama:专业 05/09 01:53
12F:推 love19870314:简单易懂 推 05/09 01:58
13F:推 VictorTom:有神快拜....<(_ _)> 05/09 02:02
14F:→ jk21234:我以前写的东西都比今天这篇基础更简单啦.怎麽大家比较 05/09 02:08
15F:→ jk21234:看的懂 05/09 02:09
16F:推 lsslss:越吃越重咸 (拖走 05/09 02:10
17F:推 KCKCLIN:推一个 05/09 03:47
18F:推 AXby:有神快拜 05/09 05:29
19F:推 l0630:有神快拜....<(_ _)> 05/09 07:18
20F:推 cluohy75118:神抱歉 这次看到一半就END了 推 05/09 09:01
21F:推 asdfghj12345:功力太差~ 看不到两句就推文了~ 05/09 09:15
22F:推 apley:看不懂end... 果然是神的境界啊 05/09 09:16
23F:推 arrenwu:推推~~深入浅出~ 05/09 09:26
24F:→ checheng:嗯嗯 没错 就是这样~ 05/09 09:41
25F:推 batschris:有神快推 05/09 10:56
26F:推 taco20:恩...跟我想的差不多 05/09 11:31
27F:推 ArSaBuLu:我刚跟牛魔王一起出来看上帝... 05/09 11:55
28F:推 jack089452:推一个 05/09 12:05
29F:推 chancewen:lol 05/09 13:07
30F:推 are2:推 长知识 05/09 13:17
31F:推 three456:好文推 05/09 14:19
32F:推 AustonJhu:难得有篇看得懂的 快推!! 05/09 14:38
33F:推 m1314213:快推 不然人家以为我们不懂 05/09 16:37
34F:推 Ekmund:看到一半就想到回头看ID....快拜 <(_ _)> 05/09 17:32
35F:推 s25g5d4:这次稍微看得懂给推 05/09 22:21
36F:推 APC :push 05/10 00:59
37F:推 dkchronos :这篇浅显易懂 了解 05/10 10:34
38F:推 saedn :好神~~ 虽然看不太懂~!! 还是希望能多有些这种文~XD 05/10 16:34
39F:推 leesuewon :神都放弃双GPU了 大家快醒悟吧 05/10 17:35
40F:推 Falcoon :有神开示 05/10 17:43
41F:推 claestw :<(_ _)> 不过是lag不是leg呀 05/12 12:15
42F:推 wch6858 :楼上抓到神的失误 给大功一只XDD 05/12 23:47
43F:→ jk21234 :打完有看到 但不想留下修改记录 XD 05/13 00:33