本发明涉及信息处理技术领域,具体地,涉及一种软件化雷达的计算中间件构建方法、系统及介质。
背景技术:
硬件设备的飞速发展,使得航空、通信、地面探测侦查等各种功能设备型号日渐增多。传统设备的设计通常使用面向对应硬件平台的定制软件,软硬件紧耦合,软件在不同平台中通用性差,重复开发情况严重,也不利于维护升级,造成人力物力的浪费。而软件化雷达系统采用标准化的软硬件接口,使软硬件实现模块化设计,基础软硬件之间的耦合。本发明面向软件化雷达信息处理平台设计计算中间件的实现方法,目的为实现应用软件与硬件环境在算法层面的解耦,提高应用软件的可移植性、开发效率和运行效率。本发明使用vsipl接口标准构建计算中间件,明确了计算中间件的函数功能范围,定义了接口规范,采用基于对象的方法,以动态链接库的形式给出了具体实现途径。该计算中间件接口简洁安全,支持含国产处理器在内的多种硬件平台(intelx86、cpu+gpu、dsp)。
类似已有方案如下:
使用blas接口标准构建计算中间件:blas标准提供了向量与向量、矩阵与向量以及矩阵与矩阵之间的线性代数运算函数接口标准。但blas标准缺少常用的信号处理函数接口,并不直接适用于对信号处理要求较高的软件化雷达算法。
使用arrayfire开源库构建:arrayfire库为向量运算、图像处理、计算机视觉、信号处理、线性代数、统计等领域提供高性能基础运算函数调用。该库支持cpu(x86、arm)、gpu(支持cuda和opencl)处理器。接口语言支持c/c++,python等。但该库仅支持自带的array对象数据格式,该类数据格式不适于在嵌入式平台实现。
本发明要实现适用于软件化雷达的跨平台计算中间件。现有各类计算中间件/运算函数库,要么具有平台局限性,缺乏对国产处理器支持;要么提供的函数功能只局限于某类运算。本发明实现多处理器支持、算法丰富的自主可控计算中间件。
blas:basiclinearalgebrasubprograms,基础线性代数子程序;
vsipl:vector,signalandimageprocessinglibrary,vsipl,向量信号和图像处理库;
mkl:mathkernellibrary,数学核心函数库;
simd:singleinstructionmutipledata,单指令多数据流;
sse:streamingsimdextensions,单指令多数据流扩展;
avx:advancedvectorextensions,高级向量扩展;
fftw:thefastfouriertransforminthewest,快速离散傅里叶变换标准c语言程序集;
openblas:blas接口标准的开源实现库。
技术实现要素:
针对现有技术中的缺陷,本发明的目的是提供一种软件化雷达的计算中间件构建方法、系统及介质。
根据本发明提供的一种软件化雷达的计算中间件构建方法,其特征在于,包括:
接口标准选择步骤:选择由权威组织维护的标准或者工业事实标准;
数据结构制订步骤:采用基于对象的思想,通过将数据类型分为两层抽象,从而将要运算的数据组织起来供给用户访问;
接口类型设定步骤:基于典型雷达信息处理算法分析和面向雷达信息处理原则,设定计算中间件接口类型;
接口功能实现步骤:调研处理器厂商基础库并根据接口标准进行封装,对基础库无法覆盖的函数,采用直接编码方式实现。
优选地,所述接口标准选择步骤:
所述由权威组织维护的标准或者工业事实标准包括:vsipl、blas以及fftw所提供的接口规范;
优选地,所述数据结构制订步骤:
所述采用基于对象的思想指:对内存管理进行封装,隐藏对函数内部数据操作的细节,同时明确界定外部的访问权限,即特定数据只能由库函数进行操作;
所述将数据类型分为两层抽象指:将数据类型分为两层抽象,分别是数组对象和运算数对象两层数据类型;
所述数组对象类型是内存中一段连续的数据存储空间的抽象,数组对象类型设定了属性,所述属性主要包括:偏移值、步长以及全长值;
所述数组对象类型可以进一步被抽象为运算数对象,所述运算数对象主要包括:向量对象、矩阵对象,成为运算函数直接操作的数据对象;
所述数组类型和运算数类型都是不透明类型,它们只能被库函数创建、访问和销毁。
优选地,所述计算中间件接口类型包括:
支持函数:函数库运行所必须的支持函数,包括:初始化和终止化函数;创建、销毁以及控制各数据对象的函数;内存管理函数;
算法函数:包括基础标量运算函数、基础向量运算函数、随机数生成函数、线性代数函数以及信号处理函数。
根据本发明提供的一种软件化雷达的计算中间件构建系统,包括:
接口标准选择模块:选择由权威组织维护的标准或者工业事实标准;
数据结构制订模块:采用基于对象的思想,通过将数据类型分为两层抽象,从而将要运算的数据组织起来供给用户访问;
接口类型设定模块:基于典型雷达信息处理算法分析和面向雷达信息处理原则,设定计算中间件接口类型;
接口功能实现模块:调研处理器厂商基础库并根据接口标准进行封装,对基础库无法覆盖的函数,采用直接编码方式实现。
优选地,所述接口标准选择模块:
所述由权威组织维护的标准或者工业事实标准包括:vsipl、blas以及fftw所提供的接口规范;
优选地,所述数据结构制订模块:
所述采用基于对象的思想指:对内存管理进行封装,隐藏对函数内部数据操作的细节,同时明确界定外部的访问权限,即特定数据只能由库函数进行操作;
所述将数据类型分为两层抽象指:将数据类型分为两层抽象,分别是数组对象和运算数对象两层数据类型;
所述数组对象类型是内存中一段连续的数据存储空间的抽象,数组对象类型设定了属性,所述属性主要包括:偏移值、步长以及全长值;
所述数组对象类型可以进一步被抽象为运算数对象,所述运算数对象主要包括:向量对象、矩阵对象,成为运算函数直接操作的数据对象;
所述数组类型和运算数类型都是不透明类型,它们只能被库函数创建、访问和销毁。
优选地,所述计算中间件接口类型包括:
支持函数:函数库运行所必须的支持函数,包括:初始化和终止化函数;创建、销毁以及控制各数据对象的函数;内存管理函数;
算法函数:包括基础标量运算函数、基础向量运算函数、随机数生成函数、线性代数函数以及信号处理函数。
根据本发明提供的一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现上述中任一项所述的软件化雷达的计算中间件构建方法的步骤。
与现有技术相比,本发明具有如下的有益效果:
1、本发明提升了软件化雷达信息处理应用软件在算法层面的跨平台可移植性。由于计算中间件向上层应用提供了统一函数功能接口,并针对多种处理器架构进行了功能实现,因此调用计算中间件接口的信息处理算法可以在这些硬件平台顺利移植,提高可复用性。
2本发明提高了应用开发人员的开发效率。计算中间件对雷达信息处理应用常用的基础运算函数进行了多种硬件平台实现,且提供了简洁、安全的函数接口供应用开发人员调用,(提供了一种伪代码式的开发模式。)极大减少了开发负担,缩短了开发周期。
3、本发明提升了应用软件的算法执行效率。各种处理器架构有其独有指令集架构,且针对某些特定运算进行优化。计算中间件针对这些特定处理器架构进行了定制性优化,因此在执行速度上比纯c语言实现具有极大优势。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明提供的抽象数据类型与接口关系示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
本发明提供的系统,可以通过本发明给的方法的步骤流程实现。本领域技术人员可以将所述方法,理解为所述系统的一个优选例。
根据本发明提供的一种软件化雷达的计算中间件构建方法,其特征在于,包括:
接口标准选择步骤:选择由权威组织维护的标准或者工业事实标准;
数据结构制订步骤:采用基于对象的思想,通过将数据类型分为两层抽象,从而将要运算的数据组织起来供给用户访问;
接口类型设定步骤:基于典型雷达信息处理算法分析和面向雷达信息处理原则,设定计算中间件接口类型;
接口功能实现步骤:调研处理器厂商基础库并根据接口标准进行封装,对基础库无法覆盖的函数,采用直接编码方式实现。
具体地,所述接口标准选择步骤:
所述由权威组织维护的标准或者工业事实标准包括:vsipl、blas以及fftw所提供的接口规范;
具体地,所述数据结构制订步骤:
所述采用基于对象的思想指:对内存管理进行封装,隐藏对函数内部数据操作的细节,同时明确界定外部的访问权限,即特定数据只能由库函数进行操作;
所述将数据类型分为两层抽象指:将数据类型分为两层抽象,分别是数组对象和运算数对象两层数据类型;
所述数组对象类型是内存中一段连续的数据存储空间的抽象,数组对象类型设定了属性,所述属性主要包括:偏移值、步长以及全长值;
所述数组对象类型可以进一步被抽象为运算数对象,所述运算数对象主要包括:向量对象、矩阵对象,成为运算函数直接操作的数据对象;
所述数组类型和运算数类型都是不透明类型,它们只能被库函数创建、访问和销毁。
具体地,所述计算中间件接口类型包括:
支持函数:函数库运行所必须的支持函数,包括:初始化和终止化函数;创建、销毁以及控制各数据对象的函数;内存管理函数;
算法函数:包括基础标量运算函数、基础向量运算函数、随机数生成函数、线性代数函数以及信号处理函数。
根据本发明提供的一种软件化雷达的计算中间件构建系统,包括:
接口标准选择模块:选择由权威组织维护的标准或者工业事实标准;
数据结构制订模块:采用基于对象的思想,通过将数据类型分为两层抽象,从而将要运算的数据组织起来供给用户访问;
接口类型设定模块:基于典型雷达信息处理算法分析和面向雷达信息处理原则,设定计算中间件接口类型;
接口功能实现模块:调研处理器厂商基础库并根据接口标准进行封装,对基础库无法覆盖的函数,采用直接编码方式实现。
具体地,所述接口标准选择模块:
所述由权威组织维护的标准或者工业事实标准包括:vsipl、blas以及fftw所提供的接口规范;
具体地,所述数据结构制订模块:
所述采用基于对象的思想指:对内存管理进行封装,隐藏对函数内部数据操作的细节,同时明确界定外部的访问权限,即特定数据只能由库函数进行操作;
所述将数据类型分为两层抽象指:将数据类型分为两层抽象,分别是数组对象和运算数对象两层数据类型;
所述数组对象类型是内存中一段连续的数据存储空间的抽象,数组对象类型设定了属性,所述属性主要包括:偏移值、步长以及全长值;
所述数组对象类型可以进一步被抽象为运算数对象,所述运算数对象主要包括:向量对象、矩阵对象,成为运算函数直接操作的数据对象;
所述数组类型和运算数类型都是不透明类型,它们只能被库函数创建、访问和销毁。
具体地,所述计算中间件接口类型包括:
支持函数:函数库运行所必须的支持函数,包括:初始化和终止化函数;创建、销毁以及控制各数据对象的函数;内存管理函数;
算法函数:包括基础标量运算函数、基础向量运算函数、随机数生成函数、线性代数函数以及信号处理函数。
根据本发明提供的一种存储有计算机程序的计算机可读存储介质,其特征在于,所述计算机程序被处理器执行时实现上述中任一项所述的软件化雷达的计算中间件构建方法的步骤。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
本发明以业界适用性最为广泛的vsipl标准作为计算中间件的接口基础集,并根据雷达信息处理的要求对基础集进行剪裁形成了本发明中计算中间件的接口标准,并针对多种处理器的自身特点,给出了一种硬件处理器厂商基础运算库调用和直接编码实现相结合的方式,用以实现计算中间件的接口功能。通过这种方式,不仅能较为简单快速地完成计算中间件软件开发,还能尽可能确保其较优的执行效率。
1、选择接口标准:
接口标准的选择应尽采用由权威组织维护的标准或者工业事实标准,如vsipl、blas、fftw所提供的接口规范。原因有二:一方面是因为这些接口规范被精心设计且经过了多年的演化和实践检验;另一方面是能尽可能的复用以前用这些接口规范编写的算法代码。
本发明计算中间件选择vsipl接口标准作为基础集,原因如下:1)vsipl是权威组织omg制订的,在业界易获得较高的认可度2)vsipl定义的接口功能覆盖了雷达信息处理基础运算函数功能范围;2)vsipl接口符合直观运算习惯。
2、制订数据结构(基于对象的运算数据组织和访问):
为满足接口简洁、易用和安全性原则,计算中间件采用基于对象的思想,对内存管理进行封装,隐藏对函数内部数据操作的细节,同时明确界定外部的访问权限(特定数据只能由库函数进行操作)。算法将围绕抽象数据类型进行操作(算法:此处的算法并不是本发明描述的计算中间件内的算法,而是调用计算中间件的用户的算法。比如计算中间件提供矩阵加、矩阵乘的接口,计算中间件使用者调用矩阵加乘等接口组成了一个识别算法。操作:指计算中间件接口对数据类型进行的操作。还是上边的例子,识别算法组合了矩阵加乘接口,矩阵加乘接口操作矩阵视图(也就是矩阵数据类型)),这些数据类型的具体实现将被隐藏,只有中间件开发者可以进行私下优化。“基于对象的思想”与“基于过程的思想”对立,是编程中常见的概念,可检索“面向对象与面向过程的区别”。就是如本段描述的,把内存管理、计算细节等一些操作打成一个个包给用户用。
数据类型可分为两层抽象,分别是数组对象和运算数对象两层数据类型,其中数组对象类型是内存中一段连续的数据存储空间的抽象,其设定了偏移值、步长、全长值等属性。数组对象可以进一步被抽象为向量、矩阵等运算数对象,向量对象和矩阵对象具有与其名称相符的数学属性,成为运算函数直接操作的数据对象。数组类型和运算数类型都是不透明类型,它们只能被库函数创建、访问和销毁,确保了一定的安全性。计算中间件定义了专用的运行支撑函数对数组对象和运算数对象进行管理(如创建、绑定、销毁等操作)。“数据类型的两层抽象”目的是为了把将要运算的数据组织起来供给用户访问。
数据类型可分为两层抽象,分别是区块(block)类型和视图(view)类型。其中区块(block)类型是内存中一段连续的数据存储空间的抽象。而区块(block)类型在设定了偏移值、步长、全长值之后,又可以进一步被抽象为向量(vector)、矩阵(matrix)等视图(view)类型。向量类型和矩阵类型具有与其名称相符的数学属性,成为算法函数直接操作的数据对象。区块(block)类型和视图(view)类型都是不透明(opaque)类型,它们只能被库函数创建、访问和销毁,确保了一定的安全性。计算中间件定义了专用的接口类型(运行支撑)对区块对象和视图对象进行管理(如创建、绑定、销毁等操作)。抽象数据类型与接口关系如图1所示。
通过这种方式,用户能将运算数据根据算法需要抽象为向量对象或矩阵对象,然后就可以如实际中的数学运算一样,对其进行函数操作。因此计算中间件呈现给用户的算法函数接口是直观的,满足接口简洁、易用原则。同时由于数据对象的抽象隐藏了数据操作细节,杜绝了一些误操作的发生,满足了安全性要求。
3、接口类型:
基于典型雷达信息处理算法分析和面向雷达信息处理原则,计算中间件接口将包括基础运算函数接口,提供包括标量运算、向量运算、随机数生成运算、信号处理运算、线性代数运算等在内的运算函数功能,此外,还包括为中间件运行提供支撑的功能接口,其中就包括上节提到的对数据对象的管理功能等。接口类型的简单分类见下表1。
表1计算中间件接口类型
下面给出各接口类型所支持的具体运算函数功能。
(1)支持函数
此类函数包含了函数库运行所必须的支持函数,包括初始化和终止化函数;创建、销毁、控制各数据对象的函数;以及内存管理函数等。
(2)标量函数(实数、复数)
a)实数运算函数,包括三角函数(sin、cos等)、反三角函数(asin、atan、atan2、acos)、指数函数(sqrt、pow、exp)、对数函数(log、log10e)、模(mod)运算、求最大最小值、取整等运算;
b)复数运算函数,可与实数运算函数组成对应,并包括复数构造(complex)、复数求模(abs)、复数求角度(arg)、
c)索引标量函数:与获取向量、矩阵元素下标有关的函数;
d)浮点运算:浮点除法、浮点乘法、浮点加减法;
e)类型转换函数:浮点型与整形间、单精度与双精度间、字符型与整数型间、标准整型与长整型之间、无符号数与带符号数间等的强制类型转换函数;
(3)向量与元素运算
此类函数囊括了针对向量、矩阵等对象各元素(对)的简单操作函数,主要分以下几类:
a)基础数学函数:三角函数、对数和指数运算(基于e和10)、平方根等;
b)一元运算:针对单个向量/矩阵中每个元素的操作,如:对每个元素取整、求共轭、元素累加以及欧拉特征等运算。
c)二元运算:以两个向量/矩阵为输入或者一个向量/矩阵与一个标量为输入。如:向量/矩阵相加、标量与向量/矩阵的逐位除、两个向量/矩阵平均和开方、计算两个向量/矩阵的逐位乘/减等等。
d)三元运算:需要三个输入(三个向量、两个向量和一个标量、两个标量和一个向量)。如:向量逐位先加后乘、向量逐位先乘后标量加等等。
e)逻辑运算:使用逻辑测试逐位比较两个向量/矩阵,返回布尔值;测试每各元素为布尔值的向量/矩阵,生成一个布尔值。
f)选取操作:根据某规则从一个或两个向量/矩阵中选取一个或多个元素。如求向量/矩阵的最大/小值等等。
g)逐元素逐比特位逻辑操作或对布尔向量/矩阵的逐比特位逻辑操作:如:向量/矩阵的and、not、or、xor运算。
h)元素生成与拷贝:为一个向量/矩阵生成或拷贝元素。
i)控制操作(manipulationoperations),如从实数向量/矩阵生成复数向量/矩阵、从复数向量/矩阵生成实数向量/矩阵、等等。
j)用户定制函数:用户可以用定制的函数对向量/矩阵的元素进行操作。
(4)随机数生成函数
定义两种伪随机数生成函数,分别实现了:
a)生成0和1之间均匀分布的随机数;
b)生成均值为0,单位方差的高斯随机数;
(5)信号处理(signalprocessing)函数
提供fft、ifft、window(窗函数)、卷积/相关运算函数、滤波函数及其他一些处理函数。
(6)线性代数函数(linearalgebrafunctions)
该类是对(生成)矩阵的运算,着重针对浮点数据类型。
a)矩阵和向量运算,包含向量内积、通用矩阵乘法、矩阵求和、矩阵求逆、矩阵kronecker积等等;
b)一般方阵线性系统求解,如矩阵的lu分解、解一般线性系统等等;
c)对称正定线性系统,如矩阵cholesky分解、求解对称正定线性系统。
d)超定线性系统求解,如矩阵qr分解、最小二乘问题求解等运算;
e)奇异值分解,是矩阵分析中正规矩阵酉对角化的推广,在信号处理、统计学等领域有重要应用。
4、接口功能实现:
为满足高性能原则和跨平台原则,我们在实现计算中间件接口功能的时候,不仅要考虑到对前面提到的多种硬件平台的支持,还需要针对所在平台进行函数执行效率的优化。
针对intelx86平台,为实现高效的计算性能,计算中间件需要基于当前执行环境(处理器型号及操作系统类型)对每个接口进行功能实现,还需要利用intelx86处理器的指令集对算法函数进行执行效率优化。考虑到intel公司为其x86cpu开发了mkl基础运算库,使用sse和avx指令集对库函数算法进行了深度优化,使其在intelx86平台上具有几乎最优的执行效率。因此,在实现计算中间件接口功能的时候,首先利用mkl提供的函数,只有在这些其库函数功能无法覆盖的地方,才采用直接编码实现。
“直接编码实现”与“调用基础运算库”对立,指不调用成品库里的函数接口来实现计算功能,而是单独编写代码实现计算功能。
举例来说,比如用户享用矩阵加法运算,如果基础运算库里有这个函数接口,那么计算中间件提供者把接口按照想要的接口标准封装一下(也就是更改输入参数的形式),即可提供给用户;如果基础运算库里没有,提供计算中间件的人要编码实现矩阵加法,就要一步步的写数组,做加法运算等等。对用户来说,这两种情况使用时都是只输入参数,比如输入要相加的两个矩阵是什么
针对国产处理器平台,如飞腾通用cpu、飞腾dsp处理器、申威处理器、龙芯处理器。由于这些处理器往往缺乏完善的周边生态,即无法提供一些常见运算函数的api。采取调研处理器厂商,由厂商给出适用于其指令集的一般函数的加速计算库,之后参考以及使用现有的著名第三方函数库(如fftw、openblas)对每个接口进行功能实现。这些函数库覆盖了fft运算、线性代数运算、数值运算等函数功能,而且经过多年的研发维护,提供了完善的应用接口,适用于多种平台,并且拥有极高的执行效率。
采用这种调研处理器厂商基础库和直接编码实现相结合的方式,我们不仅能较为简单快速地完成计算中间件软件开发,还能尽可能确保其较优的执行效率。
在本申请的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。