首页> 中国专利> 多处理器系统以及多处理器系统的同步方法

多处理器系统以及多处理器系统的同步方法

摘要

在各处理器CPU#0~#7内,设置有障栅写寄存器BARW与障栅读寄存器BARR,使用专用的布线块WBLK3使各BARW布线到各BARR。例如,CPU#0的1比特的BARW经由WBLK3而与包含在CPU#0~#7中的8比特的各BARR的第1比特连接,CPU#1的1比特的BARW经由WBLK3而与包含在CPU#0~#7中的8比特的各BARR的第2比特连接。例如,CPU#0通过对自身的BARW写入信息而向CPU#1~#7通知同步等待,通过读取自身的BARR而识别CPU#1~#7是否为同步等待。因此,伴随障栅同步处理,无需特殊的专用命令,并且能够高速地进行处理。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-06-22

    专利实施许可合同备案的生效 IPC(主分类):G06F9/52 合同备案号:2016990000211 让与人:学校法人早稻田大学 受让人:奥斯卡科技有限公司 发明名称:多处理器系统以及多处理器系统的同步方法 申请公布日:20101222 授权公告日:20130605 许可种类:独占许可 备案日期:20160525 申请日:20090123

    专利实施许可合同备案的生效、变更及注销

  • 2013-06-05

    授权

    授权

  • 2011-02-02

    实质审查的生效 IPC(主分类):G06F9/52 申请日:20090123

    实质审查的生效

  • 2010-12-22

    公开

    公开

说明书

技术领域

本发明涉及多处理器系统及其同步方法,特别涉及在利用硬件来进行障栅同步(barrier synchronization)处理的多处理器系统及其同步方法中应用而有益的技术。

背景技术

例如,在专利文献1中,记载了由在带广播功能的系统总线上经由总线接口连接的N个处理器所构成的多处理器系统中,进行各处理器间的同步的方式。具体而言,各处理器具备各比特对应于N个处理器的N比特的同步用寄存器。各处理器在自身的阶段完成时对同步用寄存器的对应比特设定“1”,并且还经由系统总线通知其他处理器,其他处理器接收该通知,进行同步用寄存器的更新。由此,各处理器能够通过识别同步用寄存器的所有比特的“1”来进行同步处理。

另外,在专利文献2中,记载了在分别包括多个处理器的多个集群(cluster)之间设置集群间通信寄存器来进行集群之间的障栅同步的方式。在集群间通信寄存器中,设定集群数,通过存在于各集群内的代表处理器对该集群数进行减1运算,能够在变为0的时刻完成障栅同步处理。

另外,在专利文献3以及专利文献4中,记载了通过在多处理器系统的共有存储器上设置各处理器对应的同步标志(flag)区域来进行软件同步的方式。进而,在专利文献5中,记载了在具备层次结构的高速缓存(cache)的多处理器系统中,利用该层次结构的高速缓存来进行同步的方式。具体而言,例如,在处理器模块内,在CPU0与CPU1中分别设置一次高速缓存,并在这两个一次高速缓存的上位设置共通的二次高速缓存的情况下,利用在一次高速缓存上确保的标志变量来进行由CPU0执行的多个线程的同步,通过在二次高速缓存上确保的标志变量来进行CPU0与CPU1的同步。

另外,在非专利文献1中,记载了如下结构,该结构具有对P个处理器共通地设置的1个P比特寄存器、以及对该P比特寄存器的值全部成为零的情况进行检测并将此时的检测信号发送到P个处理器的检测电路等。在由P个处理器执行了并行处理之后进行障栅同步的情况下,各处理器在自身的处理结束了的阶段中对P比特寄存器的对应比特写入零。在所有处理器的处理完成了时,向所有处理器发送检测信号,所以由此能够实现障栅同步。另外,在非专利文献1中,还示出了为了通过并行处理来进行多重循环,而设置有由(P-1)组的P比特寄存器构成的寄存器阵列的结构。

专利文献1:日本特开平2-105961号公报;

专利文献2:日本特开平10-91591号公报;

专利文献3:日本特开2000-305919号公报;

专利文献4:日本特开2005-71109号公报;

专利文献5:日本特开2006-259821号公报;

非专利文献1:C.J.Beckmann,C.D.Polychronopoulos,“Fast barrier synchronization hardware”,Supercomputing’90.Proceedings of Publication,1990年11月,p.180-189。

发明内容

近年来,由于伴随半导体芯片的微细化、高速化的泄漏电流、功耗等问题,作为替代提高动作频率的性能提高对策,使用多处理器(或者多核)技术。在多处理器系统中,通常,将被称为任务(task)或进程(process)等的一个处理内容分别分割成称为线程等的多个处理单位,并将该多个线程适宜地分配到各处理器,从而通过多个处理器来执行并行处理。因此,需要所谓障栅同步,即在多个线程之间,产生例如针对某个线程的处理结果使用其他线程来进行进一步处理这样的依存关系,而与其相伴地,进行相互依存的处理的多个处理器在同步点等候。

这样的障栅同步既可以由硬件来实现,也可以由软件来实现。例如,在上述专利文献3、专利文献4以及专利文献5中,记载有通过软件来实现障栅同步的方法。在通过软件来实现的方法中,总体而言,是在各处理器中共有的存储器上设定标志变量。各处理器能够通过在自身的处理完成了时更新并参照该标志变量,从而识别自身以外的处理器的处理是否结束。

但是,在通过软件来实现的方法中,各处理器访问共有存储器上的共通标志变量,所以为了完成障栅同步而需要时间。即,除了单纯的存储器访问时间以外,还需要较长的直到得到对共有存储器的访问权为止的调停时间。例如,虽然如专利文献5所述,通过在特定的高速缓存存储器上确保标志变量而实现某种程度的高速化,但例如需要高速缓存存储器的特定单元、在产生回写(write back)时速度将降低等,从而需要特殊的高速缓存存储器的控制等。

另外,例如,在上述专利文献1、专利文献2以及非专利文献1中,记载了通过硬件来实现障栅同步的方法。在专利文献2、非专利文献1的方法中,总体而言,是对多个处理器设定共通的标志寄存器、并通过该标志寄存器的写入、参照来进行障栅同步。在该情况下,需要排他地控制对该标志寄存器的访问,所以在该处理中有可能花费时间。另一方面,在专利文献1的方法中,各处理器具备上述的标志寄存器,并通过共通的系统总线来保持各个标志寄存器的一致性(coherency)(一贯性)。但是,如果使用系统总线,则需要用于确保总线的访问权的调停时间,所以难以实现高速的障栅同步处理。

本发明是鉴于这样的情况而完成的,其目的之一在于,提供一种能够实现高效的障栅同步处理的多处理器系统及其同步方法。本发明的上述以及其他目的与新的特征根据本说明书的记述以及附图将更加明确。

若简单说明本申请中公开的发明中的代表性的发明的概要,则如下所述。

本发明的一个实施方式的多处理器系统具有:N(N≥2)个处理器;在该N个处理器内分别设置的N个障栅写寄存器(第1寄存器)及N个障栅读寄存器(第2寄存器);以及第1单元。第1单元在N个处理器内中的某一个处理器伴随障栅同步而对自身中设置的障栅写寄存器写入了第1信息时,将该第1信息传送到其他处理器中设置的障栅读寄存器。该第1单元例如通过使N个障栅写寄存器直接布线到N个障栅读寄存器的布线块来实现。

如果使用这样的结构,则能够通过某个处理器将表示自身的同步等待的第1信息写入到自身的障栅写寄存器,使该第1信息立即反映到其他处理器的障栅读寄存器。因此,其他处理器能够通过读取自身的障栅读寄存器,立即得知自身以外的处理器是否为同步等待,所以能够实现高速的障栅同步处理。此时,不经由系统总线而是通过使用专用的布线块从障栅写寄存器向障栅读寄存器传送信息,而实现了高速化。

另外,各处理器在将自身的同步等待通知到其他处理器时,对自身的障栅写寄存器写入第1信息,在得知了其他处理器的同步等待的状况时,读取自身的障栅读寄存器即可,所以无需对CPU追加特殊的命令组,而能够低成本地实现障栅同步处理。进而,在自身以外的处理器对障栅写寄存器写入了第1信息时,该第1信息被直接反映到自身的处理器内的障栅读寄存器而不是中断等间接的方式,所以自身的处理器不会伴随该反映而阻碍自身当前进行着的处理。由此,能够实现高效的障栅同步处理。

另外,在本发明的一个实施方式的多处理器系统中,在各处理器内具备多个组的上述那样的障栅写寄存器以及障栅读寄存器。由此,例如,在执行包括多个层次的障栅同步处理的处理内容时,能够针对各层次的每一个分配1个组,能够容易地实现这样的障栅同步处理。

进而,在本发明的一个实施方式的多处理器系统中,上述那样的障栅写寄存器由多个比特构成。由此,作为版本号,能够设定多个种类的同步点,能够灵活地应对于有高度或者复杂的障栅同步处理。例如,能够对该障栅写寄存器的多个比特的各比特,分配上述那样的多个层次的各层次。另外,如果如上所述设置多个组的障栅写寄存器以及障栅读寄存器,并且与上述那样的版本号并用,则可以更灵活地对应于更高级或者复杂的障栅同步处理。

若简单说明通过本申请中公开的发明中的代表的发明而得到的效果,则如下所述。

通过使用本发明的一个实施方式的多处理器系统,能够实现高效的障栅同步处理。

附图说明

图1是在本发明的实施方式1的多处理器系统中,示出其整体结构的一个例子的框图。

图2是在本发明的实施方式1的多处理器系统中,示出其主要部的结构例的概略图。

图3是在本发明的实施方式1的多处理器系统中,示出其主要部的其他结构例的概略图。

图4是在图2以及图3的多处理器系统中,示出其动作的一个例子的说明图。

图5是示出图4中的障栅同步处理的详细的处理内容的一个例子的说明图。

图6是在图2以及图3的多处理器系统中,示出其动作的另一例子的说明图。

图7是在本发明的实施方式2的多处理器系统中,示出其主要部的结构例的概略图。

图8是在本发明的实施方式3的多处理器系统中,示出其主要部的结构例的概略图。

图9是示出使用了图8的结构例的情况下的障栅同步处理的动作例的说明图。

图10是示出图9中的障栅同步处理的更详细的处理内容的一个例子的说明图。

图11是在本发明的实施方式4的多处理器系统中,示出其主要部的结构例的概略图。

图12是在图11的多处理器系统中,示出其动作的一个例子的说明图。

图13是在图11的多处理器系统中,示出其动作的另一例子的说明图。

图14是在图11的多处理器系统中,示出动作的又一例子的说明图。

图15是在本发明的实施方式4的多处理器系统中,示出将图12变形的动作例的说明图。

图16是在本发明的实施方式5的多处理器系统中,示出其主要部的结构例的概略图。

图17是在图16的多处理器系统中,示出其动作的一个例子的说明图。

图18是在图16的多处理器系统中,示出其动作的另一例子的说明图。

图19是在图18的动作例中,示出其障栅同步处理中使用的详细的源代码的一个例子的说明图。

图20是在本发明的实施方式6的多处理器系统中,示出使用了图16的结构例的其他动作的一个例子的说明图。

图21是在本发明的实施方式7的多处理器系统中,示出其主要部的结构例的概略图。

图22是在图21的多处理器系统中,示出其使用例的说明图。

具体实施方式

以下,根据附图,对本发明的实施方式进行详细说明。在用于说明实施方式的所有附图中,对同一部件原则上附加同一符号,省略其的反复说明。另外,在以下的实施方式中,为便于说明,在需要时分割成多个部分或者实施方式来进行说明,但除了特别明示的情况以外,它们并不是相互没有关系,一方与另一方的一部分或者全部处于变形例、详述、补充说明等关系。

另外,在以下的实施方式中,在言及要素的数字等(包括个数、数值、量、以及范围等)的情况下,除了特别明示的情况以及原理上限定于特定的数字的情况等以外,不限于该特定的数字,而既可以是特定的数字以上也可以是其以下。进而,在以下的实施方式中,其结构要素(还包括要素步骤等)除了特别明示的情况以及周知在原理上明确是必须的情况等以外,当然未必是必须的。同样地,在以下的实施方式中,在言及构成要素等的形状、位置关系等时,除了特别明示的情况以及周知在原理上明确地不是那样的情况等以外,还包括实质上与其形状等近似或者类似的发明等。其对于上述数值以及范围也是同样的。

(实施方式1)

图1是在本发明的实施方式1的多处理器系统中,示出其整体结构的一个例子的框图。图1所示的多处理器系统具备例如包括处理器等的半导体芯片CP、SRAM(Static Random Access Memory,静态随机访问存储器)等外部存储器MEM1以及DDR2-SDRAM(Double Data Rate 2-Synchronous Dynamic Random Access Memory,双倍数据传输率同步动态随机存储器)等外部存储器MEM2。半导体芯片CP虽然没有特别制限,但在硅等的半导体基板中通过公知的CMOS制造方法来形成。

在半导体芯片CP中,虽然没有特别制限,但包括系统总线SHWY。在该SHWY上,连接了多个(此处为两个)集群CLS0、1、存储器控制器LBSC、DBSC、共有存储器CSM、DMA(Direct Memory Access,存储器直接访问)控制器DMAC0、DMAC1、以及外围总线桥HPB等。在经由了HPB的前端,连接了时钟生成部CPG、通用IO接口部GPIO、定时器部TMU0~3、以及中断控制器INTC等。存储器控制器LBSC对外部存储器(SRAM)MEM1进行控制,存储器控制器DBSC对外部存储器(DDR2-SDRAM)MEM2进行控制。另外,集群在概念上是指,通过所谓集群连接而分散的各个系统单位,一般根据可靠性、高速性的观点来使用。

在集群CLS0中,包括侦听总线(snoop bus)SNB0以及对其进行控制的侦听总线控制器SNC0。在侦听总线SNB0上,连接了多个(此处是4个)处理器(CPU:Central Processing Unit,中央处理单元)CPU#0~#3。SNB0以及SNC0对包含在各CPU#0~#3中的高速缓存存储器的更新动作等进行监视,进行控制以便能够在各CPU#0~#3之间维持高速缓存存储器的一致性。这样,通过不经由系统总线SHWY而对高速缓存存储器的一致性进行控制,实现了系统整体的高速化。另外,在集群CLS0中,还包括调试(debug)控制器DBG0等。

各CPU#0~#3分别包括CPU模块CPU_MD、浮动小数点数运算部FPU、高速缓存控制器CCN、系统总线用接口BIC、用户存储器URAM、本地存储器IL、OL、以及一次高速缓存存储器I$、O$等。各CPU#0~#3将自身的一次高速缓存存储器I$、O$作为最下位存储器而进行期望的处理。此时,如果产生针对上位存储器的回写等,则通过SHWY而产生对外部存储器MEM1、MEM2等的访问。另外,此处,简化地仅示出一次高速缓存存储器,但当然也可以在集群CLS0内设置在各CPU#0~#3中成为共通的二次高速缓存存储器等。

集群CLS1的结构与集群CLS0相同。即,在集群CLS1中,包括侦听总线SNB1以及侦听总线控制器SNC1,在SNB1上,连接了多个(此处是4个)处理器CPU#4~#7。另外,在集群CLS1中,还包括调试控制器DBG1等。各CPU#4~#7内的结构与集群CLS0的情况相同,所以省略详细的说明。另外,此处,虽然示出了4CPU×2集群的多处理器(多核)系统的结构例,但当然能够适宜地改变集群内的CPU数、集群数等。

图2是在本发明的实施方式1的多处理器系统中,示出其主要部的结构例的概略图。在图2所示的多处理器系统中,除了由图1所示的处理器CPU#0~#3构成的集群CLS0、与由处理器CPU#4~#7构成的集群CLS1以外,还具备布线块WBLK0、WBLK1。各CPU#0~#7分别具备1比特的障栅写寄存器BARW(第1寄存器)、和具有与CPU数(此处是8个)对应的比特数(此处是8比特)的障栅读寄存器BARR(第2寄存器)。

布线块WBLK0使来自CLS0内的CPU#0~#3中包含的各BARW的布线(4比特),分别以广播的方式,连接到包含在CPU#0~#3中的各BARR内的特定的4比特(例如比特[0]~[3]),并且向布线块WBLK1延伸。同样地,布线块WBLK1使来自CLS1内的CPU#4~#7中包含的各BARW的布线(4比特),分别以广播的方式,连接到包含在CPU#4~#7中的各BARR内的特定的4比特(例如比特[4]~[7]),并且向布线块WBLK0延伸。另外,WBLK0使从WBLK1延伸来的布线(4比特),分别以广播的方式,连接到包含在CPU#0~#3中的各BARR内的剩余的4比特(例如比特[4]~[7])。同样地,WBLK1使从WBLK0延伸来的布线(4比特),分别以广播的方式,连接到包含在CPU#4~#7中的各BARR内的剩余的4比特(例如比特[0]~[3])。

因此,例如,在CPU#0对自身的BARW写入了信息的情况下,该写入的信息经由布线块WBLK0、WBLK1,一起向包含在CPU#0~#7中的各BARR内的特定的1比特(例如比特[0])反映。另外,例如,在CPU#7对自身的BARW写入了信息的情况下,该写入的信息经由布线块WBLK0、WBLK1,一起向包含在CPU#0~#7中的各BARR内的特定的1比特(例如比特[7])反映。另外,虽然没有特别限定,但WBLK0能够在图1中的侦听总线控制器SNC0内形成,WBLK1能够在侦听总线控制器SNC1内形成。

图3是在本发明的实施方式1的多处理器系统中,示出其主要部的其他结构例的概略图。图3所示的多处理器系统与图2的情况不同,是8个CPU#0~#7没有通过集群CLS0、CLS1进行层次化而呈平面状态的情况的结构例。在图3的结构例中,与图2的情况同样地,包含在各CPU#0~#7中的1比特的障栅写寄存器BARW与8比特的障栅读寄存器BARR相互连接。此时的连接关系实质上与图2的情况相同,但布局概念与图2的情况不同。

即,在图2的情况下,与多个集群分别对应地设置有多个布线块。于是,在与某个集群对应的布线块内,进行在自身的集群内包含的BARW与BARR的相互连接,将自身的集群中的BARW的信息集中成集群信息而传送到其他集群,并且接收来自其他集群的集群信息,而传送到自身的集群的BARR。另一方面,在图3的情况下,与各CPU#0~#7对应地设置了一个布线块WBLK3。另外,在WBLK3中,来自包含在CPU#0~#7中的各BARW的布线(8比特)与包含在CPU#0~#7中的各BARR的8比特分别连接。

另外,在图2、图3的结构例中,障栅写寄存器BARW、障栅读寄存器BARR例如能够用通过CPU执行寄存器访问命令而能够访问的控制寄存器等来实现、或者用通过CPU执行存储器访问命令而能够访问的存储器映射寄存器等来实现。在使用了存储器映射寄存器的情况下,无需追加CPU的命令组等,所以与用控制寄存器等来实现的情况相比,从成本方面或者容易性的观点来说更有优势。存储器映射寄存器虽然没有特别限定,但例如设置在图1的高速缓存控制器CCN内。

图4是在图2以及图3的多处理器系统中,示出其动作的一个例子的说明图。在多处理器系统中,例如,通过使用图4所示那样的处理内容,能够实现省电化。在图4中,首先,所有CPU#0~#7通过高速时钟频率并行地执行需要高速动作的规定的处理(线程)(S401)。此时,各CPU在完成了自身的处理之后,执行进行等候自身以外的CPU的障栅同步处理(S402)。如果障栅同步处理完成,则主CPU(例如CPU#0)等发出降低所有CPU的时钟频率的命令(S403)。接收该命令,例如,图1的时钟生成部CPG等降低时钟频率。

接下来,所有CPU#0~#7通过低速的时钟频率并行地执行无需高速动作的规定的处理(线程)(S404)。此时,各CPU在完成了自身的处理之后,执行进行等候自身以外的CPU的障栅同步处理(S405)。如果障栅同步处理完成,则主CPU(例如CPU#0)等发出提高所有CPU的时钟频率的命令(S406)。之后,所有CPU#0~#7再次通过高速时钟频率并行地执行需要高速动作的规定的处理(S407)。

图5是示出图4中的障栅同步处理的详细的处理内容的一个例子的说明图。在图5中,为简化说明,将所有CPU数假设为4个(CPU#0~#3)来进行说明。首先,在各CPU执行的代码内,在进行规定的处理的代码(相应于“do~enddo”)之后,附加了用于障栅同步处理的代码。此处,用于障栅同步处理的代码是“inv rm”与“checkr0-r3=1111”。

“inv rm”表示使障栅写寄存器BARW的信息反转的命令。“rm”表示与BARW对应的软件上的寄存器字段,标号“m”表示CPU号码。例如,“inv r0”表示使CPU#0的BARW的信息反转的命令,“inv r1”表示使CPU#1的BARW的信息反转的命令。“checkr0-r3=1111”表示直到障栅读寄存器BARR的4比特的信息全部为“1”为止待机的命令。在该命令中,寄存器字段“r0-r3”表示BARR,而BARW与BARR相互连接,能够在软件上,通过一个寄存器字段来处理。即,例如,“r0”是CPU#0的BARW,并且也是包含在CPU#0~#3中的BARR的比特[0],“r3”是CPU#3的BARW,并且也是包含在CPU#0~#3中的BARR的比特[3]。

在图5的例子中,首先,最初完成了规定的处理的CPU#0伴随之后的“inv rm”命令而使自身的BARW(设初始值为零)反转为“1”。该信息通过上述布线块WBLK反映到所有CPU的BARR(在图5的例子中反映到比特[0])。之后,CPU#0执行“check r0-r3=1111”命令,但由于自身的BARR的值是“1000”,所以成为待机状态。接下来,完成了规定的处理的CPU#2伴随之后的“inv rm”命令而使自身的BARW(设初始值为零)反转为“1”。该信息通过上述布线块WBLK反映到所有CPU的BARR(在图5的例子中反映到比特[2])。之后,CPU#2执行“check r0-r3=1111”命令,但由于自身的BARR的值是“1010”,所以成为待机状态。同样地,由于自身的BARR的值是“1010”,所以CPU#0也保持待机状态。

接下来,完成了规定的处理的CPU#1伴随之后的“inv rm”命令而使自身的BARW(将初始值设为零)为“1”。该信息通过上述布线块WBLK反映到所有CPU的BARR(在图5的例子中反映到比特[1])。之后,CPU#1执行“check r0-r3=1111”命令,但由于自身的BARR的值是“1110”,所以成为待机状态。同样地,由于自身的BARR的值是“1110”,所以CPU#0以及CPU#2也保持待机状态。

最后,完成了规定的处理的CPU#3伴随之后的“inv rm”命令而使自身的BARW(将初始值设为零)反转为“1”。该信息通过上述的布线块WBLK反映到所有CPU的BARR(在图5的例子中反映到比特[3])。之后,CPU#3执行“check r0-r3=1111”命令,由于自身的BARR的值是“1111”,所以进入到以后的处理。同样地,由于自身的BARR的值是“1111”,所以CPU#0、CPU#1以及CPU#2也进入到以后的处理。由此,障栅同步处理完成。

图6是在图2以及图3的多处理器系统中,示出其动作的另一例子的说明图。在图6中,各CPU#0~#7进行:规定的处理(S601)→障栅同步处理(S602)→规定的处理(S603)→障栅同步处理(S604)→规定的处理(S605)→障栅同步处理(S606)。如果将各CPU#0~#7中的障栅写寄存器BARW以及障栅读寄存器BARR的初始值设为“0”,则在如上所述使用“inv rm”命令来进行障栅同步处理时,在障栅同步处理(S602)中BARR的8比特全部是“1”的情况成为同步点。然后,在接下来的障栅同步处理(S604)中,BARR的8比特全部是“0”的情况成为同步点,在进一步接下来的障栅同步处理(S606)中,BARR的8比特全部是“1”的情况成为同步点。

这样,通过一边使“1”与“0”反转一边设定同步点,例如,与将同步点固定为“1”那样的情况相比,实现了障栅同步处理的高速化。即,在完成了某障栅同步处理之后,无需将障栅写寄存器BARW以及障栅读寄存器BARR复位成“0”的处理。

如上所述,本实施方式1的多处理器系统,在各CPU内,设置有:将自身的同步等待的信息通知到其他CPU的第1寄存器(BARW)以及保持从其他CPU通知来的第1寄存器的信息的第2寄存器(BARR),该第1寄存器的信息通过直接性的布线(例如金属布线层等)反映到第2寄存器。另外,直接性的布线不必须仅由布线构成,例如,也包括通过用于调整驱动能力的缓冲器电路、触发器电路等也反应的情况等实质上起作用的结构。如果使用这样的结构,则代表性地,得到:(1)能够实现时间上高效的障栅同步处理、以及(2)能够利用低成本的硬件来实现障栅同步处理等效果。

关于(1),在如图5所示,例如CPU#0为了通知同步等待而对第1寄存器(BARW)写入了信息的情况下,并非中断等那样的间接性的方法,而通过直接性的布线自动地更新其他CPU#1~#3内的第2寄存器(BARR)的信息。因此,CPU#1~#3即使从CPU#0接收到同步等待的通知也不会阻碍当前执行着的处理,而能够维持高的处理效率。另外,如果最后完成了处理的CPU#3对第1寄存器(BARW)写入了信息,则该信息通过直接性的布线立即反映到各CPU的第2寄存器(BARR),所以能够缩短从CPU#3的处理完成至通过所有CPU进行的障栅同步处理的完成为止所需的时间。进而,伴随这样的障栅同步处理,各CPU访问设置在自身内部的第1以及第2寄存器即可,所以与访问自身以外的场所的情况相比,还可以缩短访问时间。于是,通过如图6所示在进行反转动作的同时设定同步点,也实现时间上的效率化。

关于(2),本实施方式1的多处理器系统,在各CPU的内部中设置第1寄存器(BARW)以及第2寄存器(BARR),而能够通过该自身的寄存器操作来实现障栅同步处理。因此,无需访问自身以外的场所那样的特殊命令,实现了低成本化。进而,通过用存储器映射寄存器来实现第1以及第2寄存器,能够通过执行各CPU一般具备的存储器访问命令来实现障栅同步处理,所以能够进一步实现低成本化。

另一方面,作为比较例,构成为在使用了上述专利文献1那样的技术的情况下,通过系统总线来进行该同步等待的通知,每当进行该通知时,检查表示其他CPU的同步等待状况的同步寄存器,所以各CPU伴随该通知而阻碍当前正在执行的处理。进而,在系统总线的总线权的调停中需要时间。另外,作为比较例,在使用了上述专利文献2或非专利文献1那样的技术的情况下,由于对相对各CPU共通的标志寄存器进行访问,所以与访问自身内部的寄存器的情况相比,有可能需要更多的时间,而且还有可能在其排他控制中需要时间。另外,在非专利文献1的技术中,只要构成为能够独立且并行地写入标志寄存器的各比特,则无需寄存器访问的排他控制。但是,作为其他问题,如果如该技术那样,使用对设置在CPU外部的共通的标志寄存器进行访问那样的结构,则产生在各CPU的命令组中装入特殊命令(障栅同步命令等)的必要性,产生成本的增加。

(实施方式2)

图7是在本发明的实施方式2的多处理器系统中,示出其主要部的结构例的概略图。在上述实施方式1中,示出了使障栅写寄存器BARW与障栅读寄存器BARR为不同寄存器(在地址映射寄存器的情况下,个别地分配了地址的寄存器)的结构例。另一方面,图7所示的多处理器系统的特征在于,将上述图3中的障栅写寄存器BARW与障栅读寄存器BARR合并,设为共通的障栅寄存器BAR。在图7中,多个(此处是8个)处理器CPU#0~#7分别具备8比特的障栅寄存器BAR。各障栅寄存器BAR中的同一比特彼此通过由布线块WBLK5实现的直接性的布线而相互连接。即,例如,包含在CPU#0~#7中的8个BAR的比特[0]彼此相互连接,比特[1]彼此相互连接,同样地比特[2]~比特[7]也分别相互连接。

各CPU#0~#7仅能够对自身的障栅寄存器BAR中的与自身对应的比特进行写访问,并且,能够对BAR的8比特进行读访问。即,例如,CPU#0仅能够对自身的BAR的比特[0]进行写访问,同样地,CPU#1、#2、...、#7分别仅能够对自身的BAR的比特[1]、[2]、...、[7]进行写访问。因此,各CPU#0~#7通过与在实施方式1中对障栅写寄存器BARW进行写入的情况同样地,对自身的BAR中的与自身对应的比特进行写入,能够与实施方式1的情况同样地进行障栅同步处理。

以上,通过使用本实施方式2的多处理器系统,除了实施方式1中叙述那样的各种效果以外,还可以削减寄存器等的面积成本,能够进一步降低硬件成本。但是,需要构成为例如通过掩码写(mask write)功能、读修改写(read modify write)功能、或者针对各比特的每一个分配地址来进行管理的功能等,仅能够对自身的BAR的特定1比特进行写入,所以根据情况,需要新的控制电路、延长1比特写入命令的处理时间。

(实施方式3)

图8是在本发明的实施方式3的多处理器系统中,示出其主要部的结构例的概略图。图8所示的多处理器系统的特征在于,将多个处理器CPU的一个(此处是CPU#0)作为主CPU,以该主CPU为主而对其他CPU的同步等待的状况进行监视,从而与上述图3的情况相比,削减了障栅读寄存器BARR的比特数。

在图8中,作为主CPU的CPU#0具备1比特的障栅写寄存器BARW和7比特(此处为了易于判别对应关系,省略比特[0]而设为比特[1]~[7])的障栅读寄存器BARR。另一方面,除其以外的CPU#1~#7具备1比特的障栅写寄存器BARW和1比特的障栅读寄存器BARR。在布线块WBLK6中,CPU#0中的7比特的BARR的各比特和包含在CPU#1~#7中的各BARW通过直接性的布线而分别连接。即,例如,CPU#0的BARR的比特[1]上连接CPU#1的BARW,同样地,对比特[2]、比特[3]、...、比特[7]分别连接CPU#2、CPU#3、...、CPU#7的BARW。另外,在WBLK6中,CPU#0的BARW通过直接性的布线,以广播的方式连接到分别包含在CPU#1~#7中的1比特的BARR。

图9是示出使用了图8的结构例的情况下的障栅同步处理的动作例的说明图。在图9中,各CPU#0~#7在执行了规定的处理(线程)之后(S901),进行障栅同步处理(S902)。在障栅同步处理中,与上述图5以及图6的情况不同,在作为主CPU的CPU#0、与除其以外的CPU#1~#7中,代码不同。即,在简单说明时,作为主CPU的CPU#0在确认了其他CPU#1~#7的同步等待之后,对自身的BARW设置同步等待,其他CPU#1~#7在自身的BARR中对该CPU#0中的同步等待的设置一起进行检测,从而进行障栅同步处理。

图10是示出图9中的障栅同步处理的更详细的处理内容的一个例子的说明图。此处,为简化,假设4个CPU#0~#3的情况来进行说明。如图10所示,作为主CPU的CPU#0在完成了规定的处理(相应于“do~enddo”)之后,执行“check r1-r3=111”命令,接下来执行“inv r0”命令。另一方面,其他CPU#1~#3分别在完成了规定的处理(相应于“do~enddo”)之后,执行“inv rm”命令(m是CPU号码),接下来执行“check r0=1”命令。

在图10的例子中,首先,最初完成了规定的处理的CPU#0执行之后的“check r1-r3=111”命令,但由于在其他CPU#1~#3的BARW中尚未设定同步等待标志,且与其相伴地自身的BARR的值是“000”(设初始值为零),所以成为待机状态。接下来,完成了规定的处理的CPU#2伴随之后的“inv rm”命令而使自身的BARW(设初始值为零)反转为“1”。该信息通过上述布线块WBLK6反映到CPU#0的BARR(图10的例子中反映到比特[2])。之后,CPU#2执行“checkr0=1”命令,但由于CPU#0对BARW尚未设定同步等待标志,且与其相伴地自身的BARR的值是“0”,所以成为待机状态。另一方面,由于自身的BARR的值是“010”,所以CPU#0也保持待机状态。

接下来,完成了规定的处理的CPU#1伴随之后的“inv rm”命令而使自身的BARW(设初始值为零)反转为“1”。该信息经由上述布线块WBLK6反映到CPU#0的BARR(在图10的例子中反映到比特[1])。之后,CPU#1执行“check r0=1”命令,但由于CPU#0在BARW中尚未设定同步等待标志,且与其相伴地自身的BARR的值是“0”,所以成为待机状态。另一方面,由于自身的BARR的值是“110”,所以CPU#0也保持待机状态。

最后,完成了规定的处理的CPU#3与之后的“inv rm”命令相伴而使自身的BARW(将初始值设为零)反转为“1”。该信息经由上述布线块WBLK6反映到CPU#0的BARR(在图10的例子中反映到比特[3])。之后,CPU#3执行“check r0=1”命令,但由于CPU#0在BARW中尚未设定同步等待标志,且与其相伴地自身的BARR的值是“0”,所以成为待机状态。另一方面,由于自身的BARR的值成为“111”,所以CPU#0伴随之后的“inv r0”命令而使自身的BARW(将初始值设为零)反转为“1”,进入到以后的处理。另外,与其并行地,CPU#0的BARW的信息经由上述布线块WBLK6立即反映到CPU#1~#3的BARR。由此,由于自身的BARR成为“1”,所以处于待机状态的CPU#1~#3进入到以后的处理。这样障栅同步处理完成。

以上,通过使用本实施方式3的多处理器系统,除了实施方式1中叙述那样的各种效果以外,还可以大幅削减寄存器的面积成本,能够进一步降低硬件成本。另外,如果与实施方式1的情况相比,则从最后的CPU结束处理到所有CPU完成同步的时间有可能稍微延长,但仍然能够确保充分的高速性。

(实施方式4)

图11是在本发明的实施方式4的多处理器系统中,示出其主要部的结构例的概略图。图11所示的多处理器系统的特征在于,与图2的结构例相比,在各处理器CPU#0~#7内,具备多组(此处为3组)的障栅写寄存器BARW以及障栅读寄存器BARR。

图11的多处理器系统与图2的情况同样地,包括由CPU#0~#3构成的集群CLS0、与由CPU#4~#7构成的集群CLS1。各CPU#0~#7分别与图2的情况不同,而包括1比特×3组的障栅写寄存器BARW[0]~[2]、与8比特×3组的障栅读寄存器BARR[0]~[2]。

集群CLS0用的布线块WBLK10使来自在CPU#0~#3中包含的各BARW[0]的组[0]用的4比特布线,分别以广播的方式,连接到在CPU#0~#3中包含的各BARR[0]内的特定的4比特(例如比特[0]~[3]),并且向布线块WBLK11延伸。另外,同样地,使来自在CPU#0~#3中包含的各BARW[1]的组[1]用的4比特布线、以及来自各BARW[2]的组[2]用的4比特布线,分别连接到在CPU#0~#3中包含的各BARR[1]内的例如比特[0]~[3]、以及各BARR[2]内的例如比特[0]~[3]。另外,WBLK10使上述组[1]用以及组[2]用的4比特布线向布线块WBLK11延伸。

集群CLS1用的布线块WBLK11使来自在CPU#4~#7中包含的各BARW[0]的组[0]用的4比特布线,以广播的方式,连接到在CPU#4~#7中包含的各BARR[0]内的特定的4比特(例如比特[4]~[7]),并且向布线块WBLK10延伸。另外,同样地,使来自在CPU#4~#7中包含的各BARW[1]的组[1]用的4比特布线、以及来自各BARW[2]的组[2]用的4比特布线,分别连接到在CPU#4~#7中包含的各BARR[1]内的例如比特[4]~[7]、以及各BARR[2]内的例如比特[4]~[7]。另外,WBLK11使这些组[1]用以及组[2]用的4比特布线向布线块WBLK10延伸。

WBLK10使从WBLK11延伸来的组[0]周的4比特布线,以广播的方式,连接到在CPU#0~#3中包含的各BARR[0]内的特定的4比特(例如比特[4]~[7])。同样地,使从WBLK11延伸来的组[1]用的4比特布线、以及组[2]用的4比特布线,分别连接到在CPU#0~#3中包含的各BARR[1]内的例如比特[4]~[7]、以及在CPU#0~#3中包含的各BARR[2]内的例如比特[4]~[7]。WBLK11使从WBLK10延伸来的组[0]用的4比特布线,分别以广播的方式,连接到在CPU#4~#7中包含的各BARR[0]内的特定的4比特(例如比特[0]~[3])。同样地,使从WBLK10延伸来的组[1]用的4比特布线、以及组[2]用的4比特布线,分别连接到在CPU#4~#7中包含的各BARR[1]内的例如比特[0]~[3]、以及在CPU#4~#7中包含的各BARR[2]内的例如比特[0]~[3]。

图12是在图11的多处理器系统中,示出其动作的一个例子的说明图。图12的例子示出例如通过8个CPU来分担执行某个循环处理的情况下的动作例。在该情况下,如图12所示,通过编译程序(coplier),以例如在由8个CPU执行的第1层次的循环处理MT1中包括由4个CPU执行的第2层次的循环处理MT2_1、MT2_2,进而,在其中包括由两个CPU执行的第3层次的循环处理MT3_1~MT3_4的方式,分配每一个CPU的处理。由此,需要针对各循环层次的每一个使用不同的资源来进行障栅同步处理。因此,如图11所示,通过设置与该层次数对应的组数的障栅写寄存器BARW以及障栅读寄存器BARR,能够容易地实现这样的循环处理。

在图12中,CPU#0、#1在分别进行了规定的循环处理(do~enddo)之后,使用自身的组[0]用的障栅写寄存器BARW[0]以及障栅读寄存器BARR[0]来进行障栅同步处理(BARRIER(0-1))。同样地,CPU#2、#3在进行了规定的循环处理(do~enddo)之后,使用自身的BARW[0]以及BARR[0]来进行障栅同步处理(BARRIER(0-2)),CPU#4、#5以及CPU#6、#7也同样地分别进行障栅同步处理(BARRIER(0-3))以及障栅同步处理(BARRIER(0-4))。

这样在两个CPU之间的障栅同步处理完成之后,在4个CPU之间进行障栅同步处理。即,CPU#0~#3使用自身的组[1]用的障栅写寄存器BARW[1]以及障栅读寄存器BARR[1]来进行障栅同步处理(BARRIER(1-1))。同样地,CPU#4~#7使用自身的BARW[1]以及BARR[1]来进行障栅同步处理(BARRIER(1-2))。在4个CPU之间的障栅同步处理完成之后,在8个CPU之间进行障栅同步处理。即,CPU#0~#7使用自身的组[2]用的障栅写寄存器BARW[2]以及障栅读寄存器BARR[2]来进行障栅同步处理(BARRIER(2))。

此处,在障栅同步处理(BARRIER(0-1))中,CPU#0、#1首先通过例如“inv rm[0]”命令,来进行自身的BARW[0]的反转(初始值是‘0’)。接下来,等待由于“check r0[0]-r1[0]=11”自身的BARR[0]的第0比特(即CPU#0的BARW[0])与第1比特(即CPU#1的BARW[0])都变为‘1’。另外,虽然未图示,但在障栅同步处理(BARRIER(0-2))中,同样地,CPU#2、#3等待由于“check r2[0]-r3[0]=11”而自身的BARR[0]的第2比特(即CPU#2的BARW[0])与第3比特(即CPU#3的BARW[0])都变为‘1’。

另外,在障栅同步处理(BARRIER(1-1))中,CPU#0~#3首先,通过例如“inv rm[1]”命令,进行自身的BARW[1]的反转(初始值是‘0’)。接下来,等待由于“check r0[1]-r3[1]=1111”而自身的BARR[1]的第0比特(CPU#0的BARW[1])、第1比特(CPU#1的BARW[1])、第2比特(CPU#2的BARW[1])、以及第3比特(CPU#3的BARW[1])都成为‘1’。进而,在障栅同步处理(BARRIER(2))中,CPU#0~#7首先,通过例如“inv rm[2]”命令,进行自身的BARW[2]的反转(初始值是‘0’)。接下来,等待由于“check r0[2]-r7[2]=11111111”而自身的BARR[2]的第0比特~第7比特(对应于CPU#0~#7的BARW[2])都成为‘1’。

这样,通过设置多个组的障栅写寄存器BARW以及障栅读寄存器BARR,各CPU能够执行包括通过较少的CPU数来逐次进行同步(即分组)而最终在所有CPU中进行同步那样的多个层次的障栅同步处理的处理内容(线程)。另外,作为组数,在如图12所示,编译程序在对整体进行2分割的同时分别分配层次的情况下,优选将CPU数作为i,设置(log2i)组以上。即在i=8的情况下设置3组,优选在3组以上。但是,由于在2个CPU之间,还可以容易地实现使用了软件的同步,所以也可以根据情况而设为((log2i)-1)组以上。即,也可以根据情况对i=8设置2组以上。

图13是在图11的多处理器系统中,示出其动作的另一例子的说明图,图14是在图11的多处理器系统中,示出其动作的又一例子的说明图。在图13的例子中,CPU#0与CPU#1使用组[0]用的BARW[0]以及BARR[0]来进行障栅同步处理(BARRIER(0-1))。然后,加上CPU#2与CPU#3,CPU#0~#3使用组[1]用的BARW[1]以及BARR[1]来进行障栅同步处理(BARRIER(1-1))。

另一方面,与CPU#0~#3的处理并行地,CPU#4与CPU#5使用组[1]用的BARW[1]以及BARR[1]来进行障栅同步处理(BARRIER(1-2))。然后,最后加上CPU#6、#7,CPU#0~#7使用组[2]用的BARW[2]以及BARR[2]来进行障栅同步处理(BARRIER(2))。

在图14的例子中,CPU#0与CPU#1在使用组[0]用的BARW[0]以及BARR[0]进行了障栅同步处理(BARRIER(0))之后,使用组[1]用的BARW[1]以及BARR[1]来进行障栅同步处理(BARRIER(1))。另一方面,与其并行地,CPU#2与CPU#3使用组[0]用的BARW[0]以及BARR[0]来进行了障栅同步处理(BARRIER(0))之后,使用组[1]用的BARW[1]以及BARR[1]来进行障栅同步处理(BARRIER(1))。进而,与其并行地,CPU#4~#7使用组[1]用的BARW[1]以及BARR[1]来进行障栅同步处理(BARRIER(1))。

之后,CPU#0、#1使用组[2]用的BARW[2]以及BARR[2]来进行障栅同步处理(BARRIER(2)),同样地,CPU#2~#4以及CPU#5~#7也分别使用组[2]用的BARW[2]以及BARR[2]来进行障栅同步处理(BARRIER(2))。然后,最终,CPU#0~#7使用组[0]用的BARW[0]以及BARR[0]来进行障栅同步处理(BARRIER(0))。

如上所述,即使在各CPU分别进行复杂的分组的同时进行最终的障栅同步处理的情况下,也可以通过各CPU具备多个组的障栅写寄存器BARW以及障栅读寄存器BARR而容易地应对。另外,在图11的例子中,使各CPU的障栅读寄存器BARR成为相应于CPU数的8比特结构,但当然,也可以如实施方式3(图8~图10)的说明那样定义主CPU来削减BARR的比特数。另外,还可以如实施方式2(图7)的说明那样合并障栅写寄存器BARW与障栅读寄存器BARR。此处,以下说明如实施方式3那样定义了主CPU的情况下的结构例以及动作例。

图15是在本发明的实施方式4的多处理器系统中,示出将图12变形后的动作例的说明图。此处,例如,以CPU数是4个且在由4个CPU执行的循环处理MT1中包括由2个CPU执行的循环处理MT2_1、MT2_2的情况为例子而进行说明。在图15中,CPU#0与CPU#1在进行了规定的循环处理之后,进行障栅同步处理(BARRIER(B1))。

在障栅同步处理(BARRIER(B1))中,CPU#1在结束了自身的循环处理之后,通过“inc r1[1]”命令使自身的BARW[1]增加+1(换言之是使BARW[1]反转)。CPU#0是主CPU,在结束了自身的循环处理之后,通过“check r1[1]”命令,确认该CPU#1的BARW[1]有无反转。在有反转的情况下,CPU#0使自身的BARW[1]增加+1(使BARW[1]反转),CPU#1通过“check r0[1]”命令,对该CPU#0的BARW[1]的反转进行检测。由此,障栅同步处理(BARRIER(B1))完成。另外,CPU#2以及CPU#3也同样地,例如以CPU#2为主CPU而进行障栅同步处理(BARRIER(B2))。

接下来,由CPU#0~#3进行障栅同步处理(BARRIER(B3))。在障栅同步处理(BARRIER(B3))中,CPU#1通过“inc r1[0]”命令,使自身的BARW[0]增加+1(使BARW[0]反转),同样地,CPU#2以及CPU#3也分别通过“inc r2[0]”命令以及“inc r3[0]”命令,使自身的BARW[0]反转。作为主CPU的CPU#0通过“check r1[0]”命令、“check r2[0]”命令以及“check r3[0]”命令,确认该CPU#1~#3各自有无BARW[0]的反转。在全部有反转的情况下,CPU#0使自身的BARW[0]增加+1(使BARW[0]反转),CPU#1~#3通过“check r0[0]”命令,对该CPU#0的BARW[0]的反转进行检测。由此,障栅同步处理(BARRIER(B3))完成。

因此,在这样的4个CPU的情况下,例如,CPU#0读取CPU#1~#3的BARW的值即可,CPU#1读取CPU#0的BARW的值即可,CPU#2读取CPU#3与CPU#0的BARW的值即可,CPU#3读取CPU#2与CPU#0的BARW的值即可。另外,在扩展到8个CPU的情况下,例如,CPU#0读取CPU#1~#7的BARW的值即可,CPU#1读取CPU#0的BARW的值即可,CPU#2读取CPU#3与CPU#0的BARW的值即可,CPU#3读取CPU#2与CPU#0的BARW的值即可。进而,CPU#4读取CPU#5~#7与CPU#0的BARW的值即可,CPU#5读取CPU#4与CPU#0的BARW的值即可,CPU#6读取CPU#7与CPU#4与CPU#0的BARW的值即可,CPU#7读取CPU#6与CPU#4与CPU#0的BARW的值即可。因此,能够与它们对应地削减BARR的比特数。

以上,通过使用本实施方式4的多处理器系统,除了此前的实施方式中叙述那样的各种效果以外,进而,还可以容易地应对于包括多个层次的障栅同步处理的各CPU的处理内容(线程)。特别,随着CPU数增加,这样的多个层次的障栅同步处理变得不可欠缺,在该情况下通过使用本实施方式4的多处理器系统,能够得到有益的效果。

(实施方式5)

图16是在本发明的实施方式5的多处理器系统中,示出其主要部的结构例的概略图。图16所示的多处理器系统的特征在于,与在实施方式1中叙述的图2的结构例相比,将各CPU#0~#7内的障栅写寄存器BARW的比特数设为n比特(n≥2),将障栅读寄存器BARR的比特数设为(8×n)比特。即,是能够对BARW设定号码(版本号)的结构例。另外,与其对应地,从集群CLS0用的布线块WBLK20向集群CLS1用的布线块WBLK21的布线条数以及从WBLK21向WBLK20的布线条数分别是((8×n)/2)条。进而,例如在WBLK20以及WBLK21内,各CPU#0~#7内的BARW的n比特以广播的方式布线到BARR内的对应的n比特处,所以虽然未明示,但与图2相比,布线条数增加。关于除此以外的结构,与图2的情况相同,所以省略详细的说明。

图17是在图16的多处理器系统中,示出其动作的一个例子的说明图。在图17中,与实施方式4中叙述的图12的情况同样地,对各CPU#0~#7,分配了由第1层次的循环处理MT1、第2层次的循环处理MT2_1、MT2_2、以及第3层次的循环处理MT3_1~MT3_4构成的处理内容。在图12的例子中,通过使用分别不同的组的BARW以及BARR来实现了该3个层次的处理,但在图17的例子中,通过使用BARW以及BARR内的分别不同的比特来实现该3个层次的处理。即,在图16中,设n=3,而使BARW的各比特对应于1层次。

在图17中,CPU#0与CPU#1在进行了规定的循环处理之后,进行障栅同步处理(BARRIER(0-1))。同样地,CPU#2与#3、CPU#4与#5、以及CPU#6与#7也分别在进行了规定的循环处理之后,进行障栅同步处理(BARRIER(0-2))、(BARRIER(0-3))、以及(BARRIER(0-4))。以对BARW的n比特(3比特)设置了“xx1(xは任意的值)”的情况为同步点,而进行这些第3层次的障栅同步处理。

即,例如,在障栅同步处理(BARRIER(0-1))中,CPU#0与CPU#1分别在结束了自身的循环处理之后,首先,通过“inv rm”命令,使自身的BARW中的3比特中的特定的1比特(此处设为右端的比特)反转。如果进行了反转,则各CPU#0~#7的BARR中的与CPU#0和CPU#1对应的寄存器字段(相应于r0与r1)各自的3比特值经由布线块WBLK而变为“xx1”。接下来,由于“check r0-r1=all“xx1””命令CPU#0与CPU#1分别,进行等候直到BARR中的与CPU#0和CPU#1对应的寄存器字段(相应于r0与r1)这两方的3比特值成为“xx1”为止。然后,在r0以及r1都成为“xx1”的阶段中,障栅同步处理(BARRIER(0-1))完成。

这样在进行了第3层次的障栅同步处理之后,进行第2层次的障栅同步处理。即,CPU#0~#3进行障栅同步处理(BARRIER(0-5)),CPU#4~#7进行障栅同步处理(BARRIER(0-6))。以对BARW的n比特(3比特)设置了“x1x”的情况为同步点,而进行这些第2层次的障栅同步处理。

例如,在障栅同步处理(BARRIER(0-5))中,各个CPU#0~#3首先通过“inv rm”命令,使自身的BARW中的3比特中的特定的1比特(此处设为正中间的比特)反转。如果进行了与该第2层次伴随的反转,则各CPU#0~#7的BARR中的与CPU#0~#3对应的寄存器字段(相应于r0~r3)各自的3比特值成为“x1x”。接下来,由于“checkr0-r3=all“x1x””命令CPU#0~#3分别,进行等候直到BARR中的与CPU#0~#3对应的寄存器字段(相应于r0~r3)各自的3比特值全部成为“x1x”为止。然后,在r0~r3全部变为了“x1x”的阶段中,障栅同步处理(BARRIER(0-5))完成。

这样在进行了第2层次的障栅同步处理之后,进行第1层次的障栅同步处理。即,CPU#0~#7进行障栅同步处理(BARRIER(0-7))。以对BARW的n比特(3比特)设置了“1xx”的情况为同步点,而进行该第1层次的障栅同步处理。

在障栅同步处理(BARRIER(0-7))中,CPU#0~#7分别首先通过“inv rm”命令,使自身的BARW中的3比特中的特定的1比特(此处设为左端的比特)反转。如果进行了与该第1层次相伴的反转,则各CPU#0~#7的BARR中的与CPU#0~#7对应的寄存器字段(相应于r0~r7)各自的3比特值成为“1xx”。接下来,由于“check r0-r7=all“1xx””命令CPU#0~#7分别,进行等候直到BARR中的与CPU#0~#7对应的寄存器字段(相应于r0~r7)各自的3比特值全部成为“1xx”。然后,在r0~r7全部变为“1xx”的阶段中,障栅同步处理(BARRIER(0-7))完成。

另外,虽然未图示,但在之后的处理中,例如,再次使用BARW的3比特中的右端的比特来进行障栅同步处理的情况下,通过上述第3层次的障栅同步处理,BARW的相应比特已经成为了‘1’,所以本次以对BARW的3比特设置了“xx0(x是任意的值)”的情况为同步点。由此,能够省略如实施方式1的叙述那样,使反转后的比特复原那样的复位动作,实现了高速化。

图18是在图16的多处理器系统中,示出其动作的另一例子的说明图。图18示出如实施方式3的叙述那样定义了主CPU的情况下的动作例。此处,以CPU数是4个的情况为例子而进行说明。在图18中,在由CPU#0~#3执行的第1层次的循环处理MT1中,包括由CPU#0、#1执行的第2层次的循环处理MT2_1、与由CPU#2、#3执行的第2层次的循环处理MT2_2。另外,寄存器字段在CPU数是4个的情况下,是r0~r3,在r0~r3各自中包括2比特(log24)。

CPU#0、#1在结束了规定的循环处理之后,进行第2层次的障栅同步处理(BARRIER(B1))。在障栅同步处理(BARRIER(B1))中,首先,CPU#1在结束了规定的循环处理之后,通过“inv r1(1)”命令,使自身的BARW中的2比特中的一个比特反转。CPU#0是主CPU,在结束了规定的循环处理之后,通过“check r1(1)”命令,确认上述CPU#1有无BARW的比特反转。在有比特反转的情况下,CPU#0通过“inv r0(1)”命令,使自身的BARW中的2比特中的一个比特反转。然后,CPU#1通过“check r0(1)”命令,在检测出通过该CPU#0进行了BARW的比特反转动作的阶段中,完成障栅同步处理(BARRIER(B1))。另外,CPU#2、#3也同样地进行第2层次的障栅同步处理(BARRIER(B2))。

如果第2层次的障栅同步处理完成,则CPU#0~#3进行第1层次的障栅同步处理(BARRIER(B3))。在障栅同步处理(BARRIER(B3))中,CPU#1通过“inv r1(0)”命令,使自身的BARW中的2比特中的另一个比特反转,同样地,CPU#2以及CPU#3也分别通过“inv r2(0)”命令以及“inv r3(0)”命令,使自身的BARW中的2比特中的另一个比特反转。作为主CPU的CPU#0通过“checkr1(0)”命令、“check r2(0)”命令、以及“check r3(0)”命令,确认该CPU#1~#3是否分别使BARW中的2比特中的另一个比特反转。在全部有反转的情况下,CPU#0使自身的BARW中的2比特中的另一个比特反转,CPU#1~#3通过“check r0(0)”命令,对通过该CPU#0进行的BARW的比特反转动作进行检测。由此,障栅同步处理(BARRIER(B3))完成。

图19是在图18的动作例中,示出在其障栅同步处理(BARRIER(B1))中使用的详细的源代码的一个例子的说明图。在图19中,CPU#1进行变量“ver”与“1”的EXOR(异或)运算,将作为其结果而得到的“ver”的值代入到变量“r1”。即,在“ver”的值是“00”的情况下,通过EXOR运算对“r1”代入“01”,相反地,在“ver”的值是“01”的情况下,通过EXOR运算对“r1”代入“00”。其相应于图18中的“inv r1(1)”命令。

另一方面,CPU#0也进行变量“ver”与“1”的EXOR运算,将其结果代入到“ver”。然后,由于“while”语句,CPU#0待机直到作为该EXOR运算结果的“ver”的值与由CPU#1得到的“r1”的值一致为止。即,例如,等待以通过CPU#0的运算而得到的“ver”=“01”的值作为期待值,CPU#1对“r1”设定“01”。其相应于图18中的“check r1(1)”命令。如果CPU#1对“r1”设定了“01”,则CPU#0跳过“while”语句,对变量“r0”设定“ver”的值。即,例如对“r0”设定“01”。另一方面,CPU#1等待使用“while”语句而对“r0”设定“01”,通过对该设定动作进行检测,而完成障栅同步处理。

以上,通过使用本实施方式5的多处理器系统,除了此前的实施方式中叙述那样的各种效果以外,进而,还可以容易地应对于包括多个层次的障栅同步处理的各CPU的处理内容(线程)。特别,随着CPU数增加,这样的多个层次的障栅同步处理变得不可欠缺,在该情况下通过使用本实施方式5的多处理器系统,能够得到有益的效果。另外,在图16中,将障栅写寄存器BARW与障栅读寄存器BARR设为了不同寄存器,但当然,还可以如实施方式2的图7所示,设为合并的一个寄存器BAR。

(实施方式6)

图20是在本发明的实施方式6的多处理器系统中,示出使用了图16的结构例的其他动作的一个例子的说明图。此处,示出在如实施方式5中叙述那样的层次的切分用途以外,还将图16中的障栅写寄存器BARW等的n比特(即版本号)用于其他用途的情况下的动作例。

在图20中,各CPU#0~#7在进行了规定的处理之后(S2001),将同步点设为‘1’而进行障栅同步处理(BARRIER(0-1))。接下来,在进行了规定的处理之后(S2002),下次将同步点设为‘2’而进行障栅同步处理(BARRIER(0-2))。之后,在进行了规定的处理之后(S2003),下次将同步点设为‘3’而进行障栅同步处理(BARRIER(0-3))。由此,例如能够管理进行障栅同步处理的次数等。

例如,在障栅同步处理(BARRIER(0-3))中,各CPU#0~#7通过“inc rm”命令对自身的BARW的值加上+1,之后,通过“checkr0-r7=all‘3’”命令,等待各CPU#0~#7的BARW的值全部成为‘3’。在图16中,在例如BARW等的n比特是2比特的情况下,能够使用‘0’~‘3’的版本号。在该情况下,图20中的‘3’之后返回到‘0’而进行障栅同步处理。如果使用这样的动作,则如实施方式1的叙述那样,不进行使版本号复位那样的动作,所以实现了高速化。

另外,通过使用这样的版本号,能够灵活地应对复杂的障栅同步处理。例如,通过用直接值来指定版本号,能够使某CPU与其他CPU以版本号‘1’同步,能够使某CPU与另外其他CPU以版本号‘2’同步。在该情况下,通过用版本号来管理同步,与仅有1比特的信息的情况相比,能够容易地进行同步处理。

(实施方式7)

图21是在本发明的实施方式7的多处理器系统中,示出其主要部的结构例的概略图。图21所示的多处理器系统的特征在于,与实施方式4中叙述的图11的结构例相比,将CPU#0~#7内的障栅写寄存器BARW[0]、[1]、[2]各自的比特数设为n比特(n≥2),将障栅读寄存器BARR[0]、[1]、[2]各自的比特数设为(8×n)比特。即,形成除了如实施方式4的叙述那样设置多个组的BARW以及BARR的结构以外,进而还可以在各组内设定实施方式5、6中叙述那样的版本号的结构例。

如果使用这样的结构,则能够如实施方式4中的叙述那样根据各组的数量来对应于多个层次,而且能够如实施方式5的叙述那样根据版本号的比特数来对应于多个层次,所以通过该组合还可以对应于例如超过3层次那样的情况。即,例如,还可以对应于对图12追加了由CPU#0与CPU#2构成的第4层次的循环处理那样的情况。

图22是在图21的多处理器系统中,示出其使用例的说明图。此处,以CPU数是4个的情况为例子进行说明。在图22中,在由CPU#0~#3执行的第1层次的循环处理MT1中,包括由CPU#0与#1执行的第2层次的循环处理MT2_1、和由CPU#2与#3执行的第2层次的循环处理MT2_2。CPU#0、#1在结束了规定的循环处理之后,进行第2层次的障栅同步处理(BARRIER(B1)),CPU#2、#3也在结束了规定的循环处理之后,进行第2层次的障栅同步处理(BARRIER(B2))。然后,在结束了第2层次的障栅同步处理之后,CPU#0~#3进行第1层次的障栅同步处理(BARRIER(B3))。

这样在CPU数是4个的情况下,与两层次对应地例如设置两组的BARW以及BARR的组。而且,在各组中,形成能够对包含在各CPU中的BARW等设定n比特(n≥2)的版本号的结构。在该情况下,能够如图22所示,针对各层次的循环处理MT、MT2_1、MT2_2,使用版本号对各循环处理的运行数进行管理。例如,能够进行如下动作:在进行了两次障栅同步处理(BARRIER(B1))(即运行了两次循环处理MT2_1)的阶段中,跳过MT2_1,在运行了3次循环处理MT2_2的阶段中,跳过MT2_2,在运行了4次循环处理MT1的阶段中,跳过MT1。

另外,通过在每次运行各循环处理时更新版本号,例如,还可以将该版本号用作程序调试时的断点(break point)的停止条件。而且,还能在进行热点(hot spot)的动态抽出等时活用等。另外,例如,通过不使用版本号而相应地增加组数、或者相反地将组数设为1组而相应地增加版本号的比特数等,也可以对应于更高阶的障栅同步处理。但是,在该情况下,有可能导致程序的可读性降低等,从该观点,优选为并用了组与版本号的方式。

以上,通过使用本实施方式7的多处理器系统,除了此前的实施方式中叙述那样的各种效果以外,进而,还可以灵活地应对于希望进行更复杂或者高级的障栅同步处理的情况。特别,随着CPU数增加,需要更高级的障栅同步处理,在该情况下通过使用本实施方式7的多处理器系统,能够得到有益的效果。

以上,根据实施方式具体说明了由本发明者完成的发明,但本发明不限于上述实施方式,而当然能够在不脱离其要旨的范围内实现各种变更。

产业上的可利用性

本发明的一个实施方式的多处理器系统是特别适用于面向嵌入用途的系统等那样的面向硬件成本、开发期间的制约较大的领域的系统的技术,而且不限于此,还可以广泛应用于多处理器系统。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号