首页> 中国专利> 一种支持不同硬件平台的算法适配层及算法库适配方法

一种支持不同硬件平台的算法适配层及算法库适配方法

摘要

本发明涉及一种支持不同硬件平台的算法适配层及适配方法,应用于第一硬件平台算法库和第二硬件平台算法库的适配,所述算法适配层包括数据类型命名模块、头文件统一模块以及适配模块;所述数据类型命名模块,用于将所述第一硬件平台的待适配算法库中具有与所述第二硬件平台的目标算法库中数据结构类型相同的数据名称进行统一命名;所述头文件统一模块,用于将所述第一硬件平台与所述第二硬件平台功能相同的接口函数的头文件进行标志统一;所述适配模块,用于调用头文件将所述待适配算法库接入至所述第二硬件平台中,以适配目标算法库。本发明提供的一种支持不同硬件平台的算法适配层及算法库适配方法,能适配不同硬件平台的信息处理。

著录项

  • 公开/公告号CN114970534A

    专利类型发明专利

  • 公开/公告日2022-08-30

    原文格式PDF

  • 申请/专利号CN202210606427.0

  • 发明设计人 黄洁;谭风华;张冰倩;李帅;

    申请日2022-05-31

  • 分类号G06F40/295(2020.01);G06F16/16(2019.01);

  • 代理机构武汉智嘉联合知识产权代理事务所(普通合伙) 42231;

  • 代理人张璐

  • 地址 434000 湖北省荆州市沙市区金龙路51号

  • 入库时间 2023-06-19 16:33:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-16

    实质审查的生效 IPC(主分类):G06F40/295 专利申请号:2022106064270 申请日:20220531

    实质审查的生效

说明书

技术领域

本发明涉及计算机软件技术领域,尤其涉及一种支持不同硬件平台的算法适配层及算法库适配方法。

背景技术

目前,对软件化雷达的信息进行处理处于蓬勃发展时期,很多厂家根据自身使用的硬件平台设计软件化雷达的信息处理方式,在所使用的硬件平台不同时,信息处理方式往往不能通用。

目前针对信息处理方式的硬件平台不同,往往需要重新设计新的硬件平台的信息处理方式,或者对原有的信息处理方式进行适应性调整,以满足不同硬件平台的使用。

但是,重新设计新的硬件平台的信息处理方式,需要花费很多时间,并且需要相关经验的工作人员进行处理,而对原有的信息处理方式进行适应性调整,也对工作人员的专业性有一定的要求。因此,急需一种能够满足不同硬件平台信息处理的方式。

发明内容

有鉴于此,有必要提供一种支持不同硬件平台的算法适配层及适配方法,用以解决现有技术中不同硬件处理平台的信息处理不能通用的问题。

为达到上述技术目的,本发明采取了以下技术方案:

第一方面,本发明提供了一种支持不同硬件平台的算法适配层,应用于第一硬件平台算法库和第二硬件平台算法库的适配,算法适配层包括数据类型命名模块、头文件统一模块以及适配模块:

数据类型命名模块,用于将第一硬件平台的待适配算法库中具有与第二硬件平台的目标算法库中数据结构类型相同的数据名称进行统一命名;

头文件统一模块,用于将第一硬件平台与第二硬件平台的功能相同的接口函数的头文件进行标志统一;

适配模块,用于调用标志统一后的接口函数将待适配算法库接入至第二硬件平台中,以适配目标算法库。

优选的,数据类型命名模块包括相同类型确定模块以及统一命名模块;

相同类型确定模块,用于确定第一硬件平台的待适配算法库中与第二硬件平台的目标算法库中数据结构类型相同的数据;

统一命名模块,用于将数据结构类型相同的数据按照预设规则进行统一命名。

优选的,头文件统一模块包括头文件标志确定模块以及接口函数命名模块;

头文件标志确定模块,用于确定第一硬件平台的待适配算法库中与第二硬件平台的目标算法库中功能相同的接口函数的头文件;

接口函数命名模块,用于将功能相同的接口函数以预设名称开头进行统一命名。

优选的,适配模块包括接口函数确定模块以及数据转换模块;

接口函数确定模块,用于根据第一硬件平台的待适配算法库,确定待调用的接口函数类型;

数据转换模块,用于调用待调用的接口函数,将待处理数据转换为第二硬件平台的目标算法库的数据。

优选的,接口函数确定模块还包括接口函数形参确定模块;接口函数形参确定模块,用于根据待调用的接口函数类型,确定待调用的接口函数的形参类型。

优选的,数据转换模块还包括转换判断模块;转换判断模块,用于根据待处理数据转换的结果生成转换返回值。

优选的,接口函数包括内存管理函数;内存管理函数,用于为待处理数据分配内存空间。

优选的,内存管理函数包括内存申请函数以及申请判断函数;

内存申请函数,用于根据第一硬件平台的形参确定需申请的内存空间大小,并对应申请待分配的内存空间;

申请判断函数,用于根据待分配的内存空间申请是否成功的结果生成申请返回值。

优选的,还包括初始化模块;初始化模块用于将算法适配层的环境进行初始化,设置线程的执行方式。

第二方面,本发明还提供了一种支持不同硬件平台的适配方法,基于如上述的支持不同硬件平台的算法适配层,包括:

通过数据类型命名模块将第一硬件平台的待适配算法库中具有与第二硬件平台的目标算法库中数据结构类型相同的数据名称进行统一命名;

通过头文件统一模块将第一硬件平台与第二硬件平台功能相同的接口函数的头文件进行标志统一;

通过适配模块调用标志统一后的接口函数将待适配算法库接入至第二硬件平台中,以适配目标算法库。

采用上述实施例的有益效果是:本发明提供的一种支持不同硬件平台的算法适配层通过数据类型命名模块将不同硬件平台的数据结构类型名称统一命名,通过头文件统一模块将接不同硬件平台的口函数的标志进行统一,从而可以识别出不同硬件平台算法库中的同一数据结构类型,并可以调用对应的接口函数对不同硬件平台同一类型的数据结构类型进行适配,实现不同硬件平台的信息处理。

进一步的,本发明提供的一种支持不同硬件平台的算法适配层的适配方法,将不同硬件平台中的数据结构类型名称以及头文件统一,通过适配模块调用接口函数对数据进行转换,实现不同硬件平台的信息处理。

附图说明

图1为本发明提供的支持不同硬件平台的算法适配层的一实施例的结构示意图;

图2为本发明提供的支持不同硬件平台的适配方法的一实施例的流程示意图。

具体实施方式

下面结合附图来具体描述本发明的优选实施例,其中,附图构成本申请一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。

在本申请的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

本发明提供了一种支持不同硬件平台的算法适配层及适配方法,以下分别进行说明。

请参阅图1,图1为本发明提供的支持不同硬件平台的算法适配层的一实施例的结构示意图,本发明的一个具体实施例,公开了一种支持不同硬件平台的算法适配层10,应用于第一硬件平台和第二硬件平台算法库的适配,算法适配层10包括数据类型命名模块101、头文件统一模块102以及适配模块103:

数据类型命名模块101,用于将第一硬件平台的待适配算法库中具有与第二硬件平台的目标算法库中数据结构类型相同的数据名称进行统一命名;

头文件统一模块102,用于将第一硬件平台与第二硬件平台功能相同的接口函数的头文件进行标志统一;

适配模块103,用于调用标志统一后的接口函数将待适配算法库接入至第二硬件平台中,以适配目标算法库。

在上述实施例中,本发明建立的算法适配层10还与接口20连接,其中,接口20用于与两种不同的硬件平台连接,可以作为一种硬件平台数据的输入或者另一种硬件平台数据的输出。

可以理解的是,本发明的实施例将第一硬件平台算法库与第二硬件平台算法库进行适配,在实际使用的过程中,也可以将第二硬件平台算法库与第一硬件平台算法库进行适配。另外,本发明的实施例还可以增加若干个硬件平台算法库进行适配转换,对于硬件平台算法库的数量不做限制,且适配转换的过程也不是单向的,而是双向的。

需要说明的是,在不同硬件平台的算法库中,对同一类型的数据名称以及接口函数的头文件的名称是不同的,当某一硬件平台下的程序直接通过另一平台运行时,识别不了其中的数据类型以及接口函数,而当二者通过统一数据类型名称以及头文件名称后,对于同一数据类型以及接口函数的头文件的描述一致,则可以判断处理的对象以及处理方式是相同的,从而可以将二者进行相互的转换。

与现有技术相比,本实施例提供的一种支持不同硬件平台的算法适配层10,建立算法适配层10,通过数据类型命名模块101将不同硬件平台的数据结构类型名称统一命名,通过头文件统一模块102将接不同硬件平台的口函数的标志进行统一,从而可以识别出不同硬件平台算法库中的同一数据结构类型,并可以调用对应的接口函数对不同硬件平台同一类型的数据结构类型进行适配,实现不同硬件平台的信息处理。

在本发明的一些实施例中,数据类型命名模块包括相同类型确定模块以及统一命名模块;

相同类型确定模块,用于确定第一硬件平台的待适配算法库中与第二硬件平台的目标算法库中数据结构类型相同的数据;

统一命名模块,用于将数据结构类型相同的数据按照预设规则进行统一命名。

在上述实施例中,数据类型命名模块先通过相同类型确定模块确定第一硬件平台的待适配算法库中与第二硬件平台的目标算法库中数据结构类型相同的数据,然后再由统一命名模块将数据结构类型相同的数据按照预设规则进行统一命名。其中,预设规则为事先确定好的同一数据类型名称的命名方式,具体可以根据实际情况进行调整,本发明在此不做进一步限制。

在本发明的一些实施例中,头文件统一模块包括头文件标志确定模块以及接口函数命名模块;

头文件标志确定模块,用于确定第一硬件平台的待适配算法库中与第二硬件平台的目标算法库中功能相同的接口函数的头文件;

接口函数命名模块,用于将功能相同的接口函数的头文件以预设名称开头进行统一命名。

在上述实施例中,头文件统一模块先通过头文件标志确定模块确定第一硬件平台的待适配算法库中与第二硬件平台的目标算法库中功能相同的接口函数的头文件,然后再由接口函数命名模块将功能相同的接口函数以预设名称开头进行统一命名。其中,预设名称开头为事先确定好的相同功能的接口函数的头文件的名称开头,具体可以根据实际情况进行调整,本发明在此不做进一步限制,接口函数名称的末尾还有字符标识,根据接口函数的末尾字符标识识别当前数据的类型及精度。

在本发明的一些实施例中,适配模块包括接口函数确定模块以及数据转换模块;

接口函数确定模块,用于根据第一硬件平台的待适配算法库,确定待调用的接口函数类型;

数据转换模块,用于调用待调用的接口函数,将待处理数据转换为第二硬件平台的目标算法库的数据。

在上述实施例中,将第一硬件平台算法库中待处理数据输入至算法适配层10中的适配模块,通过接口函数确定模块确定需要调用的接口函数,数据转换模块调用算法适配层10中相应的接口函数,对待处理数据进行转换处理,并将处理后的数据存入申请的内存空间内,得到第二硬件平台的数据,最终完成适配转换。

在本发明的一些实施例中,接口函数确定模块还包括接口函数形参确定模块;接口函数形参确定模块,用于根据待调用的接口函数类型,确定待调用的接口函数的形参类型。

在上述实施例中,不同接口函数输入的形参是不同的,根据输入的形参可以实现接口函数的调用,在使用该算法适配层10接口进行运算时,之前已经确定过硬件平台的算法库,只需要从算法库中选择接口函数的类型,再根据接口提示的形参类型,将待处理数据按照接口提示的形参类型输入至算法适配层10中,通过适配模块103进行适配转换后,最终得到目标硬件平台的适配数据。

需要说明的是,接口函数主要包含以下六类:

内存管理:包括不同平台下的内存分配、释放。确认分配的数据对齐长度、分配空间大小。

系统环境初始化:包括设置当前环境的运行时线程数。

矢量运算:求模、求和、求差、求积、共轭乘、点乘。

矩阵运算:矩阵乘法、矩阵共轭乘、矩阵求逆。

数据基础运算:数据类型的转换,db转mag。

信号处理运算:FFT前向运算、FFT逆向运算。FFT主要包含三个阶段,创建、运算、销毁。

在本发明的一些实施例中,数据转换模块还包括转换判断模块;转换判断模块,用于根据待处理数据转换的结果生成转换返回值。

在上述实施例中,通过算法适配层10进行适配转换,如果接口函数在进行适配转换后存在返回值,则其返回值主要有两种,通过转换判断模块进行判断转换是否成功。第一种,如果函数返回值为指针时,若函数返回值为空指针,则代表执行失败,例如分配内存函数Srdar_malloc,如果函数返回值为NULL,则代表申请内存分配失败。第二种,函数返回值为整形数值,如果函数返回值为0则代表执行成功,如果函数返回值为非0的其他值则代表执行错误,如求矩阵逆函数Srdar_pinv。

在本发明的一些实施例中,接口函数包括内存管理函数;内存管理函数,用于为待处理数据分配内存空间。

在上述实施例中,将不同硬件平台的数据进行适配时,用户提前调用申请内存适配函数为待处理的数据分配内存空间,用于将待处理的数据完成适配转换后进行存储,该内存空间需要进行申请,且内存空间的大小与数据的类型有关。

在本发明的一些实施例中,内存管理函数包括内存申请函数以及申请判断函数;

内存申请函数,用于根据第一硬件平台的形参确定需申请的内存空间大小,并对应申请待分配的内存空间;

申请判断函数,用于根据待分配的内存空间申请是否成功的结果生成申请返回值。

在上述实施例中,使用前接口函数前,用户提前调用申请内存适配函数为参与接口运算的数据提供统一的内存空间。两种不同的硬件平台的算法库中,使用的内存管理函数是不一样的。对于内存申请函数,MKL中这里需要设置三个形参,申请空间内元素个数、元素大小、最小内存对齐字节数,对openblas接口则只需要告知申请内存空间总大小,不在申请内存函数接口设置对齐大小。形参反应了不同硬件平台的内存管理函数的区别,在分配内存空间时,先根据函数数据库中的统一的适配函数接口确定内存管理函数的具体形参。用户在获取预设大小的内存块后,自己决定该内存块存放何种类型的数据以及用途。

在本发明的一些实施例中,还包括初始化模块;初始化模块用于将算法适配层的环境进行初始化,设置线程的执行方式。

在上述实施例中,对算法适配层10的环境进行初始化,初始化函数为init_set_num_threads,在执行任何算法适配层10接口中数学运算操作之前,均需要调用函数init_set_num_threads对环境进行初始化。对openblas环境,需要提前设置内部函数几核运算,这里每次执行的内部函数均使用的是单线程。对mkl环境,基于OpenMP实现了函数内多线程,提供接口设置执行该函数的线程数目,这里不推荐使用OpenMP编程。算法适配层10的计算函数均是线程安全的,由用户自己实现多线程执行算法接口,算法接口内部均由单线程执行。

请参阅图2,图2为本发明提供的支持不同硬件平台的适配方法的一实施例的流程示意图,本发明还提供了一种支持不同硬件平台算法库的适配方法,基于如上述的支持不同硬件平台的算法适配层10,包括:

S201、通过数据类型命名模块将第一硬件平台的待适配算法库中具有与第二硬件平台的目标算法库中数据结构类型相同的数据名称进行统一命名;

S202、通过头文件统一模块将第一硬件平台与第二硬件平台功能相同的接口函数的头文件进行标志统一;

S203、通过适配模块调用标志统一后的接口函数将待适配算法库接入至第二硬件平台中,以适配目标算法库。

在本发明的实施例中,步骤S201通过数据类型命名模块对不同硬件平台算法库中的数据结构类型的数据名称进行统一命名,统一命名后,即便原始硬件平台的算法库中的数据结构类型的数据名称不一样,也能识别出相同的数据结构类型,从而对其进行适配转换。

在本发明的实施例中,步骤S202通过头文件统一模块对不同硬件平台算法库中的接口函数的头文件的命名标志进行统一,对标志进行统一后,对相同功能的接口函数可以在不同硬件平台算法库中使用,其标识有开头标识和末尾标识符,能够识别该接口函数的功能。

在本发明的实施例中,步骤S203在将数据结构类型的数据名称进行统一命名以及接口函数的头文件的命名标志进行统一后,适配模块才能将适配转化过程顺利进行。将待处理数据输入至算法适配层10,调用算法适配层10中相应的接口函数,对待处理数据进行转换处理,转换后的数据即为当前硬件平台算法上对应的数据类型,转换后的数据作为函数的形参输入,通过步骤S202获取两个硬件平台的统一函数接口,最终在S203完成根据硬件平台选取对应的算法库,完成平台适配。

本发明提供的一个具体的实施例以ARM硬件平台和X86硬件平台为例进行说明:

通过初始化函数init_set_num_threads对算法适配层10的环境进行初始化,算法适配层10的计算函数均是线程安全的,再由用户自己实现多线程执行算法接口,算法接口内部均由单线程执行。初始化需要设置内部函数几核运算以及设置执行函数的线程数目,之后需要根据待处理数据的类型申请内存空间,通过接口函数将待处理数据进行适配转换,在用申请的内存空间对数据转换后进行存储,从而实现不同硬件平台数据的适配转换。

由于ARM硬件平台和X86硬件平台所使用的函数算法库不同,需要对ARM硬件平台和X86硬件平台选择其合适的函数算法库。如果处理器架构为X86,则选择intel mkl相关的库函数,如果处理器架构为ARM,则选择该环境下的openblas、fftw等函数库。fftw为支持单精度的单线程库。宏定义的选择:对使用MKL的环境,需要确定非浮点数据类型模型,包括LP64,LLP64,ILP64。这影响数据对象的大小,以及边界对齐。对选择openblas的环境,需要确定复数结构类型,包括LAPACK_COMPLEX_STRUCTURE,LAPACK_COMPLEX_C99,LAPACK_COMPLEX_CPP,LAPACK_COMPLEX_CUSTOM。

请参阅表1,表1为本发明提供的数据结构类型命名规则的一实施例的命名规则表,ARM和X86硬件平台下,库函数使用的同一种类型数据的名称描述是不一样的,需要对外提供统一友好的数据类型名称。将不同平台下的数据结构类型设置对外体现统一名称,在算法适配层10进行适配的过程中,可以避免由于硬件平台不同产生的适配错误。可以理解的是,对外体现的统一名称只是在适配过程中使用,当将不同硬件平台的数据完成适配后,可以识别出其在不同硬件平台下的特定名称。

表1

再将ARM硬件平台和X86硬件平台的接口函数也需要进行统一,而在此只需要将其不同接口函数设置统一的识别标识符即可。该算法适配层10函数接口均是以Srdar开头,函数的末尾字符标识当前的数据类型及精度,_c代表单精度复数,_z代表双精度复数。如Srdar_malloc分配内存,Srdar_free释放内存空间。Srdar_get_A_mul_B_z,代表两个双精度复数矩阵乘法。

根据待处理数据的硬件平台环境,确定待处理数据的内存参数;

将待处理数据的内存参数输入至预设内存函数,得到待处理数据的内存空间。

将待处理数据的内存参数输入至预设内存函数,得到待处理数据的内存空间之后,若预设内存函数配置内存空间成功,返回预设配置内存空间成功指针。

需要屏蔽接口不一致可能导致的差异性,申请成功返回类型为void*,即指向申请的内存块的类型为void的指针。根据返回的类型可以判断出该接口是否成功实现了获取内存空间,以免在将不同硬件平台数据进行适配时,没有预留内存空间进行存储适配完成后的数据。

根据待处理数据初始化后的ARM硬件平台和X86硬件平台环境,通过算法适配层10对待处理数据进行转换处理,得到目标硬件平台的数据,包括:

根据待处理数据的硬件平台环境,确定算法适配层10的待调用接口函数类型;

根据算法适配层10的接口函数类型,确定接口函数的形参类型;

将待处理数据对应的接口函数的形参类型输入至接口函数,得到目标硬件平台的数据。

在使用该算法适配层10接口进行运算时,之前已经确定过硬件平台的函数数据库,只需要从函数数据库中选择接口函数的类型,再根据接口提示的形参类型,传入相应类型的变量,并对是否成功分配内存空间进行判断,当需传入申请的内存块为指针时,形参的输入数据类型是void*。将待处理数据按照接口提示的形参类型输入至算法适配层10中,通过适配模块103进行适配转换后,最终得到目标硬件平台的适配数据。

根据待处理数据的硬件平台环境,确定算法适配层10的待调用接口函数类型,包括:

若硬件平台的环境类型所使用的函数数据库包含待调用接口函数类型,从函数数据库调用待调用接口函数;

若硬件平台的环境类型所使用的函数数据库不包含待调用接口函数类型,则根据硬件平台的环境类型相应函数数据库的数据类型及数据对齐方式配置待调用接口函数。

确定使用的函数数据库是否包含了待调用接口函数的类型,对于指针形参,用户必须自己保证输入参数的有效性,不能传入空指针。其次,对用户来讲,不用关注当前平台中数学函数库所使用数据的具体类型,统一使用一个void*类型指针标识。在函数具体实现中,根据当前具体平台,再来区分所使用的函数接口,如果基础函数库中有,则直接调用基础函数库中的算法,如果没有,则针对当前平台中,相应函数库的数据类型及数据对齐方式,实现该算法。

最后通过算法适配层10对待处理数据进行转换处理,得到目标硬件平台的数据之后,还需要确定转换返回值,包括:

若存在返回值,判断返回值的类型;

当返回值为指针时,判断返回值是否为空指针,如果返回值为空指针,则代表执行失败;如果返回值不为空指针,则代表执行成功;

当返回值为整形数值时,判断返回值是否为零,如果返回值为零,则代表执行成功;如果返回值不为零,则代表执行错误。

综上,本发明提供的一种支持不同硬件平台的算法适配层10及适配方法,建立算法适配层10,通过数据类型命名模块101将不同硬件平台的数据结构类型名称统一命名,通过接口函数统一模块102将接不同硬件平台的口函数的标志进行统一,从而可以识别出不同硬件平台算法库中的同一数据结构类型,并可以调用对应的接口函数对不同硬件平台同一类型的数据结构类型进行适配,实现不同硬件平台的信息处理。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号