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

上传人:xia****o6 文档编号:4577010 上传时间:2018-10-21 格式:PDF 页数:31 大小:1.94MB
返回 下载 相关 举报
摘要
申请专利号:

CN201010221087.7

申请日:

2010.06.28

公开号:

CN101908034A

公开日:

2010.12.08

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 15/163申请日:20100628|||公开

IPC分类号:

G06F15/163

主分类号:

G06F15/163

申请人:

中国科学院计算技术研究所

发明人:

徐卫志; 焦帅; 张浩; 刘志勇; 范东睿; 雷峥蒙; 宋风龙; 王达

地址:

100080 北京市海淀区中关村科学院南路6号

优先权:

专利代理机构:

北京律诚同业知识产权代理有限公司 11006

代理人:

祁建国;梁挥

PDF下载: PDF下载
内容摘要

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

权利要求书

1: 一种众核处理器片上同步方法, 其特征在于, 包括 : 步骤 1, 小核执行到申请指令, 向同步管理装置发送一个申请锁的申请消息, 然后进入 等待状态, 所述申请消息中包括 sync_id, 并表明是读锁申请或写锁申请 ; 步骤 2, 同步管理装置接收到申请锁的申请消息后, 依据记录检查是否已经有小核申请 相同 sync_id 的锁, 如果没有, 则向所述小核发送确认消息, 并对小核的申请进行记录 ; 否 则, 直接对所述小核的申请进行记录 ; 步骤 3, 小核收到确认消息后, 进入临界区, 执行完临界区代码后, 向同步管理装置发送 释放锁的释放消息 ; 步骤 4, 同步管理装置收到释放锁的释放消息, 将发送所述释放消息的小核从记录中删 除, 依据记录检查是否还有等待该释放的锁的小核, 如果有, 则向所述锁对应的多个申请读 锁的小核发送确认消息, 如果记录中没有对应的申请读锁的小核, 则向记录的所述锁对应 的第一个申请写锁的小核发送确认消息。
2: 如权利要求 1 所述的众核处理器片上同步方法, 其特征在于, 所述方法还包括 : 步骤 21, 同步管理装置对于每个 sync_id 维护一个写锁等待链表和一个读锁等待链 表; 所述步骤 2 进一步为, 同步管理装置接收到申请锁的申请消息后, 判断 sync_id 对应的 写锁等待链表和读锁等待链表是否都为空, 如果是, 则向所述小核发送确认消息, 并以所述 小核作为写锁等待链表或读锁等待链表的表头和表尾 ; 否则, 判断所述小核申请的是读锁 还是写锁, 并对应将小核插入写锁等待链表或读锁等待链表的尾部 ; 所述步骤 4 进一步为, 步骤 22, 同步管理装置收到释放锁的释放消息, 将发送所述释放消息的小核从写锁等 待链表或读锁等待链表中删除, 判断 sync_id 对应的读锁等待链表和写锁等待链表是否都 为空, 如果不是, 则执行步骤 23 ; 步骤 23, 判断所述读锁等待链表是否为空, 如果否, 则向所述读锁等待链表中的多个小 核发送确认消息, 如果是, 则执行步骤 24, 步骤 24, 向所述写锁等待链表的第一个小核发送确认消息。
3: 如权利要求 2 所述的众核处理器片上同步方法, 其特征在于, 所述步骤 21 还包括 : 同步管理装置维护记录表, 用于记录小核对应于写锁等待链表和 读锁等待链表的信息, 记录表中每一行对应于一个小核, 每一行包括 : 读写标志项、 sync_id 项、 头标志项、 尾标志项、 以及下一节点项 ; 所述步骤 2 中以所述小核作为所述写锁等待链表或读锁等待链表的表头和表尾后还 包括 : 步骤 31, 在所述小核对应行的 sync_id 项中填写本次申请的 sync_id, 将所述小核对应 行的头标志项和尾标志项修改为有效, 按所述小核的申请为读锁或写锁, 对应修改所述小 核对应行的读写标志项 ; 所述步骤 2 中对应将小核插入写锁等待链表或读锁等待链表的尾部后还包括 : 步骤 32, 在记录表中查找同所述小核申请的 sync_id 相同, 并且尾标志项为有效的行, 在所述行的下一节点项中填写所述小核的 ID, 将所述行的尾标志项修改为无效 ; 在所述 2 被插入的小核对应行的 sync_id 项中填写本次申请的 sync_id, 将所述小核对应行的尾标 志项修改为有效, 按所述小核的申请为读锁或写锁, 对应修改所述小核对应行的读写标志 项; 所述步骤 4 中将发送所述释放消息的小核从写锁等待链表或读锁等待链表中删除后 还包括 : 步骤 33, 将发送所述释放消息的小核在记录表中对应行的各个表项值重新复位为初始 值; 并将记录表中所述小核的下一节点项指向的小核对应行的头标志项修改为有效。
4: 如权利要求 3 所述的众核处理器片上同步方法, 其特征在于, 所述步骤 2 中和所述步骤 4 中判断 sync_id 对应的写锁等待链表和读锁等待链表是否 都为空进一步为, 步骤 41, 将申请锁的申请消息中的 sync_id 同记录表中每一个 sync_id 项比较, 如果存 在与所述申请消息中的 sync_id 相等的 sync_id 项, 并且所述 sync_id 项所在行的尾标志 项不都为无效标志, 则写锁等待链表和读锁等待链表不都为空 ; 所述步骤 4 中判断所述读锁等待链表是否为空进一步为, 步骤 42, 判断记录表中与所述申请消息中的 sync_id 相等的 sync_id 项对应的行中的 读写标志项是否没有读标志, 如果是, 则所述读锁等待链表为空 ; 所述步骤 4 中向记录的所述锁对应的第一个申请写锁的小核发送确认消息进一步为, 步骤 43, 在记录表中查找 sync_id 项与所述申请消息中的 sync_id 相等, 读写标志项为 写标志, 并且头标志为有效的行, 向所述行对应的小核发送确认消息。
5: 一种众核处理器片上同步系统, 其特征在于, 包括同步管理装置和多个小核, 小核, 用于执行到申请指令, 向同步管理装置发送一个申请锁的申请消息, 然后进入等 待状态, 所述申请消息中包括 sync_id, 并表明是读锁申请或写锁申请 ; 收到确认消息后, 进入临界区, 执行完临界区代码后, 向同步管理装置发送释放锁的释放消息 ; 同步管理装置, 用于接收到申请锁的申请消息后, 依据记录检查是否已经有小核申请 相同 sync_id 的锁, 如果没有, 则向所述小核发送确认消息, 并对小核的申请进行记录 ; 否 则, 直接对所述小核的申请进行记录 ; 收到释放锁的释放消息, 将发送所述释放消息的小核 从记录中删除, 依据记录检查是否还有等待该释放的锁的小核, 如果有, 则向所述锁对应的 多个申请读锁的小核发送确认消息, 如果记录中没有对应的申请读锁的小核, 则向记录的 所述锁对应的第一个申请写锁的小核发送确认消息。
6: 如权利要求 5 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于对于每个 sync_id 维护一个写锁等待链表和一个读锁等待链表 ; 同步管理装置进一步用于 接收到申请锁的申请消息后, 判断 sync_id 对应的写锁等待链表和读锁等待链表是否 都为空, 如果是, 则向所述小核发送确认消息, 并以所述小核作为写锁等待链表或读锁等待 链表的表头和表尾 ; 否则, 判断所述小核申请的是读锁还是写锁, 并对应将小核插入写锁等 待链表或读锁等待链表的尾部 ; 收到释放锁的释放消息, 将发送所述释放消息的小核从写锁等待链表或读锁等待链表 中删除, 判断 sync_id 对应的读锁等待链表和写锁等待链表是否都为空, 如果不是都为空, 则判断所述读锁等待链表是否为空, 如果否, 则向所述读锁等待链表中的多个小核发送确 3 认消息, 如果所述读锁等待链表为空, 则向所述写锁等待链表的第一个小核发送确认消息。
7: 如权利要求 6 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于维护记录表, 用于记录小核对应于写锁等待链表和读锁等待链 表的信息, 记录表中每一行对应于一个小核, 每一行包括 : 读写标志项、 sync_id 项、 头标志 项、 尾标志项、 以及下一节点项 ; 同步管理装置在以所述小核作为所述写锁等待链表或读锁等待链表的表头和表尾后 还用于 在所述小核对应行的 sync_id 项中填写本次申请的 sync_id, 将所述小核对应行的头 标志项和尾标志项修改为有效, 按所述小核的申请为读锁或写锁, 对应修改所述小核对应 行的读写标志项 ; 同步管理装置在对应将小核插入写锁等待链表或读锁等待链表的尾部后还用于 在记录表中查找同所述小核申请的 sync_id 相同, 并且尾标志项为有效的行, 在所述 行的下一节点项中填写所述小核的 ID, 将所述行的尾标志项修改为无效 ; 在所述被插入的 小核对应行的 sync_id 项中填写本次申请的 sync_id, 将所述小核对应行的尾标志项修改 为有效, 按所述小核的申请为读锁或写锁, 对应修改所述小核对应行的读写标志项 ; 同步管理装置在将发送所述释放消息的小核从写锁等待链表或读锁等待链表中删除 后还用于 将发送所述释放消息的小核在记录表中对应行的各个表项值重新复位为初始值 ; 并将 记录表中所述小核的下一节点项指向的小核对应行的头标志项修改为有效。
8: 如权利要求 7 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置在判断 sync_id 对应的写锁等待链表和读锁等待链表是否都为空时进 一步用于 将申请锁的申请消息中的 sync_id 同记录表中每一个 sync_id 项比较, 如果存在与所 述申请消息中的 sync_id 相等的 sync_id 项, 并且所述 sync_id 项所在行的尾标志项不都 为无效标志, 则写锁等待链表和读锁等待链表不都为空 ; 同步管理装置判断所述读锁等待链表是否为空时进一步用于 判断记录表中与所述申请消息中的 sync_id 相等的 sync_id 项对应的行中的读写标志 项是否没有读标志, 如果是, 则所述读锁等待链表为空 ; 同步管理装置向记录的所述锁对应的第一个申请写锁的小核发送确认消息时进一步 用于 在记录表中查找 sync_id 项与所述申请消息中的 sync_id 相等, 读写标志项为写标志, 并且头标志为有效的行, 向所述行对应的小核发送确认消息。
9: 一种众核处理器片上同步方法, 其特征在于, 包括 : 步骤 1, 小核执行到栅栏指令时, 向同步管理装置发送栅栏消息, 然后进入等待状态, 所 述栅栏消息中包括 sync_id 和所在的栅栏同步中的小核的数量 ; 步骤 2, 同步管理装置接收到小核的栅栏消息, 记录所述小核, 依据记录和所述栅栏消 息检查参与栅栏消息对应的栅栏同步的小核的栅栏消息是否都已经到达同步管理装置, 如 果是, 则按各个小核的栅栏消息到达所述同步管理装置的顺序, 依次向所述栅栏同步的各 个小核发送确认消息 ; 4 步骤 3, 小核收到确认消息后, 继续执行栅栏指令之后的指令。
10: 如权利要求 9 所述的众核处理器片上同步方法, 其特征在于, 所述方法还包括, 同步管理装置对应于每个栅栏同步建立一个栅栏等待链表 ; 所述步骤 2 中记录所述小核进一步为, 依据所述栅栏消息中 sync_id 将所述小核添加 到所述 sync_id 对应的栅栏同步的栅栏等待链表的表尾 ; 所述步骤 2 中发送确认消息时进一步为, 步骤 101, 按栅栏等待链表从表头到表尾的顺序, 依次向各个小核发送确认消息。
11: 如权利要求 10 所述的众核处理器片上同步方法, 其特征在于, 所述方法还包括, 同步管理装置对于每个小核设置一个计数器 ; 所述步骤 2 中记录所述小核时还包括, 步骤 111, 在所述小核为栅栏等待链表的表头时, 将所述小核的计数器的值置为所述栅 栏同步中的小核的数量减 1 ; 步骤 112, 在所述小核不为栅栏等待链表的表头时, 将所述小核的计数器的值置为栅栏 等待链表中前一节点的计数器的值减 1 ; 所述步骤 2 中检查时进一步为, 步骤 113, 检查栅栏等待链表的表尾的小核对应的计数器的值是否为 0, 如果为 0, 则参 与栅栏同步的小核的栅栏消息都已经到达同步管理装置 ; 否则, 参与栅栏同步的小核的栅 栏消息没有都到达同步管理装置。
12: 如权利要求 10 所述的众核处理器片上同步方法, 其特征在于, 所述步骤 2 还包括 : 同步管理装置维护记录表, 用于记录栅栏等待链表的信息, 记录表 中每一行对应于一个小核, 每一行包括 : sync_id 项、 头标志项、 尾标志项、 计数项、 以及下 一节点项 ; 所述步骤 2 中记录所述小核时还包括, 步骤 121, 在所述小核发送的栅栏消息为同步管理装置接收的对应栅栏同步的第一个 栅栏消息时, 将记录表中所述小核对应行的 sync_id 项填写为栅栏消息中 sync_id, 头标志 项和尾标志项都置为有效, 计数项置为栅栏消息中栅栏同步中的小核的数量减 1 ; 步骤 122, 在所述小核发送的栅栏消息不为同步管理装置接收的对应栅栏同步的第一 个栅栏消息时, 在记录表中查找同所述栅栏消息的 sync_id 相同, 并且尾标志项为有效的 行, 在所述行的下一节点项中填写所述小核的 ID, 将所述行的尾标志项修改为无效 ; 将记 录表中所述小核对应行的 sync_id 项中填写所述栅栏消息的 sync_id, 尾标志项修改为有 效, 计数项置为查找到的原表尾小核对应的计数项数值减 1 ; 所述步骤 2 中检查时进一步为, 步骤 123, 判断发送所述栅栏消息的小核在记录表中对应行的计数项是否为 0, 如果为 0, 则参与栅栏同步的小核的栅栏消息都已经到达同步管理装置 ; 否则, 参与栅栏同步的小 核的栅栏消息没有都到达同步管理装置 ; 所述步骤 2 中发送确认消息后还包括, 步骤 124, 将记录表中所述栅栏消息对应的栅栏等待链表的表头和表尾所在行的头标 志项和尾标志项分别置为无效。
13: 一种众核处理器片上同步系统, 其特征在于, 包括 : 同步管理装置和多个小核 5 小核, 用于执行到栅栏指令时, 向同步管理装置发送栅栏消息, 然后进入等待状态, 所 述栅栏消息中包括 sync_id 和所在的栅栏同步中的小核的数量 ; 同步管理装置, 用于接收到小核的栅栏消息, 记录所述小核, 依据记录和所述栅栏消息 检查参与栅栏消息对应的栅栏同步的小核的栅栏消息是否都已经到达同步管理装置, 如果 是, 则按各个小核的栅栏消息到达所述同步管理装置的顺序, 依次向所述栅栏同步的各个 小核发送确认消息 ; 小核, 用于收到确认消息后, 继续执行栅栏指令之后的指令。
14: 如权利要求 13 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于对应于每个栅栏同步建立一个栅栏等待链表 ; 同步管理装置记录所述小核时进一步用于, 依据所述栅栏消息中 sync_id 将所述小核 添加到所述 sync_id 对应的栅栏同步的栅栏等待链表的表尾 ; 同步管理装置发送确认消息时进一步用于 按栅栏等待链表从表头到表尾的顺序, 依次向各个小核发送确认消息。
15: 如权利要求 14 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于对于每个小核设置一个计数器 ; 同步管理装置记录所述小核时还用于 在所述小核为栅栏等待链表的表头时, 将所述小核的计数器的值置为所述栅栏同步中 的小核的数量减 1 ; 在所述小核不为栅栏等待链表的表头时, 将所述小核的计数器的值置为栅栏等待链表 中前一节点的计数器的值减 1 ; 同步管理装置检查时进一步用于 检查栅栏等待链表的表尾的小核对应的计数器的值是否为 0, 如果为 0, 则参与栅栏同 步的小核的栅栏消息都已经到达同步管理装置 ; 否则, 参与栅栏同步的小核的栅栏消息没 有都到达同步管理装置。
16: 如权利要求 14 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于维护记录表, 用于记录栅栏等待链表的信息, 记录表中每一行对 应于一个小核, 每一行包括 : sync_id 项、 头标志项、 尾标志项、 计数项、 以及下一节点项 ; 同步管理装置记录所述小核时还用于 在所述小核发送的栅栏消息为同步管理装置接收的对应栅栏同步的第一个栅栏消息 时, 将记录表中所述小核对应行的 sync_id 项填写为栅栏消息中 sync_id, 头标志项和尾标 志项都置为有效, 计数项置为栅栏消息中栅栏同步中的小核的数量减 1 ; 在所述小核发送的栅栏消息不为同步管理装置接收的对应栅栏同步的第一个栅栏消 息时, 在记录表中查找同所述栅栏消息的 sync_id 相同, 并且尾标志项为有效的行, 在所述 行的下一节点项中填写所述小核的 ID, 将所述行的尾标志项修改为无效 ; 将记录表中所述 小核对应行的 sync_id 项中填写所述栅栏消息的 sync_id, 尾标志项修改为有效, 计数项置 为查找到的原表尾小核对应的计数项数值减 1 ; 同步管理装置检查时进一步用于 判断发送所述栅栏消息的小核在记录表中对应行的计数项是否为 0, 如果为 0, 则参与 栅栏同步的小核的栅栏消息都已经到达同步管理装置 ; 否则, 参与栅栏同步的小核的栅栏 6 消息没有都到达同步管理装置 ; 同步管理装置发送确认消息后还用于 将记录表中所述栅栏消息对应的栅栏等待链表的表头和表尾所在行的头标志项和尾 标志项分别置为无效。
17: 一种众核处理器片上同步方法, 其特征在于, 包括 : 步骤 1, 小核执行到生产指令时, 向同步管理装置发送生产消息, 然后继续执行后续指 令, 所述生产消息中包括第一数值和 sync_id ; 步骤 2, 小核执行到消费指令时, 向同步管理装置发送消费消息, 然后进入等待状态, 所 述消费消息中包括 sync_id ; 步骤 3, 同步管理装置接收到生产消息时, 进行生产接收记录, 并依据消费等待记录和 生产消息检查是否已有消费者等待发送所述生产消息的生产者, 如果有, 则按照各个小核 的消费消息到达同步管理装置的顺序向所述小核发送确认消息, 发送的确认消息的数量不 超过所述生产消息中第一数值 ; 步骤 4, 同步管理装置接收到小核的消费消息时, 依据生产接收记录和消费消息检查是 否已经接收到所述消费消息中 sync_id 对应的生产消息, 如果是, 则在所述生产消息对应 确认消息的已发送数量小于所述生产消息的第一数值时, 向发送所述消费消息的小核发送 确认消息, 如果为否, 则进行消费等待记录 ; 步骤 5, 小核收到确认消息后, 继续执行后续指令。
18: 如权利要求 17 所述的众核处理器片上同步方法, 其特征在于, 同步管理装置对应于每个生产 - 消费同步建立一个消费等待链表, 并用生产记录表维 护各个生产 - 消费同步的生产者信息 ; 生产记录表每一行对应一个小核, 每行中包含 sync_id 项、 等待标志项、 以及数值记录 项; 所述步骤 3 中进行生产接收记录进一步为, 在生产记录表中找到发送所述生产消息的 小核对应的行, 将所述行中等待标志项置为有效, 将所述行中 sync_id 项填为所述生产消 息中 sync_id, 将所述行中数值记录项填为所述生产消息中第一数值 ; 所述步骤 4 中进行消费等待记录进一步为, 依据所述消费消息中 sync_id 将所述小核 添加到所述 sync_id 对应的生产 - 消费同步的消费等待链表的表尾。
19: 如权利要求 18 所述的众核处理器片上同步方法, 其特征在于, 所述步骤 3 中检查时进一步为, 步骤 191, 检查所述生产消息的 sync_id 对应的生产 - 消费同步的消费等待链表是否为 空, 如果不为空, 则按所述消费等待链表从表头到表尾的顺序向各个节点对应小核发送确 认消息, 每发送一个确认消息将生产记录表中对应行的数值记录项中的值减 1, 在所述数值 记录项为 0 时, 将对应行的等待标志项置为无效, 停止发送确认消息 ; 所述步骤 4 中检查时进一步为, 步骤 192, 在生产记录表中查找 sync_id 表项同所述消费消息中 sync_id 相同的行, 如 果查找到并且所述行的等待标志项为有效, 则向发送所述消费消息的小核发送确认消息, 将生产记录表中所述行中数值记录项的值减 1, 在数值记录项的值变为 0 时, 将所述行的等 待标志项置为无效 ; 如果没有查找到, 进行所述消费等待记录。 7
20: 如权利要求 18 所述的众核处理器片上同步方法, 其特征在于, 所述步骤 4 中还包括, 同步管理装置维护消费记录表, 用于记录消费等待链表的信息, 消费记录表中每一行对应于一个小核, 每一行包括 : sync_id 项、 头标志项、 尾标志项、 以及 下一节点项 ; 所述步骤 4 中进行消费等待记录后还包括, 步骤 121, 在消费记录表中查找所述消费消息中 sync_id 对应的消费等待链表的尾节 点对应的行, 如果查找到, 则将所述行的下一节点项填写为发送所述消费消息的小核的 ID, 将所述行的尾标志项修改为无效 ; 步骤 122, 在消费记录表中查找到发送所述消费消息的小核对应的行时, 将所述行的 sync_id 项填写为所述消费消息中的 sync_id, 将所述行的尾标志项值为有效 ; 在消费记录 表中没有查找所述消费消息中 sync_id 对应的行时, 将所述行的头标志项置为有效 ; 所述步骤 3 中检查时进一步为, 步骤 123, 在消费记录表中查找所述生产消息的 sync_id 对应的消费等待链表的表头 对应的行, 从表头开始依据下一节点项向所述消费等待链表节点对应的小核发送确认消 息, 每发送一个确认消息, 将生产记录表中对应行的数值记录项中的值减 1, 并更新消费记 录表中记录, 在所述数值记录项为 0 时, 将对应行的等待标志项置为无效, 停止发送确认消 息。
21: 一种众核处理器片上同步系统, 其特征在于, 包括 : 多个小核和同步管理装置, 小核, 用于执行到生产指令时, 向同步管理装置发送生产消息, 然后继续执行后续指 令, 所述生产消息中包括第一数值和 sync_id ; 小核, 还用于执行到消费指令时, 向同步管理装置发送消费消息, 然后进入等待状态, 所述消费消息中包括 sync_id ; 同步管理装置用于接收到生产消息时, 进行生产接收记录, 并依据消费等待记录和生 产消息检查是否已有消费者等待发送所述生产消息的生产者, 如果有, 则按照各个小核的 消费消息到达同步管理装置的顺序向所述小核发送确认消息, 发送的确认消息的数量不超 过所述生产消息中第一数值 ; 同步管理装置还用于接收到小核的消费消息时, 依据生产接收记录和消费消息检查是 否已经接收到所述消费消息中 sync_id 对应的生产消息, 如果是, 则在所述生产消息对应 确认消息的已发送数量小于所述生产消息的第一数值时, 向发送所述消费消息的小核发送 确认消息, 如果为否, 则进行消费等待记录 ; 小核还用于收到确认消息后, 继续执行后续指令。
22: 如权利要求 21 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于对应于每个生产 - 消费同步建立一个消费等待链表, 并用生产记 录表维护各个生产 - 消费同步的生产者信息 ; 生产记录表每一行对应一个小核, 每行中包含 sync_id 项、 等待标志项、 以及数值记录 项; 同步管理装置进行生产接收记录时进一步用于, 在生产记录表中找到发送所述生产消 息的小核对应的行, 将所述行中等待标志项置为有效, 将所述行中 sync_id 项填为所述生 产消息中 sync_id, 将所述行中数值记录项填为所述生产消息中第一数值 ; 8 同步管理装置进行消费等待记录时进一步用于, 依据所述消费消息中 sync_id 将所述 小核添加到所述 sync_id 对应的生产 - 消费同步的消费等待链表的表尾。
23: 如权利要求 22 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置接收到生产消息进行检查时进一步用于 检查所述生产消息的 sync_id 对应的生产 - 消费同步的消费等待链表是否为空, 如果 不为空, 则按所述消费等待链表从表头到表尾的顺序向各个节点对应小核发送确认消息, 每发送一个确认消息将生产记录表中对应行的数值记录项中的值减 1, 在所述数值记录项 为 0 时, 将对应行的等待标志项置为无效, 停止发送确认消息 ; 同步管理装置接收到小核的消费消息检查时进一步用于 在生产记录表中查找 sync_id 表项同所述消费消息中 sync_id 相同的行, 如果查找到 并且所述行的等待标志项为有效, 则向发送所述消费消息的小核发送确认消息, 将生产记 录表中所述行中数值记录项的值减 1, 在数值记录项的值变为 0 时, 将所述行的等待标志项 置为无效 ; 如果没有查找到, 进行所述消费等待记录。
24: 如权利要求 22 所述的众核处理器片上同步系统, 其特征在于, 同步管理装置还用于维护消费记录表, 用于记录消费等待链表的信息, 消费记录表中 每一行对应于一个小核, 每一行包括 : sync_id 项、 头标志项、 尾标志项、 以及下一节点项 ; 同步管理装置进行消费等待记录后还用于 在消费记录表中查找所述消费消息中 sync_id 对应的消费等待链表的尾节点对应的 行, 如果查找到, 则将所述行的下一节点项填写为发送所述消费消息的小核的 ID, 将所述行 的尾标志项修改为无效 ; 在消费记录表中查找到发送所述消费消息的小核对应的行时, 将所述行的 sync_id 项 填写为所述消费消息中的 sync_id, 将所述行的尾标志项值为有效 ; 在消费记录表中没有 查找所述消费消息中 sync_id 对应的行时, 将所述行的头标志项置为有效 ; 同步管理装置接收到生产消息进行检查时进一步为, 在消费记录表中查找所述生产消息的 sync_id 对应的消费等待链表的表头对应的行, 从表头开始依据下一节点项向所述消费等待链表节点对应的小核发送确认消息, 每发送一 个确认消息, 将生产记录表中对应行的数值记录项中的值减 1, 并更新消费记录表中记录, 在所述数值记录项为 0 时, 将对应行的等待标志项置为无效, 停止发送确认消息。

说明书


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

    【技术领域】
     本发明涉及众核处理器领域, 尤其涉及众核处理器片上同步方法和及其系统。背景技术 传统单核处理器采用指令级细粒度并行的技术提高性能, 借助于超标量和流水处 理提高处理器的主频, 然而主频的提高使得功耗和散热问题难以依靠现有的技术解决。半 导体工艺的发展, 使得片上可集成的晶体管数目日益增多, 体系结构设计者为了在性能进 一步提升的同时降低功耗和散热, 提出了线程级粗粒度并行的片上多核 / 众核处理器, 众 核处理器比多核处理器在芯片上集成了更多的处理器核, 通常认为 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 时, 将对应行的等待标志项置为无效, 停止发送确认消息。
     本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下, 还 可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明, 而是由 权利要求书的范围来确定的。

众核处理器片上同步方法和其系统.pdf_第1页
第1页 / 共31页
众核处理器片上同步方法和其系统.pdf_第2页
第2页 / 共31页
众核处理器片上同步方法和其系统.pdf_第3页
第3页 / 共31页
点击查看更多>>
资源描述

《众核处理器片上同步方法和其系统.pdf》由会员分享,可在线阅读,更多相关《众核处理器片上同步方法和其系统.pdf(31页珍藏版)》请在专利查询网上搜索。

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1