一种嵌入式软件并行处理框架设计

2022-03-19 01:57刘浩方含章方青
电脑知识与技术 2022年2期
关键词:负载均衡数据驱动嵌入式软件

刘浩 方含章 方青

摘要:在电子类产品设计中,嵌入式软件对提升产品自动化、智能化水平,发挥着不可替代的重要作用,同时系统对嵌入式软件的实时处理和并发处理能力也提出了更高的设计要求。该文提出了基于组件的数据驱动运行方式,采用FIFO+信号量+线程+CPU负载均衡等编程技术实现了一种任务级并行处理架构(适用于Windows和Linux操作系统),并在工程上得到了很好的应用。

关键词:嵌入式软件;OSE;数据驱动;并行处理;负载均衡

中图分类号:TP311.11      文献标识码:A

文章编号:1009-3044(2022)02-0064-05

1 引言

在各类电子产品和系统设计中,嵌入式软件[1- 3]得到了广泛应用,特别是利用大数据和人工智能技术,嵌入式软件对提升这类产品和系统的自动化、智能化水平,发挥着不可替代的重要作用;同时系统对嵌入式软件的实时处理和并发处理能力也提出了更高的设计要求。

一般地,嵌入式软件基于强实时操作系统(如vxWorks),采用串行处理逻辑实现对设备的实时控制和数据采集、分析、处理等任务,基本能保证系统的实时性和数据处理任务的需要。但随着系统任务处理复杂程度的与日俱增和新技术的应用(大数据、人工智能技术),串行处理架构很难满足多任务实时处理的需要。

当前,主流嵌入式软件基于组件化架构[4-5]进行软件开发,在一定程度上实现了业务和过程层面的多任务并行处理,本文提出一种并行处理软件设计框架,试图解决任务级并行处理软件设计问题。

对于嵌入式软件,其业务组件基本运行方式有两种(见图1):一种基于数据驱动的信号量通知方式,另一种为基于系统定时器调用方式。其中数据驱动方式是一种被动方式,一旦有外部数据输入时系统会自动唤醒该线程并进行相应任务处理,如果该任务处理结果产生新的数据,则同时需要将数据推送给与之关联的组件;系统周期性任务的处理一般采用系统定时器方式,完成周期性任务处理。本文提出的任务级并行处理架构正是基于组件数据驱动的运行方式,采用FIFO+信号量+线程+CPU负载均衡等编程技术来实现。

2 操作系统扩展(OSE)

操作系统扩展(OSE)是一种跨平台编程方法,本文采用标准C语言设计一组OSE公用库,为应用软件开发提供线程、互斥量、信号量以及线程(进程)延迟等与操作系统密切关联的高级编程功能模块,可以支持跨平台、跨操作系统的扩展功能,一般采用宏定义方式来兼容不同操作系统对线程、互斥量和信号量的处理,宏定义一般定义示例如下。

#if defined SYSTEM_UNIX   //适合Linux 系统

#define WP_Mutex  pthread_mutex_t  //互斥量

#define WP_Handle  pthread_t   //线程句柄

#define WP_Semaphore sem_t*    //信号量

#elif defined WIN32    //适合Windows 系统

#define WP_Mutex   CRITICAL_SECTION //互斥量

#define WP_Handle   HANDLE   //线程句柄

#define WP_Semaphore  HANDLE   //信号量

#endif

2.1 互斥量

互斥量[4]在多任务、多线程、并行处理等计算机软件设计中应用广泛。互斥量适用于管理共享资源。由于互斥量在实现时既容易又有效,这使得互斥量在实现用户线程保护时非常有用。互斥量基本操作函数使用示例如(表1)所示。

2.2 信号量

信号量[4](Semaphore),是在多线程环境下使用的一种保护措施,可以用来保证两个或多个关键代码段不被并发调用。在并行处理设计中,信号量可以用来通知线程有新数据进入以便及时启动任务处理,信号量基本操作函数有信号量的创建、销毁、触发量和等待,信号量基本函数示例如(表2)所示。

2.3 线程

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程并行执行不同的任务,在进行嵌入式软件设计时,根据软件任务需求,对软件的功能进行分解,并为每一个软件任务设计和实现一个相应功能的工作线程,属于“任务一线程”模式[6]。

在多核、多CPU处理器上使用多线程程序设计的好处是显而易见,大大提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O處理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。线程基本操作函数有线程创建和线程停止&释放(表3)。

3 嵌入式软件并行处理框架设计

一般的嵌入式软件主要任务是完成对设备的数据采集、分析、加工(处理)和应用,复杂的电子设备或者系统对实时数据处理和高频度并发处理的要求更高,除了增加计算机数量和提高计算机CPU处理性能外,采用并行处理更是一种高效地提高实时数据处理能力的最佳途径。

本文采用FIFO+信号量+多线程+CPU负载均衡等编程技术实现了一种数据任务并行处理架构,其基本思路是将基本数据处理任务线程化(根据计算机CPU内核数创建一定数量的数据任务处理线程,并放入任务线程池中实施统一管理),采用FIFO管理任务的输入数据,任务系统通过对各个线程处理任务的饱和度动态评估,将实时数据分配给任务饱和度最轻的任务,各个线程启动任务处理的方式是任务系统在分配数据后触发信号量来通知相应线程开始处理数据。

并行处理基本框架的数据结构主要有标准FIFO任务处理(FiFoTask)(表4)和并行任务管理(FiFoTaskManager)(表5)。

嵌入式软件并行处理基本任务有框架创建和数据均衡分配,其中框架创建主要完成系统任务管理参数的配置、资源系统资源申请、FIFO创建以及任务数据处理线程、数据均衡分配线程的创建和管理;数据均衡分配主要负责实时动态数据的任务分配和触发任务线程运行管理(见图2)。

数据均衡分配例程是本框架的核心处理,负责数据的动态分配、CPU负载均衡处理(新的任务线程创建和CPU核分配),并负责任务线程运行管理(见图3)。

任务数据处理例程是并行处理任务的主体,是根据软件业务处理要求设计的基本任务处理单元,典型处理流程见图4。

4 软件并行处理框架实现

根据上节嵌入式软件并行处理框架设计,本节给出框架主要模块组成和设计逻辑,框架主要模块有组成初始化标准FIFO处理任务(vLoadFiFoProcessTask)、退出标准FIFO处理任务(vExitFiFoProcessTask)、申请一个标准任务(lpApplyOneTask)、初始化标准FIFO任务参数(vInitFiFoTaskPara)、退出FIFO处理任务(vFreeFiFoTask)、FIFO任务分配(数据均衡分配)(vTaskBanlanceAssignProcess)和任务数据处理(vTaskDataProcessThread),具体说明见表6。

初始化标准FIFO处理任务、退出标准FIFO处理任务、申请一个标准任务的典型处理流程见图5。

系统任务参数管理、释放系统任务的典型处理流程见图6。

FIFO任务分配(数据均衡分配)、任务数据处理的典型处理流程参见图2、图3,这里不再重复。

5 性能测试

本文将并行软件处理架构应用到机载GMTI雷达数据处理中,数据处理系统接收到信号处理送来的点迹,一般按照图7所示流程进行处理[7],传统的方法采用单线程进行下图中流程处理。机载GMTI雷达在进行对地动目标探测时,由于地面背景的强反射,导致雷达检测后的点迹数据量非常大,传统的方法在进行机载GMTI雷达数据处理时,由于采用的是单线程顺序处理,导致处理效率低下,航迹延迟较大,影响雷达工作效能[8]。

针对机载GMTI雷达点迹数据量大的问题,基于多线程并行软件处理架构,并根据雷达数据的局部性特征,把雷达探测区域按照探测距离划分成多个不同的区域,每个区域的数据处理设计一个处理線程,负责其中一块区域的处理,各区域之间的数据相互独立,不会发生数据互联,因此各区域处理任务可以并行处理。图8是机载GMTI雷达数据处理示例,在进行数据处理时,将150公里的测绘带分为三个子带分别进行处理,三个子带对应三个处理线程,为了保证对穿越不同区域目标跟踪的正确性,相邻区域存在一定的重叠,重叠区域的大小一般可设置为观测目标最大运动速度在一个扫描周期内运动距离的2到3倍,如图8所示。

按照雷达探测区域划分子任务,各子带处理线程在处理过程中不需要进行同步和通信,在收到侦查的点迹数据后,按照距离将数据向多个处理线程进行分发,各线程独立进行处理,输出各子带航迹数据,最后由综合处理模块对各子任务处理结果进行合并,获取全测绘带的航迹数据,因此并行处理效率比较高。

通过搭建试验平台,对真实装备采集的机载GMTI雷达数据进行处理,数据总时长200s,如表7所示,分别采用单任务和多个任务进行处理,并对结果进行了统计分析。

由表7可以看出,采用少于3个处理线程时,处理时效性不能满足要求,有一定的延迟,而当线程数达到4个时,能够满足时效性要求,因此采用并行处理架构进行数据处理,处理效率能够得到明显提升,从而验证了并行处理架构的有效性。

6 结束语

基于FIFO+信号量+线程+CPU负载均衡等编程技术实现的嵌入式软件任务级并行处理架构,适合于单机嵌入式软件开发使用,并在工程上得到了很好的应用。但随着大数据、人工智能技术在电子类产品和系统上的深入广泛应用,系统对嵌入式软件处理的实时性、并发性和大容量、高频度数据处理等提出了更高的处理性能要求,下一步将着力基于多机和服务器集群平台以及云计算平台的实时数据并行处理需要展开研究,不断完善并行处理框架,以适应不同平台和系统的并行处理需要。

参考文献:

[1] Van Der Linde P.C专家编程[M].徐波,译.北京:人民邮电出版社,2008.

[2] Koenig A.C陷阱与缺陷[M].高巍,译.北京:人民邮电出版社,2003.

[3] Weiss M A.数据结构与算法分析:Java语言描述[M]. 冯舜玺,译.北京:机械工业出版社,2004.

[4] 冯利美. 嵌入式Linux应用程序开发标准教程[M].北京:人民邮电出版社,2016.

[5] 彭东.深度探索嵌入式操作系统:从零开始设计、架构和开发[M].北京:机械工业出版社,2015.

[6] 谢文杰,艾赛江,张映昊.雷达数据实时处理软件多线程技术的改进[J].计算机应用,2018,38(S2):250-253,275.

[7] 何友,修建娟,张晶炜.雷达数据处理及应用[M].2版.北京:电子工业出版社,2009.

[8] 朱海涛,倪世道.并行处理技术在雷达数据处理中的应用研究[J].计算技术与自动化,2013,32(2):109-114.

【通联编辑:谢媛媛】

猜你喜欢
负载均衡数据驱动嵌入式软件
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
异构环境下改进的LATE调度算法
基于网络与数据智能化的数码印花产品设计定制模式研究
数据驱动理念在大学英语课程中的应用
大数据背景下的警务模式创新研究
《计算机控制技术》课程教改探讨
多站点同步更新系统的设计
模糊理论在Ad hoc网络通信领域的应用
基于Eclipse的航天嵌入式软件集成开发环境设计与实现