发明内容
本发明实施例提供一种多核异构CPU总线仲裁方法、总线仲裁器及系统,能降低现有集群系统总线阻塞发生的概率,提高集群系统的性能。
本发明一实施例提供一种多核异构CPU总线仲裁方法,包括:在接收第一请求对象发送的总线占用请求,并确定除所述第一请求对象外,还存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,判断所述待处理请求对象的数量;
若仅存在一个所述待处理请求对象,则将所述第一请求对象以及所述待处理请求对象作为总线竞争对象;若存在一个以上的待处理请求对象,则提取所述第一请求对象以及各所述待处理请求对象的运算单元利用率,将运算单元利用率最小的两个请求对象作为所述总线竞争对象;
计算两个所述总线竞争对象的运算单元利用率之差以及两个所述总线竞争对象的运算单元利用率之和,继而计算所述运算单元利用率之差与所述运算单元利用率之和的比值,获得第一比值;
在所述第一比值大于或等于第一阈值时,判断仲裁计数器的计数值所对应的请求对象是否为两个所述总线竞争对象中的任意一个;若是,则判断仲裁计数器的计数值是否小于预设的第一计数值;在判断所述计数值小于所述第一计数值时,将运算单元利用率较小的总线竞争对象选定为总线占用对象;在所述计数值大于或等于预设的第一计数值时,并将所述计数值所对应的总线竞争对象剔除,将另一总线竞争对象选定为总线占用对象;若否,将运算单元利用率较小的总线竞争对象选定为总线占用对象;其中,仲裁计数器的计数值用于表示同一总线竞争对象被连续选定为总线占用对象的次数;
在所述第一比值小于第一阈值时,提取两个总线竞争对象的控制单元负荷系数,根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象;
将总线占用权分配至所述总线占用对象,以使所述总线占用对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
进一步的,所述根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象,具体包括:
若,两个所述总线竞争对象的控制单元负荷系数均不大于第一预设负荷系数,则将控制单元负荷系数较小的总线竞争对象选定为所述总线占用对象;
若,两个所述总线竞争对象的控制单元负荷系数中任意一总线竞争对象的控制单元负荷系数大于第二预设负荷系数,则将控制单元负荷系数较大的总线竞争对象选定为所述总线占用对象;
若,两个所述总线竞争对象中任意一总线竞争对象的控制单元负荷系数大于第一预设负荷系数,且小于或等于第二预设负荷系数,则将所述仲裁计数器的计数值加1并判断仲裁计数器的计数值是否小于或等于预设的第二计数值;若是,将控制单元负荷系数较小的总线竞争对象选定为所述总线占用对象;若否,将将控制单元负荷系数较大的总线竞争对象选定为所述总线占用对象并将所述仲裁计数器的计数值清零。
进一步的,在确定除所述第一请求对象外,不存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,将总线占用权分配至所述第一请求对象,以使所述第一请求对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
在上述方法项实施例的基础上,本发明对应提供了一种总线仲裁器;
一种总线仲裁器,包括:请求对象数量确定模块、总线竞争对象确定模块、总线占用对象确定模块以及总线占用权分配模块;
所述请求对象数量确定模块,用于在接收第一请求对象发送的总线占用请求,并确定除所述第一请求对象外,还存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,判断所述待处理请求对象的数量;
所述总线竞争对象确定模块,用于在存在一个所述待处理请求对象时,将所述第一请求对象以及所述待处理请求对象作为总线竞争对象;在存在一个以上的待处理请求对象时,提取所述第一请求对象以及各所述待处理请求对象的运算单元利用率,将运算单元利用率最小的两个请求对象作为所述总线竞争对象;
所述总线占用对象确定模块,用于计算两个所述总线竞争对象的运算单元利用率之差以及两个所述总线竞争对象的运算单元利用率之和,继而计算所述运算单元利用率之差与所述运算单元利用率之和的比值,获得第一比值;在所述第一比值大于或等于第一阈值时,判断仲裁计数器的计数值所对应的请求对象是否为两个所述总线竞争对象中的任意一个;若是,则判断仲裁计数器的计数值是否小于预设的第一计数值;在判断所述计数值小于所述第一计数值时,将运算单元利用率较小的总线竞争对象选定为总线占用对象;在所述计数值大于或等于预设的第一计数值时,并将所述计数值所对应的总线竞争对象剔除,将另一总线竞争对象选定为总线占用对象;若否,将运算单元利用率较小的总线竞争对象选定为总线占用对象;其中,仲裁计数器的计数值用于表示同一总线竞争对象被连续选定为总线占用对象的次数;在所述第一比值小于第一阈值时,提取两个总线竞争对象的控制单元负荷系数,根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象;
所述总线占用权分配模块,用于将总线占用权分配至所述总线占用对象,以使所述总线占用对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
进一步的,所述总线竞争对象确定模块,根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象,具体包括:
若,两个所述总线竞争对象的控制单元负荷系数均不大于第一预设负荷系数,则将控制单元负荷系数较小的总线竞争对象选定为所述总线占用对象;
若,两个所述总线竞争对象的控制单元负荷系数中任意一总线竞争对象的控制单元负荷系数大于第二预设负荷系数,则将控制单元负荷系数较大的总线竞争对象选定为所述总线占用对象;
若,两个所述总线竞争对象中任意一总线竞争对象的控制单元负荷系数大于第一预设负荷系数,且小于或等于第二预设负荷系数,则将所述仲裁计数器的计数值加1并判断仲裁计数器的计数值是否小于或等于预设的第二计数值;若是,将控制单元负荷系数较小的总线竞争对象选定为所述总线占用对象;若否,将将控制单元负荷系数较大的总线竞争对象选定为所述总线占用对象并将所述仲裁计数器的计数值清零。
进一步的,所述总线占用权分配模块,还用于在确定除所述第一请求对象外,不存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,将总线占用权分配至所述第一请求对象,以使所述第一请求对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
在上述实施例的基础上本发明对应提供了一种多核异构CPU总线仲裁系统;
一种多核异构CPU总线仲裁系统,包括本发明上述任意一实施例所提供的总线仲裁器以及若干请求对象;所述总线仲裁器通过预设的数据采集通道采集每一所述请求对象的运算单元利用率以及每一所述请求对象的控制单元负荷系数。
通过实施本发明实施例具有如下有益效果:
本发明实施例提供了一种多核异构CPU总线仲裁方法、总线仲裁器以及系统,所述方法,在进行仲裁时根据请求对象的运算单元利用率以及控制单元负荷系数进行分析计算得到仲裁结果,然后进行总线占用权分配。相比与现有的按预设优先级进行总线仲裁的方法,本发明充分考虑了集群系统中,各请求对象的运算单元利用率以及控制单元负荷系数,降低了在高负荷工作状态下总线阻塞的概率,提高了集群系统的性能。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明一实施例提供了一种多核异构CPU总线仲裁方法,包括如下步骤:
步骤S101:在接收第一请求对象发送的总线占用请求,并确定除所述第一请求对象外,还存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,判断所述待处理请求对象的数量;
步骤S102:若仅存在一个所述待处理请求对象,则将所述第一请求对象以及所述待处理请求对象作为总线竞争对象;若存在一个以上的待处理请求对象,则提取所述第一请求对象以及各所述待处理请求对象的运算单元利用率,将运算单元利用率最小的两个请求对象作为所述总线竞争对象;
步骤S103:计算两个所述总线竞争对象的运算单元利用率之差以及两个所述总线竞争对象的运算单元利用率之和,继而计算所述运算单元利用率之差与所述运算单元利用率之和的比值,获得第一比值;在所述第一比值大于或等于第一阈值时,判断仲裁计数器的计数值所对应的请求对象是否为两个所述总线竞争对象中的任意一个;若是,则判断仲裁计数器的计数值是否小于预设的第一计数值;在判断所述计数值小于所述第一计数值时,将运算单元利用率较小的总线竞争对象选定为总线占用对象;在所述计数值大于或等于预设的第一计数值时,并将所述计数值所对应的总线竞争对象剔除,将另一总线竞争对象选定为总线占用对象;若否,将运算单元利用率较小的总线竞争对象选定为总线占用对象;其中,仲裁计数器的计数值用于表示同一总线竞争对象被连续选定为总线占用对象的次数;在所述第一比值小于第一阈值时,提取两个总线竞争对象的控制单元负荷系数,根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象;
步骤S104:将总线占用权分配至所述总线占用对象,以使所述总线占用对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
对于步骤S101、上述请求对象可以为多核异构的CPU主机或外设,每一请求对象都设置有运算单元(ALU)以及控制单元(CU),在接收一总线占用请求时,先判断是否除当前请求之外,还有其他未分配总线占用权的待处理请求对象,如果有进一步判断待处理请求对象的数量。
对于步骤S102、如果待处理请求的数量只有一个,那么加上当前的请求对象(及上述第一请求对象)那么此时就有两个请求对象需要竞争总线占用权,那么此时将第一请求对象和待请求对象,作为两个总线竞争对象。如果待处理请求对象在1个以上假设是两个,那么此时加上第一请求对象一共有3个请求对象需要竞争总线占用权。此时,运算单元利用率最小的两个请求对象作为总线竞争对象,将另一个请求对象剔除,不让其参与本次仲裁时总线占用权的竞争。
对于步骤S103、在一个优选的实施例中,所述根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象,具体包括:
若,两个所述总线竞争对象的控制单元负荷系数均不大于第一预设负荷系数,则将控制单元负荷系数较小的总线竞争对象选定为所述总线占用对象;
若,两个所述总线竞争对象的控制单元负荷系数中任意一总线竞争对象的控制单元负荷系数大于第二预设负荷系数,则将控制单元负荷系数较大的总线竞争对象选定为所述总线占用对象;
若,两个所述总线竞争对象中任意一总线竞争对象的控制单元负荷系数大于第一预设负荷系数,且小于或等于第二预设负荷系数,则将所述仲裁计数器的计数值加1并判断仲裁计数器的计数值是否小于或等于预设的第二计数值;若是,将控制单元负荷系数较小的总线竞争对象选定为所述总线占用对象;若否,将将控制单元负荷系数较大的总线竞争对象选定为所述总线占用对象并将所述仲裁计数器的计数值清零。
对于步骤S104、在一个优选的实施例中,还包括在确定除所述第一请求对象外,不存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,将总线占用权分配至所述第一请求对象,以使所述第一请求对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
为更好的说明本发明的内容,以下例举一实际的仲裁场景,对本申请的技术方案进行详细的说明:
仲裁器包含:计算运算单元利用率的比较器Cu、计算控制单元负荷系数的比较器CI以及计数器Ca。计数器Ca用于计算同一个请求对象连续获得总线占用权的次数,例如:一个请求设备,在连续的4次总线仲裁时,都获得了总线占用权则Ca的值为3,一旦连续中断,Ca的计数值就清零并重新计算,例如在连续4次总线仲裁时,一个请求设备A在前三次都获得了总线占用权,而第四次仲裁时由请求设备B获得了总线占用权,那么在第三次总线仲裁结束后,Ca的计数值为3,表示请求设备A连续3次获得了总线占用权,当在第四次总线仲裁结束后Ca的计数值先清零,然后变为1,表示请求设备A取得了1次总线占用权。
所述总线上每一个多核异构CPU(请求对象)均无固定总线申请的固定优先权,任何其中一个请求对象,例如CPU A可对总线发出assert REQ#信号(发出总线占用请求),以准备进行所需的数据传输通道资源,仲裁器判断系统总线当前占用状态,若当前总线未被其他任何CPU占用,且未收到除CPU A之外的其他CPU对总线assert REQ#信号,那么此时直接对CPU A发送assert GNT#信号,响应CPU A的总线占用请求,直至获得总线占用权的CPUA完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU A的GNT#信号,释放总线。需要说明的是在移除当前CPU A的GNT#信号之前,总线拒绝任何其他CPU的assertREQ#信号。
如果当接收CPU A的assert GNT#信号时,还存在一个请求对象如CPU B对的assert REQ#信号,那么将CPU A和CPU B当做两个总线竞争对象。
此时通过总仲裁器中计算运算单元利用率的比较器Cu,判断CPU A和CPU B的运算单元利用率UR数值;
若得到ΔUR/∑UR≥X,(ΔUR为CPU A和CPU B的运算单元利用率之差,∑UR为CPUA和CPU B的运算单元利用率之和,X为上述第一阈值),则判断Ca的计数值所对应请求对象是否为CPU A或CPU B;需要说明的是第一阈值的具体取值会影响CPU A和CPU B的利用率差值的收敛速度,其具体取值可以根据实际情况进行设定。
如果是,说明CPU A或CPU B中的其中一个竞争对象,有可能已经连续获得几次总线占用权了,此时为了防止某一请求对象一直占用总线资源,而其他请求对象一直得不到响应。需要进一步判断Ca的计数值是否小于的第一计数值Y,如果Ca的计数值小于的第一计数值Y,那么说明CPU A或CPU B连续获得总线占用权的次数还在控制范围内,此时按正常的处理方式,将运算单元利用率较小的总线竞争对象作为最终的总线占用对象,获得总线占用权。例如CPU A当前的运算单元利用率较小,那么仲裁器向CPU A反馈assert GNT#信号,CPU A获得总线占用权,直至获得总线占用权的CPU A完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU A的GNT#信号,释放总线。需要说明的是在移除当前CPUA的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。
如果Ca的计数值大于或等于的第一计数值Y,那么说明CPU A或CPU B连续获得总线占用权的次数已经达到了最高值,如果在本次仲裁结束的结果与上次相同的话,会出现仲裁不均衡的现象。所以此时,无需进行运算单元利用率的判断,直接将Ca的计数值所对应的竞争对象剔除,将另一个竞争对象作为最终的总线占用对象,获得总线占用权。例如假设Ca的计数值对应的请求设备是CPU A,且计数值已经超过了第一计数值Y,那说明CPU A已经在连续Y次的仲裁中获取到了总线占用权,此时无论CPU A运算单元利用率的大小,直接剔除掉CPU A,仲裁器直接向CPU B反馈assert GNT#信号,CPU B获得总线占用权。直至获得总线占用权的CPU B完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU B的GNT#信号,释放总线。需要说明的是在移除当前CPU B的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。
如果否,说明上一次仲裁时,取得总线占用权的不是CPU A或CPU B,那么就不会出现仲裁不均衡的问题,此时直接将运算单元利用率较小的总线竞争对象作为最终的总线占用对象,获得总线占用权。例如CPU A当前的运算单元利用率较小,那么仲裁器向CPU A反馈assert GNT#信号,CPU A获得总线占用权。直至获得总线占用权的CPU A完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU A的GNT#信号,释放总线。需要说明的是在移除当前CPU A的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。需要说明的是第一计数值Y的具体取值可以根据实际情况进行设定。若得到ΔUR/∑UR<X,那么此时需要启动计算控制单元负荷系数的比较器CI对CPU A和CPU B的控制单元负荷系数进行分析,记CPU A的负荷系数为LiA,CPU B的负荷系数为LiB
根据CPU A和CPU B的控制单元负荷系数进行选定和分配;
具体分以下三大情况:
一、LiA、LiB均不大于第一预设负荷系数(优选的第一预设负荷系数可以为0.7),例如LiA<LiB≤0.7;那么此时将控制单元负荷系数较小的总线竞争对象CPU A,选定为总线占用对象,仲裁器对向CPU A反馈assert GNT#信号,CPU A获得总线占用权。直至获得总线占用权的CPU A完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU A的GNT#信号,释放总线。需要说明的是在移除当前CPU A的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。
二、LiA、LiB中的任意一个大于第二预设负荷系数(优选的第一预设负荷系数可以为5);例如LiA<5<LiB,那么此时将控制单元负荷系数较大的总线竞争对象CPU B,选定为总线占用对象,仲裁器对向CPU B反馈assert GNT#信号,CPU B获得总线占用权。直至获得总线占用权的CPU B完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPUB的GNT#信号,释放总线。需要说明的是在移除当前CPU B的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。
三、LiA、LiB中有任意一个大于第一预设负荷系数,且小于或等于第二预设负荷系数;例如:LiA<0.7<LiB≤5;
那么此时将Ca的计数值加1,然后判断Ca的计数值是否小于或等于第二计数值J,如果是,将控制单元负荷系数较小的总线竞争对象CPU A,选定为总线占用对象,仲裁器对向CPU A反馈assert GNT#信号,CPU A获得总线占用权。直至获得总线占用权的CPU A完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU A的GNT#信号,释放总线。需要说明的是在移除当前CPU A的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。
否则,将控制单元负荷系数较大的总线竞争对象CPU B,选定为总线占用对象,仲裁器对向CPU B反馈assert GNT#信号,CPU B获得总线占用权。同时将仲裁计数器的计数值清零。至此完成整个多核异构CPU总线仲裁方法。直至获得总线占用权的CPU B完成当前最小有效期内(即上述有效传输周期)的传输后,移除当前CPU B的GNT#信号,释放总线。需要说明的是在移除当前CPU B的GNT#信号之前,总线拒绝任何其他CPU的assert REQ#信号。需要说明的是第二计数值J的具体取值可以根据实际情况进行设定。如图2所示,在上述实施例的基础上,本发明对应提供了一种总线仲裁器,包括:请求对象数量确定模块、总线竞争对象确定模块、总线占用对象确定模块以及总线占用权分配模块;
所述请求对象数量确定模块,用于在接收第一请求对象发送的总线占用请求,并确定除所述第一请求对象外,还存在已发起总线占用请求但未取得总线占用权的待处理请求对象时,判断所述待处理请求对象的数量;
所述总线竞争对象确定模块,用于在存在一个所述待处理请求对象时,将所述第一请求对象以及所述待处理请求对象作为总线竞争对象;在存在一个以上的待处理请求对象时,提取所述第一请求对象以及各所述待处理请求对象的运算单元利用率,将运算单元利用率最小的两个请求对象作为所述总线竞争对象;
所述总线占用对象确定模块,用于计算两个所述总线竞争对象的运算单元利用率之差以及两个所述总线竞争对象的运算单元利用率之和,继而计算所述运算单元利用率之差与所述运算单元利用率之和的比值,获得第一比值;在所述第一比值大于或等于第一阈值时,判断仲裁计数器的计数值所对应的请求对象是否为两个所述总线竞争对象中的任意一个;若是,则判断仲裁计数器的计数值是否小于预设的第一计数值;在判断所述计数值小于所述第一计数值时,将运算单元利用率较小的总线竞争对象选定为总线占用对象;在所述计数值大于或等于预设的第一计数值时,并将所述计数值所对应的总线竞争对象剔除,将另一总线竞争对象选定为总线占用对象;若否,将运算单元利用率较小的总线竞争对象选定为总线占用对象;其中,仲裁计数器的计数值用于表示同一总线竞争对象被连续选定为总线占用对象的次数;在所述第一比值小于第一阈值时,提取两个总线竞争对象的控制单元负荷系数,根据两个所述总线竞争对象的控制单元负荷系数的数值范围选定总线占用对象;
所述总线占用权分配模块,用于将总线占用权分配至所述总线占用对象,以使所述总线占用对象在获取所述总线占用权后在预设的有效传输周期内进行数据传输。
需说明的是,以上所描述的各个模块是示意性的,可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,附图中所显示的各模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
如图3所示,本发明另一实施例提供了一种多核异构CPU总线仲裁系统,包括本发明任意一项所述的总线仲裁器以及若干请求对象;所述总线仲裁器通过预设的数据采集通道采集每一所述请求对象的运算单元利用率以及每一所述请求对象的控制单元负荷系数。
在本发明中参与总线竞争的多核异构CPU A和CPU B数量可以扩展至更多数量,相应地仲裁系统包含可将总线上所有多核异构CPU获取其内部运算单元(ALU)利用率UR和控制单元负荷系数Li的数据传输至总线仲裁器的数据采集通道,且每个请求对象均独立设置有与数据总线进行数据交互的数据通道,这样每一个请求对象可不受总线占用权的影响;通过数据总线向总线仲裁器发送assert REQ#信号并接收裁器对的assert GNT#信号。
通过实施本发明实施例具有如下有益效果:
1、总线的占用权分配不再仅依据参与共享总线的多个主机CPU或者外设的既定优先级别或者各个主机CPU或者外设发出请求总线信号的先后次序和占用状态逻辑输出相应的总线仲裁结果。而是增加和参与竞争总线的CPU的具体负荷状态作为综合判断分析。
2、针对多核异构CPU的计算任务和控制机制特性进行总线占用权的分配,大大提高集群系统多任务并行处理状态下的资源利用率。
3、易于扩展部署更多的多核异构CPU以增加集群总体算力性能容量,无需增加额外的仲裁控制通信开销,总线仲裁响应速度不受竞争总线CPU数量的影响。
4、易于实现在较大规模的集群系统中增加部署更多数量的备份仲裁器。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。