多核电路、数据交换方法、电子设备及存储介质转让专利

申请号 : CN202210358411.2

文献号 : CN114691595B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李贵鹏贾磊

申请人 : 北京百度网讯科技有限公司

摘要 :

本公开提供了一种多核电路、数据交换方法、电子设备及存储介质,涉及通信领域,尤其涉及多核通信领域。多核电路,包括:公共存储区;多个中断寄存器;多个状态寄存器;以及多个计算核,其中的每个计算核被配置为:在满足数据交换条件的情况下,将第一数据写入公共存储区,并触发其他计算核对应的中断寄存器产生中断信号;或者,在该计算核对应的中断寄存器产生中断信号的情况下,根据该计算核对应的状态寄存器记录的公共存储区的数据读写状态,从公共存储区读取其他计算核写入的第二数据。本公开降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。

权利要求 :

1.一种多核电路,包括:

公共存储区;

多个中断寄存器;

多个状态寄存器;以及

多个计算核,其中的每个计算核被配置为:在满足数据交换条件的情况下,将第一数据写入公共存储区,并触发其他计算核对应的中断寄存器产生中断信号;在该计算核对应的中断寄存器产生中断信号的情况下,根据该计算核对应的状态寄存器记录的公共存储区的数据读写状态,从公共存储区读取其他计算核写入的第二数据;

其中,状态寄存器包括第一类状态寄存器和第二类状态寄存器;每个计算核对应至少一个第一类状态寄存器和至少一个第二类状态寄存器;

第一类状态寄存器,用于存储所属计算核对预设类型的数据的写入计数值;

第二类状态寄存器,用于存储所属计算核对其他计算核中预设类型的数据的读取计数值。

2.根据权利要求1的多核电路,其中,各中断寄存器和各状态寄存器对每个计算核可见。

3.根据权利要求1的多核电路,其中,公共存储区中包括为每个计算核分配的环形队列,以存储需要交换的数据。

4.根据权利要求3的多核电路,其中,公共存储区中包括为每个计算核分配的多个环形队列,每个环形队列用于存储预设类型的数据,不同类型的数据对应不同的数据处理优先级。

5.根据权利要求3的多核电路,其中,每个环形队列包括定长环形子队列以及变长环形子队列;

定长环形子队列,用于存储数据在变长环形子队列的存储位置和数据大小;

变长环形子队列,用于存储数据。

6.根据权利要求1‑5任一项的多核电路,其中,多核电路为双核数字信号处理芯片。

7.一种数据交换方法,由多核电路中的写入方计算核执行,包括:在满足数据交换条件的情况下,将第一数据写入公共存储区;

触发读取方计算核对应的中断寄存器产生中断信号;

其中,所述中断信号用于指示读取方计算核获取所对应状态寄存器记录的公共存储区的数据读写状态,并根据所述数据读写状态从公共存储区读取所述第一数据;

其中,状态寄存器包括第一类状态寄存器和第二类状态寄存器;每个计算核对应至少一个第一类状态寄存器和至少一个第二类状态寄存器;

第一类状态寄存器,用于存储所属计算核对预设类型的数据的写入计数值;

第二类状态寄存器,用于存储所属计算核对其他计算核中预设类型的数据的读取计数值。

8.根据权利要求7所述的方法,其中,触发读取方计算核对应的中断寄存器产生中断信号,包括:将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,并触发读取方计算核对应的中断寄存器产生中断信号。

9.根据权利要求8所述的方法,其中,将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,并触发读取方计算核对应的中断寄存器产生中断信号,包括:在可见状态寄存器列表中,识别与写入方计算核对应的状态寄存器,并对所述状态寄存器记录的公共存储区的数据读写状态进行更新;

在可见中断寄存器列表中,识别与读取方计算核对应的中断寄存器,并触发所述中断寄存器产生中断信号。

10.根据权利要求8所述的方法,其中,将第一数据写入公共存储区,包括:在所述公共存储区中,获取为写入方计算核分配的第一环形队列;

将所述第一数据写入至所述第一环形队列中。

11.根据权利要求10所述的方法,其中,在所述公共存储区中,获取为写入方计算核分配的第一环形队列,包括:根据所述第一数据的类型,在所述公共存储区中,获取为写入方计算核分配的第一环形队列。

12.根据权利要求10所述的方法,其中,将所述第一数据写入至所述第一环形队列中,包括:将所述第一数据写入所述第一环形队列中的变长环形子队列,并将所述第一数据的数据大小和所述第一数据在所述变长环形子队列中的存储位置,写入至所述第一环形队列中的定长环形子队列。

13.根据权利要求11所述的方法,其中,将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,包括:在写入方计算核对应的状态寄存器中,获取与所述第一数据的类型对应的第一类状态寄存器;

根据所述第一数据中包括的数据项数量,对所述第一类状态寄存器中存储的所述预设类型的数据在第一环形队列中的写入计数值进行更新。

14.根据权利要求12所述的方法,其中,将所述第一数据写入所述第一环形队列中的变长环形子队列,并将所述第一数据的数据大小和所述第一数据在所述变长环形子队列中的存储位置,写入至所述第一环形队列中的定长环形子队列,包括:在所述第一数据中依次获取当前数据项,并获取所述当前数据项在所述第一环形队列中的当前写入计数值;

根据所述当前写入计数值,在所述定长环形子队列中,定位定长存储区域;

获取所述变长环形子队列的当前变长存储位置,并将所述当前变长存储位置和所述当前数据项的数据大小写入所述定长存储区域;

根据所述当前变长存储位置,将所述当前数据项写入变长环形子队列,并按照当前数据项的数据大小,更新当前变长存储位置;

返回执行在第一数据中依次获取当前数据项的操作,直至完成对全部数据项的处理。

15.一种数据交换方法,由多核电路中的读取方计算核执行,包括:在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态;其中,所述中断信号是写入方计算核在满足数据交换条件的情况下,将第二数据写入公共存储区后触发读取方计算核对应的中断寄存器产生的;

根据获取的所述数据读写状态,从公共存储区读取写入方计算核写入的第二数据;

其中,状态寄存器包括第一类状态寄存器和第二类状态寄存器;每个计算核对应至少一个第一类状态寄存器和至少一个第二类状态寄存器;

第一类状态寄存器,用于存储所属计算核对预设类型的数据的写入计数值;

第二类状态寄存器,用于存储所属计算核对其他计算核中预设类型的数据的读取计数值。

16.根据权利要求15所述的方法,其中,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态,包括:在可见状态寄存器列表中,识别与读取方计算核对应的第一状态寄存器,并识别与写入方计算核对应的第二状态寄存器;

获取与所述第一状态寄存器和所述第二状态寄存器分别对应的数据读写状态。

17.根据权利要求16所述的方法,其中,根据获取的所述数据读写状态,从公共存储区读取写入方计算核写入的第二数据,包括:在所述公共存储区中,获取与写入方计算核对应的第二环形队列;

根据所述数据读写状态,从所述第二环形队列中读取所述写入方计算核写入的第二数据。

18.根据权利要求17所述的方法,其中,根据所述数据读写状态,从所述第二环形队列中读取所述写入方计算核写入的第二数据,包括:按照各第二环形队列所存储数据的数据处理优先级,在各第二环形队列中,依次获取当前队列;

在所述数据读写状态中,获取读取方计算核针对所述当前队列的目标数据读取状态,和写入方计算核针对所述当前队列的目标数据写入状态;

根据所述目标数据读取状态和所述目标数据写入状态,确定所述当前队列中是否存储所述第二数据;

若是,则从所述当前队列中,读取所述第二数据;若否,则返回执行依次获取当前队列的操作。

19.根据权利要求18所述的方法,其中,在所述数据读写状态中,获取读取方计算核针对所述当前队列的目标数据读取状态,和写入方计算核针对所述当前队列的目标数据写入状态,包括:根据当前队列中存储数据的类型,在与读取方计算核对应的第一状态寄存器中,获取目标第二类状态寄存器,并在与所述写入方计算核对应的第二状态寄存器中,获取目标第一类状态寄存器;

获取所述目标第二类状态寄存器中存储的读取方计算核对当前队列的目标读取计数值;

获取所述目标第一类状态寄存器中存储的写入方计算核对当前队列的目标写入计数值。

20.根据权利要求19所述的方法,其中,根据所述目标数据读取状态和所述目标数据写入状态,确定所述当前队列中是否存储所述第二数据,包括:如果确定所述目标读取计数值小于所述目标写入计数值,则确定所述当前队列中存储所述第二数据。

21.根据权利要求20所述的方法,其中,从所述当前队列中,读取所述第二数据,包括:对所述目标第二类状态寄存器中的目标读取计数值进行加一更新;

根据更新后的目标读取计数值,在当前队列的定长环形子队列中,定位历史存储区域;

在历史存储区域中,获取历史变长存储位置以及目标数据大小;

根据历史变长存储位置以及目标数据大小,在当前队列的变长环形子队列中,读取第二数据中的一个数据项;

如果确定所述目标读取计数值小于所述目标写入计数值,则返回执行对所述目标第二类状态寄存器中的目标读取计数值进行加一更新的操作,直至完成对第二数据的完整读取。

22.根据权利要求15‑21任一项所述的方法,还包括:预先注册不同类型的处理函数,用于处理不同类型的数据;

在从公共存储区读取写入方计算核写入的第二数据之后,还包括:根据所述第二数据的类型,调用匹配的处理函数进行数据处理。

23.一种电子设备,包括:如权利要求1‑6任一项所述的多核电路;以及与所述多核电路中各计算核通信连接的存储器;其中,存储器存储有可被计算核执行的指令,指令被各计算核执行,以使至少一个计算核能够执行权利要求7‑22中任一项的方法。

24.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行根据权利要求7‑22中任一项的方法。

说明书 :

多核电路、数据交换方法、电子设备及存储介质

技术领域

[0001] 本公开涉及通信技术领域,尤其涉及多核通信领域,具体涉及一种多核电路、数据交换方法、电子设备及存储介质。

背景技术

[0002] 当前,人工智能、大数据、物联网蓬勃发展,随之产生了海量的信息需要处理。为了加快信息处理速度,芯片一般会集成多个CPU核心。在处理数据时,多核同时工作,双方需要交换数据时,会使用到IPC(Inter‑Process Communication,进程间通信)技术。
[0003] IPC本质上是一种同步技术。同步技术对多核通信的效率影响较大,而且不同的同步策略对硬件设计的影响也不相同。目前的芯片设计在实现IPC时,主要采用硬件上增加集中式或分布式同步单元实现读写锁和内存屏障。虽然这种方法减少了IPC通信时软件设计的复杂度,但增加了硬件的复杂程度和成本。

发明内容

[0004] 本公开提供了一种多核电路、数据交换方法、电子设备及存储介质,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0005] 根据本公开的一方面,提供了一种多核电路,包括:
[0006] 公共存储区;
[0007] 多个中断寄存器;
[0008] 多个状态寄存器;以及
[0009] 多个计算核,其中的每个计算核被配置为:在满足数据交换条件的情况下,将第一数据写入公共存储区,并触发其他计算核对应的中断寄存器产生中断信号;或者,在该计算核对应的中断寄存器产生中断信号的情况下,根据该计算核对应的状态寄存器记录的公共存储区的数据读写状态,从公共存储区读取其他计算核写入的第二数据。
[0010] 根据本公开的另一方面,提供了一种数据交换方法,由多核电路中的写入方计算核执行,包括:
[0011] 在满足数据交换条件的情况下,将第一数据写入公共存储区;
[0012] 触发读取方计算核对应的中断寄存器产生中断信号;
[0013] 其中,所述中断信号用于指示读取方计算核获取所对应状态寄存器记录的公共存储区的数据读写状态,并根据所述数据读写状态从公共存储区读取所述第一数据。
[0014] 根据本公开的另一方面,提供了另一种数据交换方法,由多核电路中的读取方计算核执行,包括:
[0015] 在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态;其中,所述中断信号是写入方计算核在满足数据交换条件的情况下,将第一数据写入公共存储区后触发读取方计算核对应的中断寄存器产生的;
[0016] 根据获取的所述数据读写状态,从公共存储区读取写入方计算核写入的第二数据。
[0017] 根据公开的另一方面,提供了一种数据交换装置,包括:
[0018] 第一数据写入模块,用于在满足数据交换条件的情况下,将第一数据写入公共存储区;
[0019] 中断信号触发模块,用于触发读取方计算核对应的中断寄存器产生中断信号;
[0020] 其中,所述中断信号用于指示读取方计算核获取所对应状态寄存器记录的公共存储区的数据读写状态,并根据所述数据读写状态从公共存储区读取所述第一数据。
[0021] 根据公开的另一方面,提供了一种数据交换装置,包括:
[0022] 数据读写状态获取模块,用于在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态;其中,所述中断信号是写入方计算核在满足数据交换条件的情况下,将第一数据写入公共存储区后触发读取方计算核对应的中断寄存器产生的;
[0023] 第二数据读取模块,用于根据获取的所述数据读写状态,从公共存储区读取写入方计算核写入的第二数据。
[0024] 根据本公开的另一方面,提供了一种电子设备,包括:本公开任一实施例所述的多核电路;以及
[0025] 与所述多核电路中各计算核通信连接的存储器;其中,
[0026] 存储器存储有可被计算核执行的指令,指令被各计算核执行,以使至少一个计算核能够执行本公开任一实施例的方法。
[0027] 根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行本公开任一实施例的方法。
[0028] 本公开实施例的技术方案降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0029] 应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

[0030] 附图用于更好地理解本方案,不构成对本公开的限定。其中:
[0031] 图1是本公开实施例提供的一种多核电路的示意图;
[0032] 图2a是本公开实施例提供的一种数据交换方法的流程图;
[0033] 图2b是本公开实施例提供的另一种数据交换方法的流程图;
[0034] 图3a是本公开实施例提供的又一种数据交换方法的流程图;
[0035] 图3b是本公开实施例提供的另一种数据交换方法的流程图;
[0036] 图4是本公开实施例提供的一种处理函数模型的示意图;
[0037] 图5是本公开实施例提供的一种双核数字信号处理芯片的数据交换示意图;
[0038] 图6是本公开实施例提供的一种计算核0的数据处理过程的示意图;
[0039] 图7是本公开实施例提供的一种计算核1的数据处理过程的示意图;
[0040] 图8是本公开实施例提供的一种消息结构在环形队列中的分布结果示意图;
[0041] 图9是本公开实施例提供的一种数据交换装置的示意图;
[0042] 图10是本公开实施例提供的另一种数据交换装置的示意图;
[0043] 图11示出了可以用来实施本公开的实施例的示例电子设备的示意性框图。

具体实施方式

[0044] 以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0045] 在一个示例中,图1是本公开实施例提供的一种多核电路的示意图,如图1所示,多核电路,包括:公共存储区110;多个中断寄存器120;多个状态寄存器130;以及多个计算核140,其中的每个计算核被配置为:在满足数据交换条件的情况下,将第一数据写入公共存储区110,并触发其他计算核对应的中断寄存器120产生中断信号;或者,在该计算核对应的中断寄存器120产生中断信号的情况下,根据该计算核对应的状态寄存器130记录的公共存储区110的数据读写状态,从公共存储区110读取其他计算核写入的第二数据。
[0046] 其中,多个计算核140的类型可以不同。示例性的,计算核140可以包括ARM(Advanced  RISC Machine,高级精简指令计算机)核以及DSP(Digital Signal Processing,数字信号处理)核等。数据交换条件可以用于表征计算核140之间有新消息需要进行计算核间的交互。第一数据可以是计算核140自身写入公共存储区110的,以供其他计算核140读取的数据。第二数据可以是写入第一数据的计算核140需要读取的,由其他计算核140写入公共存储区110的数据。公共存储区110可以是多核电路中各计算核140共用的数据存储区,用于实现多核间的数据共享。数据读写状态可以用于表征计算核140对公共存储区110的数据读取以及数据写入情况。
[0047] 在本公开实施例中,每个计算核140既可以作为数据写入方,也可以作为数据接收方,当计算核140之间需要传输新消息(也即满足数据交换条件)时,如果当前计算核作为数据写入方将第一数据写入公共存储区110后,则当前计算核需要配置作为数据读取方的计算核(例如,计算核A)的中断寄存器120,通过触发该中断寄存器120产生中断信号,以控制计算核A执行从公共存储区110中读取第一数据的操作,进而可以实现将第一数据由当前计算核交换至计算核A的效果。
[0048] 如果当前计算核作为数据读取方,则当前计算核在基于中断寄存器120产生的中断信号被触发后,可选的,该中断信号是由计算核B触发产生的,可以基于状态寄存器130中记录的对公共存储区110的数据读写状态,从公共存储区110中读取计算核B在触发产生该中断信号之前所写入的第二数据。
[0049] 可选的,在多核电路中,计算核140与中断寄存器120具有一一对应关系,此外,一个计算核140对应多个状态寄存器130。
[0050] 其中,与计算核(例如,计算核1)一一对应的中断寄存器120,可以由其他计算核(例如,计算核2)进行配置,以触发计算核1执行相应的数据读取操作;同时,与每个计算核对应的多个状态寄存器130,用于存储该计算核对公共存储区110的数据读取状态以及数据写入状态。
[0051] 本公开实施例的技术方案,通过公共存储区、多个中断寄存器、多个状态寄存器,以及多个计算核成多核电路,进而在满足数据交换条件的情况下,将第一数据写入公共存储区,并触发其他计算核对应的中断寄存器产生中断信号;或者,在该计算核对应的中断寄存器产生中断信号的情况下,根据该计算核对应的状态寄存器记录的公共存储区的数据读写状态,从公共存储区读取其他计算核写入的第二数据,无需构建复杂的集中式或分布式同步单元,仅通过配置简单的中断寄存器和状态寄存器,即可实现复杂的数据同步技术,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0052] 在本公开的一个可选实施例中,各中断寄存器120和各状态寄存器130对每个计算核140可见。
[0053] 在本公开实施例中,多核电路中各计算核140的中断寄存器120和状态寄存器130对每个计算核140均是可见的,也即多核电路中某个计算核140可以查询或者设置多核电路中全部的中断寄存器120和状态寄存器130,使得各计算核140及时感知数据交换需要,触发执行数据交换操作,并快速定位需要存取的数据。
[0054] 示例性的,多核电路中满足数据交换条件的计算核140可以设置与本核(自身计算核)进行数据交换的其他计算核的中断寄存器120,并且查询与本核进行数据交换的其他计算核的状态寄存器130。
[0055] 在本公开的一个可选实施例中,公共存储区110中可以包括为每个计算核140分配的环形队列,以存储需要交换的数据。
[0056] 在本公开实施例中,可以在公共存储区110中分配与计算核数量相匹配的环形队列,以使每个计算核140以首尾相连的数据结构存储需要交互的数据,从而实现计算核140对数据的快速存取。
[0057] 在本公开的一个可选实施例中,公共存储区110中可以包括为每个计算核140分配的多个环形队列,每个环形队列可以用于存储预设类型的数据,不同类型的数据对应不同的数据处理优先级。
[0058] 在本公开实施例中,可以根据计算核140需要在公共存储区110内存储的数据类型(也即根据计算核140需要在公共存储区内存储的数据的处理优先级),在公共存储区110内为每个计算核140分配多个环形队列,以使一个计算核140的每个环形队列存储预设类型的数据,也即一个计算核140的不同环形队列存储不同类型的数据,从而根据数据存储的环形队列的不同实现对不同处理优先级数据的区分,进而便于数据的分类处理。
[0059] 可选的,预设类型的数据与环形队列具有对应存储关系。示例性的,假设报警类型的数据的优先级高于参数类型的数据,则可以将两个环形队列划分为高优先级环形队列以及低优先级环形队列,进而将报警类型的数据存储于高优先级环形队列,将参数类型的数据存储于低优先级环形队列。
[0060] 这样设置的原因在于:使用环形队列存放数据,先入队的数据优先被处理,后入队的数据后处理,即使优先级更高仍然得不到及时处理。针对这个问题,可以为每个计算核140配置多个环形队列,不同优先级的数据放入不同优先级的环形队列,读取方计算核根据环形队列的优先级,优先处理那些高优先级的消息,保证了系统的实时性要求。每个环形队列的容量都可以根据传输的数据量调整大小。
[0061] 在本公开的一个可选实施例中,每个环形队列可以包括定长环形子队列以及变长环形子队列;定长环形子队列,用于存储数据在变长环形子队列的存储位置和数据大小;变长环形子队列,用于存储数据。
[0062] 也即,一个环形队列中包括两个子队列,一个子队列为用于存储定长的数据描述信息的定长环形子队列,另一个子队列为用于存储变长实际数据的变长环形子队列。其中,在该定长环形子队列中,用于存储每个数据在变长环形子队列中的存储位置以及数据大小(也即,上文的数据描述信息),在该变长环形子队列中,用于存储实际的变长数据。由于定长环形子队列中每个存储空间的长度固定,进而,可以通过数据计数值,准确定位相应的存储空间,进而,根据每个定长环形子队列中存储的数据描述信息,可以在变长环形子队列中准确定位每一项具体的数据。
[0063] 可选的,每个计算核140可以将每个待交换的数据打包为消息,进而,上述环形队列可以为消息队列,其中,定长环形子队列可以是环形队列中用于存储消息头,而并非消息体的队列。变长环形子队列可以是环形队列中用于存储消息体的队列。
[0064] 在本公开实施例中,可以在环形队列的定长环形子队列中,存储消息体在变长环形子队列的存储位置和数据大小,并将实际的消息体存储在环形队列中的变长环形子队列中。通过将消息头存储于定长环形子队列,将消息体存储于变长环形子队列,可以实现消息头与消息体的分区维护,还可以实现消息体的高效率读取,而无需耗费计算核的计算资源去读取数据。
[0065] 在本公开的一个可选实施例中,状态寄存器130可以包括第一类状态寄存器和第二类状态寄存器;每个计算核140对应至少一个第一类状态寄存器和至少一个第二类状态寄存器;第一类状态寄存器,用于存储所属计算核140对预设类型的数据的写入计数值;第二类状态寄存器,用于存储所属计算核140对其他计算核140中预设类型的数据的读取计数值。
[0066] 其中,写入计数值可以表征计算核140在公共存储区110中,对预设类型数据所写入的数据项的个数。读取计数值可以表征计算核140在公共存储区110中,对预设类型数据所读取的数据项的个数。
[0067] 在本公开实施例中,每个计算核140可以根据写入的预设类型的数据的种类配置第一类状态寄存器,并根据读取的设定类型的数据的种类配置第二类状态寄存器,从而得到至少一个第一类状态寄存器和至少一个第二类状态寄存器,进一步通过至少一个第一类状态寄存器存储所属计算核140对预设类型的数据的写入计数值,并通过至少一个第二类状态寄存器存储所属计算核140中预设类型的数据的读取计数值。通过对状态寄存器130的功能区分,如记录对所属计算核140对预设类型的数据写入计数值以及对其他计算核140的数据的读取计数值,可以实现计算核140对数据读写状态的有效管理,从而快速定位需要读取的数据。
[0068] 示例性的,假设计算核140可以写入2种类型的数据,还可以读取2种类型的数据,则可以配置两个第一类状态寄存器:一个高优先级的第一类状态寄存器,一个低优先级的第一类状态寄存器,两个第二类状态寄存器:一个高优先级的第二类状态寄存器,一个低优先级的第二类状态寄存器,进而由高优先级的第一类状态寄存器存储所属计算核140对高优先级的数据的写入计数值,由低优先级的第一类状态寄存器存储所属计算核140对低优先级的数据的写入计数值,由高优先级的第二类状态寄存器存储所属计算核140中高优先级的数据的读取计数值,由低优先级的第二类状态寄存器存储所属计算核140中低优先级的数据的读取计数值。本公开实施例并不对计算核140可以写入类型的数据的种类,以及可以读取的数据的类型的种类进行限定。
[0069] 可以理解的是,多核电路中与每个计算核对应的第一类状态寄存器的数量可以相同或者不同,与每个计算核对应的第二类状态寄存器的数量可以相同或者不同。
[0070] 在本公开的一个可选实施例中,多核电路可以为双核数字信号处理芯片。该双核电路可以用于处理音频数据、视频数据以及文本数据等,本公开实施例并不对多核电路的具体处理功能进行限定,可以实现计算核异构场景下的数据交互。
[0071] 在一个示例中,图2a是本公开实施例提供的一种数据交换方法的流程图,本实施例可适用于低延时数据交换的情况,该方法可以由数据交换装置来执行,该装置可以由软件和硬件中的至少一项的方式来实现,并一般可集成在如本公开任一实施例所述多核电路的写入方计算核中。相应的,如图2a所示,该方法包括如下操作:
[0072] 步骤210、在满足数据交换条件的情况下,将第一数据写入公共存储区。
[0073] 其中,写入方计算核可以是多核电路中,作为数据写入方的计算核。
[0074] 在本公开实施例中,当多核电路中的计算核A需要将本核产生的数据发送至其他计算核进行数据交互时,则计算核A为满足数据交换条件的写入方计算核。
[0075] 相应的,当一个计算核作为写入方计算核,且需要向其他计算核传输新数据时,可以将所需传输的第一数据写入公共存储区。
[0076] 步骤220、触发读取方计算核对应的中断寄存器产生中断信号。
[0077] 其中,中断信号可以用于指示读取方计算核获取所对应状态寄存器记录的公共存储区的数据读写状态,并根据数据读写状态从公共存储区读取第一数据。
[0078] 其中,读取方计算核可以是由写入方计算核确定的,需要从公共存储区读取该第一数据的计算核。
[0079] 在本公开实施例中,写入方计算核将第一数据写入公共存储区之后,可以进一步配置读取方计算核的中断寄存器,以触发读取方计算核的相应中断寄存器产生中断信号,以使读取方计算核根据中断信号的指示从公共存储区读取写入方计算核所写入的第一数据。
[0080] 本公开实施例的技术方案,通过写入方计算核在满足数据交换条件的情况下,将第一数据写入公共存储区,触发读取方计算核对应的中断寄存器产生中断信号,实现读取方计算核对第一数据的读取,不需要复杂的电路以及总线结构,仅通过对状态寄存器以及中断寄存器的配合使用即可完成计算核的数据交互,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0081] 在本公开的一个可选实施例中,触发读取方计算核对应的中断寄存器产生中断信号,可以包括:将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,并触发读取方计算核对应的中断寄存器产生中断信号。
[0082] 在本公开实施例中,写入方计算核在公共存储区写入第一数据之后,可以根据第一数据的写入状态,将与写入方计算核对应的状态寄存器记录的,公共存储区的数据读写状态中的数据写入状态进行更新,进而触发读取方计算核对应的中断寄存器产生中断信号。
[0083] 写入方计算核对数据读写状态进行更新,并触发读取方计算核对应的中断寄存器产生中断信号,可以实现读取方计算核准确定位所需读取的第一数据,以更好的与写入方计算核的可靠协作。
[0084] 在本公开的一个可选实施例中,将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,并触发读取方计算核对应的中断寄存器产生中断信号,可以包括:在可见状态寄存器列表中,识别与写入方计算核对应的状态寄存器,并对状态寄存器记录的公共存储区的数据读写状态进行更新;在可见中断寄存器列表中,识别与读取方计算核对应的中断寄存器,并触发中断寄存器产生中断信号。
[0085] 其中,可见状态寄存器列表可以是在多核电路中,写入方计算核可见的状态寄存器的列表,也即多核电路所包括的每个计算核的状态寄存器的列表。可见中断寄存器列表可以是在多核电路中,写入方计算核可见的中断寄存器的列表,也即多核电路所包括的全部计算核的中断寄存器的列表。
[0086] 在本公开实施例中,可以预先获取与每个计算核分别对应的状态寄存器,建立可见状态寄存器列表,进而写入方计算核可以根据可见状态寄存器列表,识别出属于写入方计算核的状态寄存器,从而根据写入方计算核在公共存储区写入第一数据的状态,对识别出的状态寄存器记录的公共存储区的数据读写状态进行更新。
[0087] 进一步的,可以预先获取与每个计算核分别对应的中断寄存器,建立可见中断寄存器列表。进而,写入方计算核可以根据可见中断寄存器列表,识别出属于读取方计算核的中断寄存器,并触发所识别出的中断寄存器产生中断信号。
[0088] 通过查询可见状态寄存器列表,可以快速确定与写入方计算核对应的状态寄存器,以便于对写入方计算核的数据写入状态进行更新,通过查询可见中断寄存器列表,可以快速确定与读取方计算核对应的中断寄存器,以便于准确触发读取方计算核中断寄存器产生中断信号。
[0089] 在本公开的一个可选实施例中,将第一数据写入公共存储区,可以包括:在公共存储区中,获取为写入方计算核分配的第一环形队列;将第一数据写入至第一环形队列中。
[0090] 其中,第一环形队列可以是在公共存储区中,为写入方计算核分配的一段存储区域,用于存储写入方计算核所写入的数据。
[0091] 在本公开实施例中,可以在公共存储区中,为写入方计算核分配第一环形队列,进而由写入方计算核将第一数据写入至第一环形队列中,通过将第一数据存储于预先配置的第一环形队列,可以便于对第一数据的管理。
[0092] 在本公开的一个可选实施例中,在公共存储区中,获取为写入方计算核分配的第一环形队列,可以包括:根据第一数据的类型,在公共存储区中,获取为写入方计算核分配的第一环形队列。
[0093] 在本公开实施例中,与写入方计算核对应的第一环形队列的数量可以为多个,不同的第一环形队列,用于存储写入方计算核写入的,不同类型的数据。
[0094] 相应的,写入方计算核在将第一数据写入公共存储区之前,首先需要确定第一数据中数据的类型,进而根据第一数据的类型,在公共存储区为写入方计算核分配的全部第一环形队列中,获取与所述第一数据的类型匹配的第一环形队列。
[0095] 这样设置的好处是:通过将不同类型的数据存储于不同的第一环形队列中,既可以便于写入方计算核对不同类型的写入数据进行管理,也可以促使读取方计算核按照不同类型数据的优先级顺序,对所需读取的数据进行读取处理。
[0096] 一般来说,第一数据中可以包括多个数据项,上述多个数据项的类型一般是相同的。但是在一种极端情况下,第一数据中包括的多个数据项的类型不完全相同。
[0097] 示例性的,假设第一数据中存储2种类型的数据项,其中,数据项1‑3为类型a,数据项4‑6为类型b,进而,可以将数据项1‑3写入至与类型a对应的第一环形队列中,并将数据项4‑6写入至与类型b对应的第二环形队列中。
[0098] 在本公开的一个可选实施例中,将第一数据写入至第一环形队列中,可以包括:将第一数据写入第一环形队列中的变长环形子队列,并将第一数据的数据大小和第一数据在变长环形子队列中的存储位置,写入至第一环形队列中的定长环形子队列。
[0099] 在本公开实施例中,第一环形队列中包括有两个子队列:变长环形子队列以及定长环形子队列。其中,定长环形子队列用于存储数据大小和数据在变长环形子队列中的存储位置,而变长环形子队列用户存储数据本身。
[0100] 其中,第一数据中包括的数据项可以为一个,也可以为多个,当第一数据中包括的数据项为多个时,可以依次将每个数据项分别存储于所述变长环形子队列中的独立存储空间内,并依次将每个数据项的数据大小,以及在变长环形子队列中的存储位置,分别存储于定长环形子队列中的独立存储空间内。
[0101] 通过上述设置,可以实现对数据的高效存储,便于读取方计算核快速、准确的定位所需读取的数据。
[0102] 在本公开的一个可选实施例中,将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,可以包括:在写入方计算核对应的状态寄存器中,获取与第一数据的类型对应的第一类状态寄存器;根据第一数据中包括的数据项数量,对第一类状态寄存器中存储的预设类型的数据在第一环形队列中的写入计数值进行更新。
[0103] 其中,数据项数量可以是第一数据中的数据项总数。
[0104] 在本公开实施例中,可以先获取写入方计算核对应的状态寄存器,进而根据第一数据的数据类型,从写入方计算核对应的状态寄存器中确定与第一数据的类型对应的第一类状态寄存器,进一步确定第一数据中包括的数据项,以根据第一数据中包括的数据项数量,对第一类状态寄存器中存储的预设类型的数据在第一环形队列中的写入计数值进行更新。
[0105] 通过第一数据的类型,以及第一数据的数据项数量可以准确的更新对第一环形队列中该类型的已写入数据的写入计数值。
[0106] 示例性的,写入方计算核对应的状态寄存器中,包括有多个第一类状态寄存器,每个第一类状态寄存器用于存储写入方计算核对预设类型的数据的写入计数值。相应的,在获取第一数据的类型后,可以从全部的第一类状态寄存器,获取与该类型对应的第一类状态寄存器。进而获取该第一类状态寄存器中存储的写入计数值,例如,可以为500,当确定第一数据的数据项数量为50后,可以确定将该第一类状态寄存器中存储的写入计数值更新为500+50=550。
[0107] 在本公开的一个可选实施例中,将第一数据写入第一环形队列中的变长环形子队列,并将第一数据的数据大小和第一数据在变长环形子队列中的存储位置,写入至第一环形队列中的定长环形子队列,可以包括:在第一数据中依次获取当前数据项,并获取当前数据项在第一环形队列中的当前写入计数值;根据当前写入计数值,在定长环形子队列中,定位定长存储区域;获取变长环形子队列的当前变长存储位置,并将当前变长存储位置和当前数据项的数据大小写入定长存储区域;根据当前变长存储位置,将当前数据项写入变长环形子队列,并按照当前数据项的数据大小,更新当前变长存储位置;返回执行在第一数据中依次获取当前数据项的操作,直至完成对全部数据项的处理。
[0108] 其中,当前数据项是第一数据中的,当前需要写入第一环形队列的数据项。当前写入计数值可以是写入方计算核在公共存储区中已写入数据项的当前计数值。定长存储区域可以是定长环形子队列中用于存储消息头的区域。当前变长存储位置可以是存储新的消息体的起始位置。
[0109] 在本公开实施例中,可以从第一数据中依次获取当前数据项,并根据当前数据项的写入操作,对第一环形队列的当前写入计数值进行加一更新,进而根据更新的当前写入计数值以及定长环形子队列的定长存储区域总数,在定长环形子队列中定位定长存储区域,进一步获取变长环形子队列的当前变长存储位置,并将当前变长存储位置和当前数据项的数据大小写入定长存储区域,进一步以当前变长存储位置作为当前数据项的起始存储位置,将当前数据项写入变长环形子队列,并按照当前数据项的数据大小,更新当前变长存储位置,也即将当前数据项的末位数据在变长环形子队列的存储位置的下一个存储位置作为当前变长存储位置,进而返回执行在第一数据中依次获取当前数据项的操作,直至完成对全部数据项的处理,通过定长环形子队列以及变长环形子队列的协作,能够记录第一数据的写入情况,便于读取方计算核读取第一数据。
[0110] 在一个示例中,图2b是本公开实施例提供的另一种数据交换方法的流程图,如图2b所示,所述方法包括:
[0111] 步骤2100、在满足数据交换条件的情况下,获取待写入公共存储区的第一数据。
[0112] 步骤2110、根据第一数据的类型,在公共存储区中,获取为写入方计算核分配的第一环形队列。
[0113] 步骤2120、在第一数据中依次获取当前数据项,并获取当前数据项在第一环形队列中的当前写入计数值。
[0114] 步骤2130、根据当前写入计数值,在定长环形子队列中,定位定长存储区域。
[0115] 步骤2140、获取变长环形子队列的当前变长存储位置,并将当前变长存储位置和当前数据项的数据大小写入定长存储区域。
[0116] 步骤2150、根据当前变长存储位置,将当前数据项写入变长环形子队列,并按照当前数据项的数据大小,更新当前变长存储位置。
[0117] 步骤2160、检测是否完成对第一数据中全部数据项的处理,若是,执行步骤2170;否则,返回执行步骤2120。
[0118] 步骤2170、在可见状态寄存器列表中,识别与写入方计算核对应的状态寄存器。
[0119] 步骤2180、在写入方计算核对应的状态寄存器中,获取与第一数据的类型对应的第一类状态寄存器。
[0120] 步骤2190、根据第一数据中包括的数据项数量,对第一类状态寄存器中存储的预设类型的数据在第一环形队列中的写入计数值进行更新。
[0121] 步骤2200、在可见中断寄存器列表中,识别与读取方计算核对应的中断寄存器,并触发中断寄存器产生中断信号。
[0122] 本发明实施例的技术方案,通过在满足数据交换条件的情况下,获取待写入公共存储区的第一数据,进而根据第一数据的类型,在公共存储区中,获取为写入方计算核分配的第一环形队列,并在第一数据中依次获取当前数据项,获取当前数据项在第一环形队列中的当前写入计数值,进而根据当前写入计数值,在定长环形子队列中,定位定长存储区域。进一步,获取变长环形子队列的当前变长存储位置,并将当前变长存储位置和当前数据项的数据大小写入定长存储区域,根据当前变长存储位置,将当前数据项写入变长环形子队列,并按照当前数据项的数据大小,更新当前变长存储位置,检测是否完成对第一数据中全部数据项的处理,若是,则在可见状态寄存器列表中,识别与写入方计算核对应的状态寄存器;否则,返回执行在第一数据中依次获取当前数据项,并获取当前数据项在第一环形队列中的当前写入计数值。在写入方计算核对应的状态寄存器中,获取与第一数据的类型对应的第一类状态寄存器,根据第一数据中包括的数据项数量,对第一类状态寄存器中存储的预设类型的数据在第一环形队列中的写入计数值进行更新,在可见中断寄存器列表中,识别与读取方计算核对应的中断寄存器,并触发中断寄存器产生中断信号。本公开方案无需构建复杂的集中式或分布式同步单元,仅通过配置简单的中断寄存器和状态寄存器,即可实现复杂的数据同步技术,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0123] 在一个示例中,图3a是本公开实施例提供的又一种数据交换方法的流程图,本实施例可适用于低延时数据交换的情况,该方法可以由数据交换装置来执行,该装置可以由软件和硬件中的至少一项的方式来实现,并一般可集成在如本公开任一实施例所述多核电路的读取方计算核中。相应的,如图3a所示,该方法包括如下操作:
[0124] 步骤310、在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态。
[0125] 其中,中断信号是写入方计算核在满足数据交换条件的情况下,将第二数据写入公共存储区后触发读取方计算核对应的中断寄存器产生的。
[0126] 在本公开实施例中,当前计算核作为读取方计算核时,写入方计算核将第二数据写入公共存储区后,也即写入方计算核在满足数据交换条件的情况下,可以进一步触发当前计算核对应的中断寄存器产生中断信号。在当前计算核对应的中断寄存器产生中断信号时,当前计算核可以读取本核的状态寄存器记录的公共存储区的数据读写状态。
[0127] 在本公开的一个可选实施例中,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态,包括:在可见状态寄存器列表中,识别与读取方计算核对应的第一状态寄存器,并识别与写入方计算核对应的第二状态寄存器;获取与第一状态寄存器和第二状态寄存器分别对应的数据读写状态。
[0128] 其中,第一状态寄存器可以是记录读取方计算核的数据读写状态的状态寄存器。第二状态寄存器可以是记录写入方计算核数据读写状态的状态寄存器。
[0129] 在本公开实施例中,在获取到可见状态寄存器列表后,可以根据可见状态寄存器列表,识别出属于当前计算核(也即读取方计算核)的第一状态寄存器,并识别属于写入方计算核的第二状态寄存器,进而分别对第一状态寄存器和第二状态寄存器存储的数据进行识别,得到与第一状态寄存器和第二状态寄存器分别对应的数据读写状态,也即得到当前计算核的数据读写状态和写入方计算核的数据读写状态,从而能够准确判断计算核的数据读写状态。
[0130] 步骤320、根据获取的数据读写状态,从公共存储区读取写入方计算核写入的第二数据。
[0131] 在本公开实施例中,读取方计算核可以根据状态寄存器存储的数据读写状态,从公共存储区读取写入方计算核写入的第二数据。
[0132] 本公开实施例的技术方案,通过读取方计算核在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态,进而根据获取的数据读写状态,从公共存储区读取写入方计算核写入的第二数据,以实现读取方计算核对写入方计算核写入的第二数据的读取,不需要复杂的电路以及总线结构,仅通过状态寄存器以及中断寄存器即可完成计算核的数据交互,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0133] 在本公开的一个可选实施例中,根据获取的数据读写状态,从公共存储区读取写入方计算核写入的第二数据,可以包括:在公共存储区中,获取与写入方计算核对应的第二环形队列;根据数据读写状态,从第二环形队列中读取写入方计算核写入的第二数据。
[0134] 其中,第二环形队列可以是公共存储区中,为写入方计算核分配的一段存储区域,用于写入方计算核写入所需进行核间交换的数据。
[0135] 在本公开实施例中,读取方计算核需要先确定在公共存储区为写入方计算核分配的第二环形队列,进而获取本核(也即读取方计算核)的数据读取状态,以及写入方计算核的第二数据的写入状态,进一步从第二环形队列中读取写入方计算核写入的第二数据,从而准确定位需要读取的第二数据。
[0136] 在本公开的一个可选实施例中,根据数据读写状态,从第二环形队列中读取写入方计算核写入的第二数据,可以包括:按照各第二环形队列所存储数据的数据处理优先级,在各第二环形队列中,依次获取当前队列;在数据读写状态中,获取读取方计算核针对当前队列的目标数据读取状态,和写入方计算核针对当前队列的目标数据写入状态;根据目标数据读取状态和目标数据写入状态,确定当前队列中是否存储第二数据;若是,则从当前队列中,读取第二数据;若否,则返回执行依次获取当前队列的操作。
[0137] 其中,当前队列可以是未处理的各第二环形队列中,存储有数据处理最高优先级的数据的队列。目标数据读取状态可以是读取方计算核对当前队列中数据项的读取状态。目标数据写入状态可以是写入方计算核在当前队列中针对数据项的写入状态。
[0138] 在本公开实施例中,读取方计算核可以先确定各第二环形队列存储数据的数据处理优先级,进而按照各第二环形队列所存储数据的数据处理优先级(如优先级由高到低的顺序),在各第二环形队列中,依次获取当前队列,进而根据获取的数据读写状态,确定本核针对当前队列的目标数据读取状态,和写入方计算核针对当前队列的目标数据写入状态。读取方计算核可以进一步对目标数据读取状态和目标数据写入状态进行分析,以确定写入方计算核在当前队列是否存储了第二数据,也即当前队列是否写入新数据,如果写入方计算核在当前队列存储了第二数据,则根据目标数据读取状态和目标数据写入状态读取第二数据。如果写入方计算核未在当前队列存储第二数据,则返回执行依次获取当前队列的操作,从而准确定位需要读取的第二数据。
[0139] 在本公开的一个可选实施例中,在数据读写状态中,获取读取方计算核针对当前队列的目标数据读取状态,和写入方计算核针对当前队列的目标数据写入状态,可以包括:根据当前队列中存储数据的类型,在与读取方计算核对应的第一状态寄存器中,获取目标第二类状态寄存器,并在与写入方计算核对应的第二状态寄存器中,获取目标第一类状态寄存器;获取目标第二类状态寄存器中存储的读取方计算核对当前队列的目标读取计数值;获取目标第一类状态寄存器中存储的写入方计算核对当前队列的目标写入计数值。
[0140] 其中,目标第二类状态寄存器可以是与读取方计算核对应的第一状态寄存器中,用于记录所属的读取方计算核对写入方计算核中当前队列存储数据的读取计数值的状态寄存器。目标第一类状态寄存器可以是与写入方计算核对应的第二状态寄存器中,用于存储所属的写入方计算核在当前队列的写入数据的写入计数值的状态寄存器。目标读取计数值可以是读取方计算核对当前队列数据项的读取计数值。目标写入计数值可以是写入方计算核在当前队列写入数据项的写入计数值。
[0141] 在本公开实施例中,读取方计算核可以按照当前队列中存储数据的类型,在与读取方计算核对应的第一状态寄存器中,获取目标第二类状态寄存器,并在与写入方计算核对应的第二状态寄存器中,获取目标第一类状态寄存器,进一步读取目标第二类状态寄存器中存储的读取方计算核对当前队列的目标读取计数值,以及目标第一类状态寄存器中存储的写入方计算核对当前队列的目标写入计数值,从而能够确定本核的数据读取状态以及写入方计算核的数据写入状态,便于本核准确定位需要读取的第二数据。
[0142] 在本公开的一个可选实施例中,根据目标数据读取状态和目标数据写入状态,确定当前队列中是否存储第二数据,包括:如果确定目标读取计数值小于目标写入计数值,则确定当前队列中存储第二数据。
[0143] 在本公开实施例中,读取方计算核可以将获取的目标读取计数值与目标写入计数值进行比较,如果目标读取计数值小于目标写入计数值,则表明当前队列中存储第二数据,如果目标读取计数值等于目标写入计数值,则表明当前队列中未存储第二数据,也即仅需比较目标读取计数值以及目标写入计数值,就可以确定当前队列中是否存储第二数据,而无需复杂的数据分析,简化算法复杂度。
[0144] 在本公开的一个可选实施例中,从当前队列中,读取第二数据,包括:对目标第二类状态寄存器中的目标读取计数值进行加一更新;根据更新后的目标读取计数值,在当前队列的定长环形子队列中,定位历史存储区域;在历史存储区域中,获取历史变长存储位置以及目标数据大小;根据历史变长存储位置以及目标数据大小,在当前队列的变长环形子队列中,读取第二数据中的一个数据项;如果确定目标读取计数值小于目标写入计数值,则返回执行对目标第二类状态寄存器中的目标读取计数值进行加一更新的操作,直至完成对第二数据的完整读取。
[0145] 其中,历史存储区域是由读取计数值确定的,读取方计算核需要读取的数据项的前一个数据项的相关信息,在定长环形子队列的存储区域。历史变长存储位置可以是变长环形子队列中,存储读取方计算核需要读取的数据项的前一个数据项的起始位置。目标数据可以是与历史存储区域匹配的写入方计算核写入公共存储区的数据项。
[0146] 在本公开实施例中,读取方计算核可以对目标第二类状态寄存器中的目标读取计数值进行加一更新,根据更新后的目标读取计数值以及定长环形子队列的定长存储区域总数,在当前队列的定长环形子队列中,定位历史存储区域,进一步解析历史存储区域中的数据,得到历史变长存储位置以及目标数据大小进行求和,进而根据求和结果在当前队列的变长环形子队列中,读取第二数据中的一个数据项。在读取第二数据中的一个数据项之后,读取方计算核可以进一步将更新后的目标读取计数值与目标写入计数值进行比较,如果目标读取计数值小于目标写入计数值,则返回执行对目标第二类状态寄存器中的目标读取计数值进行加一更新的操作,直至完成对第二数据的完整读取,从而实现对所需读取的第二数据中数据项的自动读取。
[0147] 在本公开实施例中,数据交换方法,由多核电路中的读取方计算核执行,还可以包括:预先注册不同类型的处理函数,用于处理不同类型的数据;在从公共存储区读取写入方计算核写入的第二数据之后,还包括:根据第二数据的类型,调用匹配的处理函数进行数据处理。
[0148] 其中,处理函数可以是能够对公共存储区的数据进行数据处理的函数,本公开实施例对处理函数的类型不做限定,只要能实现计算核的所需功能即可。
[0149] 在本公开实施例中,可以根据读取方计算核需要实现的功能预先注册不同类型的处理函数,以基于不同的处理函数对公共存储区的不同类型的数据进行处理,具体的,读取方计算核可以从公共存储区读取写入方计算核写入的第二数据,确定第二数据的数据类型,进而调用与第二数据的数据类型匹配的处理函数,从而通过处理函数对第二数据进行处理,以实现当前计算核的相应功能。通过处理函数替代传统的功能性编码可以防止由于编码人员无法得知全局编码信息,而导致的代码无法准确处理数据的情况。
[0150] 可选的,读取方计算核通过注册的方式将处理函数注册到消息调度器。消息调度器可以根据第二数据的数据类型调用相应的处理函数。消息头中保存有消息体的CRC校验值,使用者可以根据CRC校验值判断当前消息体中的消息体是否被覆盖。注册到CORE1(计算核1)消息调度系统中的处理函数可以参见图4。
[0151] 在一个示例中,图3b是本公开实施例提供的另一种数据交换方法的流程图,如图3b所示,所述方法包括:
[0152] 步骤3100、在读取方计算核对应的中断寄存器产生中断信号的情况下,在可见状态寄存器列表中,识别与读取方计算核对应的第一状态寄存器,并识别与写入方计算核对应的第二状态寄存器。
[0153] 步骤3110、获取与第一状态寄存器和第二状态寄存器分别对应的数据读写状态。
[0154] 步骤3120、在公共存储区中,获取与写入方计算核对应的第二环形队列。
[0155] 步骤3130、按照各第二环形队列所存储数据的数据处理优先级,在各第二环形队列中,依次获取当前队列;
[0156] 步骤3140、根据当前队列中存储数据的类型,在与读取方计算核对应的第一状态寄存器中,获取目标第二类状态寄存器,并在与写入方计算核对应的第二状态寄存器中,获取目标第一类状态寄存器;
[0157] 步骤3150、获取目标第二类状态寄存器中存储的读取方计算核对当前队列的目标读取计数值。
[0158] 步骤3160、获取目标第一类状态寄存器中存储的写入方计算核对当前队列的目标写入计数值。
[0159] 步骤3170、判断目标读取计数值是否小于目标写入计数值,若是,则执行步骤3180;否则,返回执行步骤3130。
[0160] 步骤3180、从当前队列中,读取第二数据。
[0161] 本发明实施例的技术方案,通过在读取方计算核对应的中断寄存器产生中断信号的情况下,在可见状态寄存器列表中,识别与读取方计算核对应的第一状态寄存器,并识别与写入方计算核对应的第二状态寄存器,进而获取与第一状态寄存器和第二状态寄存器分别对应的数据读写状态,从而在公共存储区中,获取与写入方计算核对应的第二环形队列,并按照各第二环形队列所存储数据的数据处理优先级,在各第二环形队列中,依次获取当前队列,以根据当前队列中存储数据的类型,在与读取方计算核对应的第一状态寄存器中,获取目标第二类状态寄存器,并在与写入方计算核对应的第二状态寄存器中,获取目标第一类状态寄存器。进一步,获取目标第二类状态寄存器中存储的读取方计算核对当前队列的目标读取计数值,并获取目标第一类状态寄存器中存储的写入方计算核对当前队列的目标写入计数值,判断目标读取计数值是否小于目标写入计数值,若是,则从当前队列中,读取第二数据;否则返回执行按照各第二环形队列所存储数据的数据处理优先级的操作。本公开方案无需构建复杂的集中式或分布式同步单元,仅通过配置简单的中断寄存器和状态寄存器,即可实现复杂的数据同步技术,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0162] 在本公开的一个示例中,双核数字信号处理芯片可以设计2个中断寄存器、8个状态寄存器,且所有的寄存器对双核均可见,方便软件设置通讯模式。C0RE0(计算核0)需要通知CORE1(计算核1),则设置IPC中断寄存器1触发C0RE1产生IPC中断;C0RE1需要通知C0RE0,则设置IPC中断寄存器0触发C0RE0产生IPC中断。双核在触发IPC中断之前,会把需要传递的数据写入公共的SRAM(静态随机存取寄存器)区域,也即公共存储区。双核数字信号处理芯片需要进行数据同步时,可以会将数据打包成消息的形式,放入环形队列。上行链路和下行链路分别持有自己的消息队列。消息队列为环形队列,有缓存消息的功能,以便协调双核不同的处理数据能力,双核数字信号处理芯片的数据交换示意图如图5所示。
[0163] 双核数字信号处理芯片通信是双工的,双方同时作为消息的生产者和消费者,各自持有自己和对方的第一已写入计数值以及已读取计数值。计算核0产生新数据,并向计算核1发送时(图中的上行链路),计算核0的第一已写入计数值会自增1,并将第一已写入计数值的值填入IPC状态寄存器0,然后触发IPC中断,退出数据处理程序,进而通知计算核1有新消息需要处理。计算核1进入IPC中断服务程序后,从IPC状态寄存器0读出计算核0产生的第一已写入计数值,退出IPC中断服务程序,然后判断第一已写入计数值与已读取计数值(计算核1保存的)是否相等,如果第一已写入计数值与已读取计数值不相等,计算核1将不断处理未处理的数据,已读取计数值加1,直到所有的数据都处理完毕,计算核0的数据处理过程参见图6,计算核1的数据处理过程参见图7。
[0164] 传递消息时,数据的长度会因数据不同而占用长度不等的内存空间。为了提高内存空间的利用率,通过环形队列存储数据,以支持变长数据的消息结构。消息由消息头和消息体组成,消息头结构固定,消息体长度可变。消息头中保存了消息体在变长环形子队列中的变长存储位置和数据大小。现代处理器为了协调CPU运行速度和外设IO速度之前的巨大差距往往会设计多级缓存,鉴于cacheline长度的因素,为了方便cache回写和刷新,消息体长度设计为64B*N。消息头和消息体分别存放在SRAM,由其中一个DSP核心维护。消息头条数和消息体总长度可配置。消息头和消息体均为环形队列。消息结构在环形队列中的分布如图8所示,所示,定长环形子队列的第10条数据存储的是在变长环形子队列中存储的第10个消息体的存储的起始位置(0x60050000)以及消息体的大小(40B,还需补齐24B),定长环形子队列的第11条数据存储的是在变长环形子队列中存储的第11个消息体的存储的起始位置(0x60050020)以及消息体的大小(85B,还需补齐43B),定长环形子队列的第12条数据存储的是在变长环形子队列中存储的第12个消息体的存储的起始位置(0x60050060)以及消息体的大小(122B,还需补齐6B)。
[0165] 双核数字信号处理芯片在进行数据交换之前,会在消息头和消息体约定数据在公共存储区中存储的起始地址。读取方计算核就可以根据写入方计算核的第一已写入计数值获取到消息头信息,然后从消息头信息中读取消息体的信息,如消息体位置(变长存储位置),数据体大小等等。
[0166] 本公开实施例还提供了一种数据交换装置,由多核电路中的写入方计算核执行,用于执行上述的数据交换方法。
[0167] 图9是本公开实施例提供的一种数据交换装置的示意图,如图9所示,该装置包括:第一数据写入模块410以及中断信号触发模块420,其中:
[0168] 第一数据写入模块410,用于在满足数据交换条件的情况下,将第一数据写入公共存储区;
[0169] 中断信号触发模块420,用于触发读取方计算核对应的中断寄存器产生中断信号;
[0170] 其中,所述中断信号用于指示读取方计算核获取所对应状态寄存器记录的公共存储区的数据读写状态,并根据所述数据读写状态从公共存储区读取所述第一数据。
[0171] 本公开实施例的技术方案,通过写入方计算核在满足数据交换条件的情况下,将第一数据写入公共存储区,触发读取方计算核对应的中断寄存器产生中断信号,实现读取方计算核对第一数据的读取,不需要复杂的电路以及总线结构,仅通过状态寄存器以及中断寄存器即可完成计算核的数据交互,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0172] 可选的,中断信号触发模块420,具体用于将与写入方计算核对应的状态寄存器记录的公共存储区的数据读写状态进行更新,并触发读取方计算核对应的中断寄存器产生中断信号。
[0173] 可选的,中断信号触发模块420,具体用于在可见状态寄存器列表中,识别与写入方计算核对应的状态寄存器,并对所述状态寄存器记录的公共存储区的数据读写状态进行更新;在可见中断寄存器列表中,识别与读取方计算核对应的中断寄存器,并触发所述中断寄存器产生中断信号。
[0174] 可选的,第一数据写入模块410,具体用于在所述公共存储区中,获取为写入方计算核分配的第一环形队列;将所述第一数据写入至所述第一环形队列中。
[0175] 可选的,第一数据写入模块410,具体用于根据所述第一数据的类型,在所述公共存储区中,获取为写入方计算核分配的第一环形队列。
[0176] 可选的,第一数据写入模块410,具体用于将所述第一数据写入所述第一环形队列中的变长环形子队列,并将所述第一数据的数据大小和所述第一数据在所述变长环形子队列中的存储位置,写入至所述第一环形队列中的定长环形子队列。
[0177] 可选的,中断信号触发模块420,具体用于在写入方计算核对应的状态寄存器中,获取与所述第一数据的类型对应的第一类状态寄存器;根据所述第一数据中包括的数据项数量,对所述第一类状态寄存器中存储的所述预设类型的数据在第一环形队列中的写入计数值进行更新。
[0178] 可选的,第一数据写入模块410,具体用于在所述第一数据中依次获取当前数据项,并获取所述当前数据项在所述第一环形队列中的当前写入计数值;根据所述当前写入计数值,在所述定长环形子队列中,定位定长存储区域;获取所述变长环形子队列的当前变长存储位置,并将所述当前变长存储位置和所述当前数据项的数据大小写入所述定长存储区域;根据所述当前变长存储位置,将所述当前数据项写入变长环形子队列,并按照当前数据项的数据大小,更新当前变长存储位置;返回执行在第一数据中依次获取当前数据项的操作,直至完成对全部数据项的处理。
[0179] 本公开实施例还提供了一种数据交换装置,由多核电路中的读取方计算核执行,用于执行上述的数据交换方法。
[0180] 图10是本公开实施例提供的另一种数据交换装置的示意图,如图10所示,该装置包括:数据读写状态获取模块510以及第二数据读取模块520,其中:
[0181] 数据读写状态获取模块510,用于在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态;其中,所述中断信号是写入方计算核在满足数据交换条件的情况下,将第二数据写入公共存储区后触发读取方计算核对应的中断寄存器产生的;
[0182] 第二数据读取模块520,用于根据获取的所述数据读写状态,从公共存储区读取写入方计算核写入的第二数据。
[0183] 本公开实施例的技术方案,通过读取方计算核在读取方计算核对应的中断寄存器产生中断信号的情况下,获取读取方计算核对应的状态寄存器记录的公共存储区的数据读写状态,进而根据获取的数据读写状态,从公共存储区读取写入方计算核写入的第二数据,以实现读取方计算核对写入方计算核写入的第二数据的读取,不需要复杂的电路以及总线结构,仅通过状态寄存器以及中断寄存器即可完成计算核的数据交互,降低了硬件设计复杂性,减少了芯片的计算时延,保证了芯片整体频率的提升,可以广泛适用于对功耗以及成本敏感的微控制单元领域。
[0184] 可选的,数据读写状态获取模块510,具体用于在可见状态寄存器列表中,识别与读取方计算核对应的第一状态寄存器,并识别与写入方计算核对应的第二状态寄存器;获取与所述第一状态寄存器和所述第二状态寄存器分别对应的数据读写状态。
[0185] 可选的,第二数据读取模块520,具体用于在所述公共存储区中,获取与写入方计算核对应的第二环形队列;根据所述数据读写状态,从所述第二环形队列中读取所述写入方计算核写入的第二数据。
[0186] 可选的,第二数据读取模块520,具体用于按照各第二环形队列所存储数据的数据处理优先级,在各第二环形队列中,依次获取当前队列;在所述数据读写状态中,获取读取方计算核针对所述当前队列的目标数据读取状态,和写入方计算核针对所述当前队列的目标数据写入状态;根据所述目标数据读取状态和所述目标数据写入状态,确定所述当前队列中是否存储所述第二数据;若是,则从所述当前队列中,读取所述第二数据;若否,则返回执行依次获取当前队列的操作。
[0187] 可选的,第二数据读取模块520,具体用于根据当前队列中存储数据的类型,在与读取方计算核对应的第一状态寄存器中,获取目标第二类状态寄存器,并在与所述写入方计算核对应的第二状态寄存器中,获取目标第一类状态寄存器;获取所述目标第二类状态寄存器中存储的读取方计算核对当前队列的目标读取计数值;获取所述目标第一类状态寄存器中存储的写入方计算核对当前队列的目标写入计数值。
[0188] 可选的,第二数据读取模块520,具体用于如果确定所述目标读取计数值小于所述目标写入计数值,则确定所述当前队列中存储所述第二数据。
[0189] 可选的,第二数据读取模块520,具体用于对所述目标第二类状态寄存器中的目标读取计数值进行加一更新;根据更新后的目标读取计数值,在当前队列的定长环形子队列中,定位历史存储区域;在历史存储区域中,获取历史变长存储位置以及目标数据大小;根据历史变长存储位置以及目标数据大小,在当前队列的变长环形子队列中,读取第二数据中的一个数据项;如果确定所述目标读取计数值小于所述目标写入计数值,则返回执行对所述目标第二类状态寄存器中的目标读取计数值进行加一更新的操作,直至完成对第二数据的完整读取。
[0190] 可选的,数据交换装置还包括处理函数注册模块,用于预先注册不同类型的处理函数,用于处理不同类型的数据。
[0191] 可选的,数据交换装置还包括数据处理模块,用于根据所述第二数据的类型,调用匹配的处理函数进行数据处理。
[0192] 根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0193] 图11示出了可以用来实施本公开的实施例的示例电子设备的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0194] 如图11所示,设备600包括多核电路601,其可以根据存储在ROM(只读存储器)602中的计算机程序或者从存储单元608加载到RAM(随机访问存储器)603中的计算机程序,来执行各种适当的动作和处理。在RAM 603中,还可存储设备600操作所需的各种程序和数据。多核电路601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。具体的,ROM 602以及存储单元608可以存储被多核电路601执行的数据交换方法。多核电路601中的计算核被配置为:在满足数据交换条件的情况下,将第一数据写入公共存储区,并触发其他计算核对应的中断寄存器产生中断信号;或者,在该计算核对应的中断寄存器产生中断信号的情况下,根据该计算核对应的状态寄存器记录的公共存储区的数据读写状态,从公共存储区读取其他计算核写入的第二数据。
[0195] 设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0196] 多核电路601可以是各种具有处理和计算能力的通用和/或专用处理组件。多核电路601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算核、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。多核电路601执行上文所描述的各个方法和处理,例如数据交换方法。例如,在一些实施例中,数据交换方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到设备600上。当计算机程序加载到RAM 603并由多核电路601执行时,可以执行上文描述的数据交换方法的一个或多个步骤。备选地,在其他实施例中,多核电路601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据交换方法。
[0197] 本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0198] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0199] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0200] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0201] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
[0202] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0203] 应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0204] 上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。