为内存控制器分配硬件加速指令的方法和装置
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种为内存控制器分配硬件加速指令的方法和装置。
背景技术
计算机***由计算机硬件和软件两部分组成。其中,硬件包括处理器、寄存器、高速缓冲存储器、内存储器和外部存储器等;软件是计算机的运行程序和相应的文档。在运行程序时,计算机操作***将运行程序时程序中的指令涉及到的数据从内存储器通过内存总线传输到高速缓冲存储器或寄存器内,再由处理器获取到数据进行指令的运行,进而完成程序的运行。所以,运行程序时,程序中的指令涉及到的数据的传输是制约程序运行速度的关键因素。目前,为了提高程序的运行速度,主要采用的方法有:通过提高物理带宽来提高程序的运行速度的方法,例如:通过提高单个针脚的传输速率来提高内存总线频率、通过增加管脚数量的方法增加内存访问通道等。但是,由于现有封装技术的限制,芯片的管脚数量难以实现规模扩展,且单个针脚的传输速率也很难再进行大的提升。
考虑到现有封装技术的限制,以及为了通过提高软件程序的执行速度以适应云计算和大数据的应用,现有技术中提高软件程序的执行速度的方法还可以具体为:在内存储器和高速缓冲存储器之间设置内存控制器,并将程序中的一些大规模操作的指令,以一条或几条变粒度的硬件加速指令来代替,从而通过该内存控制器对这些硬件加速指令进行运行,从而有效地减少了数据在内存储器和处理器之间的传输,间接提高内存带宽的利用,同时减少了程序中的大规模操作的指令对处理器的占用。
但是,通过内存控制器来对硬件加速指令进行运行时,可能会导致多个内存控制器负载不均衡的问题,进而影响计算机操作***的性能,不能很好的适应云计算和大数据的应用。
发明内容
本发明实施例提供了一种为内存控制器分配硬件加速指令的方法和装置,实现由计算机***中的多个内存控制器执行硬件加速指令时,各个内存控制器的负载均衡,进而提高了计算机***的性能,更好地满足了云计算和大数据的应用。
第一方面,本发明实施例提供一种为内存控制器分配硬件加速指令的方法,所述方法应用于计算机***,所述计算机***包括多个能够执行硬件加速指令的内存控制器,所述方法包括:
按照多个硬件加速指令之间的依赖关系将所述多个硬件加速指令划分为不同的指令集合,其中,属于同一个指令集合中的硬件加速指令之间具有单依赖关系,所述单依赖关系是指若所述多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个硬件加速指令的输出数据,则所述一个硬件加速指令单依赖于所述另外一个硬件加速指令;
按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与所述计算机***中的内存控制器的第一映射关系,其中,所述依赖关系是指若所述多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个或多个硬件加速指令的输出数据,则所述一个硬件加速指令依赖于所述另外一个或多个硬件加速指令,所述第一映射关系中的内存控制器构成第一内存控制器集合;
根据所述第一内存控制器集合中的各内存控制器的负载信息调整所述第一映射关系,以获得各指令集合与所述计算机***的内存控制器的第二映射关系,其中,所述第二映射关系中的内存控制器构成第二内存控制器集合,所述第二内存控制器集合的内存控制器的负载信息均不大于第一预设阈值,所述负载信息包括已分配给所述第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间;
按照所述第二映射关系将所述各指令集合中的硬件加速指令分配给所述第二内存控制器集合中的内存控制器,其中,同一个指令集合中的硬件加速指令被分配给同一个内存控制器执行。
结合第一方面,在第一方面的第一种实施方式中,
所述根据所述第一内存控制器集合中的各内存控制器的负载信息调整所述第一映射关系,以获得各指令集合与所述计算机***的内存控制器的第二映射关系具体包括:
当所述第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例小于第二预设阈值时,将所述第一映射关系中分配给所述负载信息大于第一预设阈值的内存控制器的指令集合随机分配给所述计算机***中负载信息小于第一预设阈值的其他内存控制器,以获得各指令集合与所述计算机***的内存控制器的第二映射关系。
结合第一方面,在第一方面的第二种实施方式中,
所述根据所述第一内存控制器集合中的各内存控制器的负载信息调整所述第一映射关系,以获得各指令集合与所述计算机***的内存控制器的第二映射关系具体包括:
当所述第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例不小于第二预设阈值时,获取所述计算机***中的第三内存控制器集合,所述第三内存控制器集合中的内存控制器的负载信息均不大于所述第一预设阈值;
按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取所述各指令集合与所述第三内存控制器集合中的内存控制器的第二映射关系。
结合第一方面或第一方面的第一种实施方式或第一方面的第二种实施方式,在第一方面的第三种实施方式中,
所述获取各指令集合与所述计算机***中的内存控制器的第一映射关系具体包括:
若与某个指令集合相匹配的内存控制器至少有两个,则将所述指令集合分配给与所述指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器。
结合第一方面或第一方面的第一种实施方式或第一方面的第二种实施方式,在第一方面的第四种实施方式中,
所述硬件加速指令的执行时间latencyi(Fixedi,Variablei)=Fixedi+Variablei(αi*datai/base_granularityi),其中,Fixedi为所述硬件加速指令的固定执行时间,Variablei为所述硬件加速指令的可变执行时间,αi为所述硬件加速指令的数据执行比率,datai为所述硬件加速指令的数据量,base_granularityi为所述硬件加速指令的最小数据粒度。
第二方面,本发明实施例提供一种为内存控制器分配硬件加速指令的装置,所述装置应用于计算机***,所述计算机***包括多个能够执行硬件加速指令的内存控制器,所述装置包括:
划分模块,用于按照多个硬件加速指令之间的依赖关系将所述多个硬件加速指令划分为不同的指令集合,其中,属于同一个指令集合中的硬件加速指令之间具有单依赖关系,所述单依赖关系是指若所述多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个硬件加速指令的输出数据,则所述一个硬件加速指令单依赖于所述另外一个硬件加速指令;
获取模块,用于按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与所述计算机***中的内存控制器的第一映射关系,其中,所述依赖关系是指若所述多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个或多个硬件加速指令的输出数据,则所述一个硬件加速指令依赖于所述另外一个或多个硬件加速指令,所述第一映射关系中的内存控制器构成第一内存控制器集合;
调整模块,用于根据所述第一内存控制器集合中的各内存控制器的负载信息调整所述第一映射关系,以获得各指令集合与所述计算机***的内存控制器的第二映射关系,其中,所述第二映射关系中的内存控制器构成第二内存控制器集合,所述第二内存控制器集合的内存控制器的负载信息均不大于第一预设阈值,所述负载信息包括已分配给所述第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间;
分配模块,用于按照所述第二映射关系将所述各指令集合中的硬件加速指令分配给所述第二内存控制器集合中的内存控制器,其中,同一个指令集合中的硬件加速指令被分配给同一个内存控制器执行。
结合第二方面,在第二方面的第一种实施方式中,
所述调整模块具体用于:
当所述第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例小于第二预设阈值时,将所述第一映射关系中分配给所述负载信息大于第一预设阈值的内存控制器的指令集合随机分配给所述计算机***中负载信息小于第一预设阈值的其他内存控制器,以获得各指令集合与所述计算机***的内存控制器的第二映射关系。
结合第二方面,在第二方面的第二种实施方式中,
所述调整模块具体用于:
当所述第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例不小于第二预设阈值时,获取所述计算机***中的第三内存控制器集合,所述第三内存控制器集合中的内存控制器的负载信息均不大于所述第一预设阈值;按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取所述各指令集合与所述第三内存控制器集合中的内存控制器的第二映射关系。
结合第二方面或第二方面的第一种实施方式或第二方面的第二种实施方式,在第二方面的第三种实施方式中,
所述获取模块具体用于:
若与某个指令集合相匹配的内存控制器至少有两个,则将所述指令集合分配给与所述指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器。
结合第二方面或第二方面的第一种实施方式或第二方面的第二种实施方式,在第二方面的第四种实施方式中,
所述硬件加速指令的执行时间latencyi(Fixedi,Variablei)=Fixedi+Variablei(αi*datai/base_granularityi),其中,Fixedi为所述硬件加速指令的固定执行时间,Variablei为所述硬件加速指令的可变执行时间,αi为所述硬件加速指令的数据执行比率,datai为所述硬件加速指令的数据量,base_granularityi为所述硬件加速指令的最小数据粒度。
本发明实施例提供的一种硬件加速指令的分配方法和装置,通过按照多个硬件加速指令之间的依赖关系将多个硬件加速指令划分为不同的指令集合,其中,属于同一个指令集合中的硬件加速指令之间具有单依赖关系,单依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个硬件加速指令的输出数据,则一个硬件加速指令单依赖于另外一个硬件加速指令;按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系,其中,依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个或多个硬件加速指令的输出数据,则一个硬件加速指令依赖于另外一个或多个硬件加速指令,第一映射关系中的内存控制器构成第一内存控制器集合;根据第一内存控制器集合中的各内存控制器的负载信息调整第一映射关系,以获得各指令集合与计算机***的内存控制器的第二映射关系,其中,第二映射关系中的内存控制器构成第二内存控制器集合,第二内存控制器集合的内存控制器的负载信息均不大于第一预设阈值,负载信息包括已分配给第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间;按照第二映射关系将各指令集合中的硬件加速指令分配给第二内存控制器集合中的内存控制器,其中,同一个指令集合中的硬件加速指令被分配给同一个内存控制器执行。实现由计算机***中的多个内存控制器执行硬件加速指令时,各个内存控制器的负载均衡,进而提高了计算机***的性能,更好地满足了云计算和大数据的应用。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例的附图。
图1为本发明实施例提供的一种为内存控制器分配硬件加速指令的方法流程图;
图2为本发明实施例提供的一种多个硬件加速指令之间的依赖关系示意图;
图3为本发明实施例提供的又一种为内存控制器分配硬件加速指令的方法流程图;
图4为本发明实施例提供的一种为内存控制器分配硬件加速指令的装置结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
图1为本发明实施例提供的一种为内存控制器分配硬件加速指令的方法流程图,如图1所示,本实施例的执行主体为计算机。该方法应用于计算机***,该计算机***中包括多个能够执行硬件加速指令的内存控制器。具体可通过硬件或软件和硬件相结合的方式实现,则该方法包括:
步骤101,按照多个硬件加速指令之间的依赖关系将多个硬件加速指令划分为不同的指令集合。
本实施例中,硬件加速指令是指程序中的能够在内存控制器上独立执行的指令。硬件加速指令一般为程序中需要大规模操作并计算量少的指令。如矩阵转置指令,矩阵清零指令,以消息包的形式变粒度的读写指令等。
本实施例中,在执行程序中的指令前,编译器对程序进行静态编译时使用传统的编译识别方法,识别出程序中的多个硬件加速指令。
在编译器识别出程序中多个硬件加速指令的指令后,按照多个硬件加速指令之间的依赖关系将多个硬件加速指令划分为不同的指令集合。
其中,依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个或多个硬件加速指令的输出数据,则一个硬件加速指令依赖于另外一个或多个硬件加速指令。
其中,依赖关系包括单依赖关系和多依赖关系。若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个硬件加速指令的输出数据,则一个硬件加速指令单依赖于另外一个硬件加速指令,这种依赖关系为单依赖关系。若多个硬件加速指令中的一个硬件加速指令的输入数据为另外多个硬件加速指令的输出数据,则一个硬件加速指令多依赖于另外多个硬件加速指令,这种依赖关系为多依赖关系。
若硬件加速指令之间存在依赖关系,则被依赖的一个或多个硬件加速指令为父硬件加速指令,依赖的硬件加速指令为子硬件加速指令。由于在执行程序时,首先执行父硬件加速指令后执行子硬件加速指令,所以在将程序中的多个硬件加速指令分配给计算机***中的内存控制器时,首先将父硬件加速指令进行分配,再将子硬件加速指令进行分配。
本实施例中,由于内存控制器执行硬件加速指令时,具有先执行父硬件加速指令后执行子硬件加速指令的时序关系特征,所以在将多个硬件加速指令分配给内存控制器时,可将具有单依赖关系的硬件加速指令分配给同一内存控制器执行。所以,本实施例中,将多个硬件加速指令按照多个硬件加速指令之间的依赖关系划分为不同的指令集合。
其中,属于同一个指令集合中的硬件加速指令之间具有单依赖关系。那么在不同的指令集合中的硬件加速指令之间具有两种关系,第一种关系为不同指令集合中的硬件加速指令之间无依赖关系,另一种关系为不同指令集合中的硬件加速指令之间具有多依赖关系。
图2为本发明实施例提供的一种多个硬件加速指令之间的依赖关系示意图。如图2所示,该程序中共有7个硬件加速指令。硬件加速指令之间具有一个箭头表示硬件加速指令之间具有单依赖关系。硬件加速指令之间具有多个箭头,表示硬件加速指令之间具有多依赖关系。延伸出箭头的硬件加速指令为父硬件加速指令,箭头所指向的硬件加速指令为子硬件加速指令。图2中的硬件加速指令1、2、3之间具有单依赖关系,构成指令集合a,硬件加速指令4、5之间具有单依赖关系,构成指令集合b,硬件加速指令6、7之间具有单依赖关系,构成指令集合c。那么在指令集合a和指令集合b中的硬件加速指令之间无依赖关系,在指令集合c中的硬件加速指令6与指令集合a中的硬件加速指令3、指令集合b中的硬件加速指令5之间具有多依赖关系。
步骤102,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系。
本实施例中,将多个硬件加速指令划分为不同的指令集合后,对多个指令集合进行分配时,若不同的指令集合中的硬件加速指令之间无依赖关系,则说明不同指令集合中的硬件加速指令之间无时序关系,可在计算机***中的内存控制器中并行执行。所以为了减少程序中硬件加速指令在计算机***中的内存控制器的执行时间,在将不同的指令集合分配给计算机***中的内存控制器时,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则进行分配,以获取各指令集合与计算机***中的内存控制器的第一映射关系。
如在上述举例中,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系时,将指令集合a和指令集合b分配给不同的内存控制器。而对于指令集合c,可将指令集合c分配到和指令集合a或指令集合b同一内存控制器中,也可将指令集合c分配到与指令集合a和指令集合b都不相同的内存控制器中。
其中,获取的各指令集合与计算机***的内存控制器的第一映射关系中的内存控制器构成第一内存控制器集合。第一内存控制器集合可以为计算机***中的部分或全部内存控制器。若指令集合的个数小于内存控制器的个数,则第一内存控制器为计算机***的部分内存控制器,若指令集合的个数不小于内存控制器的个数,则按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系中的第一内存控制器集合为计算***中的部分或全部的内存控制器。
步骤103,根据第一内存控制器集合中的各内存控制器的负载信息调整第一映射关系,以获得各指令集合与计算机***的内存控制器的第二映射关系。
本实施例中,在获取各指令集合与计算机***中的内存控制器的第一映射关系时,遵循的原则为使已分配给第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间更短,并没有充分考虑到已分配给第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间是否均衡,所以在获取到第一映射关系后,根据第一内存控制器集合中的各内存控制器的负载信息来调整第一映射关系,以获得各指令集合与计算机***的内存控制器的第二映射关系。
在对第一映射关系调整后,在第二映射关系中的内存控制器构成第二内存控制器集合。其中,第二内存控制器集合的内存控制器的负载信息均不大于第一预设阈值。
本实施例中,第一预设阈值可在执行程序中的硬件加速指令前根据第一内存控制器集合中的各内存控制器的负载信息预先设定。
其中,负载信息包括已分配给第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间。
步骤104,按照第二映射关系将各指令集合中的硬件加速指令分配给第二内存控制器集合中的内存控制器。
本实施例中,由于同一个指令集合中的硬件加速指令之间具有单依赖关系,即同一指令集合中的硬件加速指令间具有先执行父硬件加速指令后执行子硬件加速指令的时序关系,所以将同一个指令集合中的硬件加速指令配分配到同一个内存控制器执行。
本实施例中,按照第二映射关系将各指令集合中的硬件加速指令分配给第二内存控制器集合中的内存控制器,由第二内存控制器集合中的内存控制器按照分配的先后顺序执行硬件加速指令。
本实施例中,通过按照多个硬件加速指令之间的依赖关系将多个硬件加速指令划分为不同的指令集合,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系,根据第一内存控制器集合中的各内存控制器的负载信息调整第一映射关系,以获得各指令集合与计算机***的内存控制器的第二映射关系,使第二映射关系中的内存控制器构成第二内存控制器集合,第二内存控制器集合的内存控制器的负载信息均不大于第一预设阈值,并按照第二映射关系将各指令集合中的硬件加速指令分配给第二内存控制器集合中的内存控制器。由于调整了第一映射关系,获得的第二映射关系中内存控制器的负载信息均不大于第一预设阈值,所以按照第二映射关系执行各指令集合中的硬件加速指令时,实现由计算机***中各个内存控制器的负载均衡,进而提高了计算机操作***的性能,更好地满足了云计算和大数据的应用。
图3为本发明实施例提供的又一种为内存控制器分配硬件加速指令的方法流程图,如图3所示,本实施例的执行主体为计算机。该方法应用于计算机***,该计算机***中包括多个能够执行硬件加速指令的内存控制器。具体可通过硬件或软件和硬件相结合的方式实现,则该方法包括:
步骤301,按照多个硬件加速指令之间的依赖关系将多个硬件加速指令划分为不同的指令集合。
其中,属于同一个指令集合中的硬件加速指令之间具有单依赖关系。单依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个硬件加速指令的输出数据,则一个硬件加速指令单依赖于另外一个硬件加速指令。
本实施例中,步骤301和本发明为内存控制器分配硬件加速指令的方法实施例一中的步骤101相同,在此不再一一赘述。
步骤302,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系。其中,第一映射关系中的内存控制器构成第一内存控制器集合。
本实施例中,第一内存控制器集合可以为计算机***中的部分或全部内存控制器。若指令集合的个数小于内存控制器的个数,则第一内存控制器为计算机***的部分内存控制器,若指令集合的个数不小于内存控制器的个数,则按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系中的第一内存控制器集合为计算***中的部分或全部的内存控制器。
进一步地,本实施例中,获取各指令集合与计算机***中的内存控制器的第一映射关系时,若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器。
本实施例中,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系时,若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器。能在减小第一内存控制器集合中的各内存控制器负载信息的同时,使第一内存控制器集合中的内存控制器的负载尽量均衡。
其中,负载信息包括已分配给第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间。
进一步地,本实施例中,由于程序中的多个硬件加速指令具体的操作和计算的数据不同,所以针对每一个硬件加速指令,其执行的时间也不相同。
具体地,硬件加速指令的执行时间latencyi(Fixedi,Variablei)可表示为式(1)所示:
latencyi(Fixedi,Variablei)=Fixedi+Variablei(αi*datai/base_granularityi) (1)
其中,Fixedi为第i个硬件加速指令的固定执行时间,其表示解析和调度硬件加速指令所需要的时间。由于每个硬件加速指令解析和调度的时间近似相等,所以每个硬件加速指令的固定执行时间近似相等,本实施例中可将每个硬件加速指令的固定执行时间设置为同一数值。
Variablei为硬件加速指令的可变执行时间。针对每个硬件加速指令,可变执行时间不相同,如若硬件加速指令为读取指令,则该硬件加速指令的可变执行时间更多受读取指令的数据量以及读取指令的最小数据粒度影响。又如若硬件加速指令为矩阵转置指令,则其可变执行时间中除受矩阵的数据量以及矩阵转置时的最小数据粒度影响外,也会受数据执行比率影响。所以针对不同的硬件加速指令,根据硬件加速指令的数据执行比率αi,硬件加速指令的数据量datai,硬件加速指令的最小数据粒度base_granularityi,计算硬件加速指令的可变执行时间。
本实施例中,每个硬件加速指令的执行时间为该硬件加速指令的固定执行时间和可变执行时间之和。
本实施例中,根据每个硬件加速指令的执行时间可准确计算出已分配给计算机***中的各内存控制器的负载信息,进而在将各指令集合中的硬件加速指令分配给计算机***中的内存控制器,由内存控制器执行各硬件加速指令时,进一步提高了各内存控制器的负载均衡程度。
步骤303,判断第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例是否小于第二预设阈值,若是,则执行步骤304,若否,则执行步骤305。
本实施例中,第一预设阈值可在执行程序中的硬件加速指令前根据第一内存控制器集合中的各内存控制器的负载信息预先设定。第二预设阈值可预先设定,如为2/5,也可以为其他阈值,本实施例中不做限定。
步骤304,将第一映射关系中分配给负载信息大于第一预设阈值的内存控制器的指令集合随机分配给计算机***中负载信息小于第一预设阈值的其他内存控制器,以获得各指令集合与计算机***的内存控制器的第二映射关系。
本实施例中,当第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例小于第二预设阈值时,表明在按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,并若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器,所获取的各指令集合与计算机***中的内存控制器的第一映射关系中,第一内存控制器集合中的内存控制器的负载比较均衡,为了使负载信息大于第一预设阈值的内存控制器不再分配指令集合,则将第一映射关系中分配给负载信息大于第一预设阈值的内存控制器的指令集合随机分配给计算机***中负载信息小于第一预设阈值的其他内存控制器,以获得各指令集合与计算机***的内存控制器的第二映射关系。
步骤305,获取计算机***中的第三内存控制器集合,第三内存控制器集合中的内存控制器的负载信息均不大于第一预设阈值;按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与第三内存控制器集合中的内存控制器的第二映射关系。
本实施例中,当第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例不小于第二预设阈值时,表明在按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,并若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器,所获取的各指令集合与计算机***中的内存控制器的第一映射关系中,第一内存控制器集合中的内存控制器的负载均衡效果不是很理想,为了使计算机***中各内存控制器的负载均衡,则获取计算机***中负载信息均不大于第一预设阈值的内存控制器,由计算机***中负载信息均不大于第一预设阈值的内存控制器组成第三内存控制器集合。
在获取到计算机***中的第三内存控制器集合后,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与第三内存控制器集合中的内存控制器的第二映射关系。
进一步地,本实施例中,在获取各指令集合与第三内存控制器集合中的内存控制器的第二映射关系时,若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器。
步骤306,按照第二映射关系将各指令集合中的硬件加速指令分配给第二内存控制器集合中的内存控制器。
本实施例中,由于同一个指令集合中的硬件加速指令之间具有单依赖关系,即同一指令集合中的硬件加速指令间具有先执行父硬件加速指令后执行子硬件加速至零的时序关系,所以将同一个指令集合中的硬件加速指令配分配到同一个内存控制器执行。
本实施例中,获取各指令集合与计算机***中的内存控制器的第一映射关系时,若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器,提高了获取的第一次映射关系中第一内存控制器集合中的内存控制器的负载均衡程度,并且当第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例小于第二预设阈值时,将第一映射关系中分配给负载信息大于第一预设阈值的内存控制器的指令集合随机分配给计算机***中负载信息小于第一预设阈值的其他内存控制器,当第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例不小于第二预设阈值时,按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与第三内存控制器集合中的内存控制器的第二映射关系,使第二映射关系中的内存控制器的负载信息均不大于第一预设阈值,所以本实施例中,在将多个硬件加速指令分配给计算机***中的内存控制器时先后进行了两次负载均衡的处理,使由计算机***中的多个内存控制器执行硬件加速指令时,各个内存控制器的负载更加均衡。
图4为本发明实施例提供的一种为内存控制器分配硬件加速指令的装置结构示意图。该装置应用于计算机***,计算机***包括多个能够执行硬件加速指令的内存控制器。如图4所示,该为内存控制器分配硬件加速指令的装置包括:划分模块401,获取模块402,调整模块403和分配模块404。
其中,划分模块401,用于按照多个硬件加速指令之间的依赖关系将多个硬件加速指令划分为不同的指令集合。
其中,属于同一个指令集合中的硬件加速指令之间具有单依赖关系。单依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个硬件加速指令的输出数据,则一个硬件加速指令单依赖于另外一个硬件加速指令。
获取模块402,用于按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与计算机***中的内存控制器的第一映射关系。
其中,依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外一个或多个硬件加速指令的输出数据,则一个硬件加速指令依赖于另外一个或多个硬件加速指令,第一映射关系中的内存控制器构成第一内存控制器集合。
本实施例中,依赖关系包括单依赖关系和多依赖关系。多依赖关系是指若多个硬件加速指令中的一个硬件加速指令的输入数据为另外多个硬件加速指令的输出数据,则一个硬件加速指令多依赖于另外多个硬件加速指令。
调整模块403,用于根据第一内存控制器集合中的各内存控制器的负载信息调整第一映射关系,以获得各指令集合与计算机***的内存控制器的第二映射关系。
其中,第二映射关系中的内存控制器构成第二内存控制器集合,第二内存控制器集合的内存控制器的负载信息均不大于第一预设阈值,负载信息包括已分配给第一内存控制器集合中的各内存控制器的硬件加速指令的执行时间。
本实施例中,第一预设阈值可在执行程序中的硬件加速指令前根据第一内存控制器集合中的各内存控制器的负载信息预先设定。
分配模块404,用于按照第二映射关系将各指令集合中的硬件加速指令分配给第二内存控制器集合中的内存控制器。
其中,同一个指令集合中的硬件加速指令被分配给同一个内存控制器执行。
本实施例的为内存控制器分配硬件加速指令的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
进一步地,调整模块403,具体用于当第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例小于第二预设阈值时,将第一映射关系中分配给负载信息大于第一预设阈值的内存控制器的指令集合随机分配给计算机***中负载信息小于第一预设阈值的其他内存控制器,以获得各指令集合与计算机***的内存控制器的第二映射关系。
或者,调整模块403,具体用于当第一内存控制器集合中负载信息大于第一预设阈值的内存控制器所占的比例不小于第二预设阈值时,获取计算机***中的第三内存控制器集合,第三内存控制器集合中的内存控制器的负载信息均不大于第一预设阈值;按照将硬件加速指令之间无依赖关系的不同指令集合分配给不同的内存控制器的原则,获取各指令集合与第三内存控制器集合中的内存控制器的第二映射关系。
进一步地,获取模块402,具体用于若与某个指令集合相匹配的内存控制器至少有两个,则将指令集合分配给与指令集合相匹配的至少两个内存控制器中负载信息最小的内存控制器。
进一步地,本实施例中的硬件加速指令的执行时间latencyi(Fixedi,Variablei)=Fixedi+Variablei(αi*datai/base_granularityi),其中,Fixedi为硬件加速指令的固定执行时间,Variablei为硬件加速指令的可变执行时间,αi为硬件加速指令的数据执行比率,datai为硬件加速指令的数据量,base_granularityi为硬件加速指令的最小数据粒度。
具体地,Fixedi为第i个硬件加速指令的固定执行时间,其表示解析和调度硬件加速指令所需要的时间。由于每个硬件加速指令解析和调度的时间近似相等,所以每个硬件加速指令的固定执行时间近似相等,本实施例中可将每个硬件加速指令的固定执行时间设置为同一数值。针对每个硬件加速指令,可变执行时间不相同,本实施例中,根据硬件加速指令的数据执行比率αi,硬件加速指令的数据量datai,硬件加速指令的最小数据粒度base_granularityi,计算硬件加速指令的可变执行时间Variablei。
进一步地,本实施例的为内存控制器分配硬件加速指令的装置,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁盘或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制。本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。