首页> 中国专利> 多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序

多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序

摘要

本发明涉及多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序。多核处理器中的CPU(#0)通过检测部(502),检测在多核处理器内将由作为同步源核的CPU(#M)执行中的线程向作为同步目标核的CPU(#N)转移这一情况。检测后,CPU(#0)通过确定部(503),并参照寄存器依存表(501),确定与检测出进行了转移的线程对应的特定的寄存器。在确定后,CPU(#0)通过生成部(504)生成确定被确定出的特定的寄存器以及同步目标核的同步控制信息。与多核处理器以能够进行通信的方式连接的同步控制部(505)从CPU(#0)取得生成的同步控制信息。接下来,同步控制部(505)从CPU(#M)的特定的寄存器读入根据同步控制信息而得的特定的寄存器的值,并对CPU(#N)的特定的寄存器写入读入的值。

著录项

  • 公开/公告号CN103080921A

    专利类型发明专利

  • 公开/公告日2013-05-01

    原文格式PDF

  • 申请/专利权人 富士通株式会社;

    申请/专利号CN201080068873.6

  • 申请日2010-08-30

  • 分类号G06F15/17;G06F9/38;

  • 代理机构北京集佳知识产权代理有限公司;

  • 代理人舒艳君

  • 地址 日本神奈川县

  • 入库时间 2024-02-19 19:15:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-08-16

    未缴年费专利权终止 IPC(主分类):G06F15/17 授权公告日:20151125 终止日期:20180830 申请日:20100830

    专利权的终止

  • 2015-11-25

    授权

    授权

  • 2013-06-05

    实质审查的生效 IPC(主分类):G06F15/17 申请日:20100830

    实质审查的生效

  • 2013-05-01

    公开

    公开

说明书

技术领域

本发明涉及控制寄存器间的同步的多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序。

背景技术

近年来,代替安装一个处理器核的计算机亦即单核处理器,而采用安装有多个处理器的计算机亦即多核处理器的方式的装置正在增加。在将面向以往的单核的软件资产应用于多核处理器的情况下,由于是由多个核执行一个程序,所以需要考虑寄存器的值的兼容性。

例如,作为与执行对象的生成相关的技术,公开有一种在汇编程序上安装虚拟的寄存器,在汇编的阶段,通过对虚拟的寄存器进行流程解析来判断生存区间,并置换成实际寄存器这样的技术(例如,参照下述专利文献1)。在专利文献1所涉及的技术中,能够明确寄存器的生存区间。因此,在将写在单核上的汇编码变更为通过多核处理器系统来并列处理的情况下,能够避免不需要的同步处理的插入、或者同步处理的漏插入。

另外,作为与在多核处理器系统中的负荷分散相关的技术,例如已经公开了一种在处理模块中持有配置信息,基于配置信息来决定各核所执行的处理模块这样的技术(例如,参照下述专利文献2。)。另外,作为用于进行多核处理器系统中的并列处理的硬件的技术,公开了一种通过具有能够从多个核访问的双端口的寄存器,从而能够容易地进行数据转发的技术(例如,参照下述专利文献3。)。

另外,作为多核处理器系统的寄存器的同步方法,存在一种利用了高速缓存一致性机构的技术(以下,称为“现有技术1”。)。例如,在使特定的核的寄存器与其他核的寄存器同步的情况下,特定的核首先将寄存器的值写入高速缓存。检测出寄存器的值被写入高速缓存的高速缓存一致性机构向其他核的高速缓存通知寄存器的值。最后,其他核从其他核的高速缓存读入寄存器的值,并写入其他核的寄存器。通过前述的一系列的动作能够进行寄存器的同步。

另外,作为多核处理器系统的寄存器的同步方法,例如公开了一种设置进行同步的专用指令的技术(例如,参照下述专利文献4。)。在专利文献4所涉及的技术中,在特定的核执行专用指令时,特定的核向其他核发送寄存器的值,使特定的核在其他核执行寄存器转发指令之前成为暂时停止状态。由此,能够在软件上以一个步骤执行与现有技术1等同的处理内容。

图13是表示在以往例的多核处理器系统中执行C程序或者C++程序时的寄存器的同步方法的说明图。设计时,编译器读入成为C源程序、或者C++源程序的C/C++源程序1301,作为被追加了同步控制码的执行对象的一部分,生成程序块1302和程序块1303。另外,同步控制码所对应的位置为程序块1304、程序块1305。具体而言,C/C++源程序1301包含“A=A+1;func(A);”这2个宣言,程序块1302与程序块1303是前述的2个宣言所对应的执行对象。

在图13的例子中,即使执行程序块1302与程序块1303的CPU不同,也能够通过程序块1304、程序块1305来取得寄存器Gr1的同步,能够正常地进行动作。具体而言,在程序块1304中,将寄存器Gr1保存在作为高速缓存等的区域的0x0000FF00中。接下来,在程序块1305中,读入保存在0x0000FF00中的值并设定为寄存器Gr1。这样,存在下述技术,即在编译时,通过追加同步控制码,从而根据面向单核的程序生成面向多核处理器的执行对象的技术(以下,称为“现有技术2”。)。

专利文献1:日本特开平8-234997号公报

专利文献2:日本特开2006-99156号公报;

专利文献3:日本特开平01-048163号公报;

专利文献4:日本特开平04-195664号公报

然而,在上述的现有技术中,在现有技术1、现有技术2、还有专利文献4所涉及的技术中,新追加了同步控制码。因此,若将现有技术1、现有技术2、专利文献4所涉及的技术用于汇编源程序,则存在对于生成的执行对象执行码发生改变这样的问题。汇编源程序例如,在想要减少即使1个步骤的指令数的情况下,由设计者生成。因此,汇编源程序被期待一对一地变换成机器语言,由于无意中被追加了执行码,因此存在成为设计者不希望的代码量这样的问题。

本发明是为了消除上述现有技术的问题点,其目的在于,提供能够不改变汇编源程序而以多核并行执行的多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序。

为了解决上述课题,实现目的,公开的多核处理器系统通过多核处理器中的特定的核,检测出在多核处理器内将由同步源核执行中的线程转移至同步目标核这一情况,通过特定的核,参照确定线程组的各个线程与和线程建立了对应的寄存器的组合的表,确定与检测出进行了转移的线程对应的特定的寄存器,通过特定的核,生成确定被确定的特定的寄存器以及同步目标核的同步控制信息,与多核处理器以能够进行通信的方式连接,从特定的核取得生成的同步控制信息,从同步源核的特定的寄存器读入根据同步控制信息获得的特定的寄存器的值,对同步目标核的特定的寄存器写入从同步源核的特定的寄存器读入的值。

根据本多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序,能够起到不改变面向单核的汇编源程序就能够以多核正常地并行执行这样的效果。

附图说明

图1是表示实施方式涉及的多核处理器系统100的硬件的功能框图。

图2是表示对CPUs101应用使用专用同步线路的寄存器同步控制装置的状态的功能框图。

图3表示对CPUs101应用使用了监测机构201的寄存器同步控制装置的状态的功能框图。

图4是表示产生同步事件的状态的说明图。

图5是表示多核处理器系统100的功能的功能框图。

图6是表示同步事件未产生时的寄存器同步控制装置205的概要的说明图。

图7是表示同步控制寄存器603的存储内容的一个例子的说明图。

图8是表示同步事件产生时的同步源CPU的寄存器同步控制装置205的概要的说明图。

图9是表示同步事件产生时的同步目标CPU的寄存器同步控制装置205的概要的说明图。

图10是表示多核处理器系统100的设计时的概要的说明图。

图11是表示调度处理的流程图。

图12是表示寄存器同步控制处理的流程图。

图13是表示在以往例中的多核处理器系统中执行C程序或者C++程序时的寄存器的同步方法的说明图。

具体实施方式

以下,参照附图,对本发明的多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序的优选实施方式详细地进行说明。

(多核处理器系统的硬件)

图1是表示实施方式所涉及的多核处理器系统100的硬件的功能框图。在图1中,多核处理器系统100具备搭载多个CPU的CPUs101、ROM(Read Only Memory)102和RAM(Random Access Memory)103。另外,多核处理器系统100具备快闪ROM104、快闪ROM控制器105和快闪ROM106。另外,多核处理器系统100具备显示器107、I/F(Interface)108、键盘109作为与用户、其他设备的输入输出装置。另外,各部通过总线110分别连接。

这里,CPUs101管理多核处理器系统100的整体的控制。CPUs101是指并行处理地连接单核处理器的所有的CPU。CPUs101包括CPU#0、CPU#1。并且,CPUs101也可以包括3个以上的CPU。CPU#0,CPU#1分别具有专用的高速缓存。另外,多核处理器系统是包括搭载有多个核的处理器的计算机系统。只要是搭载多个核,无论是搭载多个核的单一处理器,还是单核处理器并行处理的处理器组均可。此外,在本实施方式中,以作为单核处理器的CPU并行处理的形态为例进行说明。

另外,CPU#0、CPU#1分别持有专用的寄存器,还分别具有成为本实施方式的特征的、专用的寄存器同步控制装置。利用图2后述寄存器同步控制装置的详细。

ROM102存储有启动程序等程序。RAM103被用作为CPUs101的工作区域。快闪ROM104存储有OS(Operating System)等系统软件、应用软件等。例如,在更新OS时,多核处理器系统100通过I/F108接收新的OS,并将保存在快闪ROM104中的旧的OS更新为接收到的新OS。

快闪ROM控制器105按照CPUs101的控制来控制针对快闪ROM106的数据的读/写。快闪ROM106存储在快闪ROM控制器105的控制下写入的数据。作为数据的具体例,有使用多核处理器系统100的用户通过I/F108而取得的图像数据、影像数据等。快闪ROM106例如能够采用存储卡、SD卡等。

显示器107显示以光标、图标或者工具箱为代表的文档、图像、功能信息等数据。该显示器107例如能够采用TFT液晶显示器等。

I/F108通过通信线路与LAN(Local Area Network)、WAN(WideArea Network)、互联网等网络111连接,经由网络111与其他装置连接。而且,I/F108管理网络111与内部的接口,控制来自外部装置的数据的输入输出。I/F108能够采用例如调制解调器、LAN适配器等。

键盘109具备用于输入数字、各种指示等的键,进行数据的输入。另外,键盘109可以是触摸面板式的输入板、数字键等。

图2是表示对CPUs101应用使用了专用同步线路的寄存器同步控制装置的状态的功能框图。图2中所示的硬件为CPUs101所包含的CPU#0、CPU#1、RAM103以及作为高速缓存一致性机构的一种的监测机构201。另外,在CPU#0、CPU#1的内部存在CPU内运算单元202、CPU内寄存器组203和高速缓存204。以下,在为了表示与CPU#0、CPU#1分别对应而对各硬件、软件标注了接尾标记亦即“#0”、“#1”的情况下,表示是各自的CPU的内部所存在的硬件、由各自的CPU执行中的软件。

另外在CPU#0、CPU#1的内部还存在作为本实施方式中的特征的、寄存器同步控制装置205和通信部206。而且,CPU内运算单元202能够访问CPU内寄存器组203。另外,CPU内运算单元202与寄存器同步控制装置205通过地址总线207连接,通信部206#0、通信部206#1通过专用线路208连接。

监测机构201是获取CPU#0、CPU#1所访问的高速缓存204#0、高速缓存204#1的匹配性的装置。监测机构201管理高速缓存为自身的高速缓存和其他CPU的高速缓存的更新状态,与其他高速缓存交换更新状态的信息。通过交换更新状态的信息,监测机构201判断在哪个高速缓存中存在最新的数据。另外,监测机构201变更自身的高速缓存的状态、或进行高速缓存的无效化,以使得各高速缓存能够获得最新的数据。

CPU内运算单元202是进行整数运算操作、逻辑运算、位移操作等的运算单元。CPU内运算单元202利用CPU内寄存器组203按照从RAM103等读入的指令代码来进行运算。

CPU内寄存器组203是CPU内运算单元202进行运算所使用的存储装置。CPU内寄存器组203根据用途而存在几个种类。例如存在累加器、地址寄存器、通用寄存器、程序计数器、状态寄存器等。

累加器是存储运算结果等、暂时存储数据的寄存器。地址寄存器是在访问存储器的情况下的指定地址时所使用的寄存器。通用寄存器是不带有特定的目的而根据指令来实现各种功能的寄存器,特别是具有累加器和地址寄存器的功能。

程序计数器是指示保存有接下来要执行的指令的主存储器上的地址的寄存器。状态寄存器是保持根据运算结果而产生的位数溢出、累加器为0的状态、或者各种处理器的状态的寄存器。此外,除了累加器、地址寄存器、通用寄存器、程序计数器、状态寄存器以外,根据CPU的规格还存在专用寄存器。例如,存在处理浮动小数点的浮动小数点寄存器。

例如,CPU内运算单元202从RAM103取出用机器语言写的指令数据。这里,假定当指令数据以助记符表现时书写为“Store Gr1Acc#”。“Gr1”指通用寄存器,“Acc#”指累加器。取出后,CPU内运算单元202执行指令数据。在前述的例子中,CPU内运算单元202将累加器的值保存在通用寄存器“Gr1”中。由于CPU#0、CPU#1能够高速地访问RAM103的数据,所以高速缓存204是复制了RAM103的数据的一部分的存储区域。

寄存器同步控制装置205是控制CPU内寄存器组203#0与CPU内寄存器组203#1的同步的装置。例如,寄存器同步控制装置205#0、寄存器同步控制装置205#1将通用寄存器之一的Gr1寄存器在CPU#0与CPU#1中取得同步。

通信部206与寄存器同步控制装置205连接,进行与其他寄存器同步控制装置205的通信。具体而言,通信部206#0将寄存器同步控制装置205#0取得的CPU#0的寄存器的值通过专用线路208转发至寄存器同步控制装置205#1。接收到寄存器的值的通信部206#1将寄存器的值通知给寄存器同步控制装置205#1。

图3是表示对CPUs101应用了使用监测机构201的寄存器同步控制装置的状态的功能框图。图2中,通信部206#0和通信部206#1通过专用线路208进行通信,但在图3中,使用高速缓存204和监测机构201来转发寄存器的值等。

具体而言,设计者在设计多核处理器系统100时,将用于寄存器同步的保护区域301确保在高速缓存204中。保护区域301是高速缓存204的区域之中的、与由被分配给CPU的线程等使用、数据被更换的区域不同的区域,是被保护为数据不被消除的区域。首先,通信部206#0对保护区域301#0写入寄存器的值。检测出对保护区域301#0进行了写入的监测机构201将保护区域301#0的内容复制到保护区域301#1。复制后,通信部206#1将写入保护区域301#1的寄存器的值通知给寄存器同步控制装置205#1。

图4是表示产生同步事件的状态的说明图。图4中,通过执行来自汇编源程序401的执行对象402,从而示出了产生同步事件的状态。另外,附图标记403所示的说明图表示执行对象在单核中动作的情况,附图标记404所示的说明图表示执行对象在多核中动作的情况。

设计时,汇编器读入汇编源程序401,生成一对一地变换而得的执行对象402。在图4的例子中,作为执行对象402,汇编器生成程序块405和程序块406。此外,汇编源程序401记载了与C/C++源程序1301相同的内容的“A=A+1;func(A);”这样的2个宣言。另外,汇编源程序401用最小的指令数执行前述的2个宣言,因此所期望的同步控制代码未被插入。

作为各程序块的处理内容,程序块405记载了将累加器的值保存在寄存器Gr1中,并移至存在func()的0x02FF0000地址这样的指令。程序块406记载了将寄存器Gr1的内容重新读到累加器这一指令。

在CPU执行程序块405、程序块406时,CPU生成线程,在线程上执行各程序块。在附图标记403所示的说明图中,假设了单核执行基于程序块405的线程和基于程序块406的线程的情况。此时,由于程序块405的寄存器Gr1与程序块406的寄存器Gr1相同,因此正常进行动作。

在附图标记404所示的说明图中,假设了CPUs101中的CPU#M执行基于程序块405的线程,作为与CPU#M不同的CPU的CPU#N执行程序块406这样的在多核中动作的情况。此外,M与N是0以上的整数。此时,由于程序块405的寄存器Gr1为CPU#M的寄存器Gr1,程序块406的寄存器Gr1为CPU#N的寄存器Gr1,所以不是正常地动作。

由于只要是值相等就正常地进行动作,因此例如,通过使CPU#M的寄存器Gr1与CPU#N的寄存器Gr1取得同步,能够在多核中使程序块405、程序块406正常进行动作。具体而言,通过用CPU#M的寄存器Gr1的值改写CPU#N的寄存器Gr1,能够取得同步。

以下,在产生了为了正常进行动作而取得2个CPU间的寄存器的同步的契机的情况下,设为产生了同步事件。另外,将成为寄存器的同步源的CPU#M作为同步源CPU,将成为寄存器的同步目标的CPU#N作为同步目标CPU。并且,在图4的例中,将成为同步源的线程作为同步源线程,将成为同步目标的线程作为同步目标线程。在图4的例中,基于程序块405的线程为同步源线程,基于程序块406的线程为同步目标线程。此外,在线程从同步源CPU移至同步目标CPU的情况下,同步源线程与同步目标线程为相同的线程。另外,在同步目标线程为从同步源线程分支的线程的情况下,同步源线程与同步目标线程为不同的线程。

(多核处理器系统100的功能)

接下来,对多核处理器系统100的功能进行说明。图5是表示多核处理器系统100的功能的功能框图。多核处理器系统100包括检测部502、确定部503、生成部504、同步控制部505、设定部506、取得部507、读入部508、写入部509、发送部510以及接收部511。

在成为该控制部的功能中,检测部502~生成部504、设定部506通过CPUs101执行存储在存储装置中的程序来实现其功能。存储装置是指,具体而言,例如,图1所示的ROM102、RAM103、快闪ROM104、快闪ROM106等。

另外,同步控制部505、取得部507、读入部508、写入部509、发送部510、接收部511通过图2所示的寄存器同步控制装置205来实现其功能。

另外,图5中,假设CPU#0作为控制多核处理器系统100的主CPU,另外CPU#M和CPU#N为寄存器间的同步控制对象的CPU。另外,还可以是CPU#0为主CPU且为寄存器间的同步控制对象的CPU。例如,在CPU#0为主CPU,并成为寄存器间的同步控制对象的同步目标CPU的情况下,作为CPU#0的功能,可以包括设定部506。

另外,多核处理器系统100能够访问确定线程组的各线程与和线程建立了对应的寄存器的组合的寄存器依存表501。对于成为线程的执行对象的执行对象,在将执行对象分割成能够并行执行的程序块时,寄存器依存表501存储程序块间的信息与在程序块间继承值的寄存器。寄存器依存表501的详细使用图10后述。

另外,寄存器依存表501中的与线程建立了对应的寄存器也可以不确定多核处理器的任何核。具体而言,寄存器依存表501中保存有作为与线程对应的执行对象的一部分的2个程序块的信息、和寄存器名。关于寄存器名,为CPUs101的全部的CPU所具有的寄存器名,不通过寄存器名来确定CPUs101中的哪一个CPU。

另外,寄存器依存表501还可以不指定寄存器以外的其他存储区域。具体而言,寄存器依存表501保存寄存器名,不指定成为其他存储区域的高速缓存204、RAM103、快闪ROM104等。

检测部502具有通过多核处理器中的特定的核,检测出在多核处理器内将由同步源核执行中的线程移至同步目标核这一情况的功能。例如,检测部502通过CPUs101中的CPU#0,检测出将由CPU#M执行中的线程移至CPU#N这一情况。

另外,检测部502还可以检测在同步目标核中生成从由同步源核执行中的第1线程分支的第2线程这一情况。例如,检测部502检测在CPU#N中生成从由CPU#M执行中的第1线程分支的第2线程这一情况。此外,表示已检测出的信息被存储在CPU内寄存器组203#0、高速缓存204#0、RAM103等存储区域中。

确定部503具有通过特定的核,参照寄存器依存表501,确定由检测部502检测出转移的线程所对应的特定的寄存器。另外,确定部503还可以确定由CPU#M执行中的第1线程、以及从第1线程分支并由CPU#N执行的第2线程所对应的特定的寄存器。

具体而言,确定部503通过CPU#0,基于寄存器依存表501的记录中的、CPU#M执行的执行对象的程序块和CPU#N执行的执行对象的程序块,确定相应的记录。在相应的记录被确定的情况下,确定部503将存储在相应的记录中的寄存器名确定为特定的寄存器。此外,被确定出的寄存器的信息被存储到CPU内寄存器组203#0、高速缓存204#0、RAM103等存储区域中。

生成部504具有通过特定的核,生成用于确定由确定部503确定出的特定的寄存器以及同步目标核的同步控制信息的功能。例如,假设由确定部503确定了Gr1寄存器。此时,生成部504通过CPU#0,生成用于确定Gr1寄存器以及CPU#N的同步控制信息。

作为用于确定特定的寄存器以及同步目标核的方法,例如,同步控制信息保存有特定的寄存器的名称、或者ID(IDentification),并保存有同步目标核的CPU编号。此外,生成的同步控制信息被存储到RAM103等存储区域,并通过在同步源CPU上进行动作的寄存器同步控制装置205的驱动器,被存储到寄存器同步控制装置205的存储区域亦即同步控制寄存器。关于同步控制寄存器将通过图6详细后述。

同步控制部505与多核处理器以能够通信的方式连接,从特定的核取得由生成部504生成的同步控制信息,将根据同步控制信息获得的特定的寄存器的值从同步源核的特定的寄存器读入。接下来,同步控制部505具有对同步目标核的特定的寄存器写入从同步源核的特定的寄存器读入的值的功能。例如,同步控制部505从CPU#0取得同步控制信息,从CPU#M的CPU内寄存器组203#M中的寄存器Gr1读入寄存器Gr1的值。接下来,同步控制部505对CPU#N的CPU内寄存器组203#N的寄存器Gr1写入从CPU#M的寄存器Gr1读入的值。

另外,在写入了从同步源核的特定的寄存器读入的值的情况下,同步控制部505可以向同步目标核通知检测出的线程成为能够执行的信息。在同步目标核中检测出的线程能够执行的信息例如为中断信号,同步控制部505将中断信号通知给同步目标核。具体而言,在对CPU#N的CPU内寄存器组203#N中的寄存器Gr1写入了从CPU#M的寄存器Gr1读入的值的情况下,同步控制部505向CPU#N通知中断信号。

设定部506具有通过同步目标的核,将检测出的线程设定为能够由同步目标核执行的状态的功能。另外,在接收到从同步控制部505检测出的线程能够执行的信息的情况下,设定部506可以将检测出的线程设定成能够由同步目标核执行的状态。例如,设定部506通过CPU#N转移检测出的线程,并设定成能够执行的状态。另外,在从由同步源核执行中的第1线程分支的第2线程被生成到同步目标核的情况下,CPU#N在RAM103中确保第2线程访问的区域,例如线程上下文,并设定为第2线程能够执行的状态。

取得部507具有在通过生成部504生成了用于确定特定的寄存器以及同步目标核的同步控制信息的情况下,从特定的核取得同步控制信息的功能。具体而言,取得部507取得Gr1寄存器以及CPU#N的CPU编号的同步控制信息。此外,所取得的信息被保存在寄存器同步控制装置205#M的存储区域中。

读入部508具有从同步源核的特定的寄存器读入根据通过取得部507取得的同步控制信息获得的特定的寄存器的值的功能。具体而言,读入部508从CPU#M的CPU内寄存器组203#M中的寄存器Gr1读入寄存器Gr1的值。此外,所读入的值被保存到寄存器同步控制装置205#M的存储区域。

写入部509将通过读入部508从同步源核的特定的寄存器读入的值写入同步目标核的特定的寄存器。具体而言,写入部509将从CPU#M的寄存器Gr1读入的值写入CPU#N的CPU内寄存器组203#N中的寄存器Gr1。

发送部510具有将特定的寄存器以及通过读入部508读入的特定的寄存器的值发送至同步目标核的功能。具体而言,发送部510将寄存器Gr1以及寄存器Gr1的值发送至寄存器同步控制装置205#N。

接收部511具有通过其他同步控制装置接收特定的寄存器以及特定的寄存器的值的功能。具体而言,接收部511通过寄存器同步控制装置205#M接收寄存器Gr1以及寄存器Gr1的值。此外,接收到的寄存器和寄存器的值被保存在寄存器同步控制装置205#N的存储区域中。

图6是表示同步事件未产生时的寄存器同步控制装置205的概要的说明图。图6中使用CPU#0的内部进行说明。CPU#0以外的CPU的内部也与图6所示的CPU#0的内部等同。图6所示的硬件是CPU内运算单元202#0、CPU内外部I/O601#0、中断控制器602#0、CPU内寄存器组203#0以及寄存器同步控制装置205#0。CPU内外部I/O601#0与寄存器同步控制装置205#0通过地址总线207#0连接。另外,地址总线207#0与高速缓存204#0、总线110连接,并通过总线110与RAM103、显示器107等外围设备的寄存器连接。

另外,在寄存器同步控制装置205#0中包含同步控制寄存器603#0、寄存器读取器604#0、寄存器写入器605#0、接收FIFO606#0、发送FIFO607#0以及中断控制器608#0。同步控制寄存器603#0与地址总线207#0连接,接收FIFO606#0和发送FIFO607#0与通信部206#0连接。中断控制器608#0与中断控制器602#0连接。

这里,多核处理器系统100采取在RAM103的地址空间中共存输入输出设备的地址空间的存储器映射I/O的方式。这里,假定高速缓存204的地址区域为32[千字节],即为0x00008000~0x0000FFFF,RAM103的地址区域为32[兆字节],即为0x02000000~0x03FFFFFF的状态。另外,0x00010000~0x01FFFFFF为未分配区域。

例如,设计者将同步控制寄存器603#0的地址区域设定为未分配区域中的0x00020000~0x00020003。由此,CPU内运算单元202能够通过地址指定来访问同步控制寄存器603#0。此外,即使多核处理器系统100为在RAM103的地址空间中未共存输入输出设备的地址空间的端口映射I/O,各CPU也能够通过对输入输出设备的地址空间进行访问,来访问同步控制寄存器603#0。

CPU内外部I/O601#0是CPU内运算单元202#0向地址总线207#0输入输出用的端口。例如,在访问RAM103、同步控制寄存器603#0时,CPU内运算单元202#0经由CPU内外部I/O601#0进行访问。

中断控制器602#0受理中断信号,将中断编号通知给CPU内运算单元202#0。在图6的例子中,中断控制器602#0受理来自中断控制器608#0的中断信号的输入,但也受理其他中断信号,例如,受理来自键盘109的中断信号,将中断编号通知给CPU内运算单元202#0。中断控制器602#0具有多个中断输入端子,并按每一个端子设定有中断编号。

例如,中断控制器602#0的某一端子受理来自中断控制器608#0的中断信号,而其它端子受理来自键盘109的中断信号。另外,中断控制器602#0具有在受理了多个中断信号的情况下,按照中断信号中设定的优先顺序来通知中断编号的功能。

同步控制寄存器603#0是设定包含成为同步对象的寄存器的信息和同步目标的CPU的信息的同步控制信息的寄存器。同步控制寄存器603#0与各CPU的通用寄存器、浮动小数点寄存器等累加器不同,是能够视为经由地址总线的一种外围设备的寄存器。同步控制寄存器603#0实现了由用户程序使用的寄存器组,例如,累加器、通用寄存器、浮动小数点寄存器的一致性。具体而言,同步控制寄存器603在同步对象寄存器名中存储执行一致性的寄存器的名称。同步控制寄存器603中设定的同步控制信息的详细将使用图7后述。

寄存器读取器604#0根据被写入同步控制寄存器603#0的同步对象寄存器名的寄存器名,读入CPU内寄存器组203#0中与同步对象寄存器名对应的寄存器的值。例如,在同步对象寄存器名中存储有“Gr1”的情况下,寄存器读取器604#0读入CPU内寄存器组203#0的Gr1寄存器的值。

寄存器写入器605#0从接收FIFO606#0接收寄存器名和值,对从CPU内寄存器组203#0接收到的寄存器名所对应的寄存器写入接受到的值。例如,在从接收FIFO606#0接收到“Gr11”这样的数据的情况下,寄存器写入器605#0对CPU内寄存器组203#0的Gr1寄存器写入“1”。

接收FIFO606#0保存从通信部206#0发送来的寄存器名和值。另外,接收FIFO606#0为了实现屏障同步,在寄存器写入器605#0完成寄存器的写入后,作为CPU控制而将中断信号通知给中断控制器608。

发送FIFO607#0保存从寄存器读取器604#0发送来的同步目标CPU的信息、寄存器名和寄存器的值。另外,发送FIFO607#0向通信部206#0发送同步目标CPU的信息、寄存器名和寄存器的值。另外,发送FIFO607#0在发送寄存器名和寄存器的值时,发送成为同步信号的中断信号。

中断控制器608#0受理来自发送FIFO607#0以外的其他发送FIFO607的中断信号,将中断编号通知给中断控制器602#0。发送FIFO607#0以外的其他发送FIFO607例如是指发送FIFO607#1。另外,中断控制器608#0还从接收FIFO606#0受理中断信号,并将中断编号通知给中断控制器602#0。此外,中断控制器608#0与其他中断控制器608不经由通信部206而被直接结线。

此外,作为图5所示的寄存器同步控制装置205的功能部与图6所示的各部的对应,取得部507对应同步控制寄存器603,读入部508对应寄存器读取器604,写入部509对应寄存器写入器605。另外,发送部510对应发送FIFO607,接收部511对应接收FIFO606。

在图6的例子中,是未产生同步事件的状态,CPU内运算单元202根据从RAM103取出的指令,进行CPU内寄存器组203#0的读、写。

图7是表示同步控制寄存器603的存储内容的一个例子的说明图。同步控制寄存器603以32[位]的区域具有同步标志、同步对象寄存器名、同步目标CPU编号这样的3个字段。同步控制信息虽然为同步对象寄存器名、同步目标CPU编号,但还可以包括同步标志。同步标志字段以1[位]的区域储存表示寄存器的同步处理是否在执行中的标志。以下,对在同步标志为1的情况下,使同步处理为执行中的情况进行说明。同步对象寄存器名字段以8[位]的区域,保存进行同步的寄存器编号。同步目标CPU编号字段以8[位]的区域,保存进行同步的CPU编号。

此外,同步对象寄存器名字段和同步目标CPU编号字段的区域为8[位],能够处理256种类的寄存器、CPU编号。另外,即使在CPU数多于256的情况下,也能够通过使用预备的15[位]来进行应对。

另外,关于同步目标CPU编号字段,通常保存有作为单播进行同步的CPU编号,但在存在向多个CPU发送相同寄存器的值的可能性的情况下,还可以设定向多个CPU发送的模式。例如,在同步目标CPU编号字段中保存有0xFF的情况下,可以按照发送FIFO607将寄存器的值向除了自身的CPU以外的全部的CPU进行广播的方式设定同步目标CPU编号字段。具体而言,在同步标志中保存1,在同步对象寄存器名字段中保存Gr1寄存器的寄存器编号,在同步目标CPU编号字段中保存CPU#1的CPU编号。

图8是表示同步事件产生时的同步源CPU的寄存器同步控制装置205的概要的说明图。当同步事件产生时,作为同步源CPU的CPU#M通过在CPU#M上执行的驱动器801#M,对同步控制寄存器603#M设定同步控制信息。此外,同步控制信息由主CPU、例如CPU#0输出。

在设定后,寄存器读取器604#M根据同步控制信息,从CPU内寄存器组203#M读入寄存器的值,对发送FIFO607#M的缓冲器写入同步目标CPU的编号、寄存器名和寄存器的值。在写入后,发送FIFO607#M将成为同步信号的中断信号发送至同步目标CPU的寄存器同步控制装置205的中断控制器608。发送FIFO607#M与中断信号相对应地将寄存器名和寄存器的值发送至同步目标CPU的寄存器同步控制装置205的接收FIFO606。在发送后,发送FIFO607#M将同步标志改写为0。

此外,在CPU#M将同步控制信息设定在同步控制寄存器603#M的情况下,也可以在同步事件的产生时不设定同步控制信息的全部内容而事先设定一部分的信息。例如,如果是通过汇编器等被预先分配了同步目标CPU的静态调度的情况,则CPU#M可以在同步事件的产生前设定同步对象寄存器名、同步目标CPU编号。并且,CPU#M还可以在同步事件的产生时设定同步标志。此外,如果是通过调度器决定了同步目标CPU的动态调度,则CPU#M在同步事件的产生时,设定同步对象寄存器名、同步目标CPU编号、同步标志。

图9是表示同步事件产生时的同步目标CPU的寄存器同步控制装置205的概要的说明图。成为同步目标CPU的CPU#N的中断控制器608#N若接收到中断信号,则向中断控制器602#N通知中断编号。另外,经由中断控制器602#N被通知了中断编号的CPU内运算单元202#N生成同步目标线程,抑制向CPU内寄存器组203#N的I/O。

在中断控制器608#N接收到中断信号后,接收FIFO606#N取得寄存器名和寄存器的值。在取得后,寄存器写入器605#N将所取得的寄存器的值写入CPU内寄存器组203#N。在写入结束后,接收FIFO606#N将中断信号通知给中断控制器608#N作为写入结束通知。中断控制器608#N若接收到中断信号,则向中断控制器602#N通知中断编号。

此时,优选来自寄存器同步控制装置205#M的中断信号的中断编号与来自接收FIFO606#N的中断信号的中断编号不同。由于中断编号不同,从中断控制器602#N接收到中断编号的CPU内运算单元202#N、由CPU#N执行中的OS能够判定是基于哪种要因的中断编号。

图10是表示多核处理器系统100的设计时的概要的说明图。汇编器读入汇编源程序401,生成一对一变换而得的执行对象402。并且,汇编器进行汇编源程序401的构造解析,生成寄存器依存表501。此外,也存在在C/C++源程序中混入有一部分汇编源程序的情况。该情况下,多核处理器系统100也作为汇编源程序来处理。

作为具体的构造解析,构造解析程序读入汇编源程序,提取以跳转、条件分支为节点的程序块构造。并且,构造解析程序提取最终进行了读写的寄存器、存储器上的地址空间作为各程序块的输入输出数据。接下来,构造解析程序使用输入输出数据,作为程序块间的输入输出值将并非地址空间而是寄存器所使用的分支定义为具有寄存器依存关系的程序块。构造解析程序将存在寄存器依存关系的2个程序块、和被设为有依存关系的寄存器作为1个记录输出至寄存器依存表501。

寄存器依存表501是记载了在程序块间具有依存关系的寄存器名的信息。具体而言,寄存器依存表501具有同步源程序块名、同步目标程序块名、依存寄存器名这3个字段。

同步源程序块名字段保存有成为同步源线程的程序块的信息,同步目标程序块名字段保存有成为同步目标线程的程序块的信息。若使用图4的例子,同步源程序块名字段与同步目标程序块名字段例如保存有程序块405、程序块406的名称。此外,还可以代替程序块的名称而存储有程序块的前端地址和末尾地址。依存寄存器名字段保存有在同步源程序块名字段和同步目标程序块名字段保存的程序块间存在依存关系的寄存器名。当使用图4的例子时,依存寄存器名字段保存有“Gr1”这样的字符串。

图11是表示调度处理的流程图。关于图11、图12所示的流程图,假设了由作为主CPU的CPU#0进行多核处理器系统100全体线程的调度,由CPU#M执行同步源线程的情况。另外,CPU#M与CPU#0可以为同一CPU。

CPU#0判断事件的种类(步骤S1101)。在事件的种类为再调度的情况下(步骤S1101:再调度),CPU#0判断再调度对象的执行对象是否是由汇编源程序记述(步骤S1102)。此外,作为判断基准,CPU#0通过参照寄存器依存表501能够进行判断。具体而言,在同步源线程的执行对象存在于同步源程序块名字段中、且再调度对象的执行对象存在于同步目标程序块名字段中的情况下,CPU#0判断为由汇编源程序记述。

另外,作为再调度产生的要因,例如,是CPUs101的负荷变得不平衡的情况。在负荷不平衡,对特定的CPU施加了负荷的情况下,通过将由负荷高的CPU执行中的线程转移到负荷低的CPU,能够使负荷均等。在通过汇编源程序记述的情况下(步骤S1102:是),CPU#0将再调度后分配的CPU#N设定为同步目标CPU(步骤S1103)。此外,在通过步骤S1102:是的分支时,产生了取得2个CPU间的寄存器的同步的同步事件。

在事件的种类为线程起动的情况下(步骤S1101:线程起动),CPU#0判断新线程的执行对象是否通过汇编源程序记述(步骤S1104)。具体而言,在同步源线程的执行对象存在于同步源程序块名字段中、且新线程的执行对象存在于同步目标程序块名字段中的情况下,CPU#0判断为通过汇编源程序记述。

此外,在线程起动产生的要因中,作为特别是特化为并行执行的要因,例如是执行对象的程序块为反复处理的情况。具体而言,在特定的程序块是进行100次处理的程序块的情况下,同步源线程执行50次,另外作为新线程,同步目标线程执行剩余的50次。

在通过汇编器而记述的情况下(步骤S1104:是),CPU#0将分配新线程的CPU#N设定为同步目标CPU(步骤S1105)。此外,在通过了步骤S1104:是的分支时,产生了取得2个CPU间的寄存器的同步的同步事件。在步骤S1103、或者步骤S1105的处理后,CPU#0根据同步对象寄存器名、同步目标CPU编号和同步标志生成同步控制信息(步骤S1106)。

此外,CPU#0根据寄存器依存表501的、存在同步源程序块名字段以及同步目标程序块名字段的记录的依存寄存器名字段中保存的值取得同步对象寄存器名。在生成后,CPU#0对成为同步源CPU的寄存器同步控制装置205#M的同步控制寄存器603#M输出生成的同步控制信息(步骤S1107)。

具体而言,CPU#0对在CPU#M上进行动作的驱动器801#M通知同步控制信息,通过驱动器801#M被执行,对同步控制寄存器603设定同步控制信息。在对同步控制寄存器603#M设定了同步控制信息后,CPU#0移至步骤S1101的处理。

在事件为再调度、线程起动以外的情况下(步骤S1101:其他),CPU#0执行按照事件的通常的调度处理(步骤S1108)。另外,在未通过汇编器记述的情况下(步骤S1102:否,步骤S1104:否),CPU#0执行步骤S1108的处理。此外,作为再调度、线程起动以外的事件,有线程的时间片期间届满的情况、或者线程结束的情况等。

作为同步源CPU的CPU#M的寄存器同步控制装置205#M以通过步骤S1107的处理而输出的同步控制信息为基础,执行寄存器同步控制处理(步骤S1109)。另外,成为同步目标CPU的CPU#N的寄存器同步控制装置205#N还与寄存器同步控制装置205#M连动地执行寄存器同步控制处理。寄存器同步控制处理的详细将使用图12后述。

图12是表示寄存器同步控制处理的流程图。寄存器同步控制装置205#M从同步控制寄存器603#M取得同步对象寄存器名、同步目标CPU名(步骤S1201)。取得后,寄存器同步控制装置205#M通过寄存器读取器604#M从CPU内寄存器组203#M读入同步对象寄存器名所对应的寄存器的值(步骤S1202)。寄存器同步控制装置205#M通过发送FIFO607#M向同步目标CPU名所对应的寄存器同步控制装置205#N发送中断信号、同步对象寄存器名和值(步骤S1203)。在发送后,寄存器同步控制装置205#M将同步标志设定为0,结束作为寄存器的同步源的寄存器同步控制处理。

寄存器同步控制装置205#N通过中断控制器608#N受理中断信号(步骤S1204)。接收到中断信号的寄存器同步控制装置205#N通过中断控制器608#N将表示寄存器的值的接收的中断编号通知给中断控制器602#N(步骤S1205)。在通知后,寄存器同步控制装置205#N通过接收FIFO606#N接收同步对象寄存器名和值(步骤S1206)。

在接收后,寄存器同步控制装置205#N通过寄存器写入器605#N将接收到的寄存器的值从CPU内寄存器组203#N写入同步对象寄存器名所对应的寄存器(步骤S1207)。在写入后,寄存器同步控制装置205#N通过中断控制器608#N,将表示写入结束的中断编号通知给中断控制器602#N(步骤S1208)。在通知后,寄存器同步控制装置205#N结束作为寄存器的同步目标的寄存器同步控制处理。通过步骤S1205的处理,接收到中断编号的CPU#N生成并起动新线程、或者启动再调度的线程(步骤S1209)。

此外,通过步骤S1207的处理,寄存器同步控制装置205#N访问CPU内寄存器组203#N,因此制止了由CPU#N对CPU内寄存器组203#N的访问。因此,在步骤S1209的处理结束的阶段,新线程、或者再调度的线程无法进行向CPU内寄存器组203#N的访问,前述的线程未成为能够执行的状态。

通过步骤S1208的处理,接收到中断编号的CPU#N开始向CPU内寄存器组203#N的访问(步骤S1210)。由于CPU#N能够进行向CPU内寄存器组203#N的访问,新线程、或者再调度的线程被设定为能够执行的状态。

如以上说明的那样,根据多核处理器系统、同步控制系统、同步控制装置、信息生成方法以及信息生成程序,在将同步源核的线程转移到同步目标核的情况下,确定与线程建立了对应的寄存器。接下来,多核处理器系统将确定的寄存器的值从同步源核继承到同步目标核。由此,多核处理器系统不改变面向单核生成的汇编源程序就能够通过多核进行并行执行,能够确保汇编源程序的兼容性。

另外,在写入了从同步源核的上述特定的寄存器读入的值的情况下,多核处理器系统可以在向同步目标核通知了检测出的线程能够执行的信息后,将检测出的线程设定为能够执行的状态。由此,在同步目标核的寄存器继承了同步源核的寄存器的值,同步目标核的线程成为能够正常动作的状态之后,多核处理器系统能够执行线程。

另外,对于多核处理器系统而言,确定与和线程建立了对应的寄存器的组合的表中的寄存器也可以不确定多核处理器的任意核。在面向单核生成的源程序中,由于仅存在一个核,所以不存在是哪个CPU的哪个寄存器这样的信息。因此,由于表中的寄存器不确定多核处理器的任意的核,所以多核处理器系统能够判断是从面向单核的源程序生成的执行对象这一情况。

另外,对于多核处理器系统而言,确定与和线程建立了对应的寄存器的组合的表可以不指定寄存器以外的其他存储区域。基于C++源程序的执行对象被追加了在具有依存关系的程序块间,通过前方的程序块保存到高速缓存、或者RAM,通过后方的程序块读入保存的数据这样的同步控制码。然而,基于汇编源程序的执行对象不被追加同步控制码,在具有依存关系的程序块间,不访问寄存器以外的其他存储区域。因此,由于表未指定寄存器以外的其他存储区域,所以多核处理器系统能够判断是从汇编源程序生成的执行对象这一情况。

另外,在从同步源核的第1线程分支的第2线程生成在同步目标核这一情况被检测出的情况下,多核处理器系统可以将寄存器的值从同步源核复制到同步目标核。由此,即使在生成了新线程的情况下,多核处理器系统也不改变面向单核生成的汇编源程序就能够使用多核来并行执行。

另外,基于现有技术2的同步控制的处理时钟数为100~1000时钟左右。本实施方式的同步控制的处理时钟数即使加上同步控制寄存器的操作也仅为10时钟左右,每1次同步控制,能够实现90~99%的效率化。作为更具体的例子,假设了存在以时钟频率为500[MHz]进行动作的CPU的情况。基于现有技术2的同步控制的处理时间为每一次0.2~2[微秒]左右,基于本实施方式的同步控制的处理时间以20[纳秒]左右结束。同步控制的出现频度为1[微秒]1次左右的情况下,作为多核处理器系统,可实现10%左右的性能改善。

此外,在本实施方式中说明的信息生成方法能够通过由个人计算机、工作站等的计算机执行预先准备的程序而实现。本信息生成程序通过被记录在硬盘、软盘、CD-ROM、MO、DVD等能够通过计算机进行读取的记录介质中,并由计算机从记录介质读出而被执行。另外,本信息生成程序还可以经由互联网等网络进行发布。

图中符号说明

#0、#M、#N CPU;110 总线;203 CPU内寄存器组;205寄存器同步控制装置;501 寄存器依存表;502 检测部;503 确定部;504 生成部;505 同步控制部;506 设定部;507 取得部;508读入部;509 写入部;510 发送部;511 接收部。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号