首页> 中国专利> 众核处理器片上同步方法和其系统

众核处理器片上同步方法和其系统

摘要

本发明涉及众核处理器片上同步方法和其系统,在片上众核体系结构中,使用专用的片上同步管理装置支持粗粒度同步方法,由于访问片上同步管理装置的时间远远小于访问内存的时间,而且避免了因为轮询标志位造成的网络拥塞,因此减少了同步时间,进而帮助提高众核处理器的计算能力。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-05-23

    授权

    授权

  • 2011-01-19

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

    实质审查的生效

  • 2010-12-08

    公开

    公开

说明书

技术领域

本发明涉及众核处理器领域,尤其涉及众核处理器片上同步方法和及其系统。

背景技术

传统单核处理器采用指令级细粒度并行的技术提高性能,借助于超标量和流水处理提高处理器的主频,然而主频的提高使得功耗和散热问题难以依靠现有的技术解决。半导体工艺的发展,使得片上可集成的晶体管数目日益增多,体系结构设计者为了在性能进一步提升的同时降低功耗和散热,提出了线程级粗粒度并行的片上多核/众核处理器,众核处理器比多核处理器在芯片上集成了更多的处理器核,通常认为8核以下的是多核,8核以上的是众核。

片上多核/众核处理器与传统多处理器在设计理念上不同,它并不是将多个处理器核简单地集成到一个芯片上。片上众核处理器在简化众核处理器设计复杂度的同时,增大片上的处理能力。与传统多处理器相比,其优点是片上带宽高、通信距离短、传输速度快,使得多个线程之间的数据通信效率高。

同步操作保证多个线程之间的数据传播,使得多个线程对共享内存的写操作等同于串行执行,保证程序执行语义的正确性。同步操作的性能对片上众核处理器而言非常重要,直接影响了多个线程协同执行的速度。

在传统多处理器系统中,同步操作通常需要片外访存,造成了较大同步延迟,其中一种方法是多个处理器都去轮询内存中的同一个标志位,当发现标志位为0时,就将其置为1,同时获得了锁;如果发现标志位为1,就隔一段时间再来查询这个标志位。这种方法除了片外访存的开销比较大以外,对于标志位的不断轮询,也对网络造成了压力。

发明内容

为解决上述问题,本发明提出了众核处理器片上同步方法和其系统,在片上众核体系结构中,使用专用的片上同步管理装置支持粗粒度同步方法,由于访问片上同步管理装置的时间远远小于访问内存的时间,而且避免了因为轮询标志位造成的网络拥塞,因此减少了同步时间,进而帮助提高众核处理器的计算能力。

本发明公开了一种众核处理器片上同步方法,包括:

步骤1,小核执行到申请指令,向同步管理装置发送一个申请锁的申请消息,然后进入等待状态,所述申请消息中包括sync_id,并表明是读锁申请或写锁申请;

步骤2,同步管理装置接收到申请锁的申请消息后,依据记录检查是否已经有小核申请相同sync_id的锁,如果没有,则向所述小核发送确认消息,并对小核的申请进行记录;否则,直接对所述小核的申请进行记录;

步骤3,小核收到确认消息后,进入临界区,执行完临界区代码后,向同步管理装置发送释放锁的释放消息;

步骤4,同步管理装置收到释放锁的释放消息,将发送所述释放消息的小核从记录中删除,依据记录检查是否还有等待该释放的锁的小核,如果有,则向所述锁对应的多个申请读锁的小核发送确认消息,如果记录中没有对应的申请读锁的小核,则向记录的所述锁对应的第一个申请写锁的小核发送确认消息。

本发明还公开了一种众核处理器片上同步系统,包括同步管理装置和多个小核,

小核,用于执行到申请指令,向同步管理装置发送一个申请锁的申请消息,然后进入等待状态,所述申请消息中包括sync_id,并表明是读锁申请或写锁申请;收到确认消息后,进入临界区,执行完临界区代码后,向同步管理装置发送释放锁的释放消息;

同步管理装置,用于接收到申请锁的申请消息后,依据记录检查是否已经有小核申请相同sync_id的锁,如果没有,则向所述小核发送确认消息,并对小核的申请进行记录;否则,直接对所述小核的申请进行记录;收到释放锁的释放消息,将发送所述释放消息的小核从记录中删除,依据记录检查是否还有等待该释放的锁的小核,如果有,则向所述锁对应的多个申请读锁的小核发送确认消息,如果记录中没有对应的申请读锁的小核,则向记录的所述锁对应的第一个申请写锁的小核发送确认消息。

本发明公开了一种众核处理器片上同步方法,包括:

步骤1,小核执行到栅栏指令时,向同步管理装置发送栅栏消息,然后进入等待状态,所述栅栏消息中包括sync_id和所在的栅栏同步中的小核的数量;

步骤2,同步管理装置接收到小核的栅栏消息,记录所述小核,依据记录和所述栅栏消息检查参与栅栏消息对应的栅栏同步的小核的栅栏消息是否都已经到达同步管理装置,如果是,则按各个小核的栅栏消息到达所述同步管理装置的顺序,依次向所述栅栏同步的各个小核发送确认消息;

步骤3,小核收到确认消息后,继续执行栅栏指令之后的指令。

本发明还公开了一种众核处理器片上同步系统,包括:同步管理装置和多个小核

小核,用于执行到栅栏指令时,向同步管理装置发送栅栏消息,然后进入等待状态,所述栅栏消息中包括sync_id和所在的栅栏同步中的小核的数量;

同步管理装置,用于接收到小核的栅栏消息,记录所述小核,依据记录和所述栅栏消息检查参与栅栏消息对应的栅栏同步的小核的栅栏消息是否都已经到达同步管理装置,如果是,则按各个小核的栅栏消息到达所述同步管理装置的顺序,依次向所述栅栏同步的各个小核发送确认消息;

小核,用于收到确认消息后,继续执行栅栏指令之后的指令。

本发明公开了一种众核处理器片上同步方法,包括:

步骤1,小核执行到生产指令时,向同步管理装置发送生产消息,然后继续执行后续指令,所述生产消息中包括第一数值和sync_id;

步骤2,小核执行到消费指令时,向同步管理装置发送消费消息,然后进入等待状态,所述消费消息中包括sync_id;

步骤3,同步管理装置接收到生产消息时,进行生产接收记录,并依据消费等待记录和生产消息检查是否已有消费者等待发送所述生产消息的生产者,如果有,则按照各个小核的消费消息到达同步管理装置的顺序向所述小核发送确认消息,发送的确认消息的数量不超过所述生产消息中第一数值;

步骤4,同步管理装置接收到小核的消费消息时,依据生产接收记录和消费消息检查是否已经接收到所述消费消息中sync_id对应的生产消息,如果是,则在所述生产消息对应确认消息的已发送数量小于所述生产消息的第一数值时,向发送所述消费消息的小核发送确认消息,如果为否,则进行消费等待记录;

步骤5,小核收到确认消息后,继续执行后续指令。

本发明还公开了一种众核处理器片上同步系统,包括:多个小核和同步管理装置,

小核,用于执行到生产指令时,向同步管理装置发送生产消息,然后继续执行后续指令,所述生产消息中包括第一数值和sync_id;

小核,还用于执行到消费指令时,向同步管理装置发送消费消息,然后进入等待状态,所述消费消息中包括sync_id;

同步管理装置用于接收到生产消息时,进行生产接收记录,并依据消费等待记录和生产消息检查是否已有消费者等待发送所述生产消息的生产者,如果有,则按照各个小核的消费消息到达同步管理装置的顺序向所述小核发送确认消息,发送的确认消息的数量不超过所述生产消息中第一数值;

同步管理装置还用于接收到小核的消费消息时,依据生产接收记录和消费消息检查是否已经接收到所述消费消息中sync_id对应的生产消息,如果是,则在所述生产消息对应确认消息的已发送数量小于所述生产消息的第一数值时,向发送所述消费消息的小核发送确认消息,如果为否,则进行消费等待记录;

小核还用于收到确认消息后,继续执行后续指令。

本发明的有益效果在于,通过访问片上的同步管理装置实现同步,避免访问片外存储,片上的高速通信节约了大量的时间;本发明中的同步方法,在发出同步消息后,不再向网络上发送轮询消息,而是等待同步管理装置的确认消息,避免了传统方法中因为轮询内存标志位造成的网络拥塞;专用的同步管理装置,提高了同步效率,进而帮助提高众核处理器的计算能力。

附图说明

图1是本发明的同步管理装置在众核处理器上的位置示意图;

图2是用于维护等待链表的记录表的示意图;

图3是生产记录表的示意图;

图4是小核向同步管理装置发送消息的格式的示意图;

图5是众核处理器片上同步方法中的临界区内互斥同步的方法流程图;

图6是实施例中同步管理装置处理acquire消息的过程的流程图;

图7是实施例中同步管理装置处理release消息的过程的流程图;

图8是众核处理器片上同步方法中的栅栏同步的方法流程图;

图9是实施例中同步管理装置处理barrier消息的过程的流程图;

图10是实施例中同步管理装置处理produce消息的过程的流程图;

图11是实施例中同步管理装置处理consume消息的过程的流程图。

具体实施方式

下面结合附图,对本发明做进一步的详细描述。

本发明提出在片上众核体系结构中,使用专用的片上同步管理装置支持粗粒度同步方法,由于访问片上同步管理装置的时间远远小于访问内存的时间,而且避免了因为轮询标志位造成的网络拥塞,因此减少了同步时间,进而帮助提高众核处理器的计算能力。

所述片上同步管理装置在众核芯片上的位置如图1所示,整个芯片是一个二维网孔的结构,其中,标记101是众核芯片上N个小核中的一个小核,标记102是众核芯片上的同步管理装置。

同步管理装置能够处理小核发来的五种消息,并向相应小核发送确认消息。

所述小核发来的五种消息包括,acquire消息(申请消息)、release消息(释放消息)、barrier消息(栅栏消息)、produce消息(生产消息)、consume消息(消费消息)。

acquire消息(申请消息),小核向同步管理装置发消息申请一把锁,用于实现临界区互斥;release消息(释放消息),小核向同步管理装置发消息释放一把锁,用于实现临界区互斥。

barrier消息(栅栏消息),小核向同步管理装置发栅栏消息通知同步管理装置该小核到达同步点,用于barrier同步(栅栏同步)。

produce消息(生产消息),小核向同步管理装置发生产消息通知同步管理装置该小核生产完成,用于生产者-消费者同步;consume消息(消费消息),小核向同步管理装置发消费消息通知同步管理装置该小核要进行消费,用于生产者-消费者同步。

所述同步管理装置的结构如图2和图3所示,同步管理装置内部维护两张表。

图2所示记录表用于维护申请锁,栅栏同步或消费的等待链表。

每个小核对应一行,表的行数与小核数目相同,编号为1的小核对应第1行,编号为2的小核对应第2行,以此类推。

r/w,表示读写标志项,用1位寄存器存储,用于记录读锁或写锁,用0表示读锁,用1表示写锁。这个初始值可以为0,也可以为1,因为每次写记录时,都要改写这个标志项,而在查找记录时只需要比较sync_id和tail,所以初始值是0或1并无影响,具体实施例中把初始值设置为0。

sync_id,表示sync_id项,用32位寄存器存储,用于记录申请锁,栅栏同步或消费对应的sync_id,同一小核的申请锁,栅栏或消费可以共用一个寄存器。初始值为空。

head,表示头标志项,用1位寄存器存储,1表示该小核是链表头,0表示不是链表头,同一小核的申请锁,栅栏同步或消费可以共用该寄存器。初始值为无效,记为0。

tail,表示尾标志项,用1位寄存器存储,1表示该小核是链表尾,0表示不是链表尾,同一小核的申请锁,栅栏同步或消费可以共用该寄存器。初始值为无效,记为0。

cnt,在栅栏同步使用,表示计数表项,作为barrier计数器的寄存器,表示第一个到达同步管理装置的barrier消息对应的cnt寄存器置为barrier消息中的count减1,以后同步管理装置每接收到一个barrier消息,对应的cnt寄存器置为前一小核对应的cnt寄存器的值减1。初始值为0。

next,表示下一节点项,用于指示链表中的下一个结点的寄存器,同一小核的申请锁,栅栏同步或消费可以共用该寄存器。初始值为空。

图3的生产记录表用于维护生产者信息,每个小核对应一行,表的行数与小核数目相同。

其中:

wait,等待标志项,1位寄存器,1表示对应小核已经发出了一个produce消息并且尚未被消费完成。

同一小核发出的第二个produce消息需要等待之前的produce处理完之后才能进入同步管理装置。

sync_id,sync_id项,32位寄存器,表示produce的32位ID。初始值为空。

cnt,数值记录项,表示还未到达同步管理装置的消费者数目的寄存器,每到达一个消费者,该计数器减1。初始值为0。

sync_id用于表示同步ID。初始值为空。

不同sync_id对应的锁,是指不同的临界区,比如说小核1和小核2竞争进入临界区1,小核3和小核4竞争进入临界区2,这两个临界区之间不存在互斥,所以用两把不同sync_id对应的锁,它们之间没有联系。不同sync_id对应的栅栏,是指两组小核在不同的barrier同步,而两组小核之间没有任何同步关系。不同sync_id对应的的consume和produce,是指不同的生产者-消费者组,它们之间也没有关系。

所述确认消息是同步管理装置发送给小核的消息,通知小核可以继续往下执行。当小核执行到acquire(申请)/barrier(栅栏)/consume(消费)这三种指令时,向同步管理装置发送acquire(申请)/barrier(栅栏)/consume(消费)消息,然后进入等待状态,直到收到同步管理装置的确认消息才能继续执行后续指令。而小核执行到release(释放)或produce(生产)指令时,并不等待同步管理装置的确认消息,继续往下执行指令。

所述小核向同步管理装置发送的消息,其消息格式如图4,消息内容包括sync_id,count,core_id,msg_type和r/w,其中sync_id用于区分不用ID的锁,barrier或生产者-消费者;count表示参与对应barrier同步的小核数目或一个生产者对应的消费者的数目;core_id是向同步管理装置发送消息的小核编号;msg_type用于表示上述五种消息的类型;r/w表示锁的类型,读锁或写锁。

一种众核处理器片上同步方法如图5所示。

步骤S1100,小核执行到栅栏指令,向同步管理装置发送一个申请锁的申请消息,然后进入等待状态,所述申请消息中包括sync_id,并表明是读锁申请或写锁申请。

步骤S1200,同步管理装置接收到申请锁的申请消息后,依据记录检查是否已经有小核申请相同sync_id的锁,如果没有,则向所述小核发送确认消息,并对所述小核的申请进行记录,否则,直接对所述小核的申请进行记录。

步骤S1300,小核收到确认消息后,进入临界区,执行完临界区代码后,向同步管理装置发送释放锁的释放消息。

步骤S1400,同步管理装置收到释放锁的释放消息,将发送所述释放消息的小核从记录中删除,依据记录检查是否还有等待该释放的锁的小核,如果有,则向所述锁对应的多个申请读锁的小核发送确认消息,如果记录中没有对应的申请读锁的小核,则向记录的所述锁对应的第一个申请写锁的小核发送确认消息。

对申请信息的记录存在多种方法。在一优选的实施方式中,采用链表进行记录。

所述方法还包括:

步骤S1500,同步管理装置对于每个sync_id维护一个写锁等待链表和一个读锁等待链表;

所述步骤S1200进一步为,同步管理装置接收到申请锁的申请消息后,判断sync_id对应的写锁等待链表和读锁等待链表是否都为空,如果是,则向所述小核发送确认消息,并以所述小核作为所述写锁等待链表或读锁等待链表的表头和表尾;否则,判断所述小核申请的是读锁还是写锁,并对应将小核插入写锁等待链表或读锁等待链表的尾部。

所述步骤S1400进一步为,

步骤S1410,同步管理装置收到释放锁的释放消息,将发送所述释放消息的小核从写锁等待链表或读锁等待链表中删除,判断sync_id对应的读锁等待链表和写锁等待链表是否都为空,如果不是,则执行步骤S1420;

步骤S1420,判断所述读锁等待链表是否为空,如果否,则向所述读锁等待链表中的多个小核发送确认消息,如果是,则执行步骤S1430。

步骤S1430,向所述写锁等待链表的第一个小核发送确认消息。

所述写锁等待链表,是指所有申请相同sync_id的写锁的小核按照到达的顺序在同步管理装置中形成链表。

所述读锁等待链表,是指所有申请相同sync_id的读锁的小核按照到达的顺序在同步管理装置中形成链表。

所述写锁和读锁,同一时刻只允许一个小核拥有写锁,而多个小核可以同时拥有读锁。

同步管理装置支持不同sync_id的锁,在同步管理装置中可以形成多个不同ID的锁的链表。

在进一步的优选的实施方式中,为便于对链表进行查找和处理,同步管理装置维护记录表,用于记录小核对应于写锁等待链表和读锁等待链表的信息,记录表中每一行对应于一个小核,每一行包括:读写标志项、sync_id项、头标志项、尾标志项、下一节点项。具体实施例如图2所示。

所述步骤S1200中以所述小核作为所述写锁等待链表或读锁等待链表的表头和表尾后还包括:

步骤S1210,在所述小核对应行的sync_id项中填写本次申请的sync_id,将所述小核对应行的头标志项和尾标志项修改为有效,按所述小核的申请为读锁或写锁,对应修改所述小核对应行的读写标志项。

所述步骤S1200中对应将小核插入写锁等待链表或读锁等待链表的尾部后还包括:

步骤S1220,在记录表中查找同所述小核申请的sync_id相同,并且尾标志项为有效的行,在所述行的下一节点项中填写所述小核的ID,将所述行的尾标志项修改为无效;在所述被插入的小核对应行的sync_id项中填写本次申请的sync_id,将所述小核对应行的尾标志项修改为有效,按所述小核的申请为读锁或写锁,对应修改所述小核对应行的读写标志项。

所述步骤S1400中将发送所述释放消息的小核从写锁等待链表或读锁等待链表中删除后还包括:

步骤S1410,将发送所述释放消息的小核在记录表中对应行的各个表项值重新复位为初始值,并将记录表中所述小核的下一节点项指向的小核对应行的头标志项修改为有效。

进一步的,在判断sync_id对应的写锁等待链表和读锁等待链表是否都为空时应用所述记录表按如下方法进行。

将申请锁的申请消息中的sync_id同记录表中每一个sync_id项比较,如果存在与所述申请消息中的sync_id相等的sync_id项,并且所述sync_id项所在行的尾标志项不都为无效标志,则写锁等待链表和读锁等待链表不都为空。

判断所述读锁等待链表是否为空按如下方法进行。

判断记录表中与所述申请消息中的sync_id相等的sync_id项对应的行中的读写标志项是否没有读标志,如果是,则所述读锁等待链表为空。

向记录的所述锁对应的第一个申请写锁的小核发送确认消息按如下方法进行。

在记录表中查找sync_id项与所述申请消息中的sync_id相等,读写标志项为写标志,并且头标志为有效的行,向所述行对应的小核发送确认消息。

所述方法的一具体实施例如下所述。

acquire消息的处理过程如图6所示。

步骤S601,同步管理装置收到acquire消息。

步骤S602,查找记录表,将acquire消息中的sync_id与记录表中每一个sync_id寄存器进行比较,如果有存储内容与acquire消息中的sync_id相同的sync_id寄存器,而且该行的tail寄存器存储值为1,则该行对应的小核是链表的表尾,说明已经有小核申请了acquire消息中的的sync_id对应的锁;否则,说明还没有小核申请acquire消息中的的sync_id对应的锁。

记录表如图2所示。

步骤S603,依据查找的结果,判断是否没有小核申请acquire消息中的的sync_id对应的锁,如果是,执行步骤S604,否则执行步骤S605。

步骤S604,向当前小核发送确认消息,同时将acquire消息中的sync_id写入记录表中该小核对应行的sync_id寄存器,该行对应的tail寄存器和head寄存器置为1,并将锁的类型写入该行对应的r/w寄存器。

步骤S605,根据该小核申请的是读锁或写锁加入相应的写锁等待链表或读锁等待链表。

将上一个申请该锁的小核的next寄存器改为当前小核的core_id,上一个申请该锁的小核的tail寄存器置为0,同时更新当前小核对应的sync_id寄存器为申请中sync_id,tail寄存器置为1,并将申请锁的类型写入r/w寄存器。

所述当前小核,是同步管理装置当前收到acquire消息内容中core_id对应的小核,也就是当前收到的acquire消息的发送者。

release消息的处理过程如图7所示。

步骤S701,同步管理装置收到release消息。

步骤S702,查找记录表,如果读锁或写锁等待链表不为空,说明还有小核等待同一把锁,否则说明没有小核等待同一把锁。

首先,判断如果当前小核对应的next寄存器内容为有效,则读锁或写锁等待链表不都为空,否则,将申请锁的申请消息中的sync_id同记录表中每一个sync_id项比较,如果存在与所述申请消息中的sync_id相等的sync_id项,并且所述sync_id项所在行的尾标志项不都为无效标志,则写锁等待链表和读锁等待链表不都为空。

步骤S703,依据查找结果判断是否还有小核等待同一把锁,如果是,则执行步骤S704,否则,执行步骤S705。

步骤S704,如果读锁等待链表不为空,向对应的读锁等待链表中未发送确认消息的所有小核发送确认消息,如果读锁等待链表为空,则向写锁等待链表的第一个小核发送确认消息。

向写锁等待链表的第一个小核发送确认消息进一步为在记录表中查找sync_id项与所述申请消息中的sync_id相等,读写标志项为写标志,并且头标志为有效的行,向所述行对应的小核发送确认消息。

步骤S705,把当前小核在记录表对应行的tail寄存器置为0。

将发送所述释放消息的小核在记录表中对应行的各个表项值重新复位为初始值,并将记录表中所述小核的下一节点项指向的小核对应行的头标志项修改为有效。

本发明中众核处理器片上同步系统包括多个小核和同步管理装置。

小核,用于执行到申请指令,向同步管理装置发送一个申请锁的申请消息,然后进入等待状态,所述申请消息中包括sync_id,并表明是读锁申请或写锁申请;收到确认消息后,进入临界区,执行完临界区代码后,向同步管理装置发送释放锁的释放消息。

同步管理装置,用于接收到申请锁的申请消息后,依据记录检查是否已经有小核申请相同sync_id的锁,如果没有,则向所述小核发送确认消息,并对小核的申请进行记录;否则,直接对所述小核的申请进行记录;收到释放锁的释放消息,将发送所述释放消息的小核从记录中删除,依据记录检查是否还有等待该释放的锁的小核,如果有,则向所述锁对应的多个申请读锁的小核发送确认消息,如果记录中没有对应的申请读锁的小核,则向记录的所述锁对应的第一个申请写锁的小核发送确认消息。

在一优选实施方式中,同步管理装置还用于对于每个sync_id维护一个写锁等待链表和一个读锁等待链表。

同步管理装置进一步用于接收到申请锁的申请消息后,判断sync_id对应的写锁等待链表和读锁等待链表是否都为空,如果是,则向所述小核发送确认消息,并以所述小核作为写锁等待链表或读锁等待链表的表头和表尾;否则,判断所述小核申请的是读锁还是写锁,并对应将小核插入写锁等待链表或读锁等待链表的尾部;收到释放锁的释放消息,将发送所述释放消息的小核从写锁等待链表或读锁等待链表中删除,判断sync_id对应的读锁等待链表和写锁等待链表是否都为空,如果不是都为空,则判断所述读锁等待链表是否为空,如果否,则向所述读锁等待链表中的多个小核发送确认消息,如果所述读锁等待链表为空,则向所述写锁等待链表的第一个小核发送确认消息。

在进一步的优选实施方式中,同步管理装置还用于维护记录表,用于记录小核对应于写锁等待链表和读锁等待链表的信息,记录表中每一行对应于一个小核,每一行包括:读写标志项、sync_id项、头标志项、尾标志项、以及下一节点项。

同步管理装置在以所述小核作为所述写锁等待链表或读锁等待链表的表头和表尾后还用于在所述小核对应行的sync_id项中填写本次申请的sync_id,将所述小核对应行的头标志项和尾标志项修改为有效,按所述小核的申请为读锁或写锁,对应修改所述小核对应行的读写标志项;

同步管理装置在对应将小核插入写锁等待链表或读锁等待链表的尾部后还用于在记录表中查找同所述小核申请的sync_id相同,并且尾标志项为有效的行,在所述行的下一节点项中填写所述小核的ID,将所述行的尾标志项修改为无效;在所述被插入的小核对应行的sync_id项中填写本次申请的sync_id,将所述小核对应行的尾标志项修改为有效,按所述小核的申请为读锁或写锁,对应修改所述小核对应行的读写标志项;

同步管理装置在将发送所述释放消息的小核从写锁等待链表或读锁等待链表中删除后还用于将发送所述释放消息的小核在记录表中对应行的各个表项值重新复位为初始值;并将记录表中所述小核的下一节点项指向的小核对应行的头标志项修改为有效。

进一步的方案中。

同步管理装置在判断sync_id对应的写锁等待链表和读锁等待链表是否都为空时进一步用于

将申请锁的申请消息中的sync_id同记录表中每一个sync_id项比较,如果存在与所述申请消息中的sync_id相等的sync_id项,并且所述sync_id项所在行的尾标志项不都为无效标志,则写锁等待链表和读锁等待链表不都为空。

同步管理装置判断所述读锁等待链表是否为空时进一步用于

判断记录表中与所述申请消息中的sync_id相等的sync_id项对应的行中的读写标志项是否没有读标志,如果是,则所述读锁等待链表为空。

同步管理装置向记录的所述锁对应的第一个申请写锁的小核发送确认消息时进一步用于

在记录表中查找sync_id项与所述申请消息中的sync_id相等,读写标志项为写标志,并且头标志为有效的行,向所述行对应的小核发送确认消息。

众核处理器片上同步方法中的栅栏同步的方法流程如图8所示。

步骤S2100,小核执行到栅栏指令时,向同步管理装置发送栅栏消息,然后进入等待状态,所述栅栏消息中包括sync_id和所在的栅栏同步中的小核的数量。

步骤S2200,同步管理装置接收到小核的栅栏消息,记录所述小核,依据记录和所述栅栏消息检查参与栅栏消息对应的栅栏同步的小核的栅栏消息是否都已经到达同步管理装置,如果是,则按各个小核的栅栏消息到达所述同步管理装置的顺序,依次向所述栅栏同步的各个小核发送确认消息。

步骤S2300,小核收到确认消息后,继续执行栅栏指令之后的指令。

记录存在多种方法。在一优选的实施方式中,采用链表进行记录。

所述方法还包括,同步管理装置对应于每个栅栏同步建立一个栅栏等待链表;

所述步骤S2200中记录所述小核进一步为,依据所述栅栏消息中syn_id将所述小核添加到所述syn_id对应的栅栏同步的栅栏等待链表的表尾;

所述步骤S2200中发送确认消息时进一步为,按栅栏等待链表从表头到表尾的顺序,依次向各个小核发送确认消息。

为较快查找采用计数器对发送栅栏消息的小核进行记录。

对栅栏消息的记录存在多种方法,例如对应每个栅栏同步的栅栏等待链表设置一个计数器记录接收的对应栅栏消息的数量,以确定是否接收到参与栅栏同步的所有小核发送的栅栏消息。

也可以不使用计数器,而用遍历链表的方法,查找链表中节点数量来判断是否接收到参与栅栏同步的所有小核发送的栅栏消息。

在一优选实施方式中,所述方法还包括,同步管理装置对于每个小核设置一个计数器;

所述步骤S2200中记录所述小核时还包括,

步骤S2201,在所述小核为栅栏等待链表的表头时,将所述小核的计数器的值置为所述栅栏同步中的小核的数量减1;

步骤S2202,在所述小核不为栅栏等待链表的表头时,将所述小核的计数器的值置栅栏等待链表中前一节点的计数器的值减1;

所述步骤S2200中检查时进一步为,

步骤S2203,检查栅栏等待链表的表尾的小核对应的计数器的值是否为0,如果为0,则参与栅栏同步的小核的栅栏消息都已经到达同步管理装置;否则,参与栅栏同步的小核的栅栏消息没有都到达同步管理装置。

在同步管理装置中存在N个计数器,每个小核对应一个,每当一个小核发送的barrier消息到达同步管理装置,其对应的计数器在前一个的基础上减1,最后一个达到小核的对应计数器变为0,表明所有小核的barrier消息都到达同步管理转置。

为方便查找,在一优选实施方式中还是用记录表记录栅栏等待链表的信息。

所述步骤S2200还包括:同步管理装置维护记录表,用于记录栅栏等待链表的信息,记录表中每一行对应于一个小核,每一行包括:sync_id项、头标志项、尾标志项、计数项、以及下一节点项;

所述步骤S2200中记录所述小核时还包括,

步骤S2210,在所述小核发送的栅栏消息为同步管理装置接收的对应栅栏同步的第一个栅栏消息时,将记录表中所述小核对应行的sync_id项填写为栅栏消息中sync_id,头标志项和尾标志项都置为有效,计数项置为栅栏消息中栅栏同步中的小核的数量减1;

步骤S2220,在所述小核发送的栅栏消息不为同步管理装置接收的对应栅栏同步的第一个栅栏消息时,在记录表中查找同所述栅栏消息的sync_id相同,并且尾标志项为有效的行,在所述行的下一节点项中填写所述小核的ID,将所述行的尾标志项修改为无效;将记录表中所述小核对应行的sync_id项中填写所述栅栏消息的sync_id,尾标志项修改为有效,计数项置为查找到的原表尾小核对应的计数项数值减1;

所述步骤S2200中检查时进一步为,

步骤S2230,判断发送所述栅栏消息的小核在记录表中对应行的计数项是否为0,如果为0,则参与栅栏同步的小核的栅栏消息都已经到达同步管理装置;否则,参与栅栏同步的小核的栅栏消息没有都到达同步管理装置。

所述步骤S2200中发送确认消息后还包括,

步骤S2240,将记录表中所述栅栏消息对应的栅栏等待链表的表头和表尾所在行的头标志项和尾标志项分别置为无效。

同步管理装置支持不同的barrier同步,在同步管理装置中可以形成多个不同syn_id的barrier等待链表。

本发明的栅栏同步的方法的一实施例如下所述。

barrier消息的处理过程如图9所示。

步骤S901,同步管理装置接收到barrier消息。

步骤S902,查找记录表,将barrier消息内容中的sync_id与表中每一个sync_id寄存器进行比较,如果有与barrier消息内容中的sync_id相等的寄存器,而且同一行的tail寄存器为1,则这一行对应的小核是链表的表尾;否则,说明还没有相同sync_id的barrier消息到达。

步骤903,依据查找结果判断是否之前还没有同所述sync_id的barrier消息到达,如果是,则说明该barrier消息为对应barrier同步第一个到达同步管理装置的barrier消息,执行步骤S904,否则执行步骤S905。

步骤S904,建立一个栅栏等待链表,对应于该barrier消息对应的barrier同步,当前小核既是表头又是表尾,将该小核对应的记录表中行的head寄存器和tail寄存器都置为1,对应的cnt寄存器置为count-1,其中count是barrier消息中的参与对应barrier同步的小核的数量。

步骤S905,将当前小核加入栅栏等待链表,变为新的链表尾,在记录表中该小核对应行的tail寄存器置为1,cnt寄存器置为栅栏等待链表中前一小核cnt寄存器减1,栅栏等待链表中前一小核的next寄存器改为当前小核的core_id,栅栏等待链表中前一小核的tail寄存器置为0。

步骤S906,如果当前小核对应的cnt寄存器变为0,说明所有参与该barrier同步的小核的barrier消息都到达了同步管理装置,执行步骤S907,否则执行步骤S908。

步骤S907,从栅栏等待链表的表头开始向栅栏等待链表中的每个小核按顺序发送确认消息,并把表头对应的head寄存器和表尾对应的tail寄存器清0。

步骤S908:结束。

一种众核处理器片上同步系统包括:同步管理装置和多个小核。

小核,用于执行到栅栏指令时,向同步管理装置发送栅栏消息,然后进入等待状态,所述栅栏消息中包括sync_id和所在的栅栏同步中的小核的数量。

同步管理装置,用于接收到小核的栅栏消息,记录所述小核,依据记录和所述栅栏消息检查参与栅栏消息对应的栅栏同步的小核的栅栏消息是否都已经到达同步管理装置,如果是,则按各个小核的栅栏消息到达所述同步管理装置的顺序,依次向所述栅栏同步的各个小核发送确认消息。

小核,用于收到确认消息后,继续执行栅栏指令之后的指令。

在一优选实施方式中,

同步管理装置还用于对应于每个栅栏同步建立一个栅栏等待链表;

同步管理装置记录所述小核时进一步用于,依据所述栅栏消息中sync_id将所述小核添加到所述sync_id对应的栅栏同步的栅栏等待链表的表尾;

同步管理装置发送确认消息时进一步用于

按栅栏等待链表从表头到表尾的顺序,依次向各个小核发送确认消息。

进一步的优选实施方式中,

同步管理装置还用于对于每个小核设置一个计数器;

同步管理装置记录所述小核时还用于

在所述小核为栅栏等待链表的表头时,将所述小核的计数器的值置为所述栅栏同步中的小核的数量减1;

在所述小核不为栅栏等待链表的表头时,将所述小核的计数器的值置为栅栏等待链表中前一节点的计数器的值减1;

同步管理装置检查时进一步用于

检查栅栏等待链表的表尾的小核对应的计数器的值是否为0,如果为0,则参与栅栏同步的小核的栅栏消息都已经到达同步管理装置;否则,参与栅栏同步的小核的栅栏消息没有都到达同步管理装置。

进一步的优选实施方式中,

同步管理装置还用于维护记录表,用于记录栅栏等待链表的信息,记录表中每一行对应于一个小核,每一行包括:sync_id项、头标志项、尾标志项、计数项、以及下一节点项;

同步管理装置记录所述小核时还用于

在所述小核发送的栅栏消息为同步管理装置接收的对应栅栏同步的第一个栅栏消息时,将记录表中所述小核对应行的sync_id项填写为栅栏消息中sync_id,头标志项和尾标志项都置为有效,计数项置为栅栏消息中栅栏同步中的小核的数量减1;

在所述小核发送的栅栏消息不为同步管理装置接收的对应栅栏同步的第一个栅栏消息时,在记录表中查找同所述栅栏消息的sync_id相同,并且尾标志项为有效的行,在所述行的下一节点项中填写所述小核的ID,将所述行的尾标志项修改为无效;将记录表中所述小核对应行的sync_id项中填写所述栅栏消息的sync_id,尾标志项修改为有效,计数项置为查找到的原表尾小核对应的计数项数值减1;

同步管理装置检查时进一步用于

判断发送所述栅栏消息的小核在记录表中对应行的计数项是否为0,如果为0,则参与栅栏同步的小核的栅栏消息都已经到达同步管理装置;否则,参与栅栏同步的小核的栅栏消息没有都到达同步管理装置;

同步管理装置发送确认消息后还用于

将记录表中所述栅栏消息对应的栅栏等待链表的表头和表尾所在行的头标志项和尾标志项分别置为无效。

本发明的众核处理器片上生产-消费同步的方法。

步骤S3100,小核执行到生产指令时,向同步管理装置发送生产消息,然后继续执行后续指令,所述生产消息中包括第一数值和sync_id。

步骤S3200,小核执行到消费指令时,向同步管理装置发送消费消息,然后进入等待状态,所述消费消息中包括sync_id。

步骤S3300,同步管理装置接收到生产消息时,进行生产接收记录,并依据消费等待记录和生产消息检查是否已有消费者等待发送所述生产消息的生产者,如果有,则按照各个小核的消费消息到达同步管理装置的顺序向所述小核发送确认消息,发送的确认消息的数量不超过所述生产消息中第一数值。

步骤S3400,同步管理装置接收到小核的消费消息时,依据生产接收记录和消费消息检查是否已经接收到所述消费消息中sync_id对应的生产消息,如果是,则在所述生产消息对应确认消息的已发送数量小于所述生产消息的第一数值时,向发送所述消费消息的小核发送确认消息,如果为否,则进行消费等待记录。

步骤S3500,小核收到确认消息后,继续执行后续指令。

进行记录的方法有多种,如队列、堆栈等。本发明的一优选实施方式中采用链表和表格的方式记录。

同步管理装置对应于每个生产-消费同步建立一个消费等待链表,并用生产记录表维护各个生产-消费同步的生产者信息;

生产记录表每一行对应一个小核,每行中包含sync_id项、等待标志项、以及数值记录项;

所述步骤S3300中进行生产接收记录进一步为,在生产记录表中找到发送所述生产消息的小核对应的行,将所述行中等待标志项置为有效,将所述行中sync_id项填为所述生产消息中sync_id,将所述行中数值记录项填为所述生产消息中第一数值;

所述步骤S3400中进行消费等待记录进一步为,依据所述消费消息中syn_id将所述小核添加到所述syn_id对应的生产-消费同步的消费等待链表的表尾。

在进一步的优选实施方式中

所述步骤S3300中检查时进一步为,

步骤S3310,检查所述生产消息的sync_id对应的生产-消费同步的消费等待链表是否为空,如果不为空,则按所述消费等待链表从表头到表尾的顺序向各个节点对应小核发送确认消息,每发送一个确认消息将生产记录表中对应行的数值记录项中的值减1,在所述数值记录项为0时,将对应行的等待标志项置为无效,停止发送确认消息;

所述步骤S3400中检查时进一步为,

步骤S3410,在生产记录表中查找sync_id表项同所述消费消息中sync_id相同的行,如果查找到并且所述行的等待标志项为有效,则向发送所述消费消息的小核发送确认消息,将生产记录表中所述行中数值记录项的值减1,在数值记录项的值变为0时,将所述行的等待标志项置为无效;如果没有查找到,进行所述消费等待记录。

在一优选实施方式中,采用表格维护链表信息以方便查找。

所述步骤S3400中还包括,同步管理装置维护消费记录表,用于记录消费等待链表的信息,消费记录表中每一行对应于一个小核,每一行包括:sync_id项、头标志项、尾标志项、以及下一节点项;

所述步骤S3400中进行消费等待记录后还包括,

步骤S3401,在消费记录表中查找所述消费消息中sync_id对应的消费等待链表的尾节点对应的行,如果查找到,则将所述行的下一节点项填写为发送所述消费消息的小核的ID,将所述行的尾标志项修改为无效;

步骤S3402,在消费记录表中查找到发送所述消费消息的小核对应的行时,将所述行的sync_id项填写为所述消费消息中的sync_id,将所述行的尾标志项值为有效;在消费记录表中没有查找所述消费消息中sync_id对应的行时,将所述行的头标志项置为有效;

所述步骤S3300中检查时进一步为,

步骤S3301,在消费记录表中查找所述生产消息的sync_id对应的消费等待链表的表头对应的行,从表头开始依据下一节点项向所述消费等待链表节点对应的小核发送确认消息,每发送一个确认消息,将生产记录表中对应行的数值记录项中的值减1,并更新消费记录表中记录,在所述数值记录项为0时,将对应行的等待标志项置为无效,停止发送确认消息。

produce消息的处理过程如图10所示:

步骤S1001,同步管理装置接收produce消息。

步骤S1002,在生产记录表中检查当前小核对应的wait寄存器。

步骤S1003,如果当前小核对应的wait寄存器为1,说明当前小核已经发过一个produce消息且尚未consume完成,进入步骤S1004,否则进入步骤S1005。

步骤S1004,不接受所述收到的produce消息。

步骤S1005,更新生产记录表中,produce消息中sync_id对应的寄存器,sync_id寄存器置为消息内容中的sync_id,cnt寄存器置为produce消息内容中的count,且wait寄存器置1。

步骤S1006,检查消费记录表,将produce消息中的sync_id与消费记录表中的sync_id进行一一比较,并且查找的sunc_id同produce消息中的sync_id相同的行的head寄存器。

步骤S1007,如果有sync_id相同的行,并且该行的head寄存器为1,则表明已经有消费者到达,进入步骤S1008,否则,进入步骤S1009。

步骤S1008:从消费等待链表的head开始向等待该生产者的每个小核发送确认消息,每发送一个确认消息,就将生产记录表中对应的生产者的cnt寄存器减1,并将等待链表的表头的head寄存器和表尾的tail寄存器都清0。

步骤S1009,结束。

步骤S1010,如果生产记录表中对应的生产者cnt寄存器减为0,则进入步骤S1011,否则进入步骤S1012。

步骤S1011,生产-消费过程完成,生产记录表对应的wait寄存器置为0。

步骤S1012:结束。

consume消息的处理过程如图11所示:

步骤S1101,同步管理装置接收consume消息。

步骤S1102,查生产记录表,把消息中的sync_id与每一个sync_id寄存器比较。

步骤S1103,如果找到sync_id相同的寄存器,并且对应的wait寄存器为1,说明生产者已经到来,进入步骤S1104,否则进入步骤S1105。

步骤S1104,向当前小核发送确认消息,对应生产者计数器减1。

步骤S1105,把当前小核加入的消费等待链表,消费记录表中消费等待链表原表尾的next寄存器置为当前小核的core_id,tail寄存器清0,当前小核对应的sync_id寄存器置为消息内容中的sync_id,tail寄存器置为1。

步骤S1106,如果生产者计数器是否减为0,进入步骤S1107,否则进入步骤S1108。

步骤S1107,生产者对应的wait寄存器置为0。

步骤S1108,结束。

本发明一种众核处理器片上同步系统包括:多个小核和同步管理装置,

小核,用于执行到生产指令时,向同步管理装置发送生产消息,然后继续执行后续指令,所述生产消息中包括第一数值和sync_id;

小核,还用于执行到消费指令时,向同步管理装置发送消费消息,然后进入等待状态,所述消费消息中包括sync_id;

同步管理装置用于接收到生产消息时,进行生产接收记录,并依据消费等待记录和生产消息检查是否已有消费者等待发送所述生产消息的生产者,如果有,则按照各个小核的消费消息到达同步管理装置的顺序向所述小核发送确认消息,发送的确认消息的数量不超过所述生产消息中第一数值;

同步管理装置还用于接收到小核的消费消息时,依据生产接收记录和消费消息检查是否已经接收到所述消费消息中sync_id对应的生产消息,如果是,则在所述生产消息对应确认消息的已发送数量小于所述生产消息的第一数值时,向发送所述消费消息的小核发送确认消息,如果为否,则进行消费等待记录;

小核还用于收到确认消息后,继续执行后续指令。

在一优选实施方式如下所述。

同步管理装置还用于对应于每个生产-消费同步建立一个消费等待链表,并用生产记录表维护各个生产-消费同步的生产者信息;

生产记录表每一行对应一个小核,每行中包含sync_id项、等待标志项、以及数值记录项;

同步管理装置进行生产接收记录时进一步用于,在生产记录表中找到发送所述生产消息的小核对应的行,将所述行中等待标志项置为有效,将所述行中sync_id项填为所述生产消息中sync_id,将所述行中数值记录项填为所述生产消息中第一数值;

同步管理装置进行消费等待记录时进一步用于,依据所述消费消息中sync_id将所述小核添加到所述sync_id对应的生产-消费同步的消费等待链表的表尾。

进一步的优选实施方式中,同步管理装置接收到生产消息进行检查时进一步用于

检查所述生产消息的sync_id对应的生产-消费同步的消费等待链表是否为空,如果不为空,则按所述消费等待链表从表头到表尾的顺序向各个节点对应小核发送确认消息,每发送一个确认消息将生产记录表中对应行的数值记录项中的值减1,在所述数值记录项为0时,将对应行的等待标志项置为无效,停止发送确认消息;

同步管理装置接收到小核的消费消息检查时进一步用于

在生产记录表中查找sync_id表项同所述消费消息中sync_id相同的行,如果查找到并且所述行的等待标志项为有效,则向发送所述消费消息的小核发送确认消息,将生产记录表中所述行中数值记录项的值减1,在数值记录项的值变为0时,将所述行的等待标志项置为无效;如果没有查找到,进行所述消费等待记录。

进一步的优选实施方式中,

同步管理装置还用于维护消费记录表,用于记录消费等待链表的信息,消费记录表中每一行对应于一个小核,每一行包括:sync_id项、头标志项、尾标志项、以及下一节点项;

同步管理装置进行消费等待记录后还用于

在消费记录表中查找所述消费消息中sync_id对应的消费等待链表的尾节点对应的行,如果查找到,则将所述行的下一节点项填写为发送所述消费消息的小核的ID,将所述行的尾标志项修改为无效;

在消费记录表中查找到发送所述消费消息的小核对应的行时,将所述行的sync_id项填写为所述消费消息中的sync_id,将所述行的尾标志项值为有效;在消费记录表中没有查找所述消费消息中sync_id对应的行时,将所述行的头标志项置为有效;

同步管理装置接收到生产消息进行检查时进一步为,

在消费记录表中查找所述生产消息的sync_id对应的消费等待链表的表头对应的行,从表头开始依据下一节点项向所述消费等待链表节点对应的小核发送确认消息,每发送一个确认消息,将生产记录表中对应行的数值记录项中的值减1,并更新消费记录表中记录,在所述数值记录项为0时,将对应行的等待标志项置为无效,停止发送确认消息。

本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号