如何利用OpenGL巧妙实现GPU仿真
GPU不像CPU(Central Processing Unit,中央处理器)一样可以使用常规方法进行编程操作,一般作为辅助单位配合CPU工作。控制GPU工作的方法有很多,比较通用的是采用OpenGL图形库。
OpenGL(Open Graphics Library,开放式图形库)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API,Application Programming Interface),也是调用GPU功能的编程规范,严格规定了每个函数该如何执行及其输出值。OpenGL由近350个不同的函数调用组成,通常用于实现从简单的图形绘制到复杂的三维景象,常应用于CAD(Management Software Computer Aided Design,MS-CAD,管理软件计算机辅助设计)、虚拟现实、科学可视化程序和电子游戏开发。
OpenGL并未对实现细节进行规范,无论实现形式如何,只要其功能和结果与规范相匹配(用户不会感受到功能上的差异)即可。实际的OpenGL库开发者通常是显卡的生产商,相关OpenGL版本均为该系列显卡专门开发。
GPU的使用对象(图形应用开发者)一般更为关注GPU所支持的OpenGL版本,其次是硬件资源。前者关系到自己开发应用的底层图形接口的版本,后者则涉及性能问题。就目前来讲,GPU的采购价格相对昂贵,研发阶段难以做到人手一个硬件平台。采用仿真手段及方案则可大大减少前期的研发投入,更利于进行快速验证和持续集成。
天目全数字实时仿真软件SkyEye能够以半物理化的形式实现GPU仿真,可通过SkyEye将虚拟机上对OpenGL库的调用“映射”到真实GPU上进行操作。
具体来说,在SkyEye上运行的目标机系统完全透明,开发人员可以利用多种手段捕获目标机程序中调用的特定OpenGL接口规范,并将其转译成宿主机真实GPU所支持的OpenGL接口规范,同时调用宿主机GPU来运行转译后的OpenGL接口,并将运行结果反馈给目标机,从而实现基本的图形渲染模拟及数学运算的场景。
▲SkyEye仿真JM7200,渲染三维图形效果图
开发人员还可基于SkyEye实现触屏设备的仿真:将触屏设备的触点交互转换成对宿主机上图形窗口上的鼠标交互,确保宿主机与目标机数据互通有无,操作一致。
通过SkyEye内置的GPU仿真模块,开发人员可构建与目标机真实环境一致的运行环境。任何存在图形处理需求的场景都可以应用SkyEye,常见场景如下:
1. 航电系统领域:提供对显控计算机、飞行画面的模拟;
2. 消费电子领域:提供对移动端GPU的模拟;
3. 医疗设备领域:提供对医疗影像处理的模拟;
4. 智慧安防领域:提供对图形处理的模拟;
5. 边缘计算领域:提供对AI计算的模拟。
基于SkyEye的GPU仿真方案有着诸多显著优势:
1. 适配性好,方便替换各类GPU(该GPU只需要支持OpenGL即可);
2. 性能强劲,由于半虚拟化仿真的特点,可以直接接入更高性能的GPU提升渲染速度,加快图形化应用的整体运行速度,提升整个仿真系统的性能。
SkyEye,中文全称天目全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,支持用户通过拖拽的方式对硬件进行行为级别的仿真和建模,是真实物理硬件的数字孪生。