PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

关于ACE在虚拟现实(VR)中的关键作用

[复制链接]
跳转到指定楼层
1#
VRerse 发表于 2016-5-24 02:34 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
点击数:6503|回复数:16
本帖最后由 VRerse 于 2016-5-24 02:38 编辑

在最近的A/N之争中,主要的争议论点在于DX12/Vulkan带来的更接近硬件底层的API变化,导致了硬件架构更加优异的A卡取得了不少优势,反而N卡却有了一定程度的倒退,尤其是『奇点:灰烬』团队爆出来的被Nvidia公关压制的情况,更是烧了一把火。

而这个关键点,就在于AMD是硬件支持异步计算的,而NV只有AWS,名字很类似但其实并不是一回事,不过也的确引导一群N粉认为N支持异步计算。

那么,异步计算到底是什么意思呢?首先要说明的是,ACE全称异步计算引擎,是由索尼在PS4时代和AMD合作基于GCN构架的PS4处理器中所严重强调的。简要来说,就是让计算和图形异步同时进行。在渲染一帧画面时,AI/伤害计算等一个也没有拉下。这在那些即时战略游戏比如『Total War』这类title里尤其明显。


也就是说,如果NV是在提升单一任务的干活速度的话,那么AMD的这种策略就是让同时能处理的任务数量提升,就算干一件事的速度慢了点,但同时能做的事情多了,这样增加了效率,降低了延迟

而这个降低了延迟,则是对虚拟现实最重要的属性之一。

据前Valve VR组负责人,现Oculus首席科学家Michael Abrash的研究结论,如果想要用户不因为头显产生晕眩感,从VR头显感应到人的头部位置和方向发生变化,到经过电脑通过传感器处理数据让GPU渲染图形到最后刷新到人眼前的整个流程,延迟不能超过20ms

而实际上,由于目前的头戴显示设备在采用了无动态模糊低余晖OLED屏的情况下,通过90hz的刷新来抵消低余晖带来的闪烁,意味着每一帧的预算只有11.1ms。由于本来VR的运算开销就很高,GPU很容易miss到每一帧刷新前的vsync。

这时候轮到Oculus的CTO天才John Carmack出场了。如果说,核心目标是降低晕眩的话,那么画面出差错也是可以接受的。从0渲染一帧画面或许开销很高,渲染时长已经超过了预算,错过了下一帧的vsync。不过,传感器是1000hz的刷新,每一毫秒都在更新最新的头部数据,因此如果拿上一张已经渲染好的画面,依据目前传感器得到的人的当前头部位置来把上一张画面进行变形扭曲,即便它并不能精确代表你当前看到的实物,但是这个虚拟的世界是稳定的,即便在快速转头时你能看到黑边,你也知道是渲染跟不上了,而不会头晕,因为所有东西的相对位置是稳定的。这一招也被命名为时间扭曲(Timewarp)。这个概念其实很早就有,但是 Carmack 最先实践完成的。

不过,这个还是有一个局限,因为所有过程都是顺序进行的,一旦某一帧被卡住了,时间扭曲也没用,因为也得等那一帧完成啊。这时候异步引擎就派上用场了。所谓异步,就是把Timewarp这个纯计算的线程,和GPU渲染图形的线程分离开来,你该渲染图形还渲染你的,到下一帧vsync之前几毫秒timewarp线程就直接切换进来对上一帧画面进行扭曲。

而这个上下文切换(context switch)的细腻程度(granularity),就是ace带来的本质区别。有了ACE,你可以在一个drawcall之内进行切换,而nvidia的切换边界只能在drawcall之外。也就是说,如果你的一个drawcall处理的事情过多,开销过大,对于amd来说并无影响,对于nvidia则会直接造成性能下降。这也导致nvidia在他们的gameworks vr说明中提醒大家一定要把大的drawcall都分裂成小drawcall的原因。同时,nvidia的context switch还有1ms的延迟。pascal有所改进,但是硬件本身依然依靠preemption来做切换,并没有真正的并行功能。


Gameworks VR, Nathan Reed@SIGGRAPH2015

Carmack最先在GearVR上实现了Timewarp,受到广泛好评后,PC 组也准备引进这个东西。A卡由于有ACE,非常轻松。但NV是没有这个的,在经过Oculus内部各种纠结后,采用了Nvidia的比较差的方式,用有额外开销的preemption来做ATW,并很有可能还需要游戏开发者去做相应的适配。(比如分裂drawcall)

值得一提的是,NVIDIA的公关做得非常好,在2014年发布980时就已经发布了VR Direct的特性说明,但实际上项目才刚启动,而且没有和任何业界公司进行合作。当时Oculus被问起时,他们说:“NV和我们没有任何合作。”而AMD那边的合作则早开始了。在GDC2015时,Nvidia和AMD都有专门针对VR的session(Liquid VR 和 Gameworks VR),Oculus员工表示“对AMD的进展感到兴奋”,而Nvidia的进展属于“从狗屁不是到就那么回事之间”。当然,由于NVIDIA的市场份额太大,Oculus只好去寻找workaround,以技术上的妥协方式去部分性地部署ATW。

此外,对于多卡交火,在需要低延迟的情况下一般也不采取afr的方式,而是各种形态的sfr,因此对于显卡之间在不影响渲染的情况下进行数据交互,也让ACE变得重要。在2015年GDC上Valve的Advanced VR Rendering演讲中,他们提到采用了AMD的MGPU方案,帧率提升了一倍。而在同一场GDC上,NVIDIA自己的演讲中提到“有40-50%提升说明你干得很不错了”。也就是说,第三方采用了AMD的方案得到了将近一倍的提升,而NVIDIA自己说自己最多50%。





https://www.reddit.com/r/oculus/ ... ring_tricks/cntgkfd
https://developer.oculus.com/blog/asynchronous-timewarp-examined/
https://www.linkedin.com/pulse/v ... dvantage-roy-taylor
http://www.tomshardware.com/news ... nnect-vr-amd-nvidia,27729.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部