航电系统的GPU虚拟化仿真
01
GPU in航电
图形处理单元(Graphics Processing Unit,GPU),又称视觉处理器、显示芯片,主要负责在显示器上进行图形化显示的功能。GPU的出现缓解了中央处理器(Central Processing Unit,CPU)任务过于繁重的情况,除了能够存储图形外,还能完成图像图形相关的运算工作,大大减轻了CPU的负担,提高了显示能力和显示速度。
众所周知,飞行员在驾驶过程中,需要通过座舱的仪表盘提供的信息来了解飞机运行状态,以便按照飞行计划操纵飞机。航电系统中的GPU是怎样的呢?
为了保证飞机完成预定任务,达到各项规定性能,飞机的综合航空电子系统(简称航电系统)采用分布式计算机结构,通过多路传输数据总线将多种机载电子设备(分系统)交联在一起。航电系统的GPU被称为航电仪表,是独立的电子仪表系统(Electronic Instrument System,EIS),可以为飞行人员提供飞行器及其分系统信息,显示飞机某部分的姿态、高度或运行状况的设备,有着综合显示各种信息、易于追加资料等特点。
EIS用电子数据采集取代了传统的机械采集:
早期飞行器的航电系统采用机械化的方式对飞行器的运行参数进行收集,并传递到飞行员的座舱进行显示。机械连杆、液压等传动装置,会将飞行器对空速度、对地速度表,水平仪、高度仪等传感器的信息反馈至座舱的机械化指针仪表盘。
▲意大利沃兰迪亚博物馆中的梅塞施密特Bf.109E“埃米尔”战斗机仪表盘。该机配备了全新的戴姆勒-奔驰DB 601发动机,发动机采用了燃油喷射系统和涡轮增压器,于1939年初成为德军装备(图源网络)
EIS采用了先进的电子化传感器。电子化传感器可以高速采集真实环境中的物理模拟信号,通过高性能信号处理系统,对其进行信号滤波、放大等操作,得到高信噪比的数字信号,随后通过超高带宽的信号传输总线,将有效的飞行器运行关键参数信息传递给座舱的高性能GPU绘图显示系统,飞行员便能通过智能液晶仪表盘,得到图形化的信息显示。
▲波音737 MAX驾驶舱(图源网络)
02
航电GPU虚拟化
当今世界,整个时代都在大步伐向着虚拟化迈进,为了节约成本,提升性能,几乎所有的硬件都在逐渐走向虚拟化。GPU走上虚拟化的道路,始于英伟达(NVIDIA)公司2012年推出的虚拟GPU软件,旨在云系统中加速图形输入/输出的虚拟桌面部署。
虚拟GPU可以让运行在数据中心服务器上的虚拟机实例,安全高效地共享使用同一块或多块GPU处理器进行图形运算。飞机的航电系统有着极高的系统安全系数要求,而其代码量动辄上百万行,具备庞大而复杂的功能体系。航电GPU走上虚拟化道路是必然结果。
SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,支持用户通过拖拽的方式对硬件进行行为级别的仿真和建模,完美解决航电系统虚拟化的难题。
▲SkyEye产品矩阵
SkyEye具备以下特点:
(1)采用基于LLVM的二进制加速技术,加上各种编译器的轻量级的优化技术,从而生成更高效率的主机代码,仿真运行效率大大提升,具有极致的稳定性,适用于高性能的异构指令模拟仿真。
(2)SkyEye可以轻松地通过图形化拖拽的方式搭建出多种嵌入式目标系统,尝试不同的硬件设置、软件应用程序和平台配置,如修改内存大小、改变处理器运行速度等来测试软件的行为,以验证程序的可靠性。开发人员在仿真系统上运行软件和在物理系统上运行完全一致,无需受到物理系统的限制,还可以不加修改,直接在仿真系统上运行与真实目标中完全相同的二进制文件。
(3)SkyEye可以无限的重复运行目标程序,方便地复现问题,直至完成问题定位。一旦在仿真的目标系统上发现问题,开发人员可以在任何时间、任何地点复现问题。SkyEye使问题调试和分析变得更加简单:开发人员可以从一开始就使用真正的目标系统,即使用相同的工具链、库、操作系统,避免跨平台编译产生的错误。SkyEye还可调试所有软件(包括 BIOS、驱动程序、低级软件和操作系统级代码),无需访问硬件就能完全控制虚拟目标,并且可以通过单步,断点,堆栈信息查看等方式,快速找出问题的确切位置和原因,大大减少了开发的时间成本。
03
SkyEye仿真GPU的原理
在SkyEye上仿真GPU的原理如下:
在开发人员程序编译链接OpenGL库时,将其替换为定制好的OpenGL编码库。定制OpenGL编码库会对其中OpenGL相关的API接口进行编码替换,并将每个接口和接口参数的编码数据存入到SkyEye Pipe的设备内存。
SkyEye Pipe会在接收到客户端调用OpenGL的flush指令后,将所有在设备内存中的数据通过 TCP 发送出去。OpenGL_Host端服务显示程序的主线程在接收到 Pipe 发送的数据后, 会激活本地窗口显示的线程对编码数据进行解码,然后运行对应的OpenGL图形接口。
如果运行的接口有返回值,SkyEye会将返回值数据通过主线程重新发送到Pipe并存储到Pipe的设备内存。客户端程序将从SkyEye Pipe的设备内存中取得返回值,最终的图形显示便会呈现在客户端本地线程初始化的窗口中。
▲SkyEye 运行 OpenGL demo
更多 SkyEye 相关内容,欢迎关注公众号迪捷软件或访问 www.digiproto.com 进行了解!