一种基于KNL的测试方法及系统与流程

文档序号:12664916阅读:493来源:国知局
一种基于KNL的测试方法及系统与流程

本发明涉及高性能计算领域,特别涉及一种基于KNL的测试方法及系统。



背景技术:

随着集成电路工艺的发展,以知识产权核复用技术为基础的SOC(System on Chip,系统级芯片)正得到飞速发展。然而随着SOC功能越来越复杂,集成在SOC内部的知识产权核种类和数量越来越多,使得SOC测试时间越来越长,测试成本也越来越高。而测试调度问题是SOC测试中重要的部分,目前已成为SOC系统级测试亟待解决的首要问题。

测试调度问题已严重约束SOC的发展,这一问题已被证明是NP完全问题(Non-deterministic Polynomia,多项式复杂程度的非确定性问题),现有技术中,研究人员大都引进遗传算法和整数线性规划算法进行求解测试时间最小值,然而这些算法在算法复杂度、算法稳定性、求解效率和求解结果上存在一定问题,其原因可以归咎于算法本身的缺点和建模方法的局限;同时,由于硬件设备的限制,例如,计算机,处理性能上也遇到了瓶颈,难以进一步的缩短运算时间。

因此,如何能高效的处理SOC测试调度问题,成为了当前研究的方向。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于KNL的测试方法,提高了测试任务的处理效率。其具体方案如下:

一种基于KNL的测试方法,其特征在于,包括:

主节点获取测试任务集,将所述测试任务集中的测试任务子集分配到KNL从节点集中;

当所述KNL从节点集中的KNL从节点接收到测试任务子集,则将测试任务子集中的测试任务分配到进程集中,利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果;其中,所述进程集中的进程数小于等于测试任务子集中的任务数。

优选的,所述利用蚁群算法对每个进程中的测试任务进行计算的过程,包括:

将所述蚁群算法计算时产生的中间变量存放在MCDRAM内存中,以提高蚁群单次寻找最优路径的时间。

优选的,所述利用蚁群算法对每个进程中的测试任务进行计算的过程,包括:

每个进程运行时开启线程集,利用线程集运行所述蚁群算法对测试任务并行计算。

优选的,所述利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果,包括:

利用多种群蚁群算法对每个进程中的测试任务进行计算,得到测试结果。

优选的,所述利用蚁群算法对每个进程中的测试任务进行计算的过程,包括:

利用循环分块技术,将所述蚁群算法中每个循环的访存地址区块化,以使访存方式为顺序访存。

优选的,每个循环的访存小于等于二级缓存,以加快循环速度。

优选的,所述将测试任务子集分配到KNL从节点中的过程,包括:

检测目标KNL从节点的负载状态;

当所述目标KNL从节点的负载状态超过当前测试任务子集要求的最高负载状态,则将所述当前测试任务子集中的测试任务分配到多个KNL从节点中,以保持多个KNL从节点的负载均衡;

当所述目标KNL从节点的负载状态低于所述当前测试任务子集要求的最高负载状态,则将所述当前测试任务子集分配到所述目标KNL从节点中。

本发明还公开了一种基于KNL的测试系统,包括:

节点任务分配模块,用于主节点获取测试任务集,将所述测试任务集中的测试任务子集分配到KNL从节点集中;

进程任务分配模块,用于当所述KNL从节点集中的KNL从节点接收到测试任务子集,则将测试任务子集中的测试任务分配到进程集中;

任务计算模块,用于利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果;其中,所述进程集中的进程数小于等于测试任务子集中的任务数。

优选的,所述任务计算模块,包括:

变量存放单元,用于将所述蚁群算法计算时产生的中间变量存放在MCDRAM内存中,以提高蚁群单次寻找最优路径的时间。

优选的,所述节点任务分配模块,包括:

检测单元,用于检测目标KNL从节点的负载状态;

再分配单元,用于当所述目标KNL从节点的负载状态超过当前测试任务子集要求的最高负载状态,则将所述当前测试任务子集中的测试任务分配到多个KNL从节点中,以保持多个KNL从节点的负载均衡;

分配单元,用于当所述目标KNL从节点的负载状态低于所述当前测试任务子集要求的最高负载状态,则将所述当前测试任务子集分配到所述目标KNL从节点中。

本发明中,基于KNL的测试方法,包括:主节点获取测试任务集,将测试任务集中的测试任务子集分配到KNL从节点中;当KNL从节点接收到测试任务子集,将测试任务子集中的测试任务分配到进程集中,利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果;其中,进程集中的进程数小于等于测试任务子集中的任务数。可见,本发明主节点获取测试任务集后,将测试任务分成数个测试任务子集,并分配到KNL从节点集中,KNL从节点集中的KNL从节点接收到测试任务子集,生成进程集,将测试任务子集中的测试任务分配到进城集中,并利用蚁群算法对每个进程中的测试任务进行计算,得到计数结果,将测试任务分配到多台KNL服务器上,并行处理测试任务,同时提升了计算负载,每个KNL服务器在计算时生成多个进程进一步的并行处理测试任务,同时利用蚁群算法进行计算,综上所述,本发明提高了测试任务的处理速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种基于KNL的测试方法的流程示意图;

图2为本发明实施例提供的一种基于KNL的测试系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明实施例公开了一种基于KNL的测试方法,参见图1所示,该方法包括:

步骤S11:主节点获取测试任务集,将测试任务集中的测试任务子集分配到KNL从节点集中。

具体的,主节点获取测试任务集后,将测试任务集中的测试任务划分为多个测试任务子集,可以利用KNL从节点数量,划分测试任务子集的数量,例如,一个KNL从节点对应一个测试任务子集。

其中,每个KNL从节点为一个KNL服务器,主节点可以为KNL服务器,也可以为其他的信息处理终端;测试任务可以为SOC测试调度。

步骤S12:当KNL从节点集中的KNL从节点接收到测试任务子集,则将测试任务子集中的测试任务分配到进程集中。

具体的,当KNL从节点接收到测试任务子集后,生成相应的进程集,每个KNL服务器可以生成多个进程,在接收到测试任务子集后,每个测试任务可以对应一个进程,以实现多测试任务的并行处理。

其中,每个进程处理测试任务为串行处理。

步骤S13:利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果;其中,进程集中的进程数小于等于测试任务子集中的任务数。

具体的,每个进程均运行蚁群算法对测试任务进行计算,蚁群算法在计算时生成一个蚁群,蚁群中包括多个蚂蚁个体,每个蚂蚁个体,利用信息素,寻找最优路径。通过多进程可以同时创建多个蚁群,每个蚁群对相应的测试任务进行计算,并最终得到相应的测试结果。

可以理解的是,由于硬件设备的限制,进程数有着上限值,所以任务数可能会大于进程数,当任务数大于进程数时,没能分配相应进程的测试任务,将在KNL从节点中的存储区进行等待,直到有空闲的进程。

可见,本发明实施例主节点获取测试任务集后,将测试任务分成数个测试任务子集,并分配到KNL从节点集中,KNL从节点集中的KNL从节点接收到测试任务子集,生成进程集,将测试任务子集中的测试任务分配到进城集中,并利用蚁群算法对每个进程中的测试任务进行计算,得到计数结果,将测试任务分配到多台KNL服务器上,并行处理测试任务,同时提升了计算负载,每个KNL服务器在计算时生成多个进程进一步的并行处理测试任务,同时利用蚁群算法进行计算,综上所述,本发明提高了测试任务的处理速度。

本发明实施例公开了一种具体的基于KNL的测试方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:

步骤S21:主节点获取测试任务集,将测试任务集中的测试任务子集分配到KNL从节点集中。

在实际应用中,KNL从节点的处理性能是一样的,因此,若一味的将测试任务分配给多个KNL从节点,可能会出现测试任务较少的情况,每个KNL从节点只需运行短暂时间就可以处理完毕,而该任务量可能只需一个KNL从节点就能以相同的时间处理完毕,反而造成资源的浪费,消耗能源;并且,当主节点将测试任务分配到KNL从节点时,若部分KNL从节点处于测试任务数大于等于进程数的情况,则无法对新接收的测试任务进行测试,反而会降低测试效率,因此,需要适当的分配规则,具体包括如下步骤S211至步骤S213:

步骤S211:检测目标KNL从节点的负载状态。

具体的,主节点获取测试任务集后,检测目标KNL从节点的负载状态,其中,目标KNL从节点是主节点默认的首个分配节点,可以是任一个KNL从节点,主节点可以向目标KNL从节点发送负载状态检测信息,目标KNL从节点再将自身的负载状态发送给主节点;其中,负载状态为当前KNL从节点已用多少运行能力,负载状态越高,KNL从节点的可运行能力越低,负载状态越低,KNL从节点的可运行能力越高。

步骤S212:当目标KNL从节点的负载状态超过当前测试任务子集要求的最高负载状态,则将当前测试任务子集中的测试任务分配到多个KNL从节点中,以保持多个KNL从节点的负载均衡。

具体的,主节点接收目标KNL从节点的负载状态信息,当目标KNL从节点的负载状态超过当前测试任务子集要求的最高负载状态,说明目标KNL从节点无法立即处理当前测试任务子集中的全部测试任务,则将当前测试任务子集中的测试任务分配到多个KNL从节点中,以保持多个KNL从节点的负载均衡。

其中,将当前测试任务子集中的测试任务分配到多个KNL从节点中的过程中,可以平均分配测试任务子集中的测试任务,并分配给除目标KNL从节点的KNL从节点,当然,也可以判断目标KNL从节点还能处理几个测试任务,将相应的测试任务分配给目标KNL从节点,其余当前测试任务子集中的测试任务则平均分配给其余KNL从节点,需要说明的是,主节点也可以同时获取所有KNL从节点的负载状态,利用KNL从节点的负载状态,将相应的数量的测试任务分配给各KNL从节点。

步骤S213:当目标KNL从节点的负载状态低于测试任务子集要求的最高负载状态,则将测试任务子集分配到目标KNL从节点中。

具体的,当目标KNL从节点的负载状态低于当前测试任务子集要求的最高负载状态,说明目标KNL从节点能立即处理当前测试任务子集中的全部测试任务,则将测试任务子集分配到目标KNL从节点中,此时,只需目标KNL从节点进行任务测试工作即可,无需将当前测试任务子集中的测试任务分配给其余KNL从节点,造成资源浪费。

可以理解的是,测试任务子集可以等于测试任务集。

步骤S22:当KNL从节点集中的KNL从节点接收到测试任务子集,则将测试任务子集中的测试任务分配到进程集中。

步骤S23:利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果;其中,进程集中的进程数小于等于测试任务子集中的任务数。

具体的,基于OpenMP(Open Multi-Processing,共享存储并行编程),每个进程运行蚁群算法对每个进程中的测试任务进行计算时开启线程集,利用线程集运行蚁群算法对测试任务并行计算,通过多线程运算使得再对一个蚁群进行计算时,可以同时对多个蚂蚁个体进行最优路线的计算。同时,蚁群算法在很大程度上是依赖于程序执行过程中向量化的程度,尽量充分利用向量化带来的增益效果可以极大的提高程序运行速度,KNL处理器每个处理线程每次可以处理16个单精度浮点数操作,在程序实现过程中使用向量化技术,在能够向量化的位置编译向量化,在确定无数据依赖的程序段手动向量化,最终达到一个处理器级别的向量化目的。进一步的提高对测试任务的测试速度。

其中,在计算时可以将蚁群算法计算时产生的中间变量存放在MCDRAM内存中,以提高蚁群单次寻找最优路径的时间,通过充分利用KNL服务器的高速内存带宽技术将蚁群算法大量中间变量存放在MCDRAM内存上,将蚁群算法中蚂蚁每一路径的信息和每次迭代最优路径等信息开辟内存到MCDRAM上,以便在特征提取过程中将减少访存cache hit(缓存命中)的次数,达到快速访存的目的,大大提高了蚁群寻找路径的速度及收敛的时间,同时充分利用众核技术和多节点集群技术,提高了并行度,加速了蚁群单词寻找最优路径的时间。

需要说明的是,本发明实施例中,还可以利用循环分块技术,将蚁群算法中每个循环的访存地址区块化,以使访存方式为顺序访存,其中,每个循环的访存小于等于二级缓存,以加快循环速度,利用高速二级缓存技术,在蚁群算法的循环中使得访存可以控制在二级缓存大小以内,可以快速的完成循环,加快蚁群一次迭代最优路径的寻找,并且,通过对算法和结构层面优化,减少访存时间,优化为顺序访存的方式,将每个loop中的访存地址区块化,避免跳跃式访存,实现程序的代码级别优化。

在实际应用中,为了便于信息的管理,当KNL从节点计算出测试结果后,主节点接收KNL从节点的测试结果,以便于用户集中处理测试结果信息。

其中,主节点与各KNL从节点之间和KNL从节点之间的通信传输可以采用高速网络,以实现高速通信;蚁群算法可以为多种群蚁群算法。

相应的,本发明实施例还公开了一种基于KNL的测试系统,参见图2所示,该系统包括:

节点任务分配模块11,用于主节点获取测试任务集,将测试任务集中的测试任务子集分配到KNL从节点集中;

进程任务分配模块12,用于当KNL从节点集中的KNL从节点接收到测试任务子集,则将测试任务子集中的测试任务分配到进程集中;

任务计算模块13,用于利用蚁群算法对每个进程中的测试任务进行计算,得到测试结果;其中,进程集中的进程数小于等于测试任务子集中的任务数。

可见,本发明实施例主节点获取测试任务集后,将测试任务分成数个测试任务子集,并分配到KNL从节点集中,KNL从节点集中的KNL从节点接收到测试任务子集,生成进程集,将测试任务子集中的测试任务分配到进城集中,并利用蚁群算法对每个进程中的测试任务进行计算,得到计数结果,将测试任务分配到多台KNL服务器上,并行处理测试任务,同时提升了计算负载,每个KNL服务器在计算时生成多个进程进一步的并行处理测试任务,同时利用蚁群算法进行计算,综上,本发明提高了测试任务的处理速度。

具体的,上述任务计算模块13,可以包括变量存放单元、多线程单元和循环分块单元;其中,

变量存放单元,用于将蚁群算法计算时产生的中间变量存放在MCDRAM内存中,以提高蚁群单次寻找最优路径的时间。

多线程单元,用于每个进程运行时开启线程集,利用线程集运行蚁群算法对测试任务并行计算。

循环分块单元,用于利用循环分块技术,将蚁群算法中每个循环的访存地址区块化,以使访存方式为顺序访存。

具体的,每个循环的访存小于等于二级缓存,以加快循环速度。

上述节点任务分配模块11,可以包括检测单元、再分配单元和分配单元;其中,

检测单元,用于检测目标KNL从节点的负载状态;

再分配单元,用于当目标KNL从节点的负载状态超过当前测试任务子集要求的最高负载状态,则将当前测试任务子集中的测试任务分配到多个KNL从节点中,以保持多个KNL从节点的负载均衡;

分配单元,用于当目标KNL从节点的负载状态低于当前测试任务子集要求的最高负载状态,则将当前测试任务子集分配到目标KNL从节点中。

本发明实施例,还可以包括:

测试结果接收模块,用于主节点接收KNL从节点的测试结果。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明所提供的一种基于KNL的测试方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1