背景技术
在计算机执行程序时,程序数据通常先存储于内存中,然后处理器再从内存中读取数据,从而执行相关指令。但是,现有技术中的处理器性能要明显快于内存的访存速度,并且从发展趋势看,处理器和内存的性能差距正在越拉越大,因此内存的访存速度严重制约了处理器的性能。
基于上述矛盾,目前的计算机都在处理器中构建一定容量的高速缓存,用来存放处理器最近使用的数据,与外部的内存相比,高速缓存的访存速度要快很多,在降低内存访问次数的同时降低访问内存的平均时延。随着内存和处理器的性能差距越来越大,研究人员对高速缓存进行了各种改进和优化。归根结底,提升处理器访存性能的主要方法是降低访存的平均时延和减少高速缓存缺失的次数。
数据预取是一种隐藏存储访问时延的有效方法,数据预取利用了数据之间时间和空间的相关性,在发生高速缓存缺失之前就发出访问内存的请求,把数据提前存入高速缓存,通过将访问内存的时间部分隐藏在处理器正常处理时间中,以减少处理器流水线因访存停顿的时间,从而提高计算机性能。
研究人员对于数据预取的多年研究,发展出了多种数据预取的算法,例如流预取算法、指针预取算法等等,这些算法各有利弊,都只在某些条件下具有优势。但是,对于一个具体处理器而言,其通常采用的是其中一个固定的数据预取算法,这一固定的算法也仅仅在某些条件下具有优势,在其他条件下,处理器的性能就开始下降。
发明内容
针对现有技术中的问题,本发明提出了一种处理器的动态数据预取系统,该系统根据预设的策略条件,动态地更换处理器当前的数据预取算法,从而在不同条件下,都能够提高处理器的访问速度,并提高处理器性能。
本发明的处理器的动态数据预取系统包括处理器核、内存、高速缓存、数据预取单元和预取协处理器,其中
数据预取单元包括两个预取器,其中一个是当前有效的处于工作状态的预取器,另一个是备用的处于休眠状态的预取器,两个预取器的状态可以互相转换;每个预取器都具有一个预取算法存储器,用于存储该预取器所使用的预取算法程序,当前有效的预取器通过执行其使用的预取算法程序,从内存中读取预取的数据,将该数据存入高速缓存中;
预取协处理器与处理器核和高速缓存连接,监控处理器核对高速缓存的访问情况,在满足预定条件后,预取协处理器做出判断,确定更换当前工作的预取算法,将新的预取算法存入备用的预取器的预取算法存储器,通知当前有效的预取器停止工作,进入休眠状态,通知备用的预取器进入工作状态,开始执行数据预取。
更换预取算法的时机也非常重要,因此我们在此系统中,进一步提出了更换预取算法的条件。
具体实施方式
程序员在编写程序时,会根据当前的应用背景或者个人的编写习惯等因素采用不同的数据结构和内存分配管理方式,从而呈现出不同的数据访问特征。这样的背景,使得处理器单一的预取机制很难适应各种情况下的数据访问特征,因此需要针对不同的数据访问特征提供不同的数据预取算法。本领域中已经提出了许多种数据预取算法,并且通过理论研究和实际应用,这些数据预取算法所适应的数据访问特征也很清楚,从而可以通过一定策略条件的判断,确定当前处理器应当使用哪种数据预取算法。
图1是本发明的动态数据预取系统,该系统包括处理器核、内存、高速缓存、数据预取单元和预取协处理器。其中数据预取单元包括两个预取器:预取器A和预取器B,这两个预取器其中一个是当前有效的处于工作状态的预取器,另一个是备用的处于休眠状态的预取器,两个预取器的状态可以互相转换,每个预取器都具有一个预取算法存储器,用于存储该预取器所使用的预取算法程序,这里的预取算法程序可以是本领域中任意一种预取算法程序,例如流预取算法、指针预取算法等等。当前有效的预取器通过执行其使用的预取算法程序,从内存中读取预取的数据,然后存入高速缓存中。
预取协处理器也具有一个非易失性存储器,其中存储了一张预取算法表,如图2所示,该算法表中具有N种预取算法,每种预取算法都具有优先级和其相应的策略条件,预取算法可以是本领域中任意一种预取算法程序。该预取协处理器在制造出厂时预置了一张默认的预取算法表,厂家可以在需要时提供该预取算法表的更新版本,通过固件更新程序,对预取协处理器中的预取算法表进行升级更新。在另一个实施例中,该算法表也可以存储在其他外部存储器(例如硬盘)上,当该预取协处理器启动时,从上述存储器中读取该算法表。
预取协处理器与处理器核和高速缓存连接,监控处理器核对高速缓存的访问情况,在满足预定条件后,预取协处理器确定更换预取算法,更换预取算法的过程如下:
假设预取器A是当前有效的预取器,正在执行数据预取功能,预取器B是备用的预取器,处于休眠状态中。
1)预取协处理器根据预取算法表中存储的N个算法的策略条件,按照优先级值由低到高的顺序(即从优先级1到优先级N的顺序),计算相应的策略条件是否得到满足,如果N个策略条件都没有得到满足,则算法结束,不更换预取算法;否则,一旦计算过程中遇到某一个策略条件得到了满足(假设是优先级为k的策略条件,其对应的预取算法是预取算法K),则停止该优先级之后的策略条件计算,执行步骤2;
2)预取协处理器唤醒预取器B,通知其准备更换预取算法;
3)预取协处理器将预取算法K发送给预取器B,预取器B将其存储在预取器B的预取算法存储器中,并删除预取算法存储器中原有的预取算法;
4)预取协处理器通知预取器A停止执行数据预取,进入休眠状态;
5)预取协处理器通知预取器B开始执行数据预取,从而预取器B成为当前有效的预取器。
通过上述步骤,预取协处理器将新的预取算法存入备用的预取器,并切换当前有效的预取器,从而完成了预取算法的变更。
更换预取算法的时机:
预取协处理器监控处理器核对高速缓存的访问情况,在满足预定条件后,预取协处理器做出判断,确定更换预取算法,这里的预定条件也很重要,直接影响到处理器的访存性能。
我们对更换时机进行了深入研究,考虑了大量可能的方案,经过大量的实践对比,从中选出了一种最佳的方案。根据该方案,本发明对更换时机的判断主要基于对高速缓存命中率的统计分析,通过监控,预取协处理器可以获得过去一段时间内的高速缓存命中率,由于各种因素的影响,高速缓存命中率可能出现大的起伏,因此并不能简单地认为命中率一下降就必须更换算法,做出这一判断需要谨慎。
本发明具体的更换条件判断方法如下:
1)预取协处理器在启动后,每隔T秒统计一次高速缓存命中率,得到过去T秒的高速缓存命中率PT,过去2T秒的高速缓存命中率P2T,过去3T秒的高速缓存命中率P3T,过去4T秒的高速缓存命中率P4T。
2)判断是否PT小于阈值P,如果PT小于P,则认为命中率过低,需要更换预取算法,判断过程结束;否则,继续执行以下步骤;
3)判断以下三个式子是否都成立:
PT<0.8P2T
P2T<0.7P3T
P3T<0.6P4T
如果上述三个式子都成立,则判断需要更换预取算法;如果有一个式子不成立,则判断目前还不需要更换预取算法。
上述时间T是一个预先设置的时间值,优选的,T=5。阈值P也是一个预先设置的值,其具体数值与高速缓存的大小相关。在处理器制造出厂时,由厂家预先设置好T和P的值,并且可以通过固件更新程序进行修改。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的权利要求保护范围之内。