发明内容
本发明要解决的技术问题是进行算法数据处理时如何实现不同数据流交叉并行处理时的同步。
为了解决上述问题,本发明提供了一种算法数据处理的同步方法,包括:
S101、同步分转控制模块对未判断过的作业包逐个进行下述操作:判断该作业包包头中的算法状态索引号是否已处于同步正在处理队列中;如果是则将该作业包的算法状态索引号作为一个条目保存到同步阻塞队列中;如果不是则将该作业包的算法状态索引号作为一个条目保存到同步正在处理队列中,根据该作业包的地址获取该作业包后进行步骤S102;
S102、算法处理模块根据所获取的作业包包头中的算法标识,采用相应的算法对该作业包进行处理,处理完成后进行步骤S103;
S103、阻塞查询模块在所述同步阻塞队列中查询处理完成的作业包的算法状态索引号,如果查询不到,则从所述同步正在处理队列中删除该算法状态索引号;如果能查询到一个条目,则以该条目作为查询到的条目;如果能查询到多个条目,则将在数据流中位置最前的作业包对应的条目作为查询到的条目;获取所查询到的条目对应的地址,并从所述同步阻塞队列中删除该查询到的条目,根据所获取的地址获取作业包后进行步骤S102。
可选地,所述输入作业包缓冲区为一个或多个;所述同步分转控制模块为一个或多个;所述阻塞查询模块为一个或多个;所述同步正在处理队列为一个或多个;所述同步阻塞队列为一个或多个。
可选地,所述步骤S101还包括:
当作业包的算法状态索引号已处于同步正在处理队列中时将该作业包移动到同步待处理作业包缓冲区,将该作业包的地址更新为在同步待处理作业包缓冲区中的地址;
所述同步待处理作业包缓冲区为一个或多个。
可选地,所述步骤S102后还包括:
将处理完成的作业包的算法状态索引号保存到同步已处理队列;
步骤S103中,所述阻塞查询模块在所述同步阻塞队列中查询处理完成的作业包的算法状态索引号的步骤包括:
所述阻塞查询模块从所述同步已处理队列中提取作业包的算法状态索引号,并查询此算法状态索引号是否存在于所述同步阻塞队列中;
所述同步已处理队列为一个或多个。
可选地,所述步骤S101中,所述同步分转控制模块从输入作业包缓冲区获取所述未判断过的作业包;所述算法处理模块包括算法分转子模块、算法预处理子模块、算法运算子模块和算法反馈子模块;
所述步骤S102包括:
所述算法分转子模块根据所获取的作业包包头中的算法标识,按照预定策略将作业包分配到相应的算法预处理队列中;
所述算法预处理子模块依次对所述算法预处理队列中的各作业包进行以下处理:根据作业包的算法状态索引号,从算法状态存储区中获取该作业包的算法状态索引号对应地址上的中间状态数据,并根据作业包包头中的所属算法标识和算法核号,生成处理命令作业包和处理数据作业包送到相应的算法运算子模块进行处理;
所述算法反馈子模块将算法运算子模块处理完成的作业包返回给相应的算法应用进程,将处理完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据保存在所述算法状态存储区中所述处理完成的作业包的算法状态索引号对应的地址。
可选地,所述步骤S101前还包括:
算法分转模块从输入作业包缓冲区读取作业包,根据预定策略放入相应的算法预处理队列;
所述步骤S101中,所述同步分转控制模块从所述算法预处理队列中获取所述未判断过的作业包;
所述算法处理模块包括算法预处理子模块、算法运算子模块和算法反馈子模块;
所述步骤S102包括:
所述算法预处理子模块根据所获取的作业包的算法状态索引号,从算法状态存储区中获取该作业包的算法状态索引号对应地址上的中间状态数据,并根据作业包包头中的所属算法标识和算法核号,生成处理命令作业包和处理数据作业包送到相应的算法运算子模块进行处理;
所述算法反馈子模块将算法运算子模块处理完成的作业包返回给相应的算法应用进程,将处理完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据保存在所述算法状态存储区中所述处理完成的作业包的算法状态索引号对应的地址。
本发明还提供了一种算法数据处理的同步装置,包括:
同步分转控制模块,算法处理模块和阻塞查询模块;
所述同步分转控制模块用于对未判断过的作业包逐个进行下述操作:判断该作业包包头中的算法状态索引号是否已处于同步正在处理队列中;如果是则将该作业包的算法状态索引号作为一个条目保存到同步阻塞队列中;如果不是则将该作业包的算法状态索引号作为一个条目保存到同步正在处理队列中,根据该作业包的地址获取该作业包后启动所述算法处理模块进行处理;
所述算法处理模块用于根据所获取的作业包包头中的算法标识,采用相应的算法对该作业包进行处理,处理完成后启动阻塞查询模块;
所述阻塞查询模块在所述同步阻塞队列中查询处理完成的作业包的算法状态索引号,如果查询不到,则从所述同步正在处理队列中删除该算法状态索引号;如果能查询到一个条目,则以该条目作为查询到的条目;如果能查询到多个条目,则将在数据流中位置最前的作业包对应的条目作为查询到的条目;获取所查询到的条目对应的地址,并从所述同步阻塞队列中删除该查询到的条目,根据所获取的作业包的地址获取作业包后启动所述算法处理模块进行处理。
可选地,所述输入作业包缓冲区为一个或多个;所述同步分转控制模块为一个或多个;所述阻塞查询模块为一个或多个;所述同步正在处理队列为一个或多个;所述同步阻塞队列为一个或多个。
可选地,所述同步分转控制模块还用于当作业包的算法状态索引号已处于同步正在处理队列中时将该作业包移动到同步待处理作业包缓冲区,将该作业包的地址更新为在同步待处理作业包缓冲区中的地址;
所述同步待处理作业包缓冲区为一个或多个。
可选地,所述算法处理模块还用于将处理完成的作业包的算法状态索引号保存到同步已处理队列;
所述阻塞查询模块在所述同步阻塞队列中查询处理完成的作业包的算法状态索引号是指:
所述阻塞查询模块从所述同步已处理队列中提取作业包的算法状态索引号,并查询此算法状态索引号是否存在于所述同步阻塞队列中;
所述同步已处理队列为一个或多个。
可选地,所述同步分转控制模块从输入作业包缓冲区获取所述未判断过的作业包;所述算法处理模块包括算法分转子模块、算法预处理子模块、算法运算子模块和算法反馈子模块;
所述算法分转子模块用于根据所获取的作业包包头中的算法标识,根据预定策略将作业包分配到相应的算法预处理队列中;
所述算法预处理子模块用于依次对所述算法预处理队列中的各作业包进行以下处理:根据作业包的算法状态索引号,从算法状态存储区中获取该作业包的算法状态索引号对应地址上的中间状态数据,并根据作业包包头中的所属算法标识和算法核号,生成处理命令作业包和处理数据作业包送到相应的算法运算子模块进行处理;
所述算法反馈子模块用于将算法运算子模块处理完成的作业包返回给相应的算法应用进程,将处理完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据保存在所述算法状态存储区中所述处理完成的作业包的算法状态索引号对应的地址。
可选地,所述的装置还包括:
算法分转模块,用于从输入作业包缓冲区读取作业包,根据预定策略放入相应的算法预处理队列;
所述同步分转控制模块从所述算法预处理队列中获取所述未判断过的作业包;
所述算法处理模块包括算法预处理子模块、算法运算子模块和算法反馈子模块;
所述算法预处理子模块用于根据所获取的作业包的算法状态索引号,从算法状态存储区中获取该作业包的算法状态索引号对应地址上的中间状态数据,并根据作业包包头中的所属算法标识和算法核号,生成处理命令作业包和处理数据作业包送到相应的算法运算子模块进行处理;
所述算法反馈子模块将算法运算子模块处理完成的作业包返回给相应的算法应用进程,将处理完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据保存在所述算法状态存储区中所述处理完成的作业包的算法状态索引号对应的地址。
本发明针对高并发多数据流交叉操作的算法数据处理,如海量数据存储、电子支付、网上银行、股票交易、网络购票等应用环境,实现高并发多数据流随机交叉数据处理的多算法状态同步。
实施例一,一种算法数据处理的同步方法,包括:
S101、同步分转控制模块对未判断过的作业包逐个进行下述操作:判断该作业包包头中的算法状态索引号是否已处于同步正在处理队列中;如果是则将该作业包的算法状态索引号作为一个条目保存到同步阻塞队列中;如果不是则将该作业包的算法状态索引号作为一个条目保存到同步正在处理队列中,根据该作业包的地址获取该作业包后进行步骤S102;
S102、算法处理模块根据所获取的作业包包头中的算法标识,采用相应的算法对该作业包进行处理,处理完成后进行步骤S103;
S103、阻塞查询模块在所述同步阻塞队列中查询处理完成的作业包的算法状态索引号,如果查询不到,则从所述同步正在处理队列中删除该算法状态索引号;如果能查询到一个条目,则以该条目作为查询到的条目;如果能查询到多个条目,则将在数据流中位置最前的作业包对应的条目作为查询到的条目;获取所查询到的条目对应的地址,并从所述同步阻塞队列中删除该查询到的条目,根据所获取的地址获取作业包后进行步骤S102。
本实施例中所述步骤S101/S103中获取作业包有两种方式,一种是指算法处理模块主动根据作业包的地址读取作业包的数据;另一种是指由同步分转控制模块/阻塞查询模块(不排除还有其他模块或程序)将待处理作业包的数据从原先存放的地址取出并直接发送给空闲的算法处理模块,或送入一个缓冲区中,再由算法处理模块从该缓冲区中读取作业包,此缓冲区可以为一般的存储区,也可以是FIFO等不同形式。所述算法处理模块读取作业包后,可以从所述地址上或所述缓冲区中删除该作业包。
本实施例中,对所述作业包进行运算的算法可以包含多个不同的算法,每个算法可以有多个实现单元。各执行中的业务等待算法运算的数据(即各算法应用进程中待处理的数据)以作业包的方式流入,首先存放在所述输入作业包缓冲区中。同一个业务的作业包的算法状态索引号相同(因此算法状态索引号与一个业务的数据流也是对应的);因此通过本实施例的方法,同一个业务的后序作业包将等待此业务前序作业包运算完成才能开始运算。不同算法处理的作业包间相互独立,以流水线方式送入。运算完成后再以流水线方式返回,返回作业包的顺序与进入的作业包顺序可以不一致,即作业包流入或流出的次序不要求串行,而是根据算法处理的快慢任意流出,较后进入的作业包可以在较前进入的数据包之前流出。
本实施例中,只要存在未判断过的作业包,步骤S101将持续不断的反复进行;也就是说,每送入一个新的作业包,步骤S101就会被触发一次;在步骤S101中,每当发现一个作业包包头中的算法状态索引号不在同步正在处理队列中时,就会触发一次针对该作业包的步骤S102;步骤S102完成后,会触发针对该作业包的步骤S103。S101和S102、S103是可以并行执行的;针对同一个作业包的步骤S102、S103是先后执行的;当存在多个算法处理模块及阻塞查询模块时,不同作业包之间S102\S103是可以并行执行的。
本实施例中,所述步骤S101中,还可以将所述作业包的地址和所述算法状态索引号作为一个条目保存到所述同步阻塞队列中,这样在步骤S103中,就可以直接从所述同步阻塞队列中获取所查询到的条目对应的作业包的地址。如果步骤S101中未将地址保存进所述同步阻塞队列,则由各条目与地址间的映射关系间接获得该作业包的地址。步骤S103中,当根据一个算法状态索引号查询到多个条目时,可以根据各条目对应的作业包的序号,确定在数据流中位置最前的作业包对应的条目。
本实施例中,所述输入作业包缓冲区可以为FIFO,也可以为RAM,可以为一个,也可以为多个。当有多个输入作业包缓冲区时,可以采用依次轮询n个输入作业包缓冲区的方式送入待处理的作业包;也可以采用先送入第1个输入作业包缓冲区,待第1个作业包缓冲区满之后,再送入第2个输入作业包缓冲区的方式;也可以依据预定策略,根据算法和待处理数据量,确定待处理作业包对应的输入作业包缓冲区。
同步分转控制模块可以为一个,也可以为多个;所述阻塞查询模块可以为一个,也可以为多个;所述同步正在处理队列如图1所示,用于记录正在进行算法处理的作业包的算法状态索引号,可为先进先出队列,或为一般存储区;可以为一个,也可以为多个;所述同步阻塞队列如图2所示,用于记录处于阻塞状态的作业包(即该作业包的前序作业包正在进行算法处理)的算法状态索引号,还可以记录作业包地址,可为先进先出队列,或为一般存储区;可以为一个,也可以为多个。
所述同步分转控制模块、阻塞查询模块、同步阻塞队列、同步正在处理队列可以和算法一一对应,也可以不一一对应;可以和算法核(算法的实现单元)一一对应,也可以不一一对应;其对应关系可以是任意组合。
当所述输入作业包缓冲区、同步待处理作业包缓冲区、同步正在处理队列、同步阻塞队列和所述同步分转控制模块都有多个时,每个同步分转控制模块所对应的输入作业包缓冲区可以全都不相同,也可以全都相同,还可以部分相同;每个同步分转控制模块所对应的同步待处理作业包缓冲区可以全都不相同,也可以全都相同,还可以部分相同;每个同步分转控制模块所对应的同步正在处理队列可以全都不相同,也可以全都相同,还可以部分相同;每个同步分转控制模块所对应的同步阻塞队列可以全都不相同,也可以全都相同,还可以部分相同。
当所述同步正在处理队列、同步阻塞队列和所述阻塞查询模块都有多个时,每个阻塞查询模块所对应的同步正在处理队列可以全都不相同,也可以全都相同,还可以部分相同;每个阻塞查询模块所对应的同步阻塞队列可以全都不相同,也可以全都相同,还可以部分相同。
本实施例的一种实施方式中,所述作业包包头可以但不限于包括算法核号、算法状态索引号和作业包序号。算法状态索引号中的算法标识对应数据流不同的密码算法以及不同的操作:加密、解密、签名、验签等;由于每种算法可有多个IP核实现,算法核号标明具体的某一个算法IP核,同一数据流业务的多个作业包可以采用同一算法的同一个或不同IP核实现;算法状态索引号与数据流对应,用于对算法状态存储区的寻址,查找算法状态存储区中存放的中间状态数据;为保证作业包在流水线上乱序传输时的正确性,为作业包定义作业包序号字段,以便于同一算法应用进程的数据流中不同作业包的重组,支持数据出入次序可以不一致。
算法核号、算法状态索引号和作业包序号可以采用统一编码,或者采用分别独立编码,或者任意组合编码。作为本实施方式的一种备选方案,算法核号、算法状态索引号和作业包序号采用分别独立编码。根据所实现的算法种类和操作类型的总数对算法标识进行统一编码,例如若有n种算法,每种算法所能实现的操作类型的个数分别为L1、L2……、Ln,若2m-1<L1+L2+…+Ln≤2m,则需要采用m位的二进制数来对算法标识进行编码;假设每种算法最多有b个IP核,若2b′-1<b≤2b′,则需要采用b′位的二进制数来对算法核号进行编码;算法状态索引号采用固定长度,其长度与算法状态存储区的容量和状态存储区的个数有关;作业包序号的编码位数决定了最大能够处理的业务数据流的长度。
本实施例中,所述同步分转控制模块将作业包的算法状态索引号存入同步阻塞队列后,该作业包将处于阻塞状态。
也就是说,当作业包需要被阻塞时有两种处理方式:
一种处理方式是:将该作业包保留在原存储位置;该处理方式下,一次处理流程可以如图3所示,包括步骤301~307。
301、同步分转控制模块从输入作业包缓冲区提取未判断过的作业包。
302、同步分转控制模块判断该作业包包头中的算法状态索引号是否已存在于同步正在处理队列中。
303、该步骤有两个分支:
如果已存在,则将该作业包的算法状态索引号保存到同步阻塞队列中;
如果不存在则将该作业包的算法状态索引号保存到同步正在处理队列中,算法处理模块从输入作业包缓冲区获取该作业包,根据该作业包包头中的算法标识,采用相应的算法对该作业包进行处理。
304、将处理完成的作业包的算法状态索引号保存进同步已处理队列。
305、阻塞查询模块从同步已处理队列中获取算法状态索引号。
306、阻塞查询模块在所述同步阻塞队列中查询是否存在所获取的算法状态索引号。
307、该步骤有两个分支:
如果查询不到,则从所述同步正在处理队列中删除该算法状态索引号;
如果能查询到(查询到多个条目时的情况参见前文),则从所述同步阻塞队列中获取所查询到的条目对应的作业包的地址,并从所述同步阻塞队列中删除该条目。算法处理模块根据所述地址从输入作业包缓冲区获取该作业包,根据该作业包包头中的算法标识,采用相应的算法对该作业包进行处理。
图3只是本处理方式的一个范例,本实施例的实现细节并不局限于图3的方案。
另一种处理方式是:根据作业包地址将完整作业包数据取出存入同步待处理作业包缓冲区,将作业包从原存储位置删除,同时将该作业包的地址更新为在同步待处理作业包缓冲区中的地址;该处理方式下,一次处理流程可以如图4所示,包括步骤401~407。
401~407基本和301~307相同;区别在于:
步骤403中,如果已存在,还将该作业包移动到同步待处理作业包缓冲区中,并更新作业包的地址。
步骤407中,算法处理模块是从同步待处理作业包缓冲区中获取该作业包。
图4只是本处理方式的一个范例,本实施例的实现细节并不局限于图4的方案。
不管哪种方式,均可以将阻塞作业包在原存储位置或同步待处理作业包缓冲区中的地址连同算法状态索引号作为一个条目,存入所述同步阻塞队列。对存放有阻塞状态的作业包的输入作业包缓冲区或同步待处理作业包缓冲区的存储单元,其上处于阻塞状态的作业包在被激活,送入算法处理模块之前,采用禁止写信号的方法对此存储单元进行写保护,防止其上的阻塞作业包被破环。
本实施例的一种实施方式中,存在同步待处理作业包缓冲区,所述同步待处理作业包缓冲区用于存储处于阻塞状态,等待前序作业包运算完成的作业包;所述同步待处理作业包缓冲区可以为一个,也可以为多个;可以和算法一一对应,也可以不一一对应;可以和算法核一一对应,也可以不一一对应;其对应关系可以是任意组合。
本实施方式中,所述步骤S101中还可以包括:当作业包的算法状态索引号已处于同步正在处理队列中时将该作业包移动到同步待处理作业包缓冲区,将该作业包的地址更新为在同步待处理作业包缓冲区中的地址。
作为一种实现方式,输入作业包缓冲区和同步待处理作业包缓冲区可以采用环形存储区实现,假设每一个存储单元可以存储1个作业包,则包含n个存储单元的输入作业包缓冲区和同步待处理作业包缓冲区在写入地址从0依次递增到n-1后,下一次流入的作业包将进入地址为0的存储单元。
本实施例的一种实施方式中,所述步骤S102后还可以包括:
将处理完成的作业包的算法状态索引号保存到同步已处理队列;
步骤S103中,所述阻塞查询模块在所述同步阻塞队列中查询处理完成的作业包的算法状态索引号的步骤具体可以包括:
所述阻塞查询模块从所述同步已处理队列中提取作业包的算法状态索引号,并查询此算法状态索引号是否存在于所述同步阻塞队列中。
本实施方式中,所述同步已处理队列如图5所示,用于记录已完成算法处理的作业包的算法状态索引号,可为先进先出队列,或为一般存储区;可以有一个或多个,可以和算法一一对应,也可以不一一对应;可以和算法核一一对应,也可以不一一对应;其对应关系可以是任意组合。当所述同步已处理队列和所述阻塞查询模块都有多个时,每个阻塞查询模块所对应的同步已处理队列可以全都不相同,也可以全都相同,还可以部分相同。
本实施方式的一种备选方案中,同步正在处理队列、同步阻塞队列、同步已处理队列和同步待处理作业包缓冲区的个数与算法处理模块的个数相同,与算法处理模块一一对应。且同步正在处理队列、同步阻塞队列、同步已处理队列均为先入先出队列。
本实施例的一种实施方式中,所述算法状态索引号如图6所示,具体可以包括:
寻址方式、算法状态存储区位置编号、基地址编号、算法标识。
所述寻址方式可以是绝对寻址或相对寻址;比如0表示绝对寻址,1表示相对寻址,本实施例中采用绝对寻址;
所述算法状态存储区位置编号用于区别不同的算法状态存储区,算法状态存储区可以为1个,也可以为多个,可以与算法核一一对应,也可以不一一对应;
所述基地址编号对应算法状态数据的首地址,该地址可以为相对地址,也可以为绝对地址;
所述算法标识用于唯一区分具体算法,并可确定当前作业包需要寻址的算法状态存储区的数据长度。
本实施例的一种实施方式中,所述步骤S101中,所述同步分转控制模块从输入作业包缓冲区获取所述未判断过的作业包;所述算法处理模块具体可以包括算法分转子模块、算法预处理子模块、算法运算子模块和算法反馈子模块;
所述步骤S102具体可以包括:
所述算法分转子模块获取该作业包,根据作业包包头中的算法标识,按照预定策略将作业包分配到相应的算法预处理队列中;
所述算法预处理子模块依次对所述算法预处理队列中的各作业包进行以下处理:根据作业包的算法状态索引号,从算法状态存储区中获取该作业包的算法状态索引号对应地址上的中间状态数据(即该作业包的前序作业包运算得到的中间状态数据,比如运算结果以及轮密钥等),并根据作业包包头中的所述算法标识和算法核号,生成处理命令作业包和处理数据作业包送到相应的算法运算子模块进行处理;
算法反馈子模块将算法运算子模块处理完成的作业包返回给相应的算法应用进程,将处理完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据保存在所述算法状态存储区中所述处理完成的作业包的算法状态索引号对应的地址。
本实施方式中,所述算法状态存储区用于存储作业包运算产生的中间状态数据,比如作业包的运算结果以及密钥等,作为不同业务运算中间状态的暂存资源。算法状态存储区的写入与否取决于算法标识,算法反馈模块根据算法标识,以算法状态索引号作为算法状态存储器的寻址基地址,将密钥、运算结果/初始向量等写入算法状态存储器。
本实施方式中,所述同步分转控制模块从输入作业包缓冲区中提取作业包的算法状态索引号(及地址)时可以但不限于采用先入先提取的方法。即若前次提取的算法状态索引号为第i个存储单元的作业包的,则下一次提取第i+1个存储单元的作业包的算法状态索引号(及地址)。
本实施方式中,采用1个算法状态存储区,可以用DDR实现。
下面用几个具体的例子进一步说明本实施方式。
第一个例子为本实施例同步方法的具体执行流程,如图7所示,包括:
701、同步分转控制模块从输入作业包缓冲区中提取一个未判断过的作业包的算法状态索引号;还可以提取该作业包的地址;
702、判断算法状态索引号是否存在于同步正在处理队列中;当算法状态索引号存在于同步正在处理队列时进行步骤703;不存在时进行705;
703、将该作业包的算法状态索引号和作业包地址作为一个条目存入同步阻塞队列,作业包处于阻塞状态;
704、将此阻塞作业包送入同步待处理作业包缓冲区;返回步骤701。在其它例子中,本步骤可以不进行,可以不使用同步待处理作业包缓冲区。
705、将该作业包的算法状态索引号存入同步正在处理队列,获取此作业包数据;
706、根据作业包包头中的算法标识和算法核号将作业包分给相应的算法预处理子模块;
707、算法预处理子模块根据算法状态索引号,从算法状态存储区中获取该作业包的前序作业包产生的中间状态数据,并根据算法标识,生成处理命令作业包和处理数据作业包送算法运算子模块进行处理;
708、处理后的作业包在返回相应的算法应用进程的同时,将运算完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据送算法状态存储区,存储在算法状态索引号对应的地址中。
709、阻塞查询模块从同步已处理队列中提取作业包的算法状态索引号;
710、查询此算法状态索引号是否存在于同步阻塞队列中;如不存在则进行步骤711;存在(多条目时的情况参见上文)则进行步骤712;
711、直接将同步正在处理队列中该算法状态索引号删除,返回701;
712、删除同步阻塞队列中所查询到的条目;
713、根据同步阻塞队列中所查询到的条目中作业包地址,定位到同步待处理作业包缓冲区中作业包的位置,将完整的作业包数据取出并存入算法分转子模块,返回步骤706。
图8所示为该例子中数据流间的关系图。其中,作业包ij表示数据流i的第j个作业包;si表示数据流i的作业包的算法状态索引号。假设输入作业包缓冲区中的作业包1i无正在进行算法预处理或处理的前序作业包,则将此作业包1i送入算法分转子模块的同时,其算法状态索引号s1送入同步正在处理队列,如图中801所示;其后的作业包1i+1、作业包1i+2、作业包1i+3只能处于阻塞状态,可以保留在输入作业包缓冲区中,也可以存入同步待处理作业包缓冲区中,其算法状态索引号和其在输入作业包缓冲区或同步待处理作业包缓冲区中的地址信息送入同步阻塞队列,可以从低地址开始保存,但不限于此方式,如图中802所示;输入作业包缓冲区中的作业包2j、作业包3k、作业包4m由于无前序作业包在进行算法预处理或处理,其算法状态索引号s2、s3、s4加入同步正在处理队列中。若此时,作业包1i已处理完成,其算法状态索引号s1加入到同步已处理队列中,如图中803、804所示;如果阻塞查询模块采用自低地址开始查询的方式在同步阻塞队列中查询到算法状态索引号s1,如图中805所示,则根据同步阻塞队列此条目对应的地址找到作业包1i+1送入算法分转子模块,同时删除同步阻塞队列中的此条目。如果没查询到,则从同步正在处理队列中删除该算法状态索引号,如图中806所示被激活的作业包的算法状态索引号写入同步正在处理队列时,来自输入作业包缓冲区的作业包算法状态索引号的写入处于阻塞状态,必须等到被激活作业包1i+1的算法状态索引号s1写入完成后,作业包5n的算法状态索引号s5才能够写入到同步正在处理队列中,如图中807所示,。
第二个例子如图9所示,虚线框中为算法处理模块。
包括一个同步分转控制模块和一个阻塞查询模块,输入作业包缓冲区为n个,同步正在处理队列为m个,同步阻塞队列为p个,同步待处理作业包缓冲区为q个,同步已处理队列为k个。
一个同步分转模块依次轮询n个输入作业包缓冲区,当输入作业包缓冲区中有数据时,则从输入作业包缓冲区中提取作业包的算法状态索引号,并依次查询各个同步正在处理队列,若此算法状态索引号存在于某个同步正在处理队列中,则此作业包保留在输入作业包缓冲区中或将其按照预定策略存入某个同步待处理作业包缓冲区中,算法状态索引号和此作业包在输入作业包缓冲区或同步待处理作业包缓冲区中的地址按照预定策略存入某个同步阻塞队列中;否则,将此算法状态索引号按照预定策略存入某个同步正在处理队列中,同时作业包送相应的算法分转子模块进行处理。
所述预定策略可以但不限于为同步待处理作业包缓冲区、同步正在处理队列和同步阻塞队列的均衡策略。
一个阻塞查询模块按照依次轮询和先入先查询的方法,从同步已处理队列中提取作业包的算法状态索引号,并遍历各同步阻塞队列,一旦找到相同的算法状态索引号所在的一个条目,则按照同步阻塞队列此条目中的地址定位到输入作业包缓冲区或同步待处理作业包缓冲区,提取此地址的作业包送相应的算法分转子模块进行处理,删除同步阻塞队列中该条目;否则直接删除同步正在处理队列中此算法状态索引号条目。
第三个例子如图10所示。
包括多个同步分转控制模块1~a和多个阻塞查询模块1~b。输入作业包缓冲区为a个,同步正在处理队列为c个,同步阻塞队列为d个,同步待处理作业包缓冲区为a个,同步已处理队列为k个。
多个同步分转控制模块1~a与输入作业包缓冲区1~a、同步待处理作业包缓冲区1~a一一对应,也可以不一一对应;其中输入作业包缓冲区1包括输入作业包缓冲区空间11~1n,……,输入作业包缓冲区a包括输入作业包缓冲区空间a1~am。
各同步分转模块依次轮询对应组的输入作业包缓冲区空间,当输入作业包缓冲区空间中有数据时,则从输入作业包缓冲区空间中提取作业包的算法状态索引号,并依次查询各个同步正在处理队列,若此算法状态索引号存在于某个同步正在处理队列中,则此作业包保留在输入作业包缓冲区中或将其存入相应的同步待处理作业包缓冲区中,算法状态索引号和此作业包在输入作业包缓冲区或同步待处理作业包缓冲区中的地址按照预定策略存入某个同步阻塞队列中;否则,将此算法状态索引号按照预定策略存入某个同步正在处理队列中,同时作业包送相应的算法分转子模块进行处理。
所述预定策略可以但不限于为同步待处理作业包缓冲区、同步正在处理队列和同步阻塞队列的均衡策略。
多个阻塞查询模块相互独立工作,按照依次轮询和先入先查询的方法,从同步已处理队列中提取作业包的算法状态索引号,并遍历各同步阻塞队列,一旦找到相同的算法状态索引号所在的一个条目,则按照同步阻塞队列此条目中的地址定位到输入作业包缓冲区或同步待处理作业包缓冲区,提取此地址的作业包送相应的算法分转子模块进行处理,删除同步阻塞队列中该条目;否则直接删除同步正在处理队列中此算法状态索引号条目。同步已处理队列为先入先出队列,可避免不同的阻塞查询模块提取到同一个作业包的算法状态索引号。
第四个例子如图11所示。
包括多个同步分转控制模块1~a和多个阻塞查询模块1~a。输入作业包缓冲区为a个,同步正在处理队列为c个,同步阻塞队列为d个,同步待处理作业包缓冲区为a个,同步已处理队列为k个。
多个同步分转控制模块1~a与输入作业包缓冲区1~a、同步待处理作业包缓冲区1~a一一对应,也可以不一一对应;其中输入作业包缓冲区1包括输入作业包缓冲区空间11~1n,……,输入作业包缓冲区a包括输入作业包缓冲区空间a1~am。同步正在处理队列1~c,分为了a组,分别与同步分转控制模块1~a和阻塞查询模块1~a一一对应,也可以不一一对应;同步阻塞队列1~d,也分为a组,分别与同步分转控制模块1~a一一对应,也可以不一一对应。
在此例子中,输入作业包缓冲区、同步待处理作业包缓冲区、同步分转控制模块、阻塞查询模块也可以不同时为a个,其上述对应关系也可以不一一对应。
各同步分转控制模块依次轮询对应组的输入作业包缓冲区空间,当输入作业包缓冲区空间中有数据时,则从输入作业包缓冲区空间中提取作业包的算法状态索引号,并依次查询对应组的同步正在处理队列,若此算法状态索引号存在于某个同步正在处理队列中,则此作业包保留在输入作业包缓冲区中或将其存入相应的同步待处理作业包缓冲区中,算法状态索引号和此作业包在输入作业包缓冲区或同步待处理作业包缓冲区中的地址按照预定策略存入对应组中某个同步阻塞队列中;否则,将此算法状态索引号按照预定策略存入对应组中某个同步正在处理队列中,同时作业包送相应的算法分转子模块进行处理。
所述预定策略可以但不限于为同步待处理作业包缓冲区、同步正在处理队列和同步阻塞队列的均衡策略。
同步已处理队列1~k,分为了a组,分别与阻塞查询模块1~a一一对应。
各阻塞查询模块按照依次轮询和先入先查询的方法,从对应组的同步已处理队列中提取作业包的算法状态索引号,并遍历所有的同步阻塞队列,一旦找到相同的算法状态索引号所在的一个条目,则按照同步阻塞队列此条目中的地址定位到输入作业包缓冲区或同步待处理作业包缓冲区,提取此地址的作业包送相应的算法分转子模块进行处理,删除同步阻塞队列中该条目;否则直接删除同步正在处理队列中此算法状态索引号条目。
本例子的一种变形方案中,同步分转控制模块、输入作业包缓冲区和同步待处理作业包缓冲区的个数可以互不相同。也就是说,多个同步分转控制模块与多个输入作业包缓冲区和多个同步待处理作业包缓冲区间可以不一一对应,而是按照某种映射关系进行对应。
本实施例的另一种实施方式中,步骤S101前还可以包括:算法分转模块从输入作业包缓冲区读取作业包,根据各作业包包头中的算法标识,分别将各作业包放入相应的算法预处理队列;
所述步骤S101中,所述同步分转控制模块从所述算法预处理队列中获取所述未判断过的作业包;
本实施方式中,所述算法处理模块包括算法预处理子模块、算法运算子模块和算法反馈子模块;
所述步骤S102具体可以包括:
所述算法预处理子模块获取该作业包,根据该作业包的算法状态索引号,从算法状态存储区中获取该作业包的算法状态索引号对应地址上的中间状态数据,并根据作业包包头中的所属算法标识和算法核号,生成处理命令作业包和处理数据作业包送到相应的算法运算子模块进行处理;
算法反馈子模块将算法运算子模块处理完成的作业包返回给相应的算法应用进程,将处理完成的作业包的算法状态索引号添加至同步已处理队列中;并将运算产生的中间状态数据保存在所述算法状态存储区中所述处理完成的作业包的算法状态索引号对应的地址。
本实施方式的一个例子如图12所示,包括:
一个算法分转模块、一个同步分转控制模块和一个阻塞查询模块,输入作业包缓冲区为n个,同步正在处理队列为m个,同步阻塞队列为p个,同步待处理作业包缓冲区为q个,同步已处理队列为k个,算法预处理队列为s个。
所述算法分转模块依次轮询n个输入作业包缓冲区,当输入作业包缓冲区中有数据时,则按照预定策略将作业包分入不同的算法预处理队列。
所述同步分转控制模块依次轮询s个算法预处理队列,当算法预处理队列中有数据时,从算法预处理队列中提取作业包的算法状态索引号,并依次查询各个同步正在处理队列,若此算法状态索引号存在于某个同步正在处理队列中,则此作业包保留在算法预处理队列中或将其按照预定策略存入某个同步待处理作业包缓冲区中,并将此作业包的算法状态索引号和此作业包在算法预处理队列或同步待处理作业包缓冲区中的地址按照预定策略存入某个同步阻塞队列中;否则,将此算法状态索引号按照预定策略存入某个同步正在处理队列中,同时作业包送相应的算法预处理子模块进行处理。
所述预定策略可以但不限于为算法预处理队列、同步待处理作业包缓冲区、同步正在处理队列和同步阻塞队列的均衡策略。
所述阻塞查询模块按照先入先查询的方法,从同步已处理队列中提取出一个作业包的算法状态索引号,并遍历各同步阻塞队列,如若找到相同的算法状态索引号,则按照同步阻塞队列中此算法状态索引号所在条目中的地址定位到算法预处理队列或同步待处理作业包缓冲区,提取此地址的作业包送相应的算法预处理子模块进行处理,并删除同步阻塞队列中该条目;否则直接删除同步正在处理队列中此算法状态索引号条目。
本例子的一种变形方案中,可以包括多个算法分转模块、多个同步分转控制模块和多个阻塞查询模块。多个算法分转模块与多个输入作业包缓冲区、多个同步待处理作业包缓冲区分别一一对应。多个同步分转控制模块/阻塞查询模块均同时对应所有的同步正在处理队列、同步阻塞队列;多个阻塞查询模块同时对应所有的同步已处理队列。
本例子的又一种变形方案中,与上一个变形方案的差别在于,同步正在处理队列分为多组,与同步分转控制模块和阻塞查询模块分别一一对应;同步阻塞队列也分为多组,与同步分转控制模块一一对应。
实际应用时的方案不限于以上例子及变形方案,还可以有其他变形方案。