一种数据处理方法及处理器的制造方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种数据处理方法及处理器。
【背景技术】
[0002]最近几年内,处理器厂商受到功耗和温度的限制,同时为了保持高性能运算持续增长,计算机已经朝着多核计算机体系架构方向发展。为了充分利用多核架构,应用程序被拆分成多个可独立运行在单个CPU上面的线程,这样设计程序可以并行执行提高整体运行效率。
[0003]当前多核体系架构的主流设计方案的一个例子如图1a和图1b所示,图1a中共有16个CPU核,彼此通过路由(图中粗线)可相互访问,图1b中是每个处理器的框架,其中*Ln代表 First Level Cache (第一级缓存)L1,或者 LI 及 Second Level Cache (第二级缓存)L2 ;Last Level Cache为最后一级缓存,简称LLC,*Ln分别和LLC及路由相连,LLC的目录和路由相连。当从内存中读出内存数据后会将内存数据均匀分摊到每个处理器的LLC。
[0004]基于这样的程序体系,需要保证数据处理的同步性和数据完整性,因此线程之间需要用某种同步机制来串行访问共享区域。Transact1n memory (事务内存)的提出正是为了提高线程的并行度,同时在发生冲突能够进行回滚到发生冲突之前的状态,保证了数据完整性。当前Transact1n memory技术已经进入了 CPU体系架构之中,包括IBM的BlueGen, Intel 的 Haswell 等。
[0005]经过将近20多年的发展,Transact1n memory可以分别由软件或者硬件实现,软件实现的Transact1n memory执行效率非常低,而硬件实现的Transact1n memory大大提高了其实用性,本文主要讨论硬件基础上的Transact1n memory。
[0006]Transact1n memory假设多核线程之间对于共享数据的访问很少产生写-读,读-写,以及写-写冲突,因此允许多个线程试探性的并行执行,通过隐藏数据的更新状态以及当发现产生冲突的时候进行回滚,使程序的状态能回到冲突之前的状态,利用这个特性在不影响数据完整性的前提下提高了体系结构的性能和可扩展性。虽然Transact1nmemory提高了多核系统的并行度,但随着并行度的提高冲突产生的概率也随之增加,一旦产生冲突进行回滚操作就会严重的伤害程序的性能。
[0007]如果采用提前无效化处理,能够加快关键区域的运行,大大减少由于对共享数据进行更新时产生的冲突。但如果直接将提前无效化处理应用到现有的Transact1nmemory技术中,由于提前无效化处理要求改变全局数据状态,与Transact1n Memory实现的方式截然相反(Transact1n Memory处理过程必须隐藏更新时的状态),因此不能与Transact1n memory 简单结合。
【发明内容】
[0008]本申请要解决的技术问题是如何减少多核系统中由于数据冲突产生的回滚事件,加速关键区域的运行。
[0009]为了解决上述问题,本申请提供了一种数据处理方法,包括:
[0010]第一处理器开始事务处理,将第一数据读取到私有缓存中;
[0011]第一处理器在私有缓存中对所述第一数据进行写操作,完成后开始提交事务内存;
[0012]如果所述第一数据在被第一处理器写操作前的最后一次更改是由第二处理器进行的,则将所述第一处理器的私有缓存中的所述第一数据写到最后一级缓存LLC中,无效化所述第一处理器的私有缓存中的所述第一数据;
[0013]事务内存完成提交。
[0014]进一步地,所述方法还包括:
[0015]当所述第一处理器将在私有缓存中对所述第一数据进行写操作时,如果所述第一数据在被第一处理器写操作前的最后一次更改是由第二处理器进行的,则将所述私有缓存中的所述第一数据的状态修改为独占且更改;如果所述第一数据在被第一处理器写操作前的最后一次更改是由第一处理器进行的,则将所述私有缓存中的所述第一数据的状态修改为更改;
[0016]所述开始提交事务内存的步骤后、事务内存完成提交的步骤前还包括:
[0017]如果所述第一处理器的私有缓存中的所述第一数据的状态为独占且更改,则将所述第一数据在LLC目录中的状态设置为独占且更改。
[0018]进一步地,所述第一处理器开始事务处理,将第一数据读取到私有缓存中的步骤包括:
[0019]S11、第一处理器开始事务处理,如果私有缓存中没有需要的所述第一数据,则根据地址映射访问LLC的目录;
[0020]S12、根据所述第一数据的缓存行在LLC的目录中的第一状态指示串,获知所述第一数据的状态;如果所述第一数据的状态为更改,则进行步骤S13 ;
[0021]S13、根据所述第一状态指示串中的数据标识位确定具有最新的所述第一数据的处理器;如果为第二处理器,则从所述第二处理器的私有缓存将最新的所述第一数据取回到LLC,将所述第一数据在LLC的目录中的状态修改为共享;如果为第一处理器,则直接进行第一处理器在私有缓存中对所述第一数据进行写操作的步骤;
[0022]S14、将所述第一数据从所述LLC中读到所述第一处理器的私有缓存中,将所述第一状态指示串中对应于所述第一处理器的数据标识位置位。
[0023]进一步地,所述步骤S12中还包括:
[0024]如果所述第一数据的状态为独占且更改,则进行步骤S13’ ;
[0025]所述方法还包括:
[0026]S13’、将所述第一数据在LLC的目录中的状态修改为共享且更改;进行步骤S14。
[0027]进一步地,在开始提交事务内存的步骤后、事务内存完成提交的步骤前还包括:
[0028]查询所述第一数据在LLC目录中状态指示串的各数据标识位,判断除了所述第一处理器对应的数据标识位以外,是否存在置位的数据标识位;如果存在,则无效化置位的数据标识位对应的处理器中的第一数据,并将该数据标识位复位。
[0029]本申请还提供了一种处理器,应用在多核处理设备中,包括:
[0030]私有缓存、提交单元;
[0031]读取单元,用于当本处理器开始事务处理时,将第一数据读取到所述私有缓存中;
[0032]写操作单元,用于在所述私有缓存中对所述第一数据进行写操作,完成后指示所述提交单元开始提交事务内存;
[0033]无效化单元,用于当所述提交单元开始提交事务内存后、完成事务内存提交前,如果所述第一数据在被本处理器写操作前的最后一次更改是由其它处理器进行的,则将所述私有缓存中的所述第一数据写到LLC中,无效化本处理器的私有缓存中的所述第一数据。
[0034]进一步地,所述的处理器还包括:
[0035]设置单元,用于在所述写操作单元将对所述第一数据进行写操作时,如果所述第一数据在被本处理器写操作前的最后一次更改是由其它处理器进行的,则将所述私有缓存中的第一数据的状态修改为独占且更改;如果所述第一数据在被本处理器写操作前的最后一次更改是由本处理器进行的,则将所述私有缓存中的所述第一数据的状态修改为更改;在所述提交单元开始提交事务内存后、完成事务内存提交前,如果所述第一处理器的私有缓存中的所述第一数据的状态为独占且更改,则将所述第一数据在LLC目录中的状态设置为独占且更改。
[0036]进一步地,所述读取单元当本处理器开始事务处理时,将第一数据读取到私有缓存中是指:
[0037]所述读取单元当本处理器开始事务处理时,如果私有缓存中没有需要的所述第一数据,则根据地址映射访问LLC的目录;根据所述第一数据的缓存行在LLC的目录中的第一状态指示串,获知所述第一数据的状态;如果所述第一数据的状态为更改,则根据所述第一状态指示串中的数据标识位确定具有最新的所述第一数据的处理器,如果为其它处理器,从该其它处理器的私有缓存将最新的所述第一数据取回到LLC,将所述第一数据在LLC的目录中的状态修改为共享,将所述第一数据从所述LLC中读到本处理器的私有缓存中,将所述第一状态指示串中对应于本处理器的数据标识位置位,指示所述写操作单元在本处理器的私有缓存中对所述第一数据进行写操作;如果为本处理器,则直接指示所述写操作单元在本处理器的私有缓存中对所述第一数据进行写操作。
[0038]进一步地,所述读取单元还用于当根据地址映射访问LLC的目录,且根据所述第一数据的缓存行在LLC的目录中的第一状态指示串,获知所述第一数据的状态为独占且更改时,将所述第一数据在LLC的目录中的状态修改为共享且更改。
[0039]进一步地,所述无效化单元还用于查询所述第一数据在LLC目录中状态指示串的各数据标识位,判断除了本处理器对应的数据标识位以外,是否存在置位的数据标识位;如果存在,则无效化置位的数据标识位对应的处理器中的第一数据,并将该数据标识位复位。
[0040]本申请的至少一个实施例利用在现有的硬件Transact1n memory的基础上,使用简单的预测机制无缝地将提前无效化处理与硬件Trasact1n memory相结合,加快提高预测准确性和Transact1n memory对关键区域的执行效率,减少Transact1n Memory运行时由于数据冲突产生的回滚时间,进一步提高多核系统的运行性能和可扩展性。当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。
【附图说明】
[0041]图1a为多核并行系统中多个处理器的示意图;
[0042]图1b为各处理器的结构示意图;
[0043]图2为数据在LLC的目录中的状态指示串的示意图;
[0044]图3为实施例一的数据处理方法的流程示意图;
[0045]图4为实施例一的第一个例子中开始时数据缓存行在LLC的目录中的状态指示串的不意图;
[0046]图5为实施例一的第一个例子中的数据处理