大屏同步问题,看这就够了
提起大规模可视化,同步是个始终绕不过去的话题。一旦考虑不当,该死的画面撕裂准会找上门来,使整个项目无法验收。
更加糟糕的是很多项目负责人往往还对同步一知半解,这就越发埋下了深深的隐患。为此,谨以此文献给那些垂头丧气的项目负责人,希望能为烈日炎炎中的他们带来一丝清凉。
垂直同步信号的前世
显示器显示画面时,电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。然后电子枪回到初始位置进行下一次扫描。为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。当电子枪换行进行扫描时,显示器会发出一个水平同步信号,简称 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
这下您应该彻底明白了吧。在选择同步卡时,您可根据项目的实际情况在上面的三种同步方式中任选一种即可。
好了,大屏同步问题今天就介绍到这儿吧。以后凡是碰到工作站的任何问题,可电询北京科卓了!