大屏同步问题,看这就够了

VR虚拟现实 2019-03-27 19:42:27

提起大规模可视化,同步是个始终绕不过去的话题。

一旦考虑不当,该死的画面撕裂准会找上门来,使整个项目无法验收。

更加糟糕的是很多项目负责人往往还对同步一知半解,这就越发埋下了深深的隐患。

为此,谨以此文献给那些垂头丧气的项目负责人,希望能为烈日炎炎中的他们带来一丝清凉。

垂直同步信号的前世 显示器显示画面时,电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。

然后电子枪回到初始位置进行下一次扫描。

为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。

当电子枪换行进行扫描时,显示器会发出一个水平同步信号,简称 HSync ;而当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个 垂直同步信号 ,简称 VSync 。

显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。

CPU 计算好显示内容提交至 GPU,GPU 渲染完成后将渲染结果存入帧缓冲区,视频控制器会按照 VSync 信号逐帧读取帧缓冲区的数据,经过数据转换后最终由显示器进行显示。

最简单的情况下,帧缓冲区只有一个。

此时,帧缓冲区的读取和刷新都都会有比较大的效率问题。

为了解决效率问题,GPU 通常会引入两个缓冲区,即 双缓冲机制 。

双缓存机制即前后缓存。

前缓存就是屏幕上最终看到的像素,而后缓存是绘制使用,后缓存绘制好一帧,通常就交换一次,写给前缓存,而显示器则从前缓存不断的读取数据。

图中f1,也称为交换帧率,f1决定了显卡一秒能绘制多少次。

显示器读取前缓存也存在一个频率,即f2,f2为刷新率,即显卡按照多少的频率把前缓存的数据给显示器绘制一次。

可见用户最终看到的帧率是f1 和 f2的共同结果。

实际的帧率f应该是在1秒内有多少个后缓存传递到了显示器。

这样看f=min(f1,f2),即受这两个帧率的制约了。

前缓存处于被后缓存写而被显示器读的状态,那么这过程就极有可能发生读写冲突 。

当视频控制器还未读取完成时,即屏幕内容刚显示一半时,GPU 将新的一帧内容提交到帧缓冲区并把两个缓冲区进行交换后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成画面撕裂现象。

它是由于交换帧率与刷新率不同步造成的。

为了解决这个问题,GPU 通常有一个机制叫做垂直同步(也简写 V-Sync),当开启垂直同步后,GPU 会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。

这相当于将应用程序交换缓冲区同步到垂直同步信号,这样可解决画面撕裂现象。

垂直同步信号的今生 在大屏项目中,单显卡多显示输出,多显卡多显示输出,甚至多台机器多个显示输出的应用环境非常普遍。

在这种情况下,如何保证多个显示输出的内容同步就显得尤为重要。

⑴ 单显卡单显示输出 只需开启GPU的垂直同步机制,将应用程序交换缓冲区同步到垂直同步信号即可。

⑵ 单显卡多显示输出 显卡所有输出接口会多路复用一个时钟信号,这时多个输出设备刷新率一样,发出垂直同步信号的时间也一致。

⑶ 多显卡多显示输出 如下图所示:多块显卡输出多个显示画面,这时每块显卡都有自己的时钟频率。

这就会存在虽然所有输出设备可能具有相同的刷新率,但发出垂直同步信号的时间不尽相同,从而导致整个系统不同步。

为此,需要在不同图形卡之间提供公共同步信号,以确保所有显示设备同时发出垂直同步信号。

这个公共同步信号可由Framelock或Genlock来提供。

新一代NVIDIA Quadro多卡之间的公共同步信号由Quadro SYNCⅡ提供。

( 英伟达QuadroSYNC Ⅱ同步卡) (多显卡同步效果图) 同步卡可确保所有显示设备同时发出垂直同步信号,然而要让画面流畅显示,还需要 将应用程序交换缓冲区同步到垂直同步信号才行。

如下图所示:每个显示设备对应的节点现在都在渲染一个具有不同复杂度的场景,不同节点渲染各自场景所需的时间各不相同。

当每个节点以不同的速率运行时,用户就会感觉到在屏幕上出现撕裂。

我们需要一种机制来确保每个节点同时交换。

Swap Group在单个主机中提供同步多个GPUS。

使用Swap Group,每个节点将等待,直到所有节点都完成了渲染后,才将应用程序交换缓冲区同步到共同的垂直同步信号,这样避免了画面撕裂。

另外,英伟达已经对Swap Group进行了封装。

用户利用它时,只需在应用程序写入一段调用SwapGroup API的代码即可。

并且NVIDIA还给出了具体的调用方法,如下图所示: ⑷ 多机器显示输出 Swap Barrier提供跨多台主机间的GPUS同步。

使用Swap Barrier,每个主机将等待,直到所有主机都完成了渲染后,才将应用程序交换缓冲区同步到共同的垂直同步信号,这样避免了画面撕裂。

当然应用程序调用Swap Barrier的方法跟调用Swap Group一样。

(机器之间的同步连接示意图) 大屏项目同步卡的选择 在大屏项目中,同步卡的选择也非常重要。

可惜,很多项目经理对其也知之甚少。

今天笔者就把这个问题也给大家彻底讲透。

现阶段显卡实现同步有三种方式,它们分别是2-WAY,NVLINK,QUADROSYNC ‖。

下面就让小编娓娓道来吧。

⑴ 2-WAY SLI同步方式。

首先、2-WAY SLI同步方式要求工作站或主板必须通过SLI认证才行。

如,Dell/HP/Lenovo等OEM高端工作站就通过了SLI认证。

其次、2-WAY SLI同步方式只支持两块显卡之间的同步。

最后、只需一个SLI桥接器接口。

另外,目前支持SLI的主流NVIDIA显卡只有P4000、P5000、P6000。

⑵ NVLINK同步方式 首先、NVLINK同步方式对机器没具体要求,只需其可安装上两块支持NVLINK的显卡即可。

其次、NVLINK同步方式也只支持两块显卡之间的同步。

最后,需要采购NVLINK桥接器。

另外,目前支持NVLINK同步放的专业显卡有GV100、GP100、RTX5000、RTX6000、RTX8000 ⑶ QUADRO SYNC ‖同步方式 首先、QUADRO SYNC ‖同步方式也对机器没有具体要求。

只需能安装下几块显卡即可。

其次、一块QUADRO SYNC ‖最多可支持4块显卡之间的同步 最后、需要采购QUADROSYNC ‖同步卡。

另外,目前支持QUADRO SYNC ‖同步卡的专业显卡有P4000、P5000、P6000、GV100、GP100、RTX4000、RTX5000、RTX6000、RTX8000 这下您应该彻底明白了吧。

在选择同步卡时,您可根据项目的实际情况在上面的三种同步方式中任选一种即可。

好了,大屏同步问题今天就介绍到这儿吧。

以后凡是碰到工作站的任何问题,可电询北京科卓了! 更多精彩内容,加入ARC社群扫二维码或搜索(ID:arinchina),转载请注明版权和原文链接! 联系站长: +86 136 7918 4994 >


--------------------
原文地址:https://vr.pbottle.com/a-13768.html

小瓶VR虚拟现实开发

咨询小瓶科技
咨询我们
顶部