CN117785767B - 消息同步方法、***以及相关装置 - Google Patents
消息同步方法、***以及相关装置 Download PDFInfo
- Publication number
- CN117785767B CN117785767B CN202410213545.4A CN202410213545A CN117785767B CN 117785767 B CN117785767 B CN 117785767B CN 202410213545 A CN202410213545 A CN 202410213545A CN 117785767 B CN117785767 B CN 117785767B
- Authority
- CN
- China
- Prior art keywords
- message
- source
- information
- thread
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 84
- 230000015654 memory Effects 0.000 claims abstract description 174
- 230000001360 synchronised effect Effects 0.000 claims abstract description 73
- 230000004044 response Effects 0.000 claims description 20
- 230000005540 biological transmission Effects 0.000 claims description 17
- 238000012545 processing Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 9
- 230000003213 activating effect Effects 0.000 claims description 6
- 238000010200 validation analysis Methods 0.000 claims description 5
- 238000012790 confirmation Methods 0.000 claims description 4
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 238000004891 communication Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Landscapes
- Multi Processors (AREA)
Abstract
本申请提供了一种消息同步方法、***以及相关装置。方法应用于消息同步***的DMA引擎,***还包括多个线程单元;方法包括:根据任一线程单元的CPU的消息同步请求的源线程信息和目标线程信息在多个线程单元中确定源线程单元和目标线程单元;生成消息获取请求发送至源线程单元的CPU,以获取源消息;发送源消息至目标线程单元的CPU,并生成第一消息同步标志发送至源线程单元的CPU,以确认源线程单元存储的源消息已同步在目标线程单元中;在接收到目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至目标线程单元的CPU,以确认目标线程单元存储的源消息已同步在源线程单元中。本方法能减轻对共享内存的依赖,降低了扩展***的成本与难度。
Description
技术领域
本申请实施例涉及数据处理技术领域,更具体地涉及一种消息同步方法、***以及相关装置。
背景技术
目前,多线程处理作为一种可以充分利用计算机资源,使计算任务并行化,提升***性能的技术,已在计算机,大数据,分布式***等领域得到了广泛的使用。
在多线程处理过程中,各线程之间往往需要同步的操作以适当等待其他线程,从而保证操作和数据的正确性。
传统的同步技术为一种基于锁的方法,各线程或组件的协作媒介为共享内存,需要同步的线程之间往往要等待各线程的所有任务处理完毕后才可完成同步工作。但当线程数量较多时,如分布式***,对共享内存的速度与容量也会有更高的要求,但单块共享内存的容量无法无限增大,过大的内存也会减慢内存的读写速度,因此该方法难以进行大规模的扩展,不利于分布式***的开发。
因此,亟需设计一种全新的解决方案,用于克服多线程处理过程中各线程之间消息同步带来的技术问题,减轻多线程处理过程中对共享内存的依赖。
发明内容
本申请实施例提供了一种改进的消息同步方法、***以及相关装置,用以实现多线程处理过程中DMA引擎与各线程CPU之间的消息同步,减轻多线程处理过程中对共享内存的依赖,降低了扩展***的成本与难度。
本申请的实施例期望提供一种消息同步方法、***以及相关装置。
在本申请的第一方面中,提供了一种消息同步方法,应用于消息同步***的DMA引擎,所述消息同步***还包括多个线程单元,每个线程单元包括中央处理器CPU;所述方法包括:
接收来自任一所述线程单元的CPU的消息同步请求;其中,所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;
根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息;
发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;
在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中。
在本申请的第二方面中,提供了一种DMA引擎,所述DMA引擎应用于实现如第一方面中任一所述的消息同步方法;所述DMA引擎包括:
收发模块,被配置为接收来自消息同步***的任一线程单元的CPU的消息同步请求;所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
确认模块,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;
生成模块,被配置为根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息;
发送模块,被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;
完成模块,被配置为在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中。
在本申请的第三方面中,提供了一种消息同步***,所述***包括多个线程单元和应用于如权利要求1至11任一消息同步方法所述的DMA引擎,每个线程单元包括中央处理器CPU;其中,
所述CPU,被配置为向所述DMA引擎发送消息同步请求;其中,所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
所述DMA引擎,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求;
所述CPU,还被配置为响应所述消息获取请求发送源消息至所述DMA引擎;
所述DMA引擎,还被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;
所述CPU,还被配置为在接收到所述源消息时,在所述源消息写入完成之后发送写入完成信息至所述DMA引擎;或,在接收到所述第一消息同步标志时,将所述第一消息同步标志添加至所述源消息对应的内存区域;
所述DMA引擎,还被配置为生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中;
所述CPU,还被配置为在接收到所述第二消息同步标志后添加至所述源消息对应的内存区域。
在本申请的第四方面中,提供了一种计算机可读存储介质,其包括指令,当其在计算机上运行时,使得计算机执行第一方面中所述的消息同步方法。
在本申请的第五方面中,提供了一种计算设备,被配置为:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现第一方面中所述的消息同步方法。
本申请实施例提供的技术方案中,提供了一种消息同步方法,应用于消息同步***的DMA引擎,消息同步***还包括多个线程单元,每个线程单元包括中央处理器CPU;首先,DMA引擎接收来自任一线程单元的CPU的消息同步请求;其中,消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息。其次,DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元。然后,DMA引擎根据源消息信息生成消息获取请求,向源线程单元的CPU发送消息获取请求,以获取源线程单元的CPU响应消息获取请求发送的源消息。再然后,DMA引擎发送源消息至目标线程单元的CPU,并生成第一消息同步标志发送至源线程单元的CPU;第一消息同步标志用于确认源线程单元存储的源消息已同步在目标线程单元中。最终,DMA引擎在接收到目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至目标线程单元的CPU;第二消息同步标志用于确认目标线程单元存储的源消息已同步在源线程单元中。
相对于现有多线程处理过程中要等待各线程的所有任务处理完毕后才可完成同步工作的方式,本申请实施例中通过DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元,再从源线程单元中获取源消息同步至目标线程单元中,多个线程单元之间通过消息传达各自内存中的数据情况,从而达到通信与协作的目的,减轻了对共享内存的依赖,降低了扩展***的成本与难度,有效提升***同步的效率。
附图说明
通过参考附图阅读下文的详细描述,本申请示例性实施例的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本申请的若干实施例,其中:
图1示意性地示出了根据本申请中消息同步方法的一种流程示意图;
图2示意性地示出了根据本申请中消息同步***的一种结构示意图;
图3示意性地示出了根据本申请中目标线程单元确认方法的一种原理示意图;
图4示意性地示出了根据本申请中数据冒险隐患确认方法的一种原理示意图;
图5示意性地示出了根据本申请中消息同步方法的一种原理示意图;
图6示意性地示出了根据本申请中消息同步方法的再一种原理示意图;
图7示意性地示出了根据本申请中消息同步方法的的一种时钟顺序示意图;
图8示意性地示出了根据本申请中消息同步***的一种交互示意图;
图9示意性地示出了根据本申请中消息同步装置的一种结构示意图;
图10示意性地示出了根据本申请中计算设备的一种结构示意图;
图11示意性地示出了根据本申请中服务器的一种结构示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施例来描述本申请的原理和精神。应当理解,给出这些实施例仅仅是为了使本领域技术人员能够更好地理解进而实现本申请,而并非以任何方式限制本申请的范围。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本申请的实施例可以实现为一种***、装置、设备、***或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
目前,多线程处理作为一种可以充分利用计算机资源,使计算任务并行化,提升***性能的技术,已在计算机,大数据,分布式***等领域得到了广泛的使用。
在多线程处理过程中,各线程之间往往需要同步的操作以适当等待其他线程,从而保证操作和数据的正确性。
传统的同步技术为一种基于锁的方法,各线程或组件的协作媒介为共享内存,需要同步的线程之间往往要等待各线程的所有任务处理完毕后才可完成同步工作。但当线程数量较多时,如分布式***,对共享内存的速度与容量也会有更高的要求,但单块共享内存的容量无法无限增大,过大的内存也会减慢内存的读写速度,因此该方法难以进行大规模的扩展,不利于分布式***的开发。
因此,亟需设计一种全新的解决方案,用于克服多线程处理过程中各线程之间消息同步带来的技术问题,减轻多线程处理过程中对共享内存的依赖。
为了克服上述技术问题,根据本申请的实施例,提出了一种消息同步方法、***以及相关装置。
本申请实施例提供的技术方案中,提供了一种消息同步方法,应用于消息同步***的DMA引擎,消息同步***还包括多个线程单元,每个线程单元包括中央处理器CPU;首先,DMA引擎接收来自任一线程单元的CPU的消息同步请求;其中,消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息。其次,DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元。然后,DMA引擎根据源消息信息生成消息获取请求,向源线程单元的CPU发送消息获取请求,以获取源线程单元的CPU响应消息获取请求发送的源消息。再然后,DMA引擎发送源消息至目标线程单元的CPU,并生成第一消息同步标志发送至源线程单元的CPU;第一消息同步标志用于确认源线程单元存储的源消息已同步在目标线程单元中。最终,DMA引擎在接收到目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至目标线程单元的CPU;第二消息同步标志用于确认目标线程单元存储的源消息已同步在源线程单元中。
相对于现有多线程处理过程中要等待各线程的所有任务处理完毕后才可完成同步工作的方式,本申请实施例中通过DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元,再从源线程单元中获取源消息同步至目标线程单元中,多个线程单元之间通过消息传达各自内存中的数据情况,从而达到通信与协作的目的,减轻了对共享内存的依赖,降低了扩展***的成本与难度,有效提升***同步的效率。
作为一种可选的实施方式,消息同步装置的数量是一个,也可以是多个。一些示例中,消息同步装置可以实现为部署在芯片内部的逻辑单元;另一些示例中,也可以是以其他形式部署在数字电路结构中,本申请不作限制。例如,消息同步装置可以设置在各种设备(如终端设备、服务器)的处理器件中。
在本文中,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面结合具体应用场景,参考图1来描述根据本申请示例性实施例的用于通信的方法。需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施例在此方面不受任何限制。相反,本申请的实施例可以应用于适用的任何场景。
下面结合以下实施例对消息同步方法的执行过程进行说明。图1为本发明实施例提供的一种消息同步方法的流程图。该方法应用于DMA引擎。如图1所示,该方法包括如下步骤:
步骤101,接收来自任一线程单元的CPU的消息同步请求;其中,消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息。
步骤102,根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元。
步骤103,根据源消息信息生成消息获取请求,向源线程单元的CPU发送消息获取请求,以获取源线程单元的CPU响应消息获取请求发送的源消息。
步骤104,发送源消息至目标线程单元的CPU,并生成第一消息同步标志发送至源线程单元的CPU;第一消息同步标志用于确认源线程单元存储的源消息已同步在目标线程单元中。
步骤105,在接收到目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至目标线程单元的CPU;第二消息同步标志用于确认目标线程单元存储的源消息已同步在源线程单元中。
首先,在介绍上述步骤101至105的具体实施方式之前,先介绍本申请实施例所涉及的执行主体,即DMA引擎。
如图2所示,图2是本申请实施例提供的一种消息同步***的示意性框图。DMA引擎是一个硬件组件,用于在无需CPU介入的场景下,完成存储器与外部设备之间的消息同步,以及存储器之间的消息同步。具体地,采用DMA引擎在无需CPU介入的场景下,可以实现外部设备和存储器之间、或者存储器与存储器之间的高速消息获取与传输,不仅有效提升硬件设备的消息同步效率,还有助于避免CPU在数据传输方面应用额外算力,减少对CPU计算资源的消耗,提高了CPU指令的执行效率。
其中,本申请实施例所涉及的外部设备可以是外部设备的寄存器(DataRegister,DR),例如ADC的数据寄存器、串口的数据寄存器等。存储器,包括但不限于运行内存(如SRAM)和程序存储器(如Flash),用于存储变量、数组、程序代码的存储空间。
相关技术中,在图2所示的消息同步***中,由于存在多个线程单元,因此相比于单线程处理,多线程虽然可以使***为用户提供更加优秀的性能,但同时也为开发人员带来了困难与挑战, 如:多个线程同时访问或修改同一地址的数据时,可能会导致不可预测的结果,开发人员因此需要保证在某个时间点只有一个线程允许访问或修改该地址的数据数据;若***使用了共享内存,则需要保证各个线程访问共享内存时,内存中的数据对任何线程都要保持一致且正确。除此之外,还有线程间的依赖协作,操作的有序性等问题。
为了解决上述至少一个技术问题,本申请实施例提供了一种消息同步方法,用以在DMA引擎与多个线程单元的CPU之间实现消息同步,使得各线程单元的CPU之间通过DMA引擎进行消息传达各自内存中的数据情况,从而达到通信与协作的目的,减轻了对共享内存的依赖,降低了扩展***的成本与难度。
具体来说,在步骤101中,DMA引擎接收来自任一线程单元的CPU的消息同步请求。其中,消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
本申请实施例中,消息同步请求包括用于确认在多个线程单元中用于消息同步的源线程单元和目标线程单元,DMA引擎通过解析消息同步请求,能够有序执行各请求内的任务,实现各线程单元的通信与协作的目的。
示例性的,消息同步请求可以包括描述符(descriptor)。描述符用于指示消息同步任务所涉及的各种参数,例如,源消息信息、源消息信息对应的源线程信息和目标线程信息。上述参数类型以及参数数量均可根据实际情况进行调整,此处仅为示例。
需要说明的是,在一些实施例中,消息同步请求至少包括以下一种信息:第一,数据的源内存,即数据的来源。第二,数据的目标内存,即数据要到达的目的地。第三,数据的长度,线程请求方可根据需要规定所需要传输数据的总长。第四,若有同步需求的话,还可包含同步标志信息,如同步标志信息所在的线程编号,所在同步标志内存的地址等。
本申请实施例中,记录着各线程同步情况的同步标志存储在专有的同步标志内存中,可通过对同步标志内存的访问追踪多个DMA传输的进度,为***消息充分调度资源提供了便利。
步骤102中,DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元。
DMA引擎根据源线程信息确认源线程单元,例如源线程信息和目标线程信息分别包括源线程单元和目标线程单元的编号、功能、地址等一项或多项指示性信息,进而DMA引擎能快速在多个线程单元中确认源线程单元和目标线程单元,实现消息同步请求对应的内容。也使得对应线程单元能够通过DMA引擎进行消息传达各自内存中的数据情况,减轻对共享内存的依赖。
在一些实施例中,所述源线程信息包括源标识信息、所述目标线程信息包括目标标识信息。如图3所示,步骤102还包括步骤102a至102c。
步骤102a,获取多个线程单元的单元标识信息。
步骤102b,根据源标识信息和多个单元标识信息进行匹配,将匹配成功的单元标识信息对应的线程单元确定为源线程单元。
步骤102c,根据目标标识信息和多个单元标识信息进行匹配,将匹配成功的单元标识信息对应的线程单元确定为目标线程单元。
为确保DMA引擎能够准确对消息同步***中的多个线程单元进行指定与识别,本申请所提供的方法中,DMA引擎通过获取多个线程单元的单元标识消息,例如功能标识、编码标识、位置标识、地址标识等标识消息,能够快速实现对源线程单元和目标线程单元的确认,已快速实现对多个线程单元的通信及消息同步。
步骤103中,DMA引擎根据源消息信息生成消息获取请求,向源线程单元的CPU发送消息获取请求,以获取源线程单元的CPU响应消息获取请求发送的源消息。
DMA引擎根据源消息的内容,例如待获取的源消息的地址、长度等信息生成对应的消息获取请求。进而DMA引擎能够通过将消息获取请求发送至源线程单元的CPU以请求调用源线程单元的内存中对应的源消息。
在一些实施例中,所述源消息信息包括消息地址和消息长度;所述根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,包括:根据所述消息地址和消息长度生成消息获取请求;向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU根据所述消息地址和消息长度在所述源线程单元的内存中提取的所述源消息。
DMA引擎能够根据源消息信息中包括的消息地址和消息长度,直接指向源线程单元的内存中的具体消息,进而DMA引擎能够和源线程单元的CPU协作精确获取对应的源消息。
步骤104中,DMA引擎发送源消息至目标线程单元的CPU,并生成第一消息同步标志发送至源线程单元的CPU;第一消息同步标志用于确认源线程单元存储的源消息已同步在目标线程单元中。
DMA引擎通过获取源线程单元的源消息后,将源消息发送至目标线程单元的CPU,同时生成第一消息同步标志发送至源线程单元的CPU,进而能够便捷确认源线程单元的内存的读取与同步情况,已根据同步标志的写入实现多个线程单元的内存的消息的通信和协作。
步骤105中,DMA引擎在接收到目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至目标线程单元的CPU;第二消息同步标志用于确认目标线程单元存储的源消息已同步在源线程单元中。
在DMA引擎接收到目标线程单元的CPU发送的写入完成信息时,确认源消息已写入目标线程单元的内存中,此情况下DMA引擎直接生成第二消息同步标志至目标线程单元的CPU,进而能够便捷确认目标线程单元的内存的写入与同步情况,已根据同步标志的写入实现多个线程单元的内存的消息的通信和协作。
在线程同步时,本申请实施例中通过上述步骤101至105,能够有效避免对于锁资源的争用情况,大大降低死锁情况发生的概率,有效提升电路***鲁棒性。并且更加充分利用电路***的并行资源,可提高电路***的运行速度。
在一些实施例中,所述源消息信息包括消息地址和消息长度,所述目标线程信息包括源消息写入的消息地址;在所述DMA引擎接收到多个所述线程单元的CPU的消息同步请求时,在所述根据所述源线程信息在多个所述线程单元中确定源线程单元之前,如图4所示,所述方法还包括步骤201至步骤205。
步骤201,根据多个所述消息同步请求的源消息信息的消息地址和源消息信息的消息长度生成多个源内存区域。
步骤202,根据多个消息同步请求的源消息信息的消息长度和目标线程信息的消息地址生成多个目标内存区域。
步骤203,判断多个消息同步请求对应的源内存区域和目标内存区域是否发生重叠。
步骤204,若确定多个消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认消息同步***存在数据冒险隐患。
步骤205,若确定多个消息同步请求对应的源内存区域和目标内存区域不存在至少一组区域发生重叠,确认消息同步***不存在数据冒险隐患。
由于信号传输时延不固定,DMA耗时不固定,线程对本地内存本身的读写顺序不固定等因素,DMA的顺序也不固定,即各个请求方发出消息的顺序与各个消息传输逻辑完成DMA的顺序不是一一对应的。导致此情况下消息同步***存在数据冒险隐患,此情况下DMA引擎可以暂停消息同步也可以根据预先设置的规则对各消息同步请求进行执行。
示例性的,所述数据冒险隐患至少包括先写后读冒险隐患、先写后写冒险隐患、先读后写冒险隐患的任一项;所述若确定多个所述消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认所述消息同步***存在数据冒险隐患,包括:获取所述消息同步请求的请求发送时间;若发生重叠的所述源内存区域的请求发送时间晚于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先写后读冒险隐患;若发生重叠的所述目标内存区域的请求发送时间晚于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先写后写冒险隐患;若发生重叠的所述源内存区域的请求发送时间早于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先读后写冒险隐患。
然而,在一些情况下,***需要保证DMA的顺序按照既定需求完成,如,线程0需要通过DMA将线程1内存中某个地址的数据搬移至线程0的内存,但是此时线程1中该地址的数据同时也等待着线程2将其某个数据搬移至线程1的内存中进行更新,此种依赖被称为先写后读冒险(Read After Write Hazard, RAW),此外还有先写后写冒险(Write After WriteHazard, WAW),先读后写冒险(Write After Read Hazard, WAR)。这三类冒险统称为数据冒险。当有可预见的数据冒险可能发生时,DMA必须按照一定顺序完成,即同步,否则在某一过程中会有未更新的数据被搬运而造成错误。
示例性的,在所述确认所述消息同步***存在数据冒险隐患之后,所述发送所述源消息至所述目标线程单元的CPU,包括:若所述目标内存区域与其余的所述消息同步请求的源内存区域发生重叠,确认该内存区域为重叠内存区域;在完成所有对所述重叠内存区域的消息获取之后,再发送所述源消息至所述重叠内存区域对应的CPU。
DMA引擎在确认存在数据冒险隐患后,即例如当一个线程单元的内存区域存在读或写的工作重叠时,如有3个消息同步请求是要读取A线程单元的A内存区域数据而1个消息同步请求是要写入A线程单元的A内存区域那么要等到读取的请求都完成之后才能写入。进而能确保获取的信息为最新的信息。
需要说明的是,当用户希望获取的是当前线程单元的源消息时,此时先发送所述源消息至所述重叠内存区域对应的CPU再完成所有对所述重叠内存区域的消息获取。
示例性的,在所述向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息之后,所述方法还包括:生成第一消息同步标志发送至所述源线程单元的CPU;获取所述源线程单元的CPU发送的同步写入消息,根据所述同步写入消息确保所述第一消息同步标志写入完成后,发送所述源消息至所述目标线程单元的CPU。
请参照图5,多个线程单元(如图5线程0、线程1和线程2等)包括存储有本地内存和带同步标志的内存,DMA引擎能够根据已搭载的消息传输逻辑和各线程单元的CPU协作以通过搭载在共享总线上实现多个线程单元的消息通信与协作。
在执行代码时,当DMA引擎发送消息给CPU后,可能会遇到数据冒险问题,因为其他指令可能会因为多条消息的DMA接收同步请求而发生乱序。为了解决这个问题,可以在DMA引擎发送消息和其他指令之间***专门的同步指令。
本申请实施例中,上述同步指令会在DMA消息发出后,暂时阻止其后指令对源内存以及目标内存的操作。根据需求不断检查源同步标志或目标同步标志,直到同步条件满足要求后,DMA消息后的指令才可继续运行。这里,同步条件满足要求,可以是消息传输逻辑确保已经全部读取了源内存的数据,或者也可以是在确保已将DMA所要求的数据全部写入目标地址。通过***这样的同步指令,可以优化代码以解决可能出现的数据冒险问题,确保消息传输的正确性,并避免发生数据冲突的情况。
示例性的,在所述判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠之后,所述方法还包括:若确定多个所述消息同步请求对应的源内存区域和目标内存区域不发生重叠,根据所述源消息信息获取待获取的源消息的消息量;根据所述消息量从小至大的顺序对所述消息同步请求进行排序,以优先完成消息量较小的源消息的获取。
本申请所提供的方法还可以根据实际需求随时调整多个线程单元消息同步的时间点,如当DMA引擎所需要搬运的数据量过大时,若等待整个DMA工作完成后再同步,会使同步线程进入过长时间的等待,从而影响***性能,若已知在DMA引擎完成一部分传输后,线程便可结束同步等待并进行下一步工作,进而DMA引擎能及时调整同步的时间点。
需要说明的是,在一些实施例中,在所述根据所述源消息信息获取待获取的源消息的消息量之后,所述根据所述源消息信息生成消息获取请求,包括:若待获取的所述源消息的消息量大于预设消息量,根据所述源消息信息生成多个子消息获取请求,其中每个子消息获取请求用于获取所述源线程单元的CPU响应所述消息获取请求发送的子源消息,所述子源消息的消息量小于或等于所述预设消息量。
通过生成多个子消息获取请求,使得DMA引擎能够将超出预设消息量的源消息进行合理划分,在完成一部分传输后,线程便可结束同步等待并进行下一步工作,确保***的流畅运行。
在一些实施例中,请参照图6和图7,DMA引擎搭载预设的消息传输逻辑,所述消息同步***还包括获取计数器和获取结束标志,所述计数器用于记录所述源消息的消息获取进度;所述向所述源线程单元的CPU发送所述消息获取请求,包括:向所述源线程单元的CPU发送所述消息获取请求,并接收所述源线程单元的CPU返回的所述源消息对应的消息获取信息;根据所述消息获取信息更新所述获取计数器,在所述获取计数器完成所述消息获取进度的记录后,激活所述获取结束标志,用于根据所述目标线程信息和所述获取结束标志生成所述第一消息同步标志。
传统方法中,需要同步的线程之间往往要等待各线程的所有任务处理完毕后才可完成同步工作。而本申请中在***内引入了记录着共享数据传输进度的计数器,使***可以根据计数器与当前的实际需求选择需要同步的时间点,而不必等待整个过程结束后才进行同步。且本申请中的同步标志信息存储在一块内存(又称为同步内存)中,通过访问该内存,可以支持同时追踪多个线程的同步进程,再结合同步计数器的使用,从而有效提升***同步的效率。
示例性的,计数器基于消息中所需要搬运的DMA数据长度记录着DMA传输的进度;另一部分为结束位,标志着一次DMA传输行为的结束,进而DMA引擎能够智能调控各消息同步请求的进度和顺序。
在一些实施例中,所述消息同步***还包括写入计数器和写入结束标志,所述写入计数器用于记录所述源消息的消息写入进度;所述发送所述源消息至所述目标线程单元的CPU,包括:发送所述源消息至所述目标线程单元的CPU,并接收所述目标线程单元的CPU返回的所述源消息对应的消息写入消息;根据所述消息写入信息更新所述写入计数器,在所述写入计数器完成所述消息写入进度的记录后,激活所述写入结束标志,用于根据所述源线程信息和所述写入结束标志生成所述第二消息同步标志。
本实施例中,通过DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元,再从源线程单元中获取源消息同步至目标线程单元中,多个线程单元之间通过消息传达各自内存中的数据情况,从而达到通信与协作的目的,减轻了对共享内存的依赖,降低了扩展***的成本与难度,有效提升***同步的效率。并且,本申请实施例中,通过专有的同步标志信息,记录了完整的DMA传输是否结束与该传输过程的进度,使电路***可根据实际情况与同步标志中的计数器选择可同步的时间点,而不用等待整个DMA传输工作结束后才完成同步,此方法可提高时间并行度,从而提升***整体的处理速度。
在介绍了本申请实施例的方法之后,接下来,参考图8对本申请实施例的消息同步***进行介绍。在图8示出的消息同步***中,至少包括:CPU和DMA引擎。
在该消息同步***中,CPU,主要被配置为执行以下功能,即:向所述DMA引擎发送消息同步请求;其中,所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息。
所述DMA引擎,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求。
所述CPU,还被配置为响应所述消息获取请求发送源消息至所述DMA引擎。
所述DMA引擎,还被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中。
所述CPU,还被配置为在接收到所述源消息时,在所述源消息写入完成之后发送写入完成信息至所述DMA引擎;或,在接收到所述第一消息同步标志时,将所述第一消息同步标志添加至所述源消息对应的内存区域。
所述DMA引擎,还被配置为生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中。
所述CPU,还被配置为在接收到所述第二消息同步标志后添加至所述源消息对应的内存区域。
在一可选实施例中,所述源线程信息包括源标识信息、所述目标线程信息包括目标标识信息;所述DMA引擎,还被配置为获取多个所述线程单元的单元标识信息;根据所述源标识信息和多个所述单元标识信息进行匹配,将匹配成功的所述单元标识信息对应的线程单元确定为所述源线程单元;根据所述目标标识信息和多个所述单元标识信息进行匹配,将匹配成功的所述单元标识信息对应的线程单元确定为所述目标线程单元。
在一可选实施例中,所述源消息信息包括消息地址和消息长度;所述DMA引擎,还被配置为根据所述消息地址和消息长度生成消息获取请求;向所述源线程单元的CPU发送所述消息获取请求。所述CPU,还被配置为根据所述消息地址和消息长度在所述源线程单元的内存中提取源消息发送至所述DMA引擎。
在一可选实施例中,所述源消息信息包括消息地址和消息长度,所述目标线程信息包括源消息写入的消息地址;所述DMA引擎,还被配置为:根据多个所述消息同步请求的源消息信息的消息地址和源消息信息的消息长度生成多个源内存区域;根据多个所述消息同步请求的源消息信息的消息长度和目标线程信息的消息地址生成多个目标内存区域;判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠;若确定多个所述消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认所述消息同步***存在数据冒险隐患。
示例性的,所述数据冒险隐患至少包括先写后读冒险隐患、先写后写冒险隐患、先读后写冒险隐患的任一项;所述DMA引擎,还被配置为:获取所述消息同步请求的请求发送时间;
若发生重叠的所述源内存区域的请求发送时间晚于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先写后读冒险隐患;若发生重叠的所述目标内存区域的请求发送时间晚于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先写后写冒险隐患;若发生重叠的所述源内存区域的请求发送时间早于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先读后写冒险隐患。
示例性的,在所述确认所述消息同步***存在数据冒险隐患之后,所述DMA引擎,还被配置为:若所述目标内存区域与其余的所述消息同步请求的源内存区域发生重叠,确认该内存区域为重叠内存区域;在完成所有对所述重叠内存区域的消息获取之后,再发送所述源消息至所述重叠内存区域对应的CPU。
示例性的,在所述向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息之后,所述DMA引擎,还被配置为:生成第一消息同步标志发送至所述源线程单元的CPU;获取所述源线程单元的CPU发送的同步写入消息,根据所述同步写入消息确保所述第一消息同步标志写入完成后,发送所述源消息至所述目标线程单元的CPU。
示例性的,在所述判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠之后,所述DMA引擎,还被配置为:若确定多个所述消息同步请求对应的源内存区域和目标内存区域不发生重叠,根据所述源消息信息获取待获取的源消息的消息量;根据所述消息量从小至大的顺序对所述消息同步请求进行排序,以优先完成消息量较小的源消息的获取。
需要说明的是,在一些实施例中,在所述根据所述源消息信息获取待获取的源消息的消息量之后,所述DMA引擎,还被配置为:若待获取的所述源消息的消息量大于预设消息量,根据所述源消息信息生成多个子消息获取请求,其中每个子消息获取请求用于获取所述源线程单元的CPU响应所述消息获取请求发送的子源消息,所述子源消息的消息量小于或等于所述预设消息量。
在一些实施例中,所述消息同步***还包括获取计数器和获取结束标志,所述计数器用于记录所述源消息的消息获取进度;所述DMA引擎,还被配置为:向所述源线程单元的CPU发送所述消息获取请求,并接收所述源线程单元的CPU返回的所述源消息对应的消息获取信息;根据所述消息获取信息更新所述获取计数器,在所述获取计数器完成所述消息获取进度的记录后,激活所述获取结束标志,用于根据所述目标线程信息和所述获取结束标志生成所述第一消息同步标志。
在一些实施例中,所述消息同步***还包括写入计数器和写入结束标志,所述写入计数器用于记录所述源消息的消息写入进度;所述DMA引擎,还被配置为:发送所述源消息至所述目标线程单元的CPU,并接收所述目标线程单元的CPU返回的所述源消息对应的消息写入消息;根据所述消息写入信息更新所述写入计数器,在所述写入计数器完成所述消息写入进度的记录后,激活所述写入结束标志,用于根据所述源线程信息和所述写入结束标志生成所述第二消息同步标志。
本实施例中,通过DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元,再从源线程单元中获取源消息同步至目标线程单元中,多个线程单元之间通过消息传达各自内存中的数据情况,从而达到通信与协作的目的,减轻了对共享内存的依赖,降低了扩展***的成本与难度,有效提升***同步的效率。
上述或下述实施例中,本申请实施例中,还提供了一种DMA引擎,所述DMA引擎应用于如图2所示的消息同步***;如图9所述,所述DMA引擎对应的消息同步装置30包括收发模块301、确认模块302、生成模块303、发送模块304和完成模块305。
收发模块301,被配置为接收来自消息同步***的任一线程单元的CPU的消息同步请求;所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息。
确认模块302,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元。
生成模块303,被配置为根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息。
发送模块304,被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中。
完成模块305,被配置为在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中。
上述DMA引擎用于实现图1所示的消息同步方法中的各个功能,此处不在展开赘述。
在介绍了本申请实施例的方法和***之后,接下来,参考图10对本申请实施例的消息同步装置进行介绍。
本申请实施例中图10所示的消息同步装置30能够实现对应于上述图1所对应的实施例中消息同步方法的步骤。消息同步装置30实现的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。所述消息同步装置30应用于服务端设备或终端设备。所述消息同步装置30可参考图1所对应的实施例中所执行的操作,此处不作赘述。
一些实施方式中,所述消息同步装置30中包括收发模块301、确认模块302、生成模块303、发送模块304和完成模块305。
收发模块301,被配置为接收来自消息同步***的任一线程单元的CPU的消息同步请求;所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息。
确认模块302,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元。
生成模块303,被配置为根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息。
发送模块304,被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中。
完成模块305,被配置为在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中。
上述消息同步装置30用于实现图1所示的消息同步方法中的各个功能,此处不在展开赘述。
本实施例中,通过DMA引擎根据源线程信息在多个线程单元中确定源线程单元,并根据目标线程信息在多个线程单元中确定目标线程单元,再从源线程单元中获取源消息同步至目标线程单元中,多个线程单元之间通过消息传达各自内存中的数据情况,从而达到通信与协作的目的,减轻了对共享内存的依赖,降低了扩展***的成本与难度,有效提升***同步的效率。
在介绍了本申请实施例的方法、***和装置之后,接下来,对本申请实施例的计算机可读存储介质进行说明,计算机可读存储介质可为光盘,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会实现上述方法实施方式中所记载的各步骤,例如,接收来自任一所述线程单元的CPU的消息同步请求;其中,所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息;发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中。各步骤的具体实现方式在此不再重复说明。
需要说明的是,所述计算机可读存储介质的例子还可以包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。
上面从模块化功能实体的角度对本申请实施例中的消息同步装置30进行了描述,下面从硬件处理的角度分别对本申请实施例中的执行消息同步方法的服务器、终端设备进行描述。
需要说明的是,在本申请消息同步装置实施例的图7所示的收发模块301、发送模块304和完成模块305对应的实体设备可以为输入/输出单元、收发器、射频电路、通信模块和输入/输出(I/O)接口等,确认模块302个生成模块303对应的实体设备可以为处理器。图3所示的消息同步装置30可以具有如图10所示的结构,当图9所示的消息同步装置30具有如图10所示的结构时,图10中的处理器和收发器能够实现前述对应该装置的装置实施例提供的收发模块301、确认模块302、生成模块303、发送模块304和完成模块305相同或相似的功能,图10存储器执行上述消息同步方法时需要调用的计算机程序。
图11申请实施例提供的一种服务器结构示意图,该服务器1100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以***处理器(central processingunits,CPU)1122(例如,一个或一个以上处理器)和存储器1132,一个或一个以上存储应用程序1142或数据1144的存储介质1130(例如一个或一个以上海量存储设备)。其中,存储器1132和存储介质1130可以是短暂存储或持久存储。存储在存储介质1130的程序可以包括一个或一个以上模块(图中未示出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1122可以设置为与存储介质1130通信,在服务器1100上执行存储介质1130中的一系列指令操作。
服务器1100还可以包括一个或一个以上电源1127,一个或一个以上有线或无线网络接口1180,一个或一个以上输入输出接口1159,和/或,一个或一个以上操作***1141,例如Windows Server,Mac OS X,Unix, Linux,FreeBSD等等。
上述实施例中由服务器所执行的步骤可以基于该图11的服务器1100的结构。例如,例如上述实施例中由图11所示的消息同步装置30所执行的步骤可以基于该图11所示的服务器结构。例如,所述中央处理器1122通过调用存储器1132中的指令,执行以下操作:
通过分连接单元的输入输出接口1159接收来自中央处理器CPU的数据搬运任务;其中,所述数据搬运任务包括描述符;基于所述描述符向外部设备发送数据搬运请求;所述数据搬运请求分别携带有第一指令序号;所述第一指令序号指示所述数据搬运请求的执行顺序;接收所述外部设备基于所述数据搬运请求返回的请求数据;所述请求数据中携带的第二指令序号与对应数据搬运请求中携带的第一指令序号相匹配;按照所述请求数据携带的第二指令序号,向CPU发送所述数据搬运任务对应的同步信息;所述同步信息用于指示所述数据搬运任务的执行进度。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请实施例所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请实施例各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
以上对本申请实施例所提供的技术方案进行了详细介绍,本申请实施例中应用了具体个例对本申请实施例的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请实施例的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请实施例的限制。
Claims (14)
1.一种消息同步方法,其特征在于,应用于消息同步***的DMA引擎,所述消息同步***还包括多个线程单元,每个线程单元包括中央处理器CPU;所述方法包括:
接收来自任一所述线程单元的CPU的消息同步请求;其中,所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;
根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息;
发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;
在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中;
所述源消息信息包括消息地址和消息长度,所述目标线程信息包括源消息写入的消息地址;在所述DMA引擎接收到多个所述线程单元的CPU的消息同步请求时,在所述根据所述源线程信息在多个所述线程单元中确定源线程单元之前,所述方法还包括:
根据多个所述消息同步请求的源消息信息的消息地址和源消息信息的消息长度生成多个源内存区域;根据多个所述消息同步请求的源消息信息的消息长度和目标线程信息的消息地址生成多个目标内存区域;判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠;若确定多个所述消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认所述消息同步***存在数据冒险隐患。
2.根据权利要求1所述的方法,其特征在于,所述源线程信息包括源标识信息、所述目标线程信息包括目标标识信息;所述根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元,包括:
获取多个所述线程单元的单元标识信息;
根据所述源标识信息和多个所述单元标识信息进行匹配,将匹配成功的所述单元标识信息对应的线程单元确定为所述源线程单元;
根据所述目标标识信息和多个所述单元标识信息进行匹配,将匹配成功的所述单元标识信息对应的线程单元确定为所述目标线程单元。
3.根据权利要求1所述的方法,其特征在于,所述源消息信息包括消息地址和消息长度;所述根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,包括:
根据所述消息地址和消息长度生成消息获取请求;
向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU根据所述消息地址和消息长度在所述源线程单元的内存中提取的所述源消息。
4.根据权利要求1所述的方法,其特征在于,所述数据冒险隐患至少包括先写后读冒险隐患、先写后写冒险隐患、先读后写冒险隐患的任一项;所述若确定多个所述消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认所述消息同步***存在数据冒险隐患,包括:
获取所述消息同步请求的请求发送时间;
若发生重叠的所述源内存区域的请求发送时间晚于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先写后读冒险隐患;
若发生重叠的所述目标内存区域的请求发送时间晚于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先写后写冒险隐患;
若发生重叠的所述源内存区域的请求发送时间早于与其重叠的所述目标内存区域的请求发送时间,确认所述数据冒险隐患为所述先读后写冒险隐患。
5.根据权利要求1所述的方法,其特征在于,在所述确认所述消息同步***存在数据冒险隐患之后,所述发送所述源消息至所述目标线程单元的CPU,包括:
若所述目标内存区域与其余的所述消息同步请求的源内存区域发生重叠,确认该内存区域为重叠内存区域;
在完成所有对所述重叠内存区域的消息获取之后,再发送所述源消息至所述重叠内存区域对应的CPU。
6.根据权利要求1所述的方法,其特征在于,在所述向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息之后,所述方法还包括:
生成第一消息同步标志发送至所述源线程单元的CPU;
获取所述源线程单元的CPU发送的同步写入消息,根据所述同步写入消息确保所述第一消息同步标志写入完成后,发送所述源消息至所述目标线程单元的CPU。
7.根据权利要求1所述的方法,其特征在于,在所述判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠之后,所述方法还包括:
若确定多个所述消息同步请求对应的源内存区域和目标内存区域不发生重叠,根据所述源消息信息获取待获取的源消息的消息量;
根据所述消息量从小至大的顺序对所述消息同步请求进行排序,以优先完成消息量较小的源消息的获取。
8.根据权利要求7所述的方法,其特征在于,在所述根据所述源消息信息获取待获取的源消息的消息量之后,所述根据所述源消息信息生成消息获取请求,包括:
若待获取的所述源消息的消息量大于预设消息量,根据所述源消息信息生成多个子消息获取请求,其中每个子消息获取请求用于获取所述源线程单元的CPU响应所述消息获取请求发送的子源消息,所述子源消息的消息量小于或等于所述预设消息量。
9.根据权利要求1所述的方法,其特征在于,所述消息同步***还包括获取计数器和获取结束标志,所述计数器用于记录所述源消息的消息获取进度;所述向所述源线程单元的CPU发送所述消息获取请求,包括:
向所述源线程单元的CPU发送所述消息获取请求,并接收所述源线程单元的CPU返回的所述源消息对应的消息获取信息;
根据所述消息获取信息更新所述获取计数器,在所述获取计数器完成所述消息获取进度的记录后,激活所述获取结束标志,用于根据所述目标线程信息和所述获取结束标志生成所述第一消息同步标志。
10.根据权利要求1所述的方法,其特征在于,所述消息同步***还包括写入计数器和写入结束标志,所述写入计数器用于记录所述源消息的消息写入进度;所述发送所述源消息至所述目标线程单元的CPU,包括:
发送所述源消息至所述目标线程单元的CPU,并接收所述目标线程单元的CPU返回的所述源消息对应的消息写入消息;
根据所述消息写入信息更新所述写入计数器,在所述写入计数器完成所述消息写入进度的记录后,激活所述写入结束标志,用于根据所述源线程信息和所述写入结束标志生成所述第二消息同步标志。
11.一种DMA引擎,其特征在于,所述DMA引擎应用于实现如权利要求1至10任一所述的消息同步方法;所述DMA引擎包括:
收发模块,被配置为接收来自消息同步***的任一线程单元的CPU的消息同步请求;所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
确认模块,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;
生成模块,被配置为根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求,以获取所述源线程单元的CPU响应所述消息获取请求发送的源消息;
发送模块,被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;
完成模块,被配置为在接收到所述目标线程单元的CPU发送的写入完成信息后,生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中;
所述源消息信息包括消息地址和消息长度,所述目标线程信息包括源消息写入的消息地址;所述确认模块,还被配置为:
在所述收发模块接收到多个所述线程单元的CPU的消息同步请求时,在所述确认模块根据所述源线程信息在多个所述线程单元中确定源线程单元之前,根据多个所述消息同步请求的源消息信息的消息地址和源消息信息的消息长度生成多个源内存区域;根据多个所述消息同步请求的源消息信息的消息长度和目标线程信息的消息地址生成多个目标内存区域;判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠;若确定多个所述消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认所述消息同步***存在数据冒险隐患。
12.一种消息同步***,其特征在于,所述***包括多个线程单元和应用于如权利要求1至10任一消息同步方法所述的DMA引擎,每个线程单元包括中央处理器CPU;其中,
所述CPU,被配置为向所述DMA引擎发送消息同步请求;其中,所述消息同步请求包括源消息信息、源消息信息对应的源线程信息和目标线程信息;
所述DMA引擎,被配置为根据所述源线程信息在多个所述线程单元中确定源线程单元,并根据所述目标线程信息在多个所述线程单元中确定目标线程单元;根据所述源消息信息生成消息获取请求,向所述源线程单元的CPU发送所述消息获取请求;
所述CPU,还被配置为响应所述消息获取请求发送源消息至所述DMA引擎;
所述DMA引擎,还被配置为发送所述源消息至所述目标线程单元的CPU,并生成第一消息同步标志发送至所述源线程单元的CPU;所述第一消息同步标志用于确认所述源线程单元存储的所述源消息已同步在所述目标线程单元中;
所述CPU,还被配置为在接收到所述源消息时,在所述源消息写入完成之后发送写入完成信息至所述DMA引擎;或,在接收到所述第一消息同步标志时,将所述第一消息同步标志添加至所述源消息对应的内存区域;
所述DMA引擎,还被配置为生成第二消息同步标志发送至所述目标线程单元的CPU;所述第二消息同步标志用于确认所述目标线程单元存储的所述源消息已同步在所述源线程单元中;
所述CPU,还被配置为在接收到所述第二消息同步标志后添加至所述源消息对应的内存区域;
其中,所述源消息信息包括消息地址和消息长度,所述目标线程信息包括源消息写入的消息地址;所述DMA引擎,还被配置为:根据多个所述消息同步请求的源消息信息的消息地址和源消息信息的消息长度生成多个源内存区域;根据多个所述消息同步请求的源消息信息的消息长度和目标线程信息的消息地址生成多个目标内存区域;判断多个所述消息同步请求对应的源内存区域和目标内存区域是否发生重叠;若确定多个所述消息同步请求对应的源内存区域和目标内存区域存在至少一组区域发生重叠,确认所述消息同步***存在数据冒险隐患。
13.一种计算机可读存储介质,其包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-10中任一项所述的消息同步方法。
14.一种计算设备,包括:存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如权利要求1-10中任一项所述的消息同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410213545.4A CN117785767B (zh) | 2024-02-27 | 2024-02-27 | 消息同步方法、***以及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410213545.4A CN117785767B (zh) | 2024-02-27 | 2024-02-27 | 消息同步方法、***以及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117785767A CN117785767A (zh) | 2024-03-29 |
CN117785767B true CN117785767B (zh) | 2024-04-23 |
Family
ID=90382040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410213545.4A Active CN117785767B (zh) | 2024-02-27 | 2024-02-27 | 消息同步方法、***以及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117785767B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111596903A (zh) * | 2020-03-27 | 2020-08-28 | 完美世界(北京)软件科技发展有限公司 | 一种渲染引擎中的数据处理方法和装置 |
CN113407637A (zh) * | 2021-07-13 | 2021-09-17 | 上海浦东发展银行股份有限公司 | 一种数据同步方法、装置、电子设备以及存储介质 |
CN115269226A (zh) * | 2022-07-27 | 2022-11-01 | 中国船舶重工集团公司第七二四研究所 | 一种基于原子消息与共享缓存的多线程多级并行通信方法 |
CN116089099A (zh) * | 2023-01-03 | 2023-05-09 | 北京达佳互联信息技术有限公司 | 一种通信方法、装置、电子设备及存储介质 |
-
2024
- 2024-02-27 CN CN202410213545.4A patent/CN117785767B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111596903A (zh) * | 2020-03-27 | 2020-08-28 | 完美世界(北京)软件科技发展有限公司 | 一种渲染引擎中的数据处理方法和装置 |
CN113407637A (zh) * | 2021-07-13 | 2021-09-17 | 上海浦东发展银行股份有限公司 | 一种数据同步方法、装置、电子设备以及存储介质 |
CN115269226A (zh) * | 2022-07-27 | 2022-11-01 | 中国船舶重工集团公司第七二四研究所 | 一种基于原子消息与共享缓存的多线程多级并行通信方法 |
CN116089099A (zh) * | 2023-01-03 | 2023-05-09 | 北京达佳互联信息技术有限公司 | 一种通信方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117785767A (zh) | 2024-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8381230B2 (en) | Message passing with queues and channels | |
US20100191711A1 (en) | Synchronizing Access To Resources In A Hybrid Computing Environment | |
CN107704325B (zh) | 用于进程间传输消息的方法和装置 | |
KR20110047753A (ko) | 교착 상태의 방지를 위한 데이터 처리 방법 및 시스템 | |
US11500693B2 (en) | Distributed system for distributed lock management and method for operating the same | |
CN110675255A (zh) | 在区块链中并发执行交易的方法和装置 | |
CN111597035B (zh) | 基于多线程的仿真引擎时间推进方法及*** | |
US11397612B2 (en) | Autonomous job queueing system for hardware accelerators | |
CN116719764B (zh) | 数据同步方法、***以及相关装置 | |
CN113312182B (zh) | 一种云计算节点、文件处理方法及装置 | |
CN105302489A (zh) | 一种异构多核远程嵌入式存储器***与方法 | |
CN117785767B (zh) | 消息同步方法、***以及相关装置 | |
CN111930528A (zh) | 消息中间件的消息写入方法、装置、设备及可读存储介质 | |
KR100978082B1 (ko) | 공유 메모리형 멀티 프로세서에 있어서의 비동기 원격 절차 호출 방법 및 비동기 원격 절차 호출 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체 | |
CN115760405A (zh) | 交易执行方法、装置、计算机设备及介质 | |
CN112764897B (zh) | 任务请求的处理方法、装置、***及计算机可读存储介质 | |
CN107102898B (zh) | 一种基于numa架构的内存管理、构建数据结构的方法及装置 | |
CN109857523B (zh) | 一种用于实现数据库高可用性的方法及装置 | |
CN117539802B (zh) | 一种缓存操作方法、***以及相关装置 | |
KR100978083B1 (ko) | 공유 메모리형 멀티 프로세서에 있어서의 절차 호출 방법 및 절차 호출 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체 | |
JP7467554B2 (ja) | ハードウェアアクセラレータの自律ジョブキューイングシステム | |
CN117880364B (zh) | 一种数据传输方法、***以及相关装置 | |
CN115617732B (zh) | Apb总线结构、片上***、车辆及访问方法 | |
CN110879747B (zh) | 资源管理方法及装置 | |
CN112860788B (zh) | 事务处理方法、装置、计算机***及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |