CN109189380B - 算法集成框架系统及方法 - Google Patents
算法集成框架系统及方法 Download PDFInfo
- Publication number
- CN109189380B CN109189380B CN201811063031.6A CN201811063031A CN109189380B CN 109189380 B CN109189380 B CN 109189380B CN 201811063031 A CN201811063031 A CN 201811063031A CN 109189380 B CN109189380 B CN 109189380B
- Authority
- CN
- China
- Prior art keywords
- parameter
- stream
- dynamic library
- server
- parameters
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/34—Graphical or visual programming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种算法集成框架系统及方法,所述方法包括:确定任务类型并关联动态库、创建想定并添加任务、输入参数并对应参数对象列表、获取服务端CPU配置并生成计算单元流、守护进程启动计算服务单元、分配计算单元、数据流转换、计算服务单元调用动态库、动态库解析计算并返回计算结果、客户端进行结果显示的步骤。本发明输入画面和输出都可以通过配置实现,在调试过程中,可以方便的调整参数,直观的看到使用图形方式展示的计算结果;算法调试完成后,可以直接作为最终成果呈现给导师、客户等,减轻了科研人员的工作量,提高了研发效率。
Description
技术领域
本发明涉及计算机软件设计技术领域,特别是一种算法集成框架系统及方法。
背景技术
科研项目在研发过程中,科研人员的主要精力主要集中在相关科研领域的研究以及专业算法的研究,而不擅长完成算法的系统集成以及调试,调试算法时,通常有两种方法:一是采用直接在程序中设置值的方式,此种方式在调试变更输入值时,需要停止程序,修改值再编译运行,不仅不方便,也不直观;另一种方式是做一个的输入界面,而通常科研人员专注算法,不擅长开发界面,完成一个画面往往要花费大量的时间,大大降低了开发效率,而且算法结果也是直接输出数据结果,研发效率比较低下。
发明内容
本发明需要解决的技术问题是提供一种算法集成框架系统及方法,用于减轻科研人员的工作量,提高研发效率。
为解决上述技术问题,本发明所采取的技术方案如下。
算法集成框架系统,包括:
参数输入模块,通过人工输入或xml文件导入的方式输入参数,以表格形式展示,形成表格参数;参数对象定义模块,用于定义一个参数对象,参数对象的属性与表格参数的属性一致,包含但不限于参数的基本属性:参数名称、参数英文名称(也是参数关键字,不可重复)、参数类型(例如:整形、浮点型、字符、文件等)、参数值、参数说明等,并通过参数对象队列来保存所有参数;表格参数和参数对象对应模块,通过参数关键字来实现表格参数和参数对象队列的一一对应;
保存获取模块,通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,然后把转换后的流保存到数据库中;并通过对象反序列化机制或者自定义方法将从数据库中取得的流转换为参数对象队列;
分布式计算调度模块,测试与服务器的通信,取得服务器的CPU核心数信息,根据服务器CPU核心信息生成计算单元流,和守护进程通信启动计算服务模块,给任务分配计算单元,向服务端传递动态库文件,调度计算服务开始计算;
客户端接口模块,通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,加入动态库信息(动态库名称、调用函数等)后拼接成一个字符串,接口本身只需要定义一个整形参数(用于传递命令类型)和一个字符串类型参数(用于传递流),然后把转换后的流传递给服务端接口;
计算服务模块,由守护进程启动,包含了服务端接口模块,解析客户端传递的信息,取得动态库信息和参数流信息,调用算法动态库,把接收到的流作为参数传递到动态库中,并返回计算结果;
算法动态库,存储算法,将接收到的参数流进行自行解析,把参数提取出来,设入计算参数中,然后完成计算,再把结果保存为返回流(需要符合框架结果显示标准);
输出模块,用于将客户端接口模块接收返回流后处理得到的xml流或者自定义字符串流进行输出,框架提取结果流,按预先配置进行显示。
上述算法集成框架系统,还包括供二次开发扩展使用的扩展接口模块。
上述算法集成框架系统,所述表格参数通过表格控件进行输入,表格参数包括参数的类型、值、Key、参数中文名称以及备注信息。
一种分布式科研算法集成框架系统,具体包括以下步骤:
A.确定任务类型,导入算法动态库,并关联任务与算法动态库,配置算法动态库相关的参数列表、结果显示方式;
B.创建想定,并添加任务;
C.通过手工输入(或模板自动填入)表格参数;通过参数对象来保存参数必要的信息,参数对象的属性与表格参数的属性一致,并通过参数对象队列来保存所有参数;通过Key来实现表格参数和参数对象队列的一一对应;
D.框架通过服务端守护进程取得服务端CPU配置,并根据CPU配置生成计算单元流;
E.服务端守护进程启动计算服务单元;
F.给任务分配计算单元;
G.客户端通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,加入动态库信息(动态库名称、动态库调用接口函数)拼接成一个字符串流,然后把转换后的流传递给服务端接口;
H.服务端接口接收到输入流后,解析调用算法动态库,把收到的输入流作为参数传递到动态库中;
I.动态库将接收到的输入流进行自行解析,把参数提取出来,设入动态库参数中,然后完成计算,再把结果保存为返回流;
J.服务端接口接收到动态库计算完成后形成的返回流,传递给客户端接口;客户端接口通过对象反序列化机制把接收到的返回流转换为返回的xml流或者自定义字符串流;调用结果显示画面,将客户端接口模块接收返回流后处理得到的xml流或者自定义字符串流通过表格或图形方式输出。
上述一种科研算法集成方法,步骤C中所述的一一对应的方法为:取得一条表格数据,得到Key,搜索参数对象队列,查看队列中是否存在该参数,如果存在,则把表格相应的属性的值,保存到参数对象相应的属性的值中;没有,则创建一个新参数对象,并把表格参数内容转录到新建的参数对象中,并把该参数对象添加入参数对象队列中;如此反复,直到把所有表格参数转录到参数对象队列中。
由于采用了以上技术方案,本发明所取得技术进步如下。
本发明与以往的科研人员开发相比,可以让科研人员专注于算法研究,不需要关注不擅长的前端界面设计开发,输入画面和输出都可以通过配置实现,配置一个算法的输入输出等只需要30分钟左右,大大的提高了研发效率;在调试过程中,可以方便的添加参数,直观的看到使用图形方式展示的计算结果;算法调试完成后,可以直接作为最终成果呈现给导师、客户等,减轻了科研人员的工作量,提高了研发效率。本发明的框架采用并行分布式计算,大大提高了计算效率。
附图说明
图1为本发明所述算法集成框架系统的数据工作流程图。
图2为本发明所述算法集成框架系统的框架结构图。
具体实施方式
下面将结合具体实施例对本发明进行进一步详细说明。
本实施例假定进行一个背景噪声生成任务,它的功能是生成一个随机的背景噪声文件。首先,需要制作一个符合windows动态库标准的动态库,其中动态库名称为:noise.dll,调用接口函数为doServer,单线程任务,接口参数一个,为:string、名称:sp,任务实际参数3个,参数1:类型:double,名称:time(时长),默认值:100,单位:s(秒);参数2:类型:int,名称:groupnum(组数),默认值:1,单位:无;参数3:类型:int,名称cycle(周期),默认值:100,单位:无。假定有服务器两台,每台服务器是4CPU,CPU为8核心。
一种算法集成框架系统,结合框架结构如图2所示,包括客户端和服务端,客户端包含了画面层、逻辑层和接口层;服务端包含了数据处理层和算法动态库。
其中,画面层包括设置任务管理和想定管理功能,主要包括参数输入模块和输出模块。
任务管理包括设置任务类型、设置任务参数模板、编辑任务参数、保存任务、导入任务调用的动态库、设置动态库名称、设置动态库结果显示方式等;
任务管理是框架重要的辅助功能,它可以让用户预设对象(/任务)模板,定义对象(/任务)参数(参数的类型、默认值、参数名称、参数检查的正则表达式等),设定任务关联的对象、任务的运行流程、任务的结果显示方式、任务关联的动态库等,使用户在创建任务时快速的完成基本工作,提高工作效率。
任务管理的核心模块就是参数输入模块和保存/获取模块。
参数输入模块是通过人工输入或xml文件导入的方式输入参数,参数通过表格控件进行展示,表格参数包括参数的类型、值、参数关键字、参数中文名称以及备注信息;用于定义一个参数对象,参数对象的属性与表格参数的属性一致,并通过参数对象队列来保存所有参数;表格参数和参数对象对应模块,通过参数关键字来实现表格参数和参数对象队列的一一对应。
保存/获取模块是通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,然后把转换后的流保存到数据库中,并通过对象反序列化机制将从数据库中取得的流转换为参数对象队列。因此数据库只需要定义必要的字段来保存对象(/任务)的基本信息(例如名称、类型、备注等)和一个字符串类型的字段来保存参数xml流,无论对象(/任务)如何变化,数据库结构都无需变更,这样就达到了通用的效果。
在本实施例中,需要新建一个任务类型,并以该任务类型新建一个任务模板,在该任务模板中导入noise.dll动态库,框架将导入的动态库保存到框架指定目录中,并设定动态库noise的名字,设定任务名称为背景噪声生成任务,设置该任务流程为普通任务流程;调用接口函数doServer;设置参数信息:添加三个参数,分别是time、groupnum、cycle;设置结果显示方式:线形图,并把这些信息保存到数据库中。
想定管理包括想定创建、任务添加、编辑任务参数、保存/获取想定任务、启动计算、查看结果等子功能。想定管理是框架重要的功能之一,想定是一个或多个任务组成的集合(详细请参见名词解释:想定条目)。在这里,用户添加任务,修改任务模板预设的参数,调用计算功能完成计算任务,查看计算结果,保存想定。
在本实施例中,需要创建一个想定,添加背景噪声生成任务,框架将提取数据库中背景噪声生成任务的设置,把参数(3个)以表格的方式展示给用户,可以修改参数的值和备注(其余的信息,例如参数类型、参数名称等不允许修改),例如把参数1时长的值改为200。
在想定状态下,用户调用计算服务模块,完成计算功能。在计算时,首先会把表格控件的参数数据转换为参数对象流,然后使用预先设定的正则表达式对参数进行检查,通过检查后,把参数流和任务基本信息转录入任务对象中,进入逻辑层进行下一步处理。
在本实施例中,框架循环画面表格记录,依次把表格记录字段的值拷贝到参数对象相应的属性中,然后把参数对象添加到流中,在本实施例中参数对象流中存在3个参数对象。
在逻辑层,框架收到前台传递的计算指令后,框架会先调用分布式计算单元调度模块。
分布式计算单元调度模块,根据配置测试服务器,生成可用服务器流。首先根据服务器配置(IP、守护进程端口等信息)试探连接服务器,服务器的守护进程(作为服务,开启服务器时即运行)接收到客户端测试命令后回复OK信息,客户端收到服务端的回复后,确认该服务器可用,把该服务器加入实际可用服务器流中。
查询服务器CPU核心数信息,生成计算单元流。框架循环可用服务器流,和服务器通信,取得服务器CPU核心数信息,并生成计算单元流,每个计算单元流包括但不限于以下信息:服务器IP、通信端口、空闲标志、计算单元分组等。客户端生成计算单元时,同时连接服务器守护进程测试计算服务单元通信端口,如果通信端口可用,则服务端守护进程启动计算服务单元程序,设置通信端口,计算服务单元进入等候状态,同时客户端把该通信端口保存到计算单元中,并且把该计算单元信息保存到可用计算单元流中;如果端口不可用,表示该端口可能被服务器其它应用程序占用,系统将端口加1并再次测试,如果连续5次都不成功,表示该端口区域均被其它应用占用,系统将端口加100再次测试,直到完成全部计算单元的配置。
循环想定任务流,为任务分配计算单元。取得想定中的任务流,框架循环处理任务。针对每个任务,框架会分配计算单元,如果是单线程任务,将被分配一个计算单元,如果是多线程任务,框架将根据先前的任务配置,分配多个计算单元,分配计算单元时,将使用负载均衡算法进行分配,直到可用的计算单元全部被分配完成,被分配的计算单元的空闲标志设定为【忙】,然后框架创建线程,按计算单元提供的IP和端口信息创建服务对象,并调用客户端接口模块,设置参数,进行计算。如果还有计算任务没有被分配计算单元,则这些计算任务进入等待状态,直到先前已经分配的计算单元完成计算任务,空闲标志被置为【闲】。
负载均衡算法是系统在生成计算单元流时,有一个【分组】属性,本发明以服务器为分组标准,服务器1的全部单元分在1组,服务器2的全部单元分在2组,以此类推。分配计算单元时,取得1~n组的计算单元数、1~n组的可用计算单元数(即【空闲标志】为【忙】的计算单元),由此,可以计算出1~n组的负载指数(可用计算单元数除以计算单元总数),取得负载指数最低的组号k,取得任意一个组号是k的可用计算单元,该计算单元就可以作为当前可分配的计算单元。
延续本实施例,从前面条件的设定可知,系统可以生成64个计算单元,其中编号1~32计算单元为1组,编号33~64计算单元为2组。当首次分配计算单元时,1组的负载指数为0/32=0,2组的负载指数也为0,那么任意一个计算单元均可分配,假定我们是按顺序循环的,那么第一个被分配的计算单元就是1号计算单元;当分配第二个计算单元时,可以计算得到1组的负载指数为1/32=0.03125,2组的负载指数为0,框架循环,2~32是1组,不符合要求(1号计算单元是【忙】状态,不参与分配),33号计算单元符合要求,第二个被分配的计算单元就是33号;当分配第三个计算单元时,可以计算得到1组的负载指数为1/32=0.03125,2组的负载指数也为0.03125,两组负载指数相同,任意一组都符合要求,框架循环,2号计算单元符合要求,第三个被分配的计算单元就是2号;以此类推进行计算单元分配,这样就实现了服务器均衡负载。
守护进程,是部署在服务端以服务方式启动的可执行程序,负责获取服务端的CPU配置,测试服务端可用通信端口,启动、监控、停止计算服务单元。
在本实施例中,按前面假定的服务器配置,那么框架将生成4*8*2共64个计算单元。因为背景噪声生成任务是单线程任务,所以在本实施例中任务只需要分配一个计算单元。如果想定创建32个背景噪声任务,那么框架将分配32个计算单元,并启动多线程进行并行计算,通过负载均衡算法分配后,每台服务器将运行16个计算服务单元进行计算,而不会把这32个计算服务单元分配到同一台服务器上。假定有72个任务时,将先分配计算64个计算单元进行计算,剩余8个任务将进入等待状态,等待这64个计算单元看哪个先计算完成,计算完成后框架回收计算单元,剩余任务将被框架分配计算单元,进行计算。
接口层包括客户端接口模块和服务端接口模块,实现客户端和服务端的数据通讯。
客户端接口模块,框架先和服务端的守护进程通信,确认服务端是否存在该任务的动态库,如果存在,动态库版本和动态库生成时间是否和客户端一致,如果服务端没有该任务动态库或动态库不一致,则把客户端动态库通过通信(例如:FTP或第三方中间件)发送给服务端,服务端守护进程把动态库保存到指定目录下,并把动态库信息(例如:动态库名称、版本、生成时间等)保存到数据库中。通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,然后把转换后的参数流和动态库基本信息(例如:动态库名称、调用接口等)通过自定义协议组合在一起传递给服务端接口,无论是什么动态库、无论需要什么参数,无论有多少参数,接口都不需要修改。
在本实施例中,框架将把任务信息(包括背景噪声动态库名称noise.dll、调用接口函数doServer以及参数流)拼接成一个字符串发送给服务端。例如:noise.dll;doServer;time,double,200’groupnum,int,1’cycle,int,100。在本实施例中,名称、接口函数、参数之间使用【;】分隔,参数与参数之间使用【’】分隔,参数内部名称、类型和值使用【,】分隔。
数据处理层主要包括服务端计算服务单元模块,由守护进程启动,服务端接口模块可设置在服务端计算服务单元模块中。
服务端计算服务单元模块初步解析客户端调用信息,分离出算法动态库名称、调用函数和参数流等信息。根据上面分离的信息动态调用算法动态库,把接收到的参数流作为参数传递到动态库中。
在本实施例中,计算服务单元模块接收到客户端的信息后,首先通过【;】把信息分割为三部分:noise.dll(动态库名)、doServer(动态库调用接口函数)、time,double,200’groupnum,int,1’cycle,int,100(动态库调用函数的参数),得到这些信息后,就可以动态调用noise.dll,并把字符串【time,double,200’groupnum,int,1’cycle,int,100】作为参数传入。
算法动态库,在动态库接口函数中,接收到参数后,解析参数,分离出算法需要的真正的参数,设入计算参数中,并开始实现算法。计算完成后,生成符合框架标准的结果文件或字符串流,如果是文件,则放在框架指定目录下,如果是字符串流,则直接把字符串流作为返回结果返回。在整个流程中,用户只需要在这一步实现把参数流解析为算法实际参数的代码,而且这一步实现过一次后,再次写其它算法时就非常简单了。其余步骤都无需编写代码,这样就提高了开发效率,节约的开发时间。
在本实施例中,动态库noise.dll的doServer函数接收到字符串【time,double,200’groupnum,int,1’cycle,int,100】后,通过【’】把字符串切割为三个部分(三个参数),然后循环对每个字符串再次以【,】切割,得到参数的名称、参数类型、参数值等信息,这里第一个参数名是time,类型是double,值是200,第二个参数名是groupnum,类型是int,值是1,第三个参数名是cycle,类型是int,值是100,到此,本算法的三个参数已经解析出来了,把这三个参数转换为对应的类型,代入算法进行计算,生成结果文件,保存到指定目录中,因为前面预先设定的是线形图输出方式,那么输出文件需要按框架提供的线图文件格式进行写入。例如可以是:d:\abc\220499be-0972-4ad7-aed9-8aae0f555c2e\result.txt,其中【d:\abc】是服务端部署目录,【220499be-0972-4ad7-aed9-8aae0f555c2e】是框架在传输动态库,保存动态库信息时为动态库noise.dll分配的Guid号,这样可以确保不同的动态库的结果不会冲突,【result.txt】是结果文件名(可以是固定的,也可以是指定的,如果是指定,就需要客户端把结果文件名信息加入流中传下来)。
输出模块,动态库计算结束,计算服务单元模块回收控制权,向客户端返回计算正常完成的消息,并通过网络把结果文件传输给客户端(传输文件可以使用第三方中间件,也可以直接使用FTP等方式)或者把字符串流返回给客户端。客户端接收到结果后进行初步处理后调用结果显示模块进行显示。本框架将预先提供数种标准输出方式,例如:1、单纯文本输出,就是对返回结果不加任何处理,直接通过文本控件展示给用户;2、表格输出,就是把结果按框架表格格式读入形成一个表,框架使用表格控件展示给客户;3、线图输出,就是把结果按线格式读入,使用绘图控件画成线向客户展示;或者其它类型输出。
在本实施例中,客户端假定使用c#开发,那么图形控件可以使用Chart控件。客户端的接口模块收到结果后,把结果文件保存到框架指定目录,例如:c:\aaa\0254f610-cf72-45ea-bf44-458917c6dd0a,其中【c:\aaa】是客户端的部署目录,【0254f610-cf72-45ea-bf44-458917c6dd0a】是创建该想定时生成的Guid(该GUID和服务端的GUID不是同一个)。至此用户完成整个系统流程,在全部流程中用户只需要在编写动态库时编写少部分和框架相关的代码(解析参数,生成符合框架标准的结果文件),可以把主要精力放在算法编写和研究上,大大提高了用户的工作效率。
本发明中,算法集成框架系统分为了客户端和服务端两个部分(参见图2框架结构图),其中参数输入模块、保存获取模块、客户端接口模块、分布式计算调用模块(客户端部分)、数据库以及输出模块均设置在客户端,而分布式计算调用模块(服务端部分)、服务端计算服务单元模块和算法动态库则设置在服务端。客户端和服务端之间可以采用现成的中间件来连接,例如谷歌的Protocol buffer。
客户端可以使用c#、VB甚至.Net Asp等高效语言开发,提高开发效率,其工作主要是完成输入、输出界面、流程控制逻辑、配置管理、存储逻辑、数据整合转换等工作;服务端采用C/C++开发,因为算法通常使用C/C++开发,所以服务端语言使用C/C++开发可以无缝和算法对接,其主要工作是把客户端传递过来的xml流(承载参数和配置)转换为标准数据结构、数据文件保存到相应的位置,并根据配置来调用相应的算法动态库,在动态库计算完成后把结果文件传递给客户端进行展示。
当标准输入输出界面无法满足用户需要时(例如开发Demo版或客户对界面有一定要求时),系统还包括了供二次开发扩展使用的扩展接口模块,扩展接口模块设置有扩展输入接口和扩展输出接口,科研人员只要按接口标准开发,就可以实现自定义输入、输出,并集成到系统中使用。
一种算法集成方法,其流程如图1所示,具体包括以下步骤。
A.确定任务类型,导入算法动态库,并关联任务与算法动态库,配置算法动态库相关的参数列表、结果显示方式。
在进行一个算法任务时,首先需要确定任务类型,然后导入算法动态库。在任务计算前,需要预先通过编辑任务类型确定任务的流程、调用方式等;通过算法动态库配置绑定任务与算法动态库,配置算法动态库相关的参数列表、结果显示方式;
B.创建想定,并添加任务。
想定就是多个相关的任务的集合,相关可以是相似的任务,或者相同任务但是参数不同,或者是流程上有先后关系等。添加任务时,可以选择任务相关联的算法动态库,把该算法动态库关联的参数加载到输入画面上,用户可以修改或直接使用默认值参数;如果算法关联了对象,同时也会加载关联的对象,与任务参数不同,对象参数的值时不能修改的。
C.通过手工输入或xml文件导入方式输入参数,参数通过表格控件进行展示,表格参数包括类型、值、Key、参数中文名称以及备注信息;定义一个参数对象,参数对象的属性与表格参数的属性一致,并通过参数对象队列来保存所有参数;通过Key来实现表格参数和参数对象队列的一一对应。
一一对应的方法为:取得一条表格数据,得到Key,搜索参数对象队列,查看队列中是否存在该参数,如果存在,则把表格相应的属性的值,保存到参数对象相应的属性的值中;没有,则创建一个新参数对象,并把表格参数内容转录到新建的参数对象中,并把该参数对象添加入参数对象队列中;如此反复,直到把所有表格参数转录到参数对象队列中。
本发明中,由于各个算法的输入都不一样,为了实现通用输入,本方面牺牲了部分美观性,采用表格方式输入参数和数据文件路径。当然,如果为了满足画面的美观或者排版的要求,可以使用其他控件进行参数的输入。
D.框架通过服务端守护进程取得服务端CPU配置,并根据CPU配置生成计算单元流。
框架客户端根据预先的配置对服务器进行连接测试,生成可用服务器流。首先根据服务器配置(IP、守护进程端口等信息)试探连接服务器,服务器的守护进程(作为服务,开启服务器时即运行)接收到客户端测试命令后回复OK信息,客户端收到服务端的回复后,确认该服务器可用,把该服务器加入实际可用服务器流中。
然后客户端和服务端守护进程通信,查询服务器CPU核心数信息,生成计算单元流。框架循环可用服务器流,和服务器通信,取得服务器CPU核心数信息,并生成计算单元流,每个计算单元流包括但不限于以下信息:服务器IP、通信端口、空闲标志、计算单元分组等,生成可用计算单元流。
E.服务端守护进程启动计算服务单元。
客户端生成计算单元时,同时连接服务器守护进程测试计算服务单元通信端口,如果通信端口可用,则服务端守护进程启动计算服务单元程序,设置通信端口,计算服务单元进入等候状态,同时客户端把该通信端口保存到计算单元中,并且把该计算单元信息保存到可用计算单元流中;如果端口不可用,表示该端口可能被服务器其它应用程序占用,系统将端口加1并再次测试,如果连续5次都不成功,表示该端口区域均被其它应用占用,系统将端口加100再次测试,直到启动全部计算服务单元。
F.给任务分配计算单元。
框架取得想定中的任务流,循环处理任务。针对每个任务,框架会分配计算单元,如果是单线程任务,将被分配一个计算单元,如果是多线程任务,框架将根据先前的任务配置,分配多个计算单元,分配计算单元时,将使用负载均衡算法进行分配(负载均衡算法在后面名词解释中详细阐述),直到可用的计算单元全部被分配完成,被分配的计算单元的空闲标志设定为【忙】,然后框架创建线程,按计算单元提供的IP和端口信息创建服务对象,并调用客户端接口模块,设置参数,进行计算。如果还有计算任务没有被分配计算单元,则这些计算任务进入等待状态,直到先前已经分配的计算单元完成计算任务,空闲标志被置为【闲】。
G.客户端通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,加入动态库信息(动态库名称、动态库调用接口函数)拼接成一个字符串流,然后把转换后的流传递给服务端接口。
框架先和服务端的守护进程通信,确认服务端是否存在该任务的动态库,如果存在,动态库版本和动态库生成时间是否和客户端一致,如果服务端没有该任务动态库或动态库不一致,则把客户端动态库通过通信(例如:FTP或第三方中间件)发送给服务端,服务端守护进程把动态库保存到指定目录下,并把动态库信息(例如:动态库名称、版本、生成时间等)保存到数据库中。通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,然后把转换后的参数流和动态库基本信息(例如:动态库名称、调用接口等)通过自定义协议组合在一起传递给服务端接口,无论是什么动态库、无论需要什么参数,无论有多少参数,接口都不需要修改。
H.服务端接口接收到输入流后,初步解析客户端调用信息,分离出算法动态库名称、调用函数和参数流等信息;根据上面分离的信息动态调用算法动态库,把收到的参数流作为参数传递到动态库中。
I.动态库将接收到的输入流进行自行解析,把参数提取出来,设入动态库参数中,然后完成计算,再把结果保存为返回流。
在动态库接口函数中,接收到参数后,解析参数,分离出算法需要的真正的参数,并开始实现算法。计算完成后,生成符合框架标准的结果文件或字符串流,如果是文件,则放在框架指定目录下,如果是字符串流,则直接把字符串流作为返回结果返回。在整个流程中,用户只需要在这一步实现把参数流解析为算法实际参数的代码,而且这一步实现过一次后,再次写其它算法时就非常简单了。其余步骤都无需编写代码,这样就提高了开发效率,节约的开发时间。
J.服务端接口接收到动态库计算完成后形成的返回流,传递给客户端接口;客户端接口通过对象反序列化机制把接收到的返回流转换为返回的xml流或者自定义字符串流;调用结果显示画面,将客户端接口模块接收返回流后处理得到的xml流或者自定义字符串流通过表格或图形方式输出。
当然,结果的输出还可以是文本方式、线形图方式、雷达图方式、星下点轨迹图方式等方式。
在数据传输过程中,采用的是数据流的形式,因此无论流如何变化,数据库都无需改变。数据流中一个节点保存一个参数,每个节点保存参数的值、数据类型、参数英文名称(也是Key)、参数中文名称、参数说明;若干节点(参数)组成数据流。数据流在需要保存时,通过序列化转换为字符串流保存起来,需要时,把字符串流通过反序列化再转换为数据流。因为所有语言都有支持xml的库,所以字符串流以xml流方式最方便。
通过上面整个流程,科研人员就可以实现参数灵活添加、变更,无需编写代码或改变系统,科研人员研发时,只需要在算法前按规则解析字符串流,再转赋给自己的参数即可,当然也可以把解析过程制作成库函数,供开发人员调用。而且在这个流程中还可以通过加入一些系统配置,实现加载不同的动态库的目的。
Claims (5)
1.算法集成框架系统,其特征在于,包括:
参数输入模块,通过人工输入或xml文件导入的方式输入参数,以表格形式展示,形成表格参数;用于定义一个参数对象,参数对象的属性与表格参数的属性一致,并通过参数对象队列来保存所有参数;通过参数关键字来实现表格参数和参数对象队列的一一对应;
保存获取模块,通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,然后把转换后的流保存到数据库中;并通过对象反序列化机制或者自定义方法将从数据库中取得的流转换为参数对象队列;
分布式计算调度模块,根据配置测试服务器,生成可用服务器流,测试与服务器的通信,取得服务器的CPU核心数信息,根据服务器CPU核心信息生成计算单元流,与守护进程通信启动计算服务单元模块,给任务分配计算服务单元,向服务端传递动态库文件,调度计算服务开始计算;
客户端接口模块,框架先和服务端的守护进程通信,确认服务端是否存在该任务的动态库,如果存在,动态库版本和动态库生成时间是否和客户端一致,如果服务端没有该任务动态库或动态库不一致,则把客户端动态库通过通信发送给服务端,服务端守护进程把动态库保存到指定目录下,并把动态库信息保存到数据库中;通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,加入动态库信息后拼接成一个字符串,接口本身只需要定义一个整形参数和一个字符串类型参数,然后把转换后的流传递给服务端接口;
服务端计算服务单元模块,由守护进程启动,包含服务端接口模块,解析客户端传递的信息,取得动态库信息和参数流信息,调用算法动态库,把接收到的流作为参数传递到动态库中;初步解析客户端调用信息,分离出算法动态库名称、调用函数和参数流信息;根据分离的信息动态调用算法动态库,把接收到的参数流作为参数传递到动态库中;
算法动态库,存储算法,将接收到的参数流进行自行解析,把参数提取出来,设入计算参数中,然后完成计算,再把结果保存为返回流;
输出模块,用于将客户端接口模块接收返回流后处理得到的xml流或者自定义字符串流进行输出,框架提取结果流,按预先配置进行显示。
2.根据权利要求1所述的算法集成框架系统,其特征在于,还包括供二次开发扩展使用的扩展接口模块。
3.根据权利要求1所述的算法集成框架系统,其特征在于,所述表格参数通过表格控件进行输入,表格参数包括参数的类型、值、参数关键字、参数中文名称以及备注信息。
4.一种算法集成方法,其特征在于,具体包括以下步骤:
A.确定任务类型,导入算法动态库,并关联任务与算法动态库,配置算法动态库相关的参数列表、结果显示方式;新建一个任务类型,并以该任务类型新建一个任务模板,在该任务模板中导入noise.dll动态库,框架将导入的动态库保存到框架指定目录中,并设定动态库noise的名字,设定任务名称为背景噪声生成任务,设置该任务流程为普通任务流程;调用接口函数doServer;设置参数信息;设置结果显示方式,并把信息保存到数据库中;
B.创建想定,并添加任务;创建一个想定,添加背景噪声生成任务,框架将提取数据库中背景噪声生成任务的设置,把参数以表格的方式展示给用户,可以修改参数的值和备注;
C.通过手工输入表格参数;通过参数对象来保存参数必要的信息,参数对象的属性与表格参数的属性一致,并通过参数对象队列来保存所有参数;通过Key来实现表格参数和参数对象队列的一一对应;
D.框架通过服务端守护进程取得服务端CPU配置,并根据CPU配置生成计算单元流;框架客户端根据预先的配置对服务器进行连接测试,生成可用服务器流;然后客户端和服务端守护进程通信,查询服务器CPU核心数信息,生成计算单元流;
E.服务端守护进程启动计算服务单元;
F.给任务分配计算单元;分配计算单元时,将使用负载均衡算法进行分配;
G.客户端通过对象序列化机制把参数对象队列转换为xml流或者自定义字符串流,加入包含动态库名称和动态库调用接口函数的动态库信息拼接成一个字符串流,然后把转换后的流传递给服务端接口;
H.服务端接口接收到输入流后,解析调用算法动态库,把收到的输入流作为参数传递到动态库中;
I.动态库将接收到的输入流进行自行解析,把参数提取出来,设入动态库参数中,然后完成计算,再把结果保存为返回流;
J.服务端接口接收到动态库计算完成后形成的返回流,传递给客户端接口;客户端接口通过对象反序列化机制把接收到的返回流转换为返回的xml流或者自定义字符串流;调用结果显示画面,将客户端接口模块接收返回流后处理得到的xml流或者自定义字符串流通过表格或图形方式输出。
5.根据权利要求4所述的一种算法集成方法,其特征在于,步骤C中所述的一一对应的方法为:取得一条表格数据,得到Key,搜索参数对象队列,查看队列中是否存在该参数,如果存在,则把表格相应的属性的值,保存到参数对象相应的属性的值中;没有,则创建一个新参数对象,并把表格参数内容转录到新建的参数对象中,并把该参数对象添加入参数对象队列中;如此反复,直到把所有表格参数转录到参数对象队列中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811063031.6A CN109189380B (zh) | 2018-09-12 | 2018-09-12 | 算法集成框架系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811063031.6A CN109189380B (zh) | 2018-09-12 | 2018-09-12 | 算法集成框架系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109189380A CN109189380A (zh) | 2019-01-11 |
CN109189380B true CN109189380B (zh) | 2021-11-26 |
Family
ID=64910610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811063031.6A Active CN109189380B (zh) | 2018-09-12 | 2018-09-12 | 算法集成框架系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109189380B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110299180B (zh) * | 2019-07-08 | 2021-06-08 | 深圳忆联信息系统有限公司 | 基于固态硬盘的调试信息输出方法、装置和计算机设备 |
CN110428341A (zh) * | 2019-08-06 | 2019-11-08 | 哈尔滨工业大学软件工程股份有限公司 | 医保费用结算方法、设备及计算机可读存储介质 |
CN111191115B (zh) * | 2019-12-10 | 2022-10-11 | 未鲲(上海)科技服务有限公司 | 基于用户数据的信息推送方法及装置 |
CN110990759A (zh) * | 2019-12-11 | 2020-04-10 | 赵波 | 交流电传动矿用自卸车与电铲匹配选型控制系统及方法 |
CN113703727A (zh) * | 2021-08-26 | 2021-11-26 | 征图智能科技(江苏)有限公司 | 机器视觉算法框架标准化平台 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101908963A (zh) * | 2010-08-09 | 2010-12-08 | 北京飞天诚信科技有限公司 | 一种摘要引擎的实现方法 |
US8041560B2 (en) * | 1998-03-25 | 2011-10-18 | International Business Machines Corporation | System for adaptive multi-cultural searching and matching of personal names |
US8301593B2 (en) * | 2008-06-12 | 2012-10-30 | Gravic, Inc. | Mixed mode synchronous and asynchronous replication system |
CN104598212A (zh) * | 2013-10-30 | 2015-05-06 | 上海联影医疗科技有限公司 | 基于算法库的图像处理方法及装置 |
CN106557510A (zh) * | 2015-09-29 | 2017-04-05 | 镇江雅迅软件有限责任公司 | 一种地理信息服务发布系统的实现方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100574187C (zh) * | 2006-06-26 | 2009-12-23 | 北京启明星辰信息技术股份有限公司 | 一种自适应多模式匹配方法及系统 |
CN102446167B (zh) * | 2011-08-31 | 2016-03-30 | 中博信息技术研究院有限公司 | 一种基于逻辑模板对复杂字符串逻辑处理的方法和装置 |
US20150026658A1 (en) * | 2013-07-18 | 2015-01-22 | Appsense Limited | Systems, Methods and Media for Dynamic Creation and Update of Activation Context for Component Object Model |
CN103593194B (zh) * | 2013-11-21 | 2017-12-22 | 北京国双科技有限公司 | 对象序列化方法和装置 |
CN106295808B (zh) * | 2016-07-13 | 2018-12-11 | 北京航空航天大学 | 飞机嵌入式实时诊断推理算法试验方法 |
-
2018
- 2018-09-12 CN CN201811063031.6A patent/CN109189380B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8041560B2 (en) * | 1998-03-25 | 2011-10-18 | International Business Machines Corporation | System for adaptive multi-cultural searching and matching of personal names |
US8301593B2 (en) * | 2008-06-12 | 2012-10-30 | Gravic, Inc. | Mixed mode synchronous and asynchronous replication system |
CN101908963A (zh) * | 2010-08-09 | 2010-12-08 | 北京飞天诚信科技有限公司 | 一种摘要引擎的实现方法 |
CN104598212A (zh) * | 2013-10-30 | 2015-05-06 | 上海联影医疗科技有限公司 | 基于算法库的图像处理方法及装置 |
CN106557510A (zh) * | 2015-09-29 | 2017-04-05 | 镇江雅迅软件有限责任公司 | 一种地理信息服务发布系统的实现方法 |
Non-Patent Citations (3)
Title |
---|
"插件式地球物理软件开发平台(GeoProbe)设计、实现与应用";王林飞;《中国博士学位论文全文数据库信息科技集》;20140415;第I138-28页 第13-14、38、92、103页 * |
A Lightweight Communication Runtime for Distributed Graph Analytics;Hoang-Vu Dang等;《2018 IEEE International Parallel and Distributed Processing Symposium》;20180806;第980-989页 * |
电力系统计算软件包中类层次的设计与实现;黄家栋;《计算机工程与应用》;20030811;第207-209页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109189380A (zh) | 2019-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109189380B (zh) | 算法集成框架系统及方法 | |
CN110442396B (zh) | 应用程序启动方法及装置、存储介质及电子设备 | |
CN108304201B (zh) | 对象更新方法、装置及设备 | |
CN111241454B (zh) | 一种生成网页代码的方法、系统和装置 | |
CN106775632B (zh) | 一种业务流程可灵活扩展的高性能地理信息处理方法及系统 | |
CN111258744A (zh) | 一种基于异构计算的任务处理方法及软硬件框架系统 | |
KR101694305B1 (ko) | Arinc 653 규격에 따른 항공 시스템 설정 방법 및 장치 | |
CN107592238A (zh) | 接口的自动测试方法及系统、服务终端、存储器 | |
US9063779B2 (en) | Task list generation, parallelism templates, and memory management for multi-core systems | |
CN111124379B (zh) | 页面生成方法、装置、电子设备及存储介质 | |
CN112764902B (zh) | 任务调度方法及系统 | |
CN109634764A (zh) | 工作流控制方法、装置、设备、存储介质和系统 | |
CN112363913B (zh) | 一种并行测试任务调度寻优的方法、装置和计算设备 | |
CN104217270A (zh) | 业务流程应用文件生成和执行方法、客户端、设备及系统 | |
US7885906B2 (en) | Problem solving system and method | |
CN112667221A (zh) | 基于深度学习开发ide的深度学习模型构建方法及系统 | |
JP2008112311A (ja) | ビジネスプロセス実行方法、ビジネスプロセス実行システムおよびプログラム | |
CN104063231A (zh) | 一种基于hit-tena的试验资源快速接入方法 | |
US20170131980A1 (en) | Model driven architecture for network management and configuration | |
CN112463340A (zh) | 基于tensorflow的多任务弹性调度方法及系统 | |
US8276165B2 (en) | Continuation-based runtime callback invocation | |
Moore | Communicating requirements using end-user GUI constructions with argumentation | |
CN114637499B (zh) | 可视化组件处理方法、装置、设备及介质 | |
CN115983047A (zh) | 一种适用于多图形接口的跨平台的仿真系统 | |
KR102555258B1 (ko) | 사용자 인식방법, 장치, 저장매체 및 전자기기 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |