一种基于WinForm的GPU配置管理系统设计与实现

2022-04-01 06:10何嘉文马城城
电子科技 2022年3期
关键词:字库光标字体

聂 曌,何嘉文,马城城,刘 晖

(西安航空计算技术研究所,陕西 西安 710119)

图形处理器(Graphics Processing Unit,GPU)又称显示核心、视觉处理器和显示芯片,其面向桌面环境、嵌入式领域和移动设备,是一种可用来进行绘图运算工作微处理器[1]。GPU的作用是将计算机系统所需要的显示信息进行绘图计算,并将运算的像素结果提供给显示器,从而完成在显示器上的绘制。因此,GPU作为计算机输出系统的核心部件,是“人机对话”的重要设备[2]。

在计算机图形处理的早期,绘图任务全部由CPU(Central Pracessing Unit)完成。然而图形处理需求呈几何级数增长,单靠CPU已无法满足应用需求,此时GPU应运而生[3-5]。通过将绘图任务转交给GPU,使得CPU从绘制运算中解放出来,释放占用的CPU资源,提高了执行效率,进而提升整个系统的响应能力[6]。从1999年NVIDIA发布第一款GPU产品至今,GPU的发展经历了固定功能流水线阶段、分离染色器架构阶段和统一染色器架构阶段,其图形处理能力不断提升,应用领域也从最初的图形绘制逐步扩展到通用计算领域。GPU凭借流水线高速、并行的特性和灵活的可编程能力,为图形处理和通用并行计算提供了良好的支持[7-9]。

另一方面,伴随着功能、性能的丰富和提高,以及灵活的可配置性和可编程性,GPU的配置内容、步骤愈加复杂,使得GPU配置难度有所增加。种类繁多、步骤复杂且相互交织的配置过程降低了GPU使用开发中的易用性,给应用开发人员带来不必要的负担和设计难度。因此,设计一个模块清晰、使用便捷、易用的GPU配置管理系统极为重要。

图形用户界面(Graphical User Interface,GUI)软件是一种人与计算机通信的界面显示软件,允许用户使用鼠标、键盘等输入输出设备操纵屏幕上的图标或菜单选项,完成命令、调用文件、输入、启动程序或执行等计算机任务[10]。该界面使用户不需要学习复杂的代码,可仅通过图形对象进行操作,方便用户使用,降低了用户学习成本,也增强了系统的易用性。在桌面GUI编程中,微软公司提供的基于NET开发平台的WinForm(Windows Form)技术是一种方便、设计简单的GUI编程模型,其具有以下3个特点[11]:(1)功能强大。WinForm可用于设计窗体和可视控件,创建丰富的基于 Windows 的应用程序;(2)操作方便。提供易于连接 OLEDB 和 ODBC 数据源的数据控件;(3)使用安全。Windows 窗体充分利用了公共语言运行库(Common Language Runtime,CLR)的安全特性。

本文结合自研GPU芯片的配置内容和流程步骤,使用WinForm桌面GUI技术,通过设计与实现一种GPU配置管理系统,充分发挥WinForm的技术优势,通过可视化界面生成配置文件,降低用户的使用门槛和操作难度。开发人员不再需要过多了解GPU的配置流程和步骤,仅需通过鼠标、键盘进行点选和输入即可完成配置操作,提高了GPU配置效率和系统的易用性。

1 系统设计

针对GPU的软硬件环境,配置管理系统可以划分为GPU运行时的软件数据生成和硬件环境配置两大模块,包括开机/告警画面生成、驱动配置、汇编工具、光标生成、接口配置和字库工具等6个具体模板。其中,开机/告警画面生成、汇编工具、光标生成和字库工具属于软件数据生成模块,负责生成GPU运行过程中所需要的数据;驱动配置和接口配置属于GPU硬件环境配置模块,是完成描述系统构成的硬件组成。系统结构如图1所示。

(a)

软件数据生成是通过GUI界面生成GPU运行时需要的数据文件,按照数据类型分为图片信息、汇编程序、光标数据和字库字模信息。开机/告警画面负责将用户给定的图片按照设置的分辨率生成GPU内部使用的自定义图片数据格式的文件。汇编工具面向GPU可编程染色阵列,将编写的染色器汇编程序编译、链接为符合标准指令集的二进制数据。光标生成用来生成系统所提供的默认光标图形,包括输入、缩放、忙等待等的鼠标外观。字库工具提供中英文字体的生成,包括内建字体和外部字体,支持不同字号、斜体、下划线、加粗等字体的修饰功能。

硬件环境配置负责GPU运行前和运行时与操作系统、硬件设备、系统环境有关的配置,包括驱动配置和设备接口配置两个部分。其中,驱动配置负责运行时主机驱动的设置,包括操作系统类型、可扩展的驱动库和调试信息等;接口配置负责硬件环境的设置,包括对主机接口、显存、显示控制和3D引擎等模块的设置。

2 设计与实现

GPU配置管理系统包含的模块及功能为:(1)开机/告警画面,负责完成开机画面和告警画面的生成;(2)驱动配置负责配置具体的操作系统、驱动库和调试信息;(3)汇编工具负责完成汇编程序到二进制数据的转换;(4)光标生成负责生成用户选择的光标数据;(5)接口配置负责硬件环境的设置;(6)字库工具。根据用户配置,字库工具生成给定的字体、类型和字号等信息。

2.1 开机/告警画面

开机/告警画面负责将用户提供的bmp图片按照给定的分辨率生成为GPU可识别的内部格式。使用时,首先通过文件浏览器选择开机/告警画面的图片路径,确认后在左侧显示预览图片。为了尽量节省嵌入式环境下的资源消耗,当前开机/告警画面仅支持320×320像素的图片,且必须为bmp格式。然后,用户根据需求从下拉菜单中选择符合要求的分辨率(默认1 024×768)来确定画面的大小。最后,使用rgb格式配置背景色和前景色,填充画面的背景颜色和前景颜色,选择完成后在右侧显示预期生成的开机/告警画面,点击生成即可完成开机/告警画面的处理。界面实现如图2所示。

图2 开机/告警画面Figure 2. Power-on or alarm screen

2.2 驱动配置

驱动配置模块负责运行平台的嵌入式操作系统相关配置的选择,包括操作系统类型、第三方图形库和调试信息开关等,其实现如图3所示。

其中,操作系统类型包括VxWorks、Windows、AcoreOS(天脉)和Linux共4种。用户可使用单选框选择合适的操作系统。第三方库包括GL、GLU、GLUT和FastFontLib,其中前三者与绘图相关,FastFontLib为快速字库。其他信息包含输出调试信息,勾选该选项即可使GPU在运行时打印有相关的状态信息。右侧显示驱动配置的结构层次,有助于用户了解配置过程。

2.3 汇编工具

汇编工具负责完成染色器汇编程序到自定义指令集的二进制数据转换。自研GPU采用可编程架构,用户可按照自定义指令集编写顶点和像素染色器驱动。汇编工具类似于高级语言的编译器,具有词法分析、语义检查和翻译功能,不同之处在于汇编工具仅支持汇编语言,其编程模型相较简单,不支持全局变量和函数调用等功能[12]。

使用时,首先选择染色器的汇编程序文件,分为顶点、像素和命令染色器3种。然后对顶点、像素和命令汇编程序进行词法分析、语义检查。如果没有错误则进行二进制的翻译,否则打印错误信息并停止汇编。最后在输出栏打印汇编过程信息并显示翻译的结果。汇编工具界面实现如图4所示。

图4 汇编工具Figure 4. Assembly tools

2.4 光标生成

光标生成负责GPU运行时光标图形数据的生成。光标是在用户交互使用时,显示设备上的符号或图形,用来响应定点设备(鼠标、触控板、数位笔)的移动,给出用户动作发生的位置点。同时还能够指示程序当前的运行状态,例如编辑、缩放、拖拽和忙等待等。GPU支持44个系统光标和4个用户自定义光标。配置光标时,首先读取Windows系统光标,用户从默认的系统光标库中选择光标。若系统光标不能满足用户实际需要,可以在自定义光标列表中指定最多4个自定义光标,选择完成后点击生成,会将选择的系统光标和自定义光标生成为一个文件,供GPU初始化时加载光标数据。光标生成的界面实现如图5所示。

图5 光标生成Figure 5. Cursor generation

2.5 接口配置

接口配置包括主机接口、显存存储、显示控制通路和3D引擎配置4个部分。其中,主机接口包括对PCI内核及其相关内容的配置。PCI内核配置可供用户选择主机类型、PCI配置基地址、配置空间地址、配置空间数据、寄存器基地址和存储器基地址。相关配置包括对字节序使能(大小端)和中断类型的选择。中断包括3D绘图完成、SPI中断、IIC0和IIC1等。接口配置具体内容如图6所示。

图6 主机接口配置和显示存储Figure 6. Host interface configuration and display storage

显存存储包括存储通路在图像通路与视频通路中的选择。图像存储器参数的配置包括存储芯片类型、存储芯片容量、显存芯片页面大小和存储芯片工作频率。视频存储器参数的配置,包括存储芯片类型、存储芯片容量、显存芯片页面大小和存储芯片工作效率。

显示控制通路负责对显示输出模块进行初始化设置,包括显示控制、图像配置、视频配置和叠加配置4个模块[13]。其中图像配置包括裁剪、缩放、伽马矫正和RGB调整,负责完成图像输出的设置;视频配置包括视频输入配置、裁剪、旋转、缩放、伽马矫正和RGB调整,负责视频通路的配置;叠加配置包括HSV调整、输出显示和叠加方式的选择。显示控制如图7所示。

图7 显示控制Figure 7. Display Control

2.6 字库工具

字库工具是绘制字符的关键部分,由于嵌入式环境下资源相对有限,无法将所有字符信息一次载入到GPU中,因此结合实际用户需求,开发一套可裁剪、可定制的快速字库工具[14]。字库工具支持字库的选择,用户可以定制字号、字体类型和字符表,其中字体类型包括加粗、斜体、删除线和下划线。使用时,首先选择字体,包括内建字体和外部ttf格式字体两种类型;然后根据需要选择字库字号和字体类型;最后输入字库包含的字符集点击生成完成字库信息的创建。字库工具界面如图8所示。

图8 字库工具Figure 8. Font tools

3 系统验证

本文通过搭建FPGA测试平台验证配置管理系统,并从功能正确性、设计完备性和实现健壮性3个方面进行测试。测试平台由嵌入式CPU主机板和GPU FPGA验证板组成,两者之间使用PCIE作为数据交互的通路[15-16]。CPU主机板作为主设备起到控制器的作用,负责外围设备的管理、主机驱动的执行和图形命令的下发。GPU作为从设备,接收CPU发送的图形命令,使用内部的3D引擎完成绘制任务并输出到显示器。

3.1 功能正确性验证

正确性验证的原则为在保证系统正确输入的条件下,输出不变且唯一的正确结果。本文采用3种方法进行验证:

(1)遍历输入。在其他选项不变的条件下,遍历被测选项的所有可能输入,以开机/告警画面为例,在图片和前景色不变的条件下,遍历背景色RGB的所有可能组合,验证背景色是否正确;

(2)互斥验证。挑选一组互斥选项,保证在同一环境下,遍历一组互斥选项的所有输入组合。以接口配置为例,字节序的使能、显示通路的选择均为互斥关系。验证时,在同一配置地址空间条件下,遍历字节序开、关两种模式,验证生成的地址是否符合选择的字节序;

(3)随机混合验证。混合设置多组选项并随机配置正确的输入,以字库为例,随机选择字体的字号、加粗、斜体、删除线、下划线和字符表,验证生成的字库的正确性。

3.2 设计完备性验证

系统设计的完整性代表对用户需求的完全满足;齐备性代表系统模块及模块内功能和表示的统一和完备。针对完备性的验证过程采用表格的形式,将系统功能与用户需求一一比对。以驱动配置为例,该模块需求包括操作系统的选择、驱动库的支持和调试信息的显示3项。系统设计中提供VxWorks、Windows、Linux和天脉4种操作系统,此外还有GL、GLU、GLUT和FastFont4种驱动库,以及调试信息打印选项,完整支持用户需求。系统设计中,采用统一的控件并使用相同的外观和交互方式,保证系统的外观和交互具有良好的统一性。

3.3 实现健壮性验证

本文测试了系统在错误输入、非法状态下执行的稳定性,以及向用户发送通知消息的功能。错误输入包括空输入、类型错误、数值范围越界和输入长度错误等。设计中采用设置控件属性和提交时验证两种策略。以显示控制模块为例,水平分辨率只能选择0~1 600之间,设计时使用Slider控件并设置MinValue和MaxValue为0和1 600,限制用户仅能在1~1 600之间滑动。相反,由于水平起始位置由小数表示,因此采用文本框来接受用户的输入,当用户提交时验证其输入的合法性。健壮性验证主要针对系统中以文本框为控件的数据进行验证,确认其输入的有效性。

4 结束语

本文针对GPU配置内容多样、配置步骤繁琐、配置项之间相互交织、互相依赖等问题,提出一种基于WinForm的GPU配置管理系统,并将其应用于实际开发中。该系统分为软件数据生成和硬件环境配置两部分。在软件数据生成部分中,根据用户输入生成GPU运行过程中所需要的数据,包括开机/告警画面、汇编代码、硬件光标和快速字库。硬件环境配置用于描述系统的硬件组成,包括驱动配置和接口配置。

在系统运行时,根据用户提供的配置信息,算法自动配置模块初始化内容及其步骤顺序,用户无需使用函数调用的硬编码形式,通过鼠标、键盘即可完成复杂的GPU配置工作。基于FPGA验证平台对系统的功能、设计和实现进行验证的结果表明,系统满足功能正确性、设计完备性和实现健壮性的要求,达到简化配置过程、缩短配置时间、降低用户使用难度的目的。

目前该系统仅能对GPU进行静态配置,无法提供运行时的性能分析和故障监控功能[17-19],不能实时监控GPU的运行状态和各模块的执行情况。下一步拟采用Socket网络通信技术,在GPU运行过程中实时采集各模块状态信息,实现性能与故障分析功能。

猜你喜欢
字库光标字体
No.2 喜茶联合汉仪字库推出微型书和书签
字库在设计中的局限性——以食品包装为例
字库字体侵权系列案例分析研究
枯燥的Times New Roman字体有了新花样
老家的惜字库
组合字体
陈光标吃剩饭倒了谁的胃口
陈光标:巴菲特先生,我要裸捐!
睡着笑醒
字体安装步步通