具体实施方式
在多核处理器***中,包括至少两个中央处理器(Central Processing Unit,CPU)簇(Cluster),每个Cluster包括一个Cache,该Cache可以为二级缓存(L2Cache)等高速缓冲处理器;该***中还包括支持Cache一致性的总线,各CPU均与总线连接。当该总线工作正常时,各CPU通过总线对该***中其他CPU的工作状态进行监听,能够使得各CPU的Cache中所存储的数据相同,即具有Cache一致性;当该总线工作异常时,会导致CPU之间由于未能进行正常的监听,而出现部分或全部CPU的Cache中所存储的数据不相同,即该电路中的各CPU之间不具有Cache一致性。本发明各实施例通过所采用的方法、装置和***,对各CPU的Cache中所存储的数据是否相同进行验证,也就是对Cache一致性的验证。
以下各实施例中所提及的处理器或CPU即为上述多核处理器***中的CPU;所提及的电路即为包括上述多核处理器***的电路。
图1为本发明第一种数据验证方法一实施例的流程图,如图1所示,该方法包括:
步骤101、根据电路中n个处理器对应的当前状态空间,以及目标状态空间,在预先获取的激励数据库中进行查找,获得至少一条目标激励;所述目标激励为所述当前状态空间与所述目标状态空间之间进行跳变所需的激励。
其中,所述当前状态空间由n个处理器的当前工作状态构成;所述激励数据库包括由n个处理器的工作状态构成的m种状态空间中,任意两种可以进行跳变的状态空间之间进行跳变所需的全部激励,所述激励包括在两种状态空间之间进行跳变需要执行的指令和指令状态,所述指令状态为执行所述指令所需的工作状态;其中,所包括的工作状态的类型以及每种类型的工作状态的个数均相同的状态空间属于同一种状态空间。
具体的,在多核处理器***中,CPU会采用相应的协议以实现各CPU之间的Cache一致性。可以采用Cache一致性协议包括MSI协议、MESI协议、MOESI协议等。以下各实施例中以ACE协议为例,对电路中Cache一致性的验证方法进行说明。其中,ACE协议为扩展了的AXI协议(AXI CoherencyExtension),AXI协议(Advanced eXtensible Interface)为ARM(Advanced RISCMachines)公司的一种总线协议。
需要说明的是,以下实施例中仅以ACE协议进行举例说明,所述的数据验证方法并不仅限于应用在此协议中。
各CPU的Cache中所存储的数据被称为Cache行,ACE协议中每条Cache行包括5种状态,分别为独占状态(Unique Clean,UC)、修改独占状态(UniqueDirty,UD)、共享状态(Shared Clean,SC)、修改共享状态(Shared Dirty,SD)和无效状态(Invalid,I)。也就是说,各CPU可以处于上述五种工作状态中的一种。
例如,当电路中包括4个CPU,各CPU的工作状态分别为s0、s1、s2和s3,则CPU的当前状态空间为(s0,s1,s2,s3),其中,每种工作状态可以为上述五种工作状态中的一种,即s0∈[UC,UD,SC,SD,I],s1∈[UC,UD,SC,SD,I],s2∈[UC,UD,SC,SD,I],s3∈[UC,UD,SC,SD,I]。相应地,(I,I,I,I)或(SC,I,I,SC)即为该4个CPU的两种可能的状态空间。
电路中包括n个CPU时,n个CPU各自的工作状态的组合即构成该电路中n个CPU的一种状态空间,相应地,n个CPU当前的工作状态的组合即构成电路中n个CPU当前的状态空间。
由于每个CPU均可以处于五种工作状态中的一种,使得n个CPU的工作状态的排列组合构成的状态空间的数量较多,本发明实施例中站在***全局的角度,不考虑各状态空间中存在重复的状态空间,将n个CPU可能出现的状态空间分为m种。基于ACE协议,对n个CPU所组成的状态空间的具体分类规则为:
第一类状态空间为,工作状态为I态的CPU数量为n个;
第二类状态空间为,工作状态为UC态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第三类状态空间为,工作状态为UD态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第四类状态空间为,工作状态为SC态的CPU数量为n个;
第五类状态空间为,工作状态为SD态的CPU数量为1个,工作状态为SC态的CPU数量为(n-1)个;
第六类状态空间为,工作状态为SC态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第七类状态空间为,工作状态为SD态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第八类状态空间为,工作状态为SC态的CPU数量为2至(n-1)个,相应地,n个CPU中除了工作状态为SC态的CPU以外,其余各CPU的工作状态均为I态;
第九类状态空间为,工作状态为SC态的CPU数量为1至(n-2)个,工作状态为SD态的CPU数量为1个,相应地,n个CPU中除了工作状态为SC态和SD态以外,其余各CPU的工作状态均为I态。
其中,第一至七类状态空间,每一类仅代表一种状态空间;第八类状态空间和第九类状态空间分别代表(n-2)种状态空间,相应地,n个CPU对应着m种状态空间,m=2×n+3。
上述分类规则的分类依据是,对于n个CPU组成的***而言,所包括的工作状态的类型,以及每种类型的工作状态的个数均相同的状态空间即归为同一种状态空间。基于该分类依据,本实施例提供的数据验证方法也可应用于其他协议。举例说明,例如第二类状态空间中,包括的CPU的工作状态为UC态和I态,并且处于UC态的CPU为1个,处于I态的CPU为(n-1)个,那么只要n个CPU中有1个处于UC态,其余处于I态,无论处于UC态的是n个CPU中的哪一个,均属于此类状态空间,也就是说,属于此种状态空间。
在m种状态空间之间,存在对应的激励,能够使得n个CPU的状态空间从一种跳变为另一种。相应地,m种状态空间中,任意两种可以进行跳变的状态空间之间,进行跳变所需的全部激励存储在激励数据库中。
当需要对电路中n个CPU的Cache中分别存储的数据是否相同进行验证时,进行验证的执行主体为控制模块,该控制模块与总线连接。
控制模块检测各CPU当前工作状态所对应的当前状态空间,并结合预先设定的验证的期望值,也就是目标状态空间;控制模块在获知当前状态空间和目标状态空间之后,在激励数据库中查找这两种状态空间之间是否存在实现跳变的激励。
若查找的结果是没有可采用的激励,则表示这两种状态空间之间不能够进行跳变,也就是说,该目标状态空间不是当前状态空间的可达状态;若查找的结果是存在可采用的激励,则表示这两种状态空间之间能够进行跳变,也就是说,该目标状态空间是当前状态空间的可达状态。
当前状态空间能够通过激励跳变到目标状态空间时,将查找到的激励作为能够实现当前状态空间和目标状态空间之间进行跳变的目标激励,其中目标激励可以为一条或多条。
以下对激励数据库进行具体说明。
激励数据库中存储的激励具体为,在两种状态空间之间的跳变所需要执行的指令和指令状态。其中,激励的执行主体为CPU,也就是说,激励具体为符合指令状态的CPU执行相应的指令。由于各CPU均通过总线监听其他CPU的工作状态,因此,除了执行指令的CPU的工作状态发生迁移以外,其他各CPU将相应地基于ACE协议的规则进行工作状态的迁移,从而在一个CPU执行指令改变其工作状态后,n个CPU的状态空间可能会相应地发生改变。
其中,上述指令的作用是使得执行该指令的CPU的工作状态发生迁移。具体的,每个CPU包括五种工作状态,相应地,CPU通过预先设置的指令可以实现在五种状态之间的迁移。例如,若CPU执行指令A能够实现其从I态迁移到SD态,此处所述的CPU并不仅限于某一个CPU,而是指,各CPU均可以通过执行指令A,而将其工作状态从I态迁移至SD态。
上述指令状态是指,执行相应的指令所需的工作状态。由于本发明实施例中对n个CPU的状态空间分为了9类m种,因此,在判断两个状态空间之间是否能够跳变时,实际判断的是两种状态空间之间是否能够实现跳变。
例如,状态空间1跳变到状态空间2是通过CPU1执行指令A实现的,那么,CPU1执行指令A,即为状态空间1跳变到状态空间2的一条激励,但是,CPU1所标记的不是CPU的标识,而是CPU1在状态空间1中的工作状态,也就是说,在状态空间1中,处于CPU1的工作状态的CPU,通过执行指令A,使状态空间1跳变到状态空间2。
当n个CPU中处于上述CPU1的工作状态的CPU为两个或者更多,如果其中一个处于该工作状态的CPU执行指令A,即可使得状态空间1跳变到状态空间2,那么该条激励中记录的是处于哪个工作状态的CPU执行相应的指令,从而控制模块可以控制n个CPU中,处于该工作状态的CPU中的任意一个执行该指令来实现状态空间的跳变。
由于状态空间由多个CPU的工作状态组成,并且多个CPU可能分别工作在不同的工作状态下,因此,两种状态空间之间的一条或多条激励,也就是,处于不同工作状态的CPU执行相应的指令,所构成的激励。换言之,激励包括指令和指令状态,也就是说,该条激励需要由工作状态为指令状态所对应的工作状态的CPU来执行,并且所执行的指令为激励中所包括的指令。
可以理解的是,对于单个CPU而言,其从工作状态1迁移到工作状态2需要执行的指令,与其从工作状态2迁移到工作状态1需要执行的指令不相同。
步骤102、执行每条所述目标激励,指示第一处理器执行所述目标激励中的指令,所述第一处理器是当前工作状态为所述目标激励中的指令状态的处理器,在所述第一处理器执行所述目标激励中的指令结束后,判断由n个处理器的工作状态构成的状态空间与所述目标状态空间是否属于同一种状态空间,若判断结果为是,则继续执行下一条目标激励,直至执行完全部所述目标激励之后,获得n个处理器中所存储的数据相同的验证结果。
控制模块根据电路中n个CPU的当前工作状态和目标工作状态,在激励数据库中查找到目标激励之后,即依次执行各条激励对各CPU中数据的一致性进行验证。
由于目标激励中包括指令和指令状态,即通过指令状态标识了执行该条指令的CPU的工作状态。将指令状态所对应的CPU定义为第一处理器,也就是说,第一处理器是当前工作状态为目标激励中的指令状态的CPU。
控制模块执行目标激励,控制第一处理器执行目标激励中的指令,进而在第一处理器执行完该指令后,判断所获得的n个处理器的状态空间与目标状态空间是否属于同一种状态空间。
其中,目标激励可以为直接激励或者间接激励。直接激励对应的情况为,两种状态空间之间通过单个CPU执行相应的指令即可实现跳变;间接激励对应的情况为,两种状态空间之间进行跳变需要两个或多个CPU依次执行相应的指令,或者其中的某个CPU依次执行不同的指令等。
因此,上述第一处理器并不仅限于单个处理器,在执行直接激励时,第一处理器所指的是执行该激励的CPU;在执行间接激励时,第一处理器所指的是分别执行间接激励中的各条激励时的CPU。
若目标激励为一条,则控制模块在执行完该条目标激励之后,判断所获得的n个CPU的状态空间与目标状态空间是否属于同一种状态空间,若是,则获得n个CPU中所存储的数据相同的验证结果。
若目标激励为多条时,则控制模块在执行第一条目标激励之后,判断出所获得的n个CPU的状态空间与目标状态空间是否属于同一种状态空间,若是,则继续执行下一条。直至最后一条目标激励执行完之后,若判断处所获得的n个CPU的状态空间与目标状态空间属于同一种状态空间,则获得n个CPU中所存储的数据相同的验证结果。
本发明实施例提供的数据验证方法,根据n个CPU的当前状态空间和目标状态空间,在激励数据库中查找能够实现两种状态空间之间进行跳变的目标激励,由控制模块控制目标激励中相应的CPU执行指令,若执行完目标激励之后,n个CPU的状态空间与目标状态空间属于同一种状态空间,则获得n个CPU各自的Cache中所存储的数据具有一致性的验证结果,由于将n个CPU可能存在的状态空间按照分类规则分为m种,因此所验证的当前状态空间和目标状态空间是种类之间的比较,从而有效地减小了冗余和重复的数据处理,有效地提高了验证Cache一致性的效率。
进一步地,在上述实施例的基础上,该方法还包括,执行步骤102时,在所述第一处理器执行所述目标激励中的指令结束后,如果判断出由n个处理器的工作状态构成的状态空间与所述目标状态空间不属于同一种状态空间,则获得n个处理器中所存储的数据不相同的验证结果。
若电路中n个处理器的当前状态空间与目标状态空间之间的激励为一条,并且控制模块在控制目标激励中指令状态对应的CPU执行完相应的指令之后,判断出n个处理器的状态空间与目标状态空间不属于同一种状态空间,则获得n个处理器所存储的数据不相同的验证结果。
若目标激励为多条时,在控制模块控制电路中相应的CPU执行目标激励时,在该条目标激励验证通过之后,即可执行下一条目标激励,相应地,若执行过程中,在执行其中一条目标激励时,所获得的n个处理器的状态空间与目标状态空间不属于同一种状态空间,即可获得n个处理器所存储的数据不相同的验证结果。也就是说,当目标激励为多条时,需要在执行其中每条目标激励时所获得的n个CPU的状态空间与目标状态空间均属于同一种状态空间时,才能够获得n个CPU中所存储的数据相同的结果。
本发明实施例提供的数据验证方法,在判断出n个CPU执行完目标激励后的状态空间与目标状态空间不属于同一种状态空间之后,获得n个CPU的各Cache中所存储的数据不相同的验证结果;并且,在目标激励为多条时,只要有一条目标激励没有通过验证,即获得n个CPU的各Cache中所存储的数据不相同的验证结果,有效了提高了对Cache一致性进行验证的完备性。
图2为本发明第一种数据验证方法另一实施例的流程图,如图2所示,在上述各实施例的基础上,执行步骤101之前,该方法还包括:
步骤200、获取验证平台输入的所述激励数据库。
控制模块在根据电路中n个处理器对应的当前状态空间,以及目标状态空间,在预先获取的激励数据库中进行查找之前,需要从验证平台获取该激励数据库。
该激励数据库由验证平台生成的。验证平台在生成该激励库之后,将其输入电路中的控制模块中,由控制模块控制电路中的相应的CPU执行相应的目标激励,以验证各CPU所存储的数据是否相同。
步骤201、配置所述目标状态空间。
控制模块在获取到激励数据库之后,还需要配置目标状态空间。该目标状态空间即对n个CPU进行验证的期望值,若通过执行相应的目标激励,n个CPU的状态空间能够跳变为目标状态空间,即该期望值,则说明n个CPU中所存储的数据一致;若通过执行相应的目标激励,n个CPU的状态空间跳变到的状态空间与目标状态空间不属于同一种,即所获得的状态空间与期望值不相同,则说明n个CPU中所存储的数据不一致。
本发明实施例提供的数据验证方法,在对n个CPU的Cache中存储的数据进行验证之前,控制模块从验证平台获取激励数据库,并在控制模块上预先配置目标状态空间,根据当前状态空间和目标状态空间,在激励数据库中查找可实现当前状态空间跳变到目标状态空间的目标激励,进而判断执行完目标激励之后的状态空间与目标状态空间是否属于同一种状态空间,从而有效地对各CPU的Cache中所存储的数据是否一致进行验证,由于激励数据库中的各条激励是两种状态空间之间跳变的激励,减少了存在冗余和重复的状态空间之间的激励,因此能够有效地提高了对Cache一致性进行验证的效率。
图3为本发明第二种数据验证方法一实施例的流程图,如图3所示,该方法包括:
步骤300、根据电路中处理器的数量n、所述处理器的工作状态的类型、以及预设的由处理器的工作状态构成状态空间的分类规则,确定由n个处理器的工作状态构成的m种状态空间;
其中,所包括的工作状态的类型以及每种类型的工作状态的个数均相同的状态空间属于同一种状态空间;
各CPU的Cache中所存储的数据被称为Cache行,ACE协议中每条Cache行包括5种状态,分别为独占状态(Unique Clean,UC)、修改独占状态(UniqueDirty,UD)、共享状态(Shared Clean,SC)、修改共享状态(Shared Dirty,SD)和无效状态(Invalid,I)。也就是说,各CPU可以处于上述五种工作状态中的一种。UC态、UD态、SC态、SD态和I态即为CPU的工作状态的类型。
例如,当电路中包括4个CPU,各CPU的工作状态分别为s0、s1、s2和s3,则CPU的当前状态空间为(s0,s1,s2,s3),其中,每种工作状态可以为上述五种工作状态中的一种,即s0∈[UC,UD,SC,SD,I],s1∈[UC,UD,SC,SD,I],s2∈[UC,UD,SC,SD,I],s3∈[UC,UD,SC,SD,I]。相应地,(I,I,I,I)或(SC,I,I,SC)即为该4个CPU的两种可能的状态空间。
验证平台根据待验证的电路中包括的CPU的数量生成激励数据库。当电路中包括n个CPU时,n个CPU各自的工作状态的组合即构成该电路中n个CPU的状态空间,相应地,n个CPU当前的工作状态的组合即构成电路中n个CPU当前的状态空间。
由于每个CPU均可以处于五种工作状态中的一种,使得n个CPU的工作状态的排列组合构成的状态空间的数量较多,本发明实施例中站在***全局的角度,不考虑各状态空间中存在重复的状态空间,将n个CPU可能出现的状态空间分为m种。基于ACE协议,对于n个CPU所组成的状态空间的具体分类规则为:
第一类状态空间为,工作状态为I态的CPU数量为n个;
第二类状态空间为,工作状态为UC态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第三类状态空间为,工作状态为UD态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第四类状态空间为,工作状态为SC态的CPU数量为n个;
第五类状态空间为,工作状态为SD态的CPU数量为1个,工作状态为SC态的CPU数量为(n-1)个;
第六类状态空间为,工作状态为SC态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第七类状态空间为,工作状态为SD态的CPU数量为1个,工作状态为I态的CPU数量为(n-1)个;
第八类状态空间为,工作状态为SC态的CPU数量为2至(n-1)个,相应地,n个CPU中除了工作状态为SC态的CPU以外,其余各CPU的工作状态均为I态;
第九类状态空间为,工作状态为SC态的CPU数量为1至(n-2)个,工作状态为SD态的CPU数量为1个,相应地,n个CPU中除了工作状态为SC态和SD态以外,其余各CPU的工作状态均为I态。
其中,第一至七类状态空间,每一类仅代表一种状态空间;第八类状态空间和第九类状态空间分别代表(n-2)种状态空间,相应地,n个CPU对应着m种状态空间,m=2×n+3。
上述分类规则的分类依据是,对于n个CPU组成的***而言,所包括的工作状态的类型,以及每种类型的工作状态的个数均相同的状态空间即归为同一种状态空间。基于该分类依据,本实施例提供的数据验证方法也可应用于其他协议。举例说明,例如第二类状态空间中,包括的CPU的工作状态为UC态和I态,并且处于UC态的CPU为1个,处于I态的CPU为(n-1)个,那么只要n个CPU中有1个处于UC态,其余处于I态,无论处于UC态的是n个CPU中的哪一个,均属于此类状态空间,也就是说,属于此种状态空间。
步骤301、根据所述处理器在不同类型的工作状态之间进行迁移使用的指令信息,依次分析所述m种状态空间中任意两种状态空间之间是否可以进行跳变,获得可以进行跳变的任意两种状态空间之间进行跳变所需的全部激励,以构成激励数据库;
其中,所述激励包括在两种状态空间之间进行跳变需要执行的指令和指令状态,所述指令状态为执行所述指令所需的工作状态;
在m种状态空间之间,存在对应的激励,能够使得n个CPU的状态空间从一种跳变为另一种。相应地,m种状态空间中,任意两种可以进行跳变的状态空间之间,进行跳变所需的全部激励存储在激励数据库中。
验证平台根据待验证的电路中CPU的数量,相应地,生成用于对该电路中Cache一致性进行验证的激励数据库。
激励数据库中存储的激励具体为,在两种状态空间之间的跳变所需要执行的指令和指令状态。其中,激励的执行主体为CPU,也就是说,激励具体为符合指令状态的CPU执行相应的指令。由于各CPU均通过总线监听其他CPU的工作状态,因此,除了执行指令的CPU的工作状态发生迁移以外,其他各CPU将相应地基于ACE协议的规则进行工作状态的迁移,从而在一个CPU执行指令改变其工作状态后,n个CPU的状态空间可能会相应地发生改变。
其中,上述指令的作用是使得执行该指令的CPU的工作状态发生迁移。具体的,每个CPU包括五种工作状态,相应地,CPU通过预先设置的指令可以实现在五种状态之间的迁移。例如,若CPU执行指令A能够实现其从I态迁移到SD态,此处所述的CPU并不仅限于某一个CPU,而是指,各CPU均可以通过执行指令A,而将其工作状态从I态迁移至SD态。
上述指令状态是指,执行相应的指令所需的工作状态。由于本发明实施例中对n个CPU的状态空间分为了9类m种,因此,在判断两个状态空间之间是否能够跳变时,实际判断的是两种状态空间之间是否能够实现跳变。
例如,状态空间1跳变到状态空间2是通过CPU1执行指令A实现的,那么,CPU1执行指令A,即为状态空间1跳变到状态空间2的一条激励,但是,CPU1所标记的不是CPU的标识,而是CPU1在状态空间1中的工作状态,也就是说,在状态空间1中,处于CPU1的工作状态的CPU,通过执行指令A,使状态空间1跳变到状态空间2。
当n个CPU中处于上述CPU1的工作状态的CPU为两个或者更多,如果其中一个处于该工作状态的CPU执行指令A,即可使得状态空间1跳变到状态空间2,那么该条激励中记录的是处于哪个工作状态的CPU执行相应的指令,从而控制模块可以控制n个CPU中,处于该工作状态的CPU中的任意一个执行该指令来实现状态空间的跳变。
由于状态空间由多个CPU的工作状态组成,并且多个CPU可能分别工作在不同的工作状态下,因此,两种状态空间之间的一条或多条激励,也就是,处于不同工作状态的CPU执行相应的指令,所构成的激励。换言之,激励包括指令和指令状态,也就是说,该条激励需要由工作状态为指令状态所对应的工作状态的CPU来执行,并且所执行的指令为激励中所包括的指令。
可以理解的是,对于单个CPU而言,其从工作状态1迁移到工作状态2需要执行的指令,与其从工作状态2迁移到工作状态1需要执行的指令不相同。
步骤302、将所述激励数据库输入控制模块,以供所述控制模块验证所述电路中各处理器之间的数据是否一致。
验证平台在生成该激励数据库后,将该激励数据库输入待验证电路的控制模块中。
控制模块根据电路中n个CPU的当前工作状态和目标工作状态,在激励数据库中查找到目标激励之后,即依次执行各条激励对各CPU中数据的一致性进行验证。
由于目标激励中包括指令和指令状态,即通过指令状态标识了执行该条指令的CPU的工作状态。将指令状态所对应的CPU定义为第一处理器,也就是说,第一处理器是当前工作状态为目标激励中的指令状态的CPU。
控制模块执行目标激励,控制第一处理器执行目标激励中的指令,进而在第一处理器执行完该指令后,判断所获得的n个处理器的状态空间与目标状态空间是否属于同一种状态空间。
若目标激励为一条,则控制模块在执行完该条目标激励之后,判断所获得的n个CPU的状态空间与目标状态空间是否属于同一种状态空间,若是,则获得n个CPU中所存储的数据相同的验证结果;若否,则获得n个处理器所存储的数据不相同的验证结果。
若目标激励为多条时,则控制模块在执行第一条目标激励之后,判断出所获得的n个CPU的状态空间与目标状态空间是否属于同一种状态空间,若是,则继续执行下一条,直至最后一条目标激励执行完之后,若判断处所获得的n个CPU的状态空间与目标状态空间属于同一种状态空间,则获得n个CPU中所存储的数据相同的验证结果。若执行过程中,在执行其中一条目标激励时,所获得的n个处理器的状态空间与目标状态空间不属于同一种状态空间,即可获得n个处理器所存储的数据不相同的验证结果。也就是说,当目标激励为多条时,需要在执行其中每条目标激励时所获得的n个CPU的状态空间与目标状态空间均属于同一种状态空间时,才能够获得n个CPU中所存储的数据相同的结果。
本发明实施例提供的数据验证方法,验证平台根据CPU的数量、CPU的工作状态的类型以及由CPU的工作状态构成状态空间的分类规则,确定状态空间的种类,并根据CPU在不同类型的工作状态之间迁移所使用的指令信息,分析各状态空间之间进行跳变的全部激励,进而构成激励数据库,用于对电路中CPU的Cache一致性的验证,由于所采用的状态空间的分类规则中,将存在冗余和重复情况的状态空间归为一种,使得激励数据库中的激励的数量得到了有效的减少,进而有效地提高了对电路中各CPU的Cache一致性的验证效率。
图4为本发明第二种数据验证方法另一实施例的流程图,在上述实施例的基础上,如图4所示,步骤301具体包括:
步骤3011、根据所述处理器在不同类型的工作状态之间进行迁移使用的指令信息,依次分析所述m种状态空间中任意两种状态空间之间是否可以进行跳变;
CPU在不同类型的工作状态之间进行迁移,需要使用对应的指令信息,其中,指令信息是指处于一种工作状态的CPU迁移到另一种工作状态所需要使用的指令。由于在总线正常的情况下,n个CPU中的一个CPU在执行完相应的指令后,其他各CPU中的部分或全部也会根据ACE协议的规则适应性的发生状态迁移,因此,可能会使得n个CPU由一种状态空间跳变到另一种状态空间。
基于上述跳变的方式,依次对m种状态空间进行分析,分析m种状态空间中任意两种状态空间之间是否能够通过跳变,由一种状态空间跳变到另一种状态空间。
步骤3012、获得可以进行跳变的任意两种状态空间之间直接进行跳变所需的直接激励;
步骤3013、获得可以进行跳变的任意两种状态空间之间,经由中间状态空间进行跳变所需的间接激励;
其中,所述间接激励包括:可以进行跳变的任意两种状态空间中一种状态空间跳变到所述中间状态空间所需的激励和从所述中间状态空间跳变到可以进行跳变的任意两种状态空间中另一种状态空间所需的激励;
对m种状态空间中的任意两种进行分析时,若一种状态空间能够跳变到另一种状态空间,则该两种状态空间之间存在直接进行跳变的激励,将这类激励作为直接激励,保存在激励数据库中。
在获得m种状态空间之间全部的直接激励之后,利用有向图或者数据表等方式将可以实现跳变的各状态空间联系在一起。图5为本发明实施例中一种间接激励的示意图,如图5所示,举例说明。例如,状态空间1能够利用激励1直接跳变到状态空间2,并且状态空间2能够利用激励2直接跳变到状态空间3,那么状态空间2即为中间状态空间,激励1和激励2即为状态空间1与状态空间3之间的间接激励。
并且该中间状态可以为一个或者多个,相应地,首尾两个状态空间通过两条或者多条激励组成的间接激励,成为可以跳变的两种状态空间。依此类推,m种状态空间之间通过直接激励和间接激励可以实现多种方式的跳变。
其中,因此,上述第一处理器并不仅限于单个处理器,在执行直接激励时,第一处理器所指的是执行该激励的CPU;在执行间接激励时,第一处理器所指的是分别执行间接激励中的各激励时的CPU。
步骤3014、将可以进行跳变的任意两种状态空间之间,进行跳变所需的所述直接激励和所述间接激励保存至所述激励数据库。
在获得直接激励和间接激励之后,将直接激励和间接激励保存至激励数据库中,用于对电路中n个CPU的Cache一致性的验证。
本发明实施例中提供的数据验证方法,验证平台在生成激励数据库的过程中,不仅考虑了两种状态空间之间能够实现跳变的直接激励,还考虑了经由中间状态能够实现的两种状态空间之间的间接跳变,从而使得激励数据库更全面,能够有效地提高对电路中各CPU的Cache一致性进行验证的完备性。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图6为本发明控制模块一实施例的结构示意图,如图6所示,该控制模块包括查询单元11和处理单元12。
其中,查询单元11,用于根据电路中n个处理器对应的当前状态空间,以及目标状态空间,在预先获取的激励数据库中进行查找,获得至少一条目标激励;所述目标激励为所述当前状态空间与所述目标状态空间之间进行跳变所需的激励;
其中,所述当前状态空间由n个处理器的当前工作状态构成;所述激励数据库包括由n个处理器的工作状态构成的m种状态空间中,任意两种可以进行跳变的状态空间之间进行跳变所需的全部激励,所述激励包括在两种状态空间之间进行跳变需要执行的指令和指令状态,所述指令状态为执行所述指令所需的工作状态;其中,所包括的工作状态的类型以及每种类型的工作状态的个数均相同的状态空间属于同一种状态空间;
处理单元12,用于执行每条所述目标激励,指示第一处理器执行所述目标激励中的指令,所述第一处理器是当前工作状态为所述目标激励中的指令状态的处理器,在所述第一处理器执行所述目标激励中的指令结束后,判断由n个处理器的工作状态构成的状态空间与所述目标状态空间是否属于同一种状态空间,在判断结果为是时,继续执行下一条目标激励,直至执行完全部所述目标激励之后,获得n个处理器中所存储的数据相同的验证结果。
本发明实施例提供的控制模块,根据n个CPU的当前状态空间和目标状态空间,在激励数据库中查找能够实现两种状态空间之间进行跳变的目标激励,由控制模块控制目标激励中相应的CPU执行指令,若执行完目标激励之后,n个CPU的状态空间与目标状态空间属于同一种状态空间,则获得n个CPU各自的Cache中所存储的数据具有一致性的验证结果,由于将n个CPU可能存在的状态空间按照分类规则分为m种,因此所验证的当前状态空间和目标状态空间是种类之间的比较,从而有效地减小了冗余和重复的数据处理,有效地提高了验证Cache一致性的效率。
进一步地,在上述各实施例的基础上,处理单元12还用于在所述第一处理器执行所述目标激励中的指令结束后,若判断出由n个处理器的工作状态构成的状态空间与所述目标状态空间不属于同一种状态空间,获得n个处理器中所存储的数据不相同的验证结果。
本发明实施例控制模块,在判断出n个CPU执行完目标激励后的状态空间与目标状态空间不属于同一种状态空间之后,获得n个CPU的各Cache中所存储的数据不相同的验证结果;并且,在目标激励为多条时,只要有一条目标激励没有通过验证,即获得n个CPU的各Cache中所存储的数据不相同的验证结果,有效了提高了对Cache一致性进行验证的完备性。
图7为本发明控制模块另一实施例的结构示意图,如图7所示,在上述各实施例的基础上,该控制模块还包括输入单元13和配置单元14。
其中,输入单元13,用于在所述查询单元11根据电路中n个处理器对应的当前状态空间,以及目标状态空间,在预先获取的激励数据库中进行查找之前,获取验证平台输入的所述激励数据库;
配置单元14,用于在所述查询单元11根据电路中n个处理器对应的当前状态空间,以及目标状态空间,在预先获取的激励数据库中进行查找之前,配置所述目标状态空间。
本发明实施例提供的控制模块,在对n个CPU的Cache中存储的数据进行验证之前,控制模块从验证平台获取激励数据库,并在控制模块上预先配置目标状态空间,根据当前状态空间和目标状态空间,在激励数据库中查找可实现当前状态空间跳变到目标状态空间的目标激励,进而判断执行完目标激励之后的状态空间与目标状态空间是否属于同一种状态空间,从而有效地对各CPU的Cache中所存储的数据是否一致进行验证,由于激励数据库中的各条激励是两种状态空间之间跳变的激励,减少了存在冗余和重复的状态空间之间的激励,因此能够有效地提高了对Cache一致性进行验证的效率。
进一步地,在上述各实施例的基础上,所述处理器的数量n与所述状态空间的种类m之间的关系满足:m=2×n+3。
本发明实施例中所述的控制模块进行数据验证的方法,可以参见上述对应的方法实施例中所述的方法,此处不再赘述。
图8为本发明验证平台一实施例的结构示意图,如图8所示,该验证平台包括确定模块21、获取模块22和输出模块23。
其中,确定模块21,用于根据电路中处理器的数量n、所述处理器的工作状态的类型、以及预设的由处理器的工作状态构成状态空间的分类规则,确定由n个处理器的工作状态构成的m种状态空间;
其中,所包括的工作状态的类型以及每种类型的工作状态的个数均相同的状态空间属于同一种状态空间;
获取模块22,用于根据所述处理器在不同类型的工作状态之间进行迁移使用的指令信息,依次分析所述m种状态空间中任意两种状态空间之间是否可以进行跳变,获得可以进行跳变的任意两种状态空间之间进行跳变所需的全部激励,以构成激励数据库;
其中,所述激励包括在两种状态空间之间进行跳变需要执行的指令和指令状态,所述指令状态为执行所述指令所需的工作状态;
输出模块23,用于将所述激励数据库输入包括所述电路,以供所述电路验证各处理器之间的数据是否一致。
本发明实施例提供验证平台,根据CPU的数量、CPU的工作状态的类型以及由CPU的工作状态构成状态空间的分类规则,确定状态空间的种类,并根据CPU在不同类型的工作状态之间迁移所使用的指令信息,分析各状态空间之间进行跳变的全部激励,进而构成激励数据库,用于对电路中CPU的Cache一致性的验证,由于所采用的状态空间的分类规则中,将存在冗余和重复情况的状态空间归为一种,使得激励数据库中的激励的数量得到了有效的减少,进而有效地提高了对电路中各CPU的Cache一致性的验证效率。
图9为本发明验证平台另一实施例的结构示意图,如图9所示,获取模块22进一步包括分析单元221、直接激励获取单元222、间接激励获取单元223和存储单元224。
其中,分析单元221,用于根据所述处理器在不同类型的工作状态之间进行迁移使用的指令信息,依次分析所述m种状态空间中任意两种状态空间之间是否可以进行跳变;
直接激励获取单元222,用于获得可以进行跳变的任意两种状态空间之间直接进行跳变所需的直接激励;
间接激励获取单元223,用于获得可以进行跳变的任意两种状态空间之间,经由中间状态空间进行跳变所需的间接激励;
其中,所述间接激励包括:可以进行跳变的任意两种状态空间中一种状态空间跳变到所述中间状态空间所需的激励和从所述中间状态空间跳变到可以进行跳变的任意两种状态空间中另一种状态空间所需的激励;
存储单元224,用于将可以进行跳变的任意两种状态空间之间,进行跳变所需的所述直接激励和所述间接激励保存至所述激励数据库。
本发明实施例中提供的验证平台,在生成激励数据库的过程中,不仅考虑了两种状态空间之间能够实现跳变的直接激励,还考虑了经由中间状态能够实现的两种状态空间之间的间接跳变,从而使得激励数据库更全面,能够有效地提高对电路中各CPU的Cache一致性进行验证的完备性。
进一步地,在上述各实施例的基础上,所述处理器的数量n与所述状态空间的种类m之间的关系满足:m=2×n+3。
本发明实施例中所述的验证平台进行数据验证的方法,可以参见上述对应的方法实施例中所述的方法,此处不再赘述。
图10为本发明控制器实施例的结构示意图,如图10所示,该控制器31包括上述各实施例中所述的任意一种控制模块311。
本发明实施例中所述的控制器进行数据验证的方法,可以参见上述对应的方法实施例中所述的方法,此处不再赘述。
本发明实施例提供的控制器,根据n个CPU的当前状态空间和目标状态空间,在激励数据库中查找能够实现两种状态空间之间进行跳变的目标激励,由控制模块控制目标激励中相应的CPU执行指令,若执行完目标激励之后,n个CPU的状态空间与目标状态空间属于同一种状态空间,则获得n个CPU各自的Cache中所存储的数据具有一致性的验证结果,由于将n个CPU可能存在的状态空间按照分类规则分为m种,因此所验证的当前状态空间和目标状态空间是种类之间的比较,从而有效地减小了冗余和重复的数据处理,有效地提高了验证Cache一致性的效率。
图11为本发明计算机***实施例的结构示意图,如图11所示,该计算机***包括上述各实施例中任意一种验证平台41,以及包括上述任意一种控制器31和两个或多个处理器32的电路42,所述验证平台与所述电路中的所述控制器之间通信连接,所述控制器与所述两个或多个处理器之间通信连接。
本发明实施例中所述的计算机***进行数据验证的方法,可以参见上述对应的方法实施例中所述的方法,此处不再赘述。
本发明实施例提供的计算机***,根据n个CPU的当前状态空间和目标状态空间,在激励数据库中查找能够实现两种状态空间之间进行跳变的目标激励,由控制模块控制目标激励中相应的CPU执行指令,若执行完目标激励之后,n个CPU的状态空间与目标状态空间属于同一种状态空间,则获得n个CPU各自的Cache中所存储的数据具有一致性的验证结果,由于将n个CPU可能存在的状态空间按照分类规则分为m种,因此所验证的当前状态空间和目标状态空间是种类之间的比较,从而有效地减小了冗余和重复的数据处理,有效地提高了验证Cache一致性的效率。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。