CN113395302B - 异步数据分发器、相关装置和方法 - Google Patents
异步数据分发器、相关装置和方法 Download PDFInfo
- Publication number
- CN113395302B CN113395302B CN202010167795.0A CN202010167795A CN113395302B CN 113395302 B CN113395302 B CN 113395302B CN 202010167795 A CN202010167795 A CN 202010167795A CN 113395302 B CN113395302 B CN 113395302B
- Authority
- CN
- China
- Prior art keywords
- data
- consumption
- time
- server
- unit
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开提出了一种异步数据分发器、相关装置和方法。所述异步数据分发器包括:数据生产执行组件接口单元,用于接收数据生产执行组件发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据;数据消费执行组件接口单元,用于按照第一数据的预计发送时间,将第一数据发送至数据消费执行组件,将接收到第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,停止将第二数据发送到所述数据消费执行组件。本公开提出了一种在数据的生产者和消费者之间异步传送数据的机制,保证了传送实时性。
Description
技术领域
本发明涉及计算机处理器领域,更具体而言,涉及一种异步数据分发器、相关装置和方法。
背景技术
数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。数据中心中,每分每秒都有大量数据产生,也有大量数据被消费掉。数据的产生例如是,摄像头不断拍摄视频,产生视频数据。数据的消费例如是,将拍摄的视频显示给用户。一般来说,数据的产生速度和消费速度是不同的。例如,摄像头拍摄视频往往是固定速率的(例如25帧/秒),而处理这些数据的速度往往比较低(例如渲染并显示出来的速度是10帧/秒)。当消费设备消费完产生的数据后,为了保证数据的同步性,就要等待数据的产生设备,造成时间浪费。但是,很多场景下,并没有严格的数据完整性要求,对实时性要求却较高。在这种情况下,即使数据有缺失,一定要满足实时性。在这种情况下,允许丢弃一些数据,保证实时性要求,即异步模式。尽管上述以摄像数据进行举例,实际上对于异步实时性比较强的数据都存在上述情况。但是,现有技术中缺乏在数据的生产设备和消费设备之间异步传送数据的方式。
发明内容
有鉴于此,本发明实施例旨在提出一种在数据的生产者和消费者之间异步传送数据的机制,保证传送实时性。
为了达到这个目的,根据本公开的一个方面,提供了一种异步数据分发器,位于处理器核内,所述处理器核还包括指令执行单元,所述指令执行单元包括数据生产执行组件和数据消费执行组件,其中,所述异步数据分发器包括:
数据生产执行组件接口单元,用于接收所述数据生产执行组件发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
数据消费执行组件接口单元,用于按照所述第一数据的预计发送时间,将所述第一数据发送至所述数据消费执行组件,接收所述数据消费执行组件消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,则停止将所述第二数据发送到所述数据消费执行组件,并将所述第三数据发送到所述数据消费执行组件。
可选地,所述数据缓存在所述异步数据分发器内部,或在所述处理器核中所述异步数据分发器外部。
可选地,所述数据消费执行组件接口单元在接收所述应答的时间早于第二数据的预计发送时间的情况下,将第二数据发送到所述数据消费执行组件。
可选地,所述异步数据分发器还包括:调度单元,用于根据所述数据序列中每个数据的大小和数据消费执行组件的处理速度,确定每个数据的预计发送时间,以存储到所述数据缓存。
可选地,所述数据消费执行组件包括第一数据消费执行组件和第二数据消费执行组件,所述数据消费执行组件接口单元包括第一数据消费执行组件接口单元和第二数据消费执行组件接口单元。所述第一数据消费执行组件接口单元用于按照第一数据的预计发送时间,复制第一数据发送至所述第一数据消费执行组件,接收所述第一数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第一数据消费执行组件;所述第二数据消费执行组件接口单元用于按照第一数据的预计发送时间,复制第一数据发送至所述第二数据消费执行组件,接收所述第二数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将第二数据发送到所述第二数据消费执行组件。
可选地,所述数据生产执行组件包括第一数据生产执行组件和第二数据生产执行组件,所述数据生产执行组件接口单元包括第一数据生产执行组件接口单元和第二数据生产执行组件接口单元;所述数据序列包括第一数据序列和第二数据序列;所述第一数据生产执行组件接口单元用于接收所述第一数据生产执行组件发送的第一数据序列,所述第二数据生产执行组件接口单元用于接收所述第二数据生产执行组件发送的第二数据序列;所述异步数据分发器还包括注册单元,用于存储第一数据生产执行组件注册的第一数据类型、第二数据生成执行组件注册的第二数据类型、和数据消费执行组件注册的消费数据类型;所述数据消费执行组件接口单元接收到数据消费执行组件的数据消费请求后,根据所述注册单元中所述数据消费执行组件注册的数据类型,查找第一数据类型和第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据发送到所述数据消费执行组件。
可选地,所述数据包括视频数据,所述数据生产包括控制摄像头拍摄从而产生视频数据,所述数据消费包括对产生的视频数据进行处理。
可选地,所述数据包括人声数据,所述数据生产包括控制麦克风收集人声从而产生人声数据,所述数据消费包括对产生的人声数据进行美化。
可选地,所述数据包括车辆环境视频数据,所述数据生产包括控制无人车车载摄像头收集车辆环境视频数据,所述数据消费包括处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
根据本公开的一方面,提供了一种处理器核,包括如上所述的异步数据分发器。
根据本公开的一方面,提供了一种处理器,包括如上所述的处理器核。
根据本公开的一方面,提供了一种片上系统,包括如上所述的处理器。
根据本公开的一方面,提供了一种服务器,包括如上所述的处理器。
根据本公开的一方面,提供了一种异步数据分发器,位于处理器内,由处理器内的处理器核共享,数据生产指令执行单元和数据消费指令执行单元分别位于不同的处理器核中,其中,所述异步数据分发器包括:
数据生产指令执行单元接口单元,用于接收所述数据生产指令执行单元发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
数据消费指令执行单元接口单元,用于按照第一数据的预计发送时间,将第一数据发送至所述数据消费指令执行单元,接收所述数据消费指令执行单元消费完第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,停止将第二数据发送到所述数据消费指令执行单元,并将所述第三数据发送到所述数据消费指令执行单元。
可选地,所述数据缓存在所述异步数据分发器内部,或在所述处理器中所述异步数据分发器外部。
可选地,所述数据消费指令执行单元接口单元在接收所述应答的时间早于第二数据的预计发送时间的情况下,将第二数据发送到所述数据消费指令执行单元。
可选地,所述异步数据分发器还包括:调度单元,用于根据所述数据序列中每个数据的大小和数据消费指令执行单元的处理速度,确定每个数据的预计发送时间,以存储到所述数据缓存。
可选地,所述数据消费指令执行单元包括位于不同处理器核内的第一数据消费指令执行单元和第二数据消费指令执行单元,所述数据消费指令执行单元接口单元包括第一数据消费指令执行单元接口单元和第二数据消费指令执行单元接口单元。所述第一数据消费指令执行单元接口单元用于按照所述第一数据的预计发送时间,复制第一数据发送至所述第一数据消费指令执行单元,接收所述第一数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第一数据消费指令执行单元。所述第二数据消费指令执行单元接口单元用于第一数据的预计发送时间,复制第一数据发送至所述第二数据消费指令执行单元,接收所述第二数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将第二数据发送到所述第二数据消费指令执行单元。
可选地,所述数据生产指令执行单元包括位于不同处理器核内的第一数据生产指令执行单元和第二数据生产指令执行单元;所述数据生产指令执行单元接口单元包括第一数据生产指令执行单元接口单元和第二数据生产指令执行单元接口单元;所述数据序列包括第一数据序列和第二数据序列;所述第一数据生产指令执行单元接口单元用于接收所述第一数据生产指令执行单元发送的第一数据序列,所述第二数据生产指令执行单元接口单元用于接收所述第二数据生产指令执行单元发送的第二数据序列;所述异步数据分发器还包括注册单元,用于存储第一数据生产指令执行单元注册的第一数据类型、第二数据生产指令执行单元注册的第二数据类型、和数据消费指令执行单元注册的消费数据类型;所述数据消费指令执行单元接口单元接收到数据消费指令执行单元的数据消费请求后,根据所述注册单元中所述数据消费指令执行单元注册的数据类型,查找第一数据类型和第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据发送到所述数据消费指令执行单元。
可选地,所述数据包括视频数据,所述数据生产包括控制摄像头拍摄从而产生视频数据,所述数据消费包括对产生的视频数据进行处理。
可选地,所述数据包括人声数据,所述数据生产包括控制麦克风收集人声从而产生人声数据,所述数据消费包括对产生的人声数据进行美化。
可选地,所述数据包括车辆环境视频数据,所述数据生产包括控制无人车车载摄像头收集车辆环境视频数据,所述数据消费包括处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
根据本公开的一方面,提供了一种处理器,包括如上所述的异步数据分发器。
根据本公开的一方面,提供了一种片上系统,包括如上所述的处理器。
根据本公开的一方面,提供了一种服务器,包括如上所述的处理器。
根据本公开的一方面,提供了一种异步数据分发器,与数据生产服务器和数据消费服务器连接,其中,所述异步数据分发器包括:
数据生产服务器接口单元,用于接收所述数据生产服务器发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
数据消费服务器接口单元,用于按照所述第一数据的预计发送时间,复制第一数据发送至所述数据消费服务器,接收所述数据消费服务器消费完第一数据的应答,将接收所述应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,阻止复制第二数据发送到所述数据消费服务器,并复制第三数据发送到所述数据消费服务器。
可选地,所述数据缓存在所述异步数据分发器内部或外部。
可选地,所述数据消费服务器接口单元在接收所述应答的时间早于第二数据的预计发送时间的情况下,将第二数据发送到所述数据消费服务器。
可选地,所述异步数据分发器还包括:调度单元,用于根据所述数据序列中每个数据的大小和数据消费服务器的处理速度,确定每个数据的预计发送时间,以存储到所述数据缓存。
可选地,所述数据消费服务器包括第一数据消费服务器和第二数据消费服务器,所述数据消费服务器接口单元包括第一数据消费服务器接口单元和第二数据消费服务器接口单元。所述第一数据消费服务器接口单元用于按照所述数据缓存中存储的第一数据的预计发送时间,复制第一数据发送至所述第一数据消费服务器,接收所述第一数据消费服务器消费完第一数据的应答,将接收所述应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第一数据消费服务器;所述第二数据消费服务器接口单元用于按照所述数据缓存中存储的第一数据的预计发送时间,复制第一数据发送至所述第二数据消费服务器,接收所述第二数据消费服务器消费完第一数据的应答,将接收所述应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第二数据消费服务器。
可选地,所述数据生产服务器包括第一数据生产服务器和第二数据生产服务器;所述数据生产服务器接口单元包括第一数据生产服务器接口单元和第二数据生产服务器接口单元;所述数据序列包括第一数据序列和第二数据序列;所述第一数据生产服务器接口单元用于接收所述第一数据生产服务器发送的第一数据序列,所述第二数据生产服务器接口单元用于接收所述第二数据生产服务器发送的第二数据序列;所述异步数据分发器还包括注册单元,用于存储第一数据生产服务器注册的第一数据类型、第二数据生产服务器注册的第二数据类型、和数据消费服务器注册的消费数据类型;所述数据消费服务器接口单元接收到数据消费服务器的数据消费请求后,根据所述注册单元中所述数据消费服务器注册的数据类型,查找第一数据类型和第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据发送到所述数据消费服务器。
可选地,所述数据包括视频数据,所述数据生产包括控制摄像头拍摄从而产生视频数据,所述数据消费包括对产生的视频数据进行处理。
可选地,所述数据包括人声数据,所述数据生产包括控制麦克风收集人声从而产生人声数据,所述数据消费包括对产生的人声数据进行美化。
可选地,所述数据包括车辆环境视频数据,所述数据生产包括控制无人车车载摄像头收集车辆环境视频数据,所述数据消费包括处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
根据本公开的一个方面,提供了一种异步数据分发方法,包括:
接收数据生产执行组件发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
按照第一数据的预计发送时间,将所述第一数据发送至所述数据消费执行组件,接收所述数据消费执行组件消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费执行组件,并将所述第三数据发送到所述数据消费执行组件。
根据本公开的一个方面,提供了一种异步数据分发方法,包括:
接收数据生产指令执行单元发送的数据序列并存储在数据缓存中,所述数据序列包括时间连续的第一数据、第二数据、第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
按照所述第一数据的预计发送时间,将所述第一数据发送至数据消费指令执行单元,接收所述数据消费指令执行单元消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费指令执行单元,并将所述第三数据发送到所述数据消费指令执行单元。
根据本公开的一个方面,提供了一种异步数据分发方法,包括:
接收数据生产服务器发送的数据序列,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
按照第一数据的预计发送时间,将所述第一数据发送至数据消费服务器,接收所述数据消费服务器消费完第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费服务器,并将所述第三数据发送到所述数据消费服务器。
本公开实施例的异步数据分发器中,数据生产者(数据生产执行组件、数据生产指令执行单元、数据生产服务器)发送的数据顺序存储在数据缓存中。数据消费者接口单元(数据消费执行组件接口单元、数据消费指令执行单元接口单元、数据生产服务器接口单元)从数据缓存中将数据发送到数据消费者(数据消费执行组件、数据消费指令执行单元、数据消费服务器)。当将第一数据发送至所述数据消费者后,会接收所述数据消费者消费完第一数据的应答。这时,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较。理论上,预计第一数据消费完的时间就应该是第二数据的预计发送时间。如果晚于第二数据的预计发送时间,说明第一数据消费了过长时间,如果再让其消费第二数据,会造成第二数据在第三数据开始发送之前消费不完,又影响第三数据的发送。因此,如果晚于第二数据的预计发送时间,就停止将第二数据发送到数据消费者。通过这样的机制,使得能够在数据的生产者和消费者之间异步传送数据,保证数据实时性。
附图说明
通过参考以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本公开一个实施例所应用的数据中心的结构图;
图2是图1的数据中心的简化表示的图;
图3是本公开一个实施例的数据中心中一个服务器的内部结构图;
图4A-C是在本公开一个实施例中异步数据分发器的应用环境的示意图,其中图4A-C的区别在于数据生产执行组件和数据消费执行组件的数目不同;
图5示出了图4A-C的图中异步数据分发器230的内部结构图;
图6A-C分别示出了在图4A-C的数据生产执行组件和数据消费执行组件的数目条件下的异步数据分发过程;
图7A-C是在本公开另一个实施例中异步数据分发器的应用环境的示意图,其中图7A-C的区别在于数据生产指令执行单元和数据消费指令执行单元的数目不同;
图8示出了图7A-C的图中异步数据分发器的内部结构图;
图9A-C分别示出了在图7A-C的数据生产指令执行单元和数据消费指令执行单元的数目条件下的异步数据分发过程;
图10A-C是在本公开另一个实施例中异步数据分发器的应用环境的示意图,其中图10A-C的区别在于数据生产服务器和数据消费服务器的数目不同;
图11示出了图10A-C的图中异步数据分发器的内部结构图;
图12A-C分别示出了在图10A-C的数据生产服务器和数据消费服务器的数目条件下的异步数据分发过程。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在本文中使用以下术语。
执行组件: 指令执行单元中执行一个进程的子单元。指令执行单元可以同时执行多个进程,因此可以看出包括多个子单元,每个子单元负责执行一个进程。
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。执行组件一般包括若干线程。线程是执行组件的一个实体,是CPU调度和分派的基本单位,是比执行组件更小的能独立运行的基本单位。线程的划分尺度小于执行组件,这使得多线程程序的并发性高;进程在执行时通常拥有独立的内存单元,而线程之间可以共享内存。
数据:本文所指的数据是指异步实时性要求强的数据。例如,在直播环境下,摄像头采集视频数据,交由拉伸缩放和绘制显示模块进行后续处理,该直播环境要求实时性强,如果不能很快处理完并显示的图像需要放弃,此时摄像头采集的图像数据就是本文所称的数据。再例如,在麦克风声音美化场景下,麦克风采集人声数据,交由修音模块进行人声美化处理,如果不能很快处理并播放,则失去其使用价值,此时麦克风采集的人声数据就是本文所称的数据。再例如,在无人车行驶的场景下,车载摄像头收集车辆环境视频数据,交由控制装置产生控制无人车行驶的控制信号,如果不能很快处理完,该视频数据就失去了使用价值,此时车载摄像头采集的车辆环境视频数据就是本文所称的数据。
数据生产:在互联网上产生数据的过程。在互联网上每时每刻都有大量的数据产生出来,产生的途径包括从输入接口直接接收,或者依赖某种转换设备将外部的物理量转换成数据的形式。在上述数据为摄像头采集的视频数据的场景下,数据生产为控制摄像头拍摄从而产生视频数据。在上述数据为麦克风收集的人声数据的场景下,数据生产为控制麦克风收集人声从而产生人声数据。在上述数据为车载摄像头收集的车辆环境视频数据的场景下,数据生产为控制车载摄像头收集车辆环境视频数据。
数据消费:使用产生的数据的过程。数据产生出来最终的目的是被使用,使用的过程即数据消费。例如,摄像头拍摄视频,视频一方面送到进行拉伸缩放的ImageProc模块进行拉伸缩放,另一方面送到OSD绘制模块进行绘制显示,这种拉伸缩放和绘制显示的过程都是一种数据消费。在上述数据为摄像头采集的视频数据的场景下,数据消费为对产生的视频数据进行处理。在上述数据为麦克风收集的人声数据的场景下,数据消费为对产生的人声数据进行美化。在上述数据为车载摄像头收集的车辆环境视频数据的场景下,数据消费为处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
数据生产执行组件:执行用于数据生产的进程的执行组件。在上述摄像头拍摄环境的视频的例子中,控制摄像头进行视频拍摄可以由控制拍摄的进程实现,指令执行单元中执行该进程的子单元就是一种数据生产执行组件。
数据消费执行组件:执行用于数据消费的进程的执行组件。在上述对摄像头拍摄的视频进行拉伸缩放和绘制显示的例子中,拉伸缩放和绘制显示可以分别由 ImageProc进程和OSD绘制进程这两个进程完成。指令执行单元中执行这两种进程的子单元就分别是两种数据生产执行组件。
数据生产指令执行单元:进行数据生产的指令执行单元。在上述摄像头拍摄环境的视频的例子中,控制摄像头进行视频拍摄可以由控制拍摄的数据生产指令执行单元实现,具体地说,可以由指令执行单元中的一个或多个执行组件实现。
数据消费指令执行单元:进行数据消费的指令执行单元。在上述对摄像头拍摄的视频进行拉伸缩放和绘制显示的例子中,拉伸缩放和绘制显示可以分别由 ImageProc指令执行单元和OSD绘制指令执行单元这两个数据消费指令执行单元实现。具体地说,拉伸缩放可以由ImageProc指令执行单元中一个或多个执行组件实现,绘制显示可以由OSD绘制指令执行单元中一个或多个执行组件实现。
数据生产服务器:数据中心中进行数据生产的服务器。在上述摄像头拍摄环境的视频的例子中,控制摄像头进行视频拍摄可以由数据中心中某一服务器实现,具体地说,可以由该服务器中的一个或多个执行指令单元中的一个或多个执行组件实现,该服务器即数据生产服务器。
数据消费服务器:数据中心中进行数据消费的服务器。在上述对摄像头拍摄的视频进行拉伸缩放和绘制显示的例子中,拉伸缩放和绘制显示可以分别由 ImageProc服务器和OSD绘制服务器这两个数据消费服务器实现。具体地说,拉伸缩放可以由ImageProc服务器中一个或多个指令执行单元中的一个或多个执行组件实现,绘制显示可以由OSD绘制服务器中一个或多个指令执行单元中一个或多个执行组件实现。
异步数据分发:由于数据的产生速度和消费速度是不同的,当消费设备消费完产生的数据后,有时为了保证数据的同步性,要等待数据的产生设备,造成时间浪费。有些情形下,并没有严格的数据完整性要求,却对数据有实时性要求。在这种情况下,允许丢弃一些数据,以保证实时性,即异步数据分发。
数据序列:数据生产出来后,生产出来的数据按照生产的顺序排列成序列的形式送至数据消费的执行组件、指令处理单元或服务器进行消费,该生成出来的数据的序列称为数据序列。
数据类型:一般地,数据中心中,数据生产执行组件、指令处理单元、服务器生产某一特定类型的数据,数据消费执行组件、指令处理单元、服务器消费某一特定类型的数据。例如,控制摄像头进行视频拍摄的生产执行组件专门生产视频数据,道路拥塞收集执行组件专门收集道路拥塞数据,ImageProc执行组件专门消费视频数据,而导航执行组件在导航过程中要消费道路拥塞数据。
数据中心
数据中心是全球协作的特定设备网络,用来在互联网网络基础设施上传递、加速、展示、计算、存储数据信息。在今后的发展中,数据中心也将会成为企业竞争的资产。随着数据中心应用的广泛化,人工智能等越来越多地应用到数据中心。而神经网络作为人工智能的重要技术,已经大量应用到数据中心大数据分析运算中。
在传统的大型数据中心,网络结构通常如图1所示,即互连网络模型(hierarchical inter-networking model)。这个模型包含了以下部分:
服务器140:各服务器140是数据中心的处理和存储实体,数据中心中大量数据的处理和存储都是由这些服务器140完成的。
接入交换机130:接入交换机130是用来让服务器140接入到数据中心中的交换机。一台接入交换机130接入多台服务器140。接入交换机130通常位于机架顶部,所以它们也被称为机顶(Top of Rack)交换机,它们物理连接服务器。
汇聚交换机120:每台汇聚交换机120连接多台接入交换机130,同时提供其他的服务,例如防火墙,入侵检测,网络分析等。
核心交换机110:核心交换机110为进出数据中心的包提供高速的转发,为汇聚交换机120提供连接性。整个数据中心的网络分为L3层路由网络和L2层路由网络,核心交换机110为通常为整个数据中心的网络提供一个弹性的L3层路由网络。
通常情况下,汇聚交换机120是L2和L3层路由网络的分界点,汇聚交换机120以下的是L2网络,以上是L3网络。每组汇聚交换机管理一个传送点(POD,Point Of Delivery),每个POD内都是独立的VLAN网络。服务器在POD内迁移不必修改IP地址和默认网关,因为一个POD对应一个L2广播域。
汇聚交换机120和接入交换机130之间通常使用生成树协议(STP,Spanning TreeProtocol)。STP使得对于一个VLAN网络只有一个汇聚层交换机120可用,其他的汇聚交换机120在出现故障时才被使用(上图中的虚线)。也就是说,在汇聚交换机120的层面,做不到水平扩展,因为就算加入多个汇聚交换机120,仍然只有一个在工作。
云是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,因此,可以将接入交换机130、汇聚交换机120、核心交换机110整体看成云100。图2是图1的一个简化示意图,各个服务器140连接在云100的后台,其中,一些服务器140可能会产生数据,经由云100传递到其它服务器140消费。在服务器140内部也会存在不同的指令执行单元226,其中,一些指令执行单元226产生数据,由服务器140内部的其它指令执行单元226消费。在指令执行单元226内部也会存在不同的执行组件,其中,一些执行组件产生数据,由指令执行单元226内部的其它执行组件消费。下文中会分别针对这三种情况,详细描述在每一种情况下的异步数据分发的实施。
服务器
由于服务器140才是数据中心真实的处理设备,图3示出了一个服务器140内部的结构框图。服务器140包括由总线连接的存储器210、处理单元集群270和其它单元集群280。处理单元集群270包括多个处理单元220。其它单元集群280包括图形处理单元230、加速单元240等。
图形处理单元230是计算机显示系统的核心,具有强大的数据计算能力,以硬件加速器的形式实现了二维/三维( Two Dimension /Three Dimension,2D/3D) 图形处理、图像处理和显示控制等功能,将通用CPU从复杂的图形算法和绘制中解放出来,已经成为几乎所有类型计算机系统的标准配置。加速单元240是为了加速神经网络模型的运算处理速度而设计的专门处理单元,可以体现为专门为神经网络运算处理设计的处理单元、图形处理单元(GPU)、专用集成电路(ASIC)和现场可编程门阵列(FPGA)等。处理单元220是指通用CPU。在服务器140中,关于图形处理的部分从通用CPU中脱离出来,由图形处理单元230执行。关于神经网络模型计算处理的部分从通用CPU中脱离出来,由加速单元240执行。这样,处理单元220仅需承担服务器140中比较传统的简单的运算、以及将图形处理、加速处理等复杂任务向图形处理单元230、加速单元240的调度。
传统的中央处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有效,而在图形处理和大规模并行计算方面则效率不够。因此,开发出了各种专门的图形处理单元230和加速单元240等,用来针对一些复杂领域的计算(图形处理、神经网络计算等)进行更有效的处理。
计算设备概述
图4A是在本公开一个实施例中异步数据分发器230的一个应用环境的示意图。在该应用环境中,数据生产和数据消费由同一处理器核220中的同一指令执行单元226中的不同执行组件执行,异步数据分发器230也位于同一处理器核220中。
在该应用环境中,多个服务器140连接到云100。每个服务器140包括存储210、处理单元220等。由于本实施例与图形处理单元230、加速单元240没有关系,因此,在图4A中未示出图3的图形处理单元230、加速单元240。
在一些实施例中,每个处理器220可以包括用于处理指令的一个或多个处理器核221,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个处理器核221可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(Complex Instruction Set Computing, CISC)、精简指令集计算(Reduced Instruction Set Computing, RISC)或基于超长指令字(Very LongInstruction Word, VLIW)的计算。不同的处理器核221可以各自处理不同或相同的指令集。在一些实施例中,处理器核221还可以包括其他处理模块,例如数字信号处理器(Digital Signal Processor, DSP)等。作为一种示例,图4A中示出了处理器核1至m,m是非0的自然数。
在一些实施例中,图4A示出的处理器核221包括高速缓冲存储器222,用于对存储器210中的一些可能会被反复调用的程序数据或者数据对象等进行缓存。高速缓冲存储器222例如由静态随机存储器(Static Random Access Memory, 简称为SRAM)等类型的存储装置实现。高速缓冲存储器222可以为多级结构,例如具有一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)的三级缓存结构,也可以是三级以上的缓存结构或其他类型缓存结构。高速缓存存储器222可以被全部或部分集成于处理器核221中。且根据不同架构,高速缓冲存储器222可以是位于各个处理器核221之内和/或之外的单个或多级的内部高速缓冲存储器,也可以包括面向指令的指令高速缓存和面向数据的数据高速缓存。在一些实施例中,处理器220中的各个部件可以共享至少一部分的高速缓冲存储器。处理器220还可以包括外部高速缓存(未示出),其他高速缓存结构也可以作为处理器220的外部高速缓存。
在一些实施例中,如图4A所示,处理器核221可以包括寄存器堆229(RegisterFile),寄存器堆229可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型的。例如,寄存器堆229可以包括:整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆229中的寄存器可以选用通用寄存器来实现,也可以根据处理器核221的实际需求采用特定的设计。
处理器核221用于执行指令序列(即程序)。处理器核221执行每个指令的过程包括:从存放指令的存储器210中取出指令、对取出的指令进行译码、执行译码后的指令、保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。对于一个任务而言,任务对应的一个个程序指令会分配到存储器,处理器核221会顺次取出指令、译码、按照属于哪个执行组件分配给相应执行组件执行等。
为了实现上述过程,处理器核221可以包含取指令单元223、指令译码单元224、指令发射单元225、指令执行单元226和指令引退单元227等。
取指令单元223作为处理器核221的启动引擎,用于将指令从存储器210中搬运到指令寄存器(可以是寄存器堆229中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
取出指令后,处理器核221进入指令译码阶段,指令译码单元224按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元226的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
指令发射单元225通常存在于高性能的处理器220中,位于指令译码单元224与指令执行单元226之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元226,使得多个指令的并行操作成为可能。指令发射单元225判断指令是属于哪个执行组件的指令,据此发送给指令执行单元226中相应的执行组件执行,即执行该指令所指示的操作、实现相应的功能。指令执行单元226中包括数据生产执行组件2261和数据消费执行组件2262。
数据生产执行组件2261是指令执行单元226中执行用于数据生产的进程的子单元。在上述摄像头拍摄环境的视频的例子中,控制摄像头进行视频拍摄可以由控制拍摄的进程实现。指令执行单元226中执行该进程的子单元就是一种数据生产执行组件2261。在采集麦克风收集的人声进行美化的例子中,控制麦克风收集人声由控制麦克风收集人声的进程实现,指令执行单元226中执行该进程的子单元也是一种数据生产执行组件2261。在车载摄像头收集车辆环境视频数据的例子中,控制车载摄像头收集车辆环境视频数据由相应的进程实现,指令执行单元226中执行该进程的子单元也是一种数据生产执行组件2261。
数据消费执行组件2262是指令执行单元226中执行用于数据消费的进程执行组件。在上述对摄像头拍摄的视频进行拉伸缩放和绘制显示的例子中,拉伸缩放和绘制显示可以分别由 ImageProc进程和OSD绘制进程来实现。指令执行单元226中执行这两种进程的子单元就是两种数据消费执行组件2262。在采集麦克风收集的人声进行美化的例子中,对采集的人声进行美化由相应的美化进程实现,指令执行单元226中执行该进程的子单元也是一种数据消费执行组件2262。在车载摄像头收集车辆环境视频数据的例子中,处理收集的车辆环境视频数据以产生控制无人车行驶的控制信号由相应的控制进程实现,指令执行单元226中执行该控制进程的子单元也是一种数据消费执行组件2262。
指令引退单元227主要用于负责将指令执行单元226产生的执行结果写回到相应的存储位置(例如为寄存器堆229)中,以使后续指令能够从该存储位置处快速获取相应的执行结果。
存储控制单元228是对向存储器210的读写进行控制的单元,它主要完成向存储器210写入/读取程序或数据对象时物理地址与逻辑地址的转换等。
下面结合上述部件对任务执行时任务中的指令的执行过程作一个总体描述。
服务器140要执行的指令存储在存储器210中。为了执行指令,取指令单元223逐条从存储器210中取出任务中的指令。指令被取指令单元223获取之后,指令译码单元224可以对指令进行译码处理,使得指令中的源操作数可被获取。译码处理后的指令被指令发射单元225分配至相应的指令执行单元226的相应的执行组件中执行,该指令执行单元226可以对指令的源操作数进行相应的运算(例如由算术逻辑单元对存储于寄存器中的源操作数进行运算)以获得指令对应的地址信息,并根据该地址信息发起相应的请求,例如地址转译请求、写访问请求等。
指令的源操作数通常包括地址操作数,指令执行单元226对该地址操作数进行运算以获得指令对应的虚拟地址或物理地址。虚拟地址可以转换成物理地址。指令执行单元226可以根据转译后的物理地址通过存储控制单元228访问高速缓冲存储器222和/或存储器210。
如上所述,由于数据生产执行组件2261产生数据的速度与数据消费执行组件2262消费数据的速度是不同的,当数据消费执行组件2262消费完产生的数据后,有时为了保证数据的同步性,要等待数据生产执行组件2261,造成时间浪费。有些情形下,并没有严格的数据完整性要求,但对实时性要求较高。在这样的情况下,允许丢弃一些数据,数据虽有部分丢失,但满足了实时性要求,即异步数据分发。异步数据分发器230就是处理器核1内部用于处理异步数据分发的模块。数据生产执行组件2261产生了数据后,不是立即传送给数据消费执行组件2262消费,而是先传送给异步数据分发器230,由异步数据分发器230根据每个数据的执行情况,决定是否要抛弃这个数据不传送给数据消费执行组件2262。
下面结合图5,来描述异步数据分发器230的具体结构。异步数据分发器230包括数据生产执行组件接口单元2301、数据缓存2304、数据消费执行组件接口单元2302、调度单元2303、注册单元2305。但数据缓存2304也可以不在异步数据分发器230中,而是在处理器核221内部、异步数据分发器230外部(未示)。
数据生产执行组件接口单元2301是与数据生产执行组件2261的接口,它负责异步数据分发器230从数据生产执行组件2261接收数据序列。数据序列是指,数据生产出来后,生产出来的数据按照生产的顺序排列成的序列。例如,数据序列包括连续的数据A-1、数据A-2、数据A-3、数据A-4……其中,这些数据是按照A-1、A-2、A-3、A-4……的顺序生产出来的,也将按照A-1、A-2、A-3、A-4……的顺序被消费,如图6A所示。
数据缓存2304是用于缓存所述数据序列的单元。为了比较并确定是否需要丢弃数据序列中的数据,可以在数据缓存2304中为数据序列中的每个数据关联存储一个预计发送时间。该预计发送时间的生成在下文中描述。
数据消费执行组件接口单元2302是用于将数据序列中的数据发送给数据消费执行组件2262的单元。这里的发送是指异步发送,即允许丢弃一些数据,从而保证实时性。为了确定是否应该丢弃数据序列中的数据,每个数据关联存储有一个预计发送时间,其中,数据序列中数据的预计发送时间应该等于该序列中上一数据的预计发送时间加上数据消费执行组件2262消费上一数据耗用的时间。即,数据消费执行组件2262消费完上一数据后,发送当前数据到数据消费执行组件2262,数据消费执行组件2262立刻开始消费当前数据。这样,数据消费执行组件2262的数据消费是连续的,没有浪费时间。如果数据消费执行组件2262消费完上一数据耗用的时间超过了预计的消费完上一数据耗用的时间,这时数据消费执行组件2262消费完上一数据的时间点,已经超出了当前数据的预计发送时间。此时,发送当前数据已经没有什么意义了,因为没有实时性。而且发送当前数据又导致数据消费执行组件2262消费完当前数据的时间点又晚于下一数据的预计发送时间,使得下一数据的发送又没有实时性。此时,就果断丢弃当前数据。
数据消费执行组件接口单元2302发送数据序列中的数据时,可以按照所述数据缓存中存储的数据的预计发送时间,将数据复制,发送至所述数据消费执行组件。复制数据是考虑到,可能该数据还要发送到其它的数据消费执行组件2262,因此,不采用直接取出数据发送,而是复制一份数据发送的形式。当之后需要再次发送该数据时,还可以再次进行复制发送,从而实现一份数据能够发送给多个数据消费执行组件2262的目的。数据消费执行组件2262消费完数据后,数据消费执行组件接口单元2302从数据消费执行组件2262接收消费完数据的应答。这时,数据消费执行组件接口单元2302将接收所述应答的时间与数据缓存2304存储的下一数据的预计发送时间进行比较,如果晚于下一数据的预计发送时间,说明该数据消费完时,已经错过了下一数据应该发送的时间,再发送下一数据也无法满足实时性要求,应阻止复制下一数据发送到数据消费执行组件2262,并复制再下一个数据发送到所述数据消费执行组件2262。相反,如果数据消费执行组件接口单元2302在接收应答的时间早于下一数据的预计发送时间的情况下,就可以复制下一数据发送到所述数据消费执行组件2262。
如图6A所示,数据序列包括连续的数据A-1、数据A-2、数据A-3、数据A-4,预计发送时间分别为7:56:17,7:56:20,7:56:22,7:56:25。因此,在7:56:17,数据消费执行组件接口单元2302复制数据A-1,发送到数据消费执行组件2262。数据消费执行组件2262在7:56:21才消费完数据A-1,向数据消费执行组件接口单元2302返回应答。数据消费执行组件接口单元2302发现此时已经距离数据A-2的预计发送时间晚了1秒,没有必要再发送数据A-2了,在7:56:21阻止数据A-2的发送,并且可以将数据A-3向数据消费执行组件2262发送。因此,在图6A中,数据A-1、A- 3、A- 4都被发送到数据消费执行组件2263,但数据A-2被阻止发送。
但是,如果数据消费执行组件2262在7:56:19就消费完数据A-1,数据消费执行组件接口单元2302发现此时已经距离数据A-2的预计发送时间早了1秒,这时就可以在数据A-2的预计发送时间7:56:20将数据A-2向数据消费执行组件2262发送。
调度单元2303根据数据缓存2304中数据序列中每个数据的大小和数据消费执行组件的处理速度,确定每个数据的预计发送时间,以与数据存储到所述数据缓存2304。具体地,数据生产执行组件接口单元2301接收到数据序列后,一方面将其向数据缓存2304存储,另一方面发送给调度单元2303确定预计发送时间。在一个实施例中,当前数据的预计发送时间等于上一数据的预计发送时间加上当前数据大小除以数据消费执行组件的处理速度的商。当前数据大小除以数据消费执行组件的处理速度,得到的是数据消费执行组件消费当前数据需要的时间长度。因此,从上一数据的预计发送时间向后推该时间长度,就得到了当前数据的预计发送时间。例如,上一数据的预计发送时间是7:56:17,当前数据大小是300Mb,数据消费执行组件2262消费数据的速度是150Mb/s,因此当前数据需要消费2s,因此,当前数据的预计发送时间是7:56:19。
另外,同一数据生产执行组件2261生产出来的数据,经常有需要传递给不同的数据消费执行组件2262消费的需求,这种情况下也需要异步数据分发器230来解决同一数据向不同消费者的分发问题。
在同一数据向不同消费者的分发的场景下,如图4B所示,数据消费执行组件2262包括第一数据消费执行组件2262-1和第二数据消费执行组件2262-2,数据消费执行组件接口单元2263包括第一数据消费执行组件接口单元2263-1和第二数据消费执行组件接口单元2263-2,
由于第一数据消费执行组件接口单元2263-1和第二数据消费执行组件接口单元2263-2分别向对应的第一数据消费执行组件2262-1和第二数据消费执行组件2262-2发送数据时,都是从数据缓存2304的数据序列中,拷贝数据发送,因此,可以同时向不同的数据消费执行组件方式。
如图6B所示,第一数据消费执行组件接口单元2263-1按照数据缓存2304中存储的数据A-1的预计发送时间,复制数据A-1,发送至第一数据消费执行组件2262-1。第一数据消费执行组件2262-1消费完数据A-1后,向第一数据消费执行组件接口单元2263-1发送消费完数据A-1的应答。第一数据消费执行组件接口单元2263-1将接收所述应答的时间与数据A-2的预计发送时间进行比较,发现晚于数据A-2的预计发送时间,停止复制数据A-2发送到第一数据消费执行组件2262-1,而是复制数据A-3发送到第一数据消费执行组件2262-1。第一数据消费执行组件2262-1消费完数据A-3后,向第一数据消费执行组件接口单元2263-1发送消费完数据A-3的应答。第一数据消费执行组件接口单元2263-1将接收所述应答的时间与数据A-4的预计发送时间进行比较,发现未晚于数据A-4的预计发送时间。这时,可以在数据A-4的预计发送时间,复制数据A-4,发送到第一数据消费执行组件2262-1。
同时,第二数据消费执行组件接口单元2263-2也按照数据缓存2304中存储的数据A-1的预计发送时间,复制数据A-1,发送至第二数据消费执行组件2262-2。第二数据消费执行组件2262-2消费完数据A-1后,向第二数据消费执行组件接口单元2263-2发送消费完数据A-1的应答。第二数据消费执行组件接口单元2263-2将接收所述应答的时间与数据A-2的预计发送时间进行比较,发现晚于数据A-2的预计发送时间,停止复制数据A-2发送到第二数据消费执行组件2262-2,并复制数据A-3发送到第二数据消费执行组件2262-2。第二数据消费执行组件2262-2消费完数据A-3后,向第二数据消费执行组件接口单元2263-2发送消费完数据A-3的应答。第二数据消费执行组件接口单元2263-2将接收所述应答的时间与数据A-4的预计发送时间进行比较,发现晚于数据A-4的预计发送时间。这时,将数据A-4丢弃不发送。
因此,在图6B中,对于第一数据消费执行组件2262-1来说,数据A-2没有被复制发送,而对于第二数据消费执行组件2262-2来说,数据A-2和A-4没有被复制发送。
在上面的情况下,数据消费执行组件2262有多个,但数据生产执行组件2261只有一个,生产的都是同一种数据。但在某些情况下,多个数据生产执行组件分别生产不同类型的数据,多个数据消费执行组件根据要消费的类型选择不同的数据消费。这种场景的实现稍微复杂。本公开一个进一步的实施例能够解决该场景的实现。
在该实施例中,如图4C所示,数据生产执行组件2261包括第一数据生产执行组件2261-1和第二数据生产执行组件2261-2。数据生产执行组件接口单元2301包括第一数据生产执行组件接口单元2301-1和第二数据生产执行组件接口单元2301-2。数据缓存2304中的数据序列包括第一数据生产执行组件2261-1发送的第一数据序列和第二数据生产执行组件2261-2发送的第二数据序列。第一数据生产执行组件接口单元2301-1接收第一数据生产执行组件2261-1发送的第一数据序列,第二数据生产执行组件接口单元2301-2接收第二数据生产执行组件2261-2发送的第二数据序列。
为了让不同的数据消费执行组件(图4C示出了第一数据消费执行组件2262-1、第二数据消费执行组件2262-2、第三数据消费执行组件2262-3)能够区分出其需要的数据类型,从而能获得其需要的数据生产执行组件生产出的数据,如图5所示,同步数据分发器2303还包括注册单元2305。各个数据生产执行组件2261将其生产的数据类型向注册单元2305注册,各个数据消费执行组件2263也将其要消费的数据类型向注册单元2305注册。这样,异步数据分发中,可以根据各数据生产执行组件2261生产的数据类型和各数据消费执行组件2263消费的数据类型的匹配,来为数据消费执行组件2263分发到其需要的数据生产执行组件2261生产的数据。
数据消费执行组件接口单元2302接收到数据消费执行组件2263的数据消费请求后,根据注册单元2305中所述数据消费执行组件2263注册的数据类型,查找第一数据生产执行组件2261-1的第一数据类型和第二数据生产执行组件2261-2的第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据到所述数据消费执行组件2263。
如图6C所示,第一数据生产执行组件2261-1注册的数据类型是A,第二数据生产执行组件2261-2注册的数据类型是B,第一数据消费执行组件2263-1、第二数据消费执行组件2263-2注册的需要的数据类型是A,第三数据消费执行组件2263-3注册的需要的数据类型是B。因此,数据消费执行组件接口单元2302接收到第一数据消费执行组件2263-1或第二数据消费执行组件2263-2的数据消费请求后,由于注册单元2305中注册的与第一数据消费执行组件2263-1或第二数据消费执行组件2263-2需要的数据类型A匹配的数据生产执行组件是第一数据生产执行组件2261-1,因此,从第一数据生产执行组件2261-1生产的第一数据序列,复制数据到第一数据消费执行组件2263-1和第一数据消费执行组件2263-2,其复制过程如图6B类似,故不赘述。数据消费执行组件接口单元2302接收到第三数据消费执行组件2263-3的数据消费请求后,由于注册单元2305中注册的与第三数据消费执行组件2263-3需要的数据类型B匹配的数据生产执行组件是第二数据生产执行组件2261-2,因此,从第二数据生产执行组件2261-2生产的第二数据序列,复制数据到第三数据消费执行组件2263-3,其复制过程如图6B类似,故不赘述。
通过上述过程,实现了多个数据生产执行组件和多个数据消费执行组件的情况下,各数据消费执行组件按需消费其需要的数据生产执行组件生产的数据。
图7A是在本公开一个实施例中异步数据分发器230的另一个应用环境的示意图。在该应用环境中,数据生产和数据消费由同一处理器的不同处理器核220中的指令执行单元2271和2272执行,异步数据分发器230也位于同一处理器220中。
如图7A所示,在该应用环境中,多个服务器140连接到云100。每个服务器140有存储器210和处理器220。处理器220包括多个处理器核221,其中数据生产指令执行单元2271和数据消费指令执行单元2272分别位于其中的2个处理器核221中。此外,异步数据分发器230还连接到各处理器核221。由于本实施例与图形处理单元230、加速单元240没有关系,因此,在图7A中未示出图3的图形处理单元230、加速单元240。
在一些实施例中,每个处理器220可以包括用于处理指令的一个或多个处理器核221,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。在一些实施例中,每个处理器核221可以用于处理特定的指令集。在一些实施例中,指令集可以支持复杂指令集计算(Complex Instruction Set Computing, CISC)、精简指令集计算(Reduced Instruction Set Computing, RISC)或基于超长指令字(Very LongInstruction Word, VLIW)的计算。不同的处理器核221可以各自处理不同或相同的指令集。在一些实施例中,处理器核221还可以包括其他处理模块,例如数字信号处理器(Digital Signal Processor, DSP)等。作为一种示例,图7A中示出了处理器核1至3,但m也可以是自然数。
图7A中各处理器核的内部结构与图4A基本相同,不同的是没有数据生产执行组件2361和数据消费执行组件2262,而在不同的处理器核221内有数据生产指令执行单元2271和数据消费指令执行单元2272。为了避免模糊本公开实施例的重点,在处理器核221中只画出了数据生产指令执行单元2271或数据消费指令执行单元2272,但实际上,如图4A示出的处理器核221中的其它单元也是存在的。另外,在处理器220中存在各处理器核221共享的异步数据分发器230。
由于数据生产指令执行单元2271产生数据的速度与数据消费指令执行单元2272消费数据的速度是不同的,当数据消费指令执行单元2272消费完产生的数据后,有时为了保证数据的同步性,要等待数据生产指令执行单元2271,造成时间浪费。有些情形下,并没有严格的数据完整性要求,但对实时性要求较高。在这样的情况下,允许丢弃一些数据,数据虽有部分丢失,但满足了实时性要求,即异步数据分发。数据生产指令执行单元2271产生了数据后,不是立即传送给数据消费指令执行单元2272消费,而是先传送给异步数据分发器230,由异步数据分发器230根据每个数据的执行情况,决定是否要抛弃这个数据不传送给数据消费指令执行单元2272。
该实施例下的异步数据分发器230的具体结构与图5基本上是相同的,只不过用数据生产指令执行单元接口单元2306取代了数据生产执行组件接口单元2301,用数据消费指令执行单元接口单元2307取代了数据消费执行组件接口单元2302。数据生产指令执行单元接口单元2306是与数据生产指令执行单元2271的接口,它负责异步数据分发器230从数据生产指令执行单元2271接收数据序列。数据消费指令执行单元接口单元2307是用于将数据序列中的数据发送给数据消费指令执行单元2272的单元。
另外,所述数据缓存2304可以如图5所示位于异步数据分发器230内部,但也可以在处理器220内部、异步数据分发器230外部(未示)。
数据消费指令执行单元接口单元2307发送数据序列中的数据时,可以按照所述数据缓存2304中存储的数据的预计发送时间,将数据复制,发送至数据消费指令执行单元2272。复制数据是考虑到,可能该数据还要发送到其它的数据消费指令执行单元2272,因此,不采用直接取出数据发送,而是复制一份数据发送的形式。当之后需要再次发送该数据时,还可以再次进行复制发送,从而实现一份数据能够发送给多个数据消费指令执行单元2272的目的。数据消费指令执行单元2272消费完数据后,数据消费指令执行单元接口单元2307从数据消费指令执行单元2272接收消费完数据的应答。这时,数据消费指令执行单元接口单元2307将接收所述应答的时间与数据缓存2304存储的下一数据的预计发送时间进行比较,如果晚于下一数据的预计发送时间,说明该数据消费完时,已经错过了下一数据应该发送的时间,再发送下一数据也无法满足实时性要求,应停止复制下一数据发送到数据消费指令执行单元2272,而是复制再下一个数据发送到所述数据消费指令执行单元2272。相反,如果数据消费指令执行单元接口单元2307在接收应答的时间早于下一数据的预计发送时间的情况下,就可以复制下一数据发送到所述数据消费指令执行单元2272。
如图9A所示,数据序列包括连续的数据A-1、数据A-2、数据A-3、数据A-4,预计发送时间分别为7:56:17,7:56:20,7:56:22,7:56:25。因此,在7:56:17,数据消费指令执行单元接口单元2307复制数据A-1,发送到数据消费指令执行单元2272。数据消费指令执行单元2272在7:56:21才消费完数据A-1,向数据消费指令执行单元接口单元2307返回应答。数据消费指令执行单元接口单元2307发现此时已经距离数据A-2的预计发送时间晚了1秒,没有必要再发送数据A-2了,在7:56:21阻止数据A-2的发送,并且可以将数据A-3向数据消费指令执行单元2272发送。因此,在图9A中,数据A-1、A- 3、A- 4都被发送到数据消费指令执行单元2272,但数据A-2被阻止发送。
但是,如果数据消费指令执行单元2272在7:56:19就消费完数据A-1,数据消费指令执行单元接口单元2307发现此时已经距离数据A-2的预计发送时间早了1秒,这时就可以在数据A-2的预计发送时间7:56:20将数据A-2向数据消费指令执行单元2272发送。
调度单元2303根据数据缓存2304中数据序列中每个数据的大小和数据消费指令执行单元的处理速度,确定每个数据的预计发送时间,以与数据存储到所述数据缓存2304。具体地,数据生产指令执行单元接口单元2306接收到数据序列后,一方面将其向数据缓存2304存储,另一方面发送给调度单元2303确定预计发送时间。在一个实施例中,当前数据的预计发送时间等于上一数据的预计发送时间加上当前数据大小除以数据消费指令执行单元的处理速度的商。当前数据大小除以数据消费执行组件的处理速度,得到的是数据消费指令执行单元消费当前数据需要的时间长度。因此,从上一数据的预计发送时间向后推该时间长度,就得到了当前数据的预计发送时间。例如,上一数据的预计发送时间是7:56:17,当前数据大小是300Mb,数据消费指令执行单元2272消费数据的速度是150Mb/s,因此当前数据需要消费2s,因此,当前数据的预计发送时间是7:56:19。
另外,同一数据生产指令执行单元2271生产出来的数据,经常有需要传递给不同的数据消费指令执行单元2272消费的需求,这种情况下也需要异步数据分发器230来解决同一数据向不同消费者的分发问题。
在同一数据向不同消费者的分发的场景下,如图7B和9B所示,数据消费指令执行单元2272包括第一数据消费指令执行单元2272-1和第二数据消费指令执行单元2272-2。相应地,数据消费指令执行单元接口单元2307包括第一数据消费指令执行单元接口单元(未示)和第二数据消费指令执行单元接口单元(未示)。
由于第一数据消费指令执行单元接口单元和第二数据消费指令执行单元接口单元分别向对应的第一数据消费指令执行单元2272-1和第二数据消费指令执行单元2272-2发送数据时,都是从数据缓存2304的数据序列中,拷贝数据发送,而不是直接发送,因此,可以同时向不同的数据消费执行组件方式。
如图9B所示,第一数据消费指令执行单元接口单元按照数据缓存2304中存储的数据A-1的预计发送时间,复制数据A-1,发送至第一数据消费指令执行单元2272-1。第一数据消费指令执行单元2272-1消费完数据A-1后,向第一数据消费指令执行单元接口单元发送消费完数据A-1的应答。第一数据消费指令执行单元接口单元将接收所述应答的时间与数据A-2的预计发送时间进行比较,发现晚于数据A-2的预计发送时间,停止复制数据A-2发送到第一数据消费指令执行单元2272-1,此时复制数据A-3发送到第一数据消费指令执行单元2272-1。第一数据消费指令执行单元2272-1消费完数据A-3后,向第一数据消费执行组件接口单元发送消费完数据A-3的应答。第一数据消费指令执行单元接口单元将接收所述应答的时间与数据A-4的预计发送时间进行比较,发现未晚于数据A-4的预计发送时间。这时,可以在数据A-4的预计发送时间,复制数据A-4,发送到第一数据消费指令执行单元2272-1。
同时,第二数据消费指令执行单元接口单元也按照数据缓存2304中存储的数据A-1的预计发送时间,复制数据A-1,发送至第二数据消费指令执行单元2272-2。第二数据消费指令执行单元2272-2消费完数据A-1后,向第二数据消费指令执行单元接口单元发送消费完数据A-1的应答。第二数据消费指令执行单元接口单元将接收所述应答的时间与数据A-2的预计发送时间进行比较,发现晚于数据A-2的预计发送时间,停止复制数据A-2发送到第二数据消费指令执行单元2272-2,并复制数据A-3发送到第二数据消费指令执行单元2272-2。第二数据消费指令执行单元2272-2消费完数据A-3后,向第二数据消费指令执行单元接口单元发送消费完数据A-3的应答。第二数据消费指令执行单元接口单元将接收所述应答的时间与数据A-4的预计发送时间进行比较,发现晚于数据A-4的预计发送时间。这时,将数据A-4丢弃不发送。
因此,在图9B中,对于第一数据消费指令执行单元2272-1来说,数据A-2没有被复制发送,而对于第二数据消费指令执行单元2272-2来说,数据A-2和A-4没有被复制发送。
在上面的情况下,数据消费指令执行单元2272有多个,但数据生产指令执行单元2271只有一个,生产的都是同一种数据。但在某些情况下,多个数据生产指令执行单元分别生产不同类型的数据,多个数据消费指令执行单元根据要消费的类型选择不同的数据消费。这种场景的实现稍微复杂。本公开一个进一步的实施例能够解决该场景的实现。
在该实施例中,如图7C和9C所示,数据生产指令执行单元2271包括第一数据生产指令执行单元2271-1和第二数据生产指令执行单元2271-2。数据生产指令执行单元接口单元2306包括第一数据生产指令执行单元接口单元(未示)和第二数据生产指令执行单元接口单元(未示)。数据缓存2304中的数据序列包括第一数据生产指令执行单元2271-1发送的第一数据序列和第二数据生产指令执行单元2271-2发送的第二数据序列。第一数据生产指令执行单元接口单元接收第一数据生产指令执行单元2271-1发送的第一数据序列,第二数据生产执行组件接口单元接收第二数据生产指令执行单元2271-2发送的第二数据序列。
为了让不同的数据消费指令执行单元(图7C示出了第一数据消费指令执行单元2272-1、第二数据消费指令执行单元2272-2、第三数据消费指令执行单元2272-3)能够区分出其需要的数据类型,从而能获得其需要的数据生产指令执行单元生产出的数据,如图8所示,同步数据分发器230还包括注册单元2305。各个数据生产指令执行单元2271将其生产的数据类型向注册单元2305注册,各个数据消费执行组件2262也将其要消费的数据类型向注册单元2305注册。这样,异步数据分发中,可以根据各数据生产指令执行单元2271生产的数据类型和各数据消费指令执行单元2262消费的数据类型的匹配,来为数据消费指令执行单元2262分发其需要的数据生产指令执行单元2271生产的数据。
数据消费指令执行单元接口单元2307接收到数据消费指令执行单元2262的数据消费请求后,根据注册单元2305中数据消费指令执行单元2262注册的数据类型,查找第一数据生产指令执行单元2271-1的第一数据类型和第二数据生产指令执行单元2271-2的第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据到所述数据消费指令执行单元2262。
如图9C所示,第一数据生产指令执行单元2271-1注册的数据类型是A,第二数据生产指令执行单元2271-2注册的数据类型是B,第一数据消费指令执行单元2262-1、第二数据消费指令执行单元2262-2注册的需要的数据类型是A,第三数据消费指令执行单元2262-3注册的需要的数据类型是B。因此,数据消费指令执行单元接口单元2307接收到第一数据消费指令执行单元2262-1或第二数据消费指令执行单元2262-2的数据消费请求后,由于注册单元2305中注册的与第一数据消费指令执行单元2262-1或第二数据消费指令执行单元2262-2需要的数据类型A匹配的数据生产指令执行单元是第一数据生产指令执行单元2271-1,因此,从第一数据生产指令执行单元2271-1生产的第一数据序列,复制数据到第一数据消费指令执行单元2262-1和第二数据消费指令执行单元2262-2,其复制过程如图9B类似,故不赘述。数据消费指令执行单元接口单元2307接收到第三数据消费指令执行单元2262-3的数据消费请求后,由于注册单元2305中注册的与第三数据消费指令执行单元2262-3需要的数据类型B匹配的数据生产执行组件是第二数据生产指令执行单元2271-2,因此,从第二数据生产指令执行单元2271-2生产的第二数据序列,复制数据到第三数据消费指令执行单元2262-3,其复制过程如图9B类似,故不赘述。
通过上述过程,实现了多个数据生产指令执行单元和多个数据消费指令执行单元的情况下,各数据消费指令执行单元按需消费其需要的数据生产指令执行单元生产的数据。
图10A是在本公开一个实施例中异步数据分发器230的另一个应用环境的示意图。在该应用环境中,数据生产和数据消费由不同的服务器执行,即数据生产服务器1401、数据消费服务器1402执行。数据生产服务器1401、数据消费服务器1402通过云100连接,异步数据分发器230也通过云100与数据生产服务器1401、数据消费服务器1402连接。
前面的实施例中已经详细讨论过服务器的内部结构,因此,不再赘述数据生产服务器1401、数据消费服务器1402的内部结构。
由于数据生产服务器1401产生数据的速度与数据消费服务器1402消费数据的速度是不同的,当数据消费服务器1402消费完产生的数据后,有时为了保证数据的同步性,要等待数据生产服务器1401,造成时间浪费。有些情形下,并没有严格的数据完整性要求,但对实时性要求较高。在这样的情况下,允许丢弃一些数据,数据虽有部分丢失,但满足了实时性要求,即异步数据分发。数据生产服务器1401产生了数据后,不是立即传送给数据消费服务器1402消费,而是先传送给异步数据分发器230,由异步数据分发器230根据每个数据的执行情况,决定是否要抛弃这个数据不传送给数据消费服务器1402。
该实施例下的异步数据分发器230的具体结构与图5基本上是相同的,只不过用数据生产服务器接口单元2308取代了数据生产执行组件接口单元2301,用数据消费服务器接口单元2309取代了数据消费执行组件接口单元2302。
另外,所述数据缓存2304可以位于所述异步数据分发器230内部,但也可以在异步数据分发器230外部,成为与异步数据分发器230并列的部件。
数据生产服务器接口单元2308是与数据生产服务器1401的接口,它负责异步数据分发器230从数据生产服务器1401接收数据序列。数据消费服务器接口单元2309是用于将数据序列中的数据发送给数据消费服务器1402的单元。
数据消费服务器接口单元2309发送数据序列中的数据时,可以按照所述数据缓存2304中存储的数据的预计发送时间,将数据复制,发送至数据消费服务器1402。复制数据是考虑到,可能该数据还要发送到其它的数据消费服务器1402,因此,不采用直接取出数据发送,而是复制一份数据发送的形式。当之后需要再次发送该数据时,还可以再次进行复制发送,从而实现一份数据能够发送给多个数据消费服务器1402的目的。数据消费服务器1402消费完数据后,数据消费服务器接口单元2309从数据消费服务器1402接收消费完数据的应答。这时,数据消费服务器接口单元2309将接收所述应答的时间与数据缓存2304存储的下一数据的预计发送时间进行比较,如果晚于下一数据的预计发送时间,说明该数据消费完时,已经错过了下一数据应该发送的时间,再发送下一数据也无法满足实时性要求,应停止复制下一数据发送到数据消费服务器1402,并复制再下一个数据发送到所述数据消费服务器1402。相反,如果数据消费服务器接口单元2309在接收应答的时间早于下一数据的预计发送时间的情况下,就可以复制下一数据发送到所述数据消费服务器1402。
如图12A所示,数据序列包括连续的数据A-1、数据A-2、数据A-3、数据A-4,预计发送时间分别为7:56:17,7:56:20,7:56:22,7:56:25。因此,在7:56:17,数据消费服务器接口单元2309复制数据A-1,发送到数据消费服务器1402。数据消费服务器1402在7:56:21才消费完数据A-1,向数据消费服务器接口单元2309返回应答。数据消费服务器接口单元2309发现此时已经距离数据A-2的预计发送时间晚了1秒,没有必要再发送数据A-2了,在7:56:21阻止数据A-2的发送,并且可以将数据A-3向数据消费服务器1402发送。因此,在图12A中,数据A-1、A- 3、A- 4都被发送到数据消费服务器1402,但数据A-2被阻止发送。
但是,如果数据消费服务器1402在7:56:19就消费完数据A-1,数据消费服务器接口单元2309发现此时已经距离数据A-2的预计发送时间早了1秒,这时就可以在数据A-2的预计发送时间7:56:20将数据A-2向数据消费服务器1402发送。
调度单元2303根据数据缓存2304中数据序列中每个数据的大小和数据消费指令执行单元的处理速度,确定每个数据的预计发送时间,以与数据存储到所述数据缓存2304。具体地,数据生产服务器接口单元2308接收到数据序列后,一方面将其向数据缓存2304存储,另一方面发送给调度单元2303确定预计发送时间。在一个实施例中,当前数据的预计发送时间等于上一数据的预计发送时间加上当前数据大小除以数据消费服务器的处理速度的商。当前数据大小除以数据消费执行组件的处理速度,得到的是数据消费服务器消费当前数据需要的时间长度。因此,从上一数据的预计发送时间向后推该时间长度,就得到了当前数据的预计发送时间。例如,上一数据的预计发送时间是7:56:17,当前数据大小是300Mb,数据消费服务器1402消费数据的速度是150Mb/s,因此当前数据需要消费2s,因此,当前数据的预计发送时间是7:56:19。
另外,同一数据生产服务器1401生产出来的数据,经常有需要传递给不同的数据消费服务器1402消费的需求,这种情况下也需要异步数据分发器230来解决同一数据向不同消费者的分发问题。
在同一数据向不同消费者的分发的场景下,如图10B和12B所示,数据消费服务器1402包括第一数据消费服务器1402-1和第二数据消费服务器1402-2。相应地,数据消费服务器接口单元2309包括第一数据消费服务器接口单元(未示)和第二数据消费服务器接口单元(未示)。
由于第一数据消费服务器接口单元和第二数据消费服务器接口单元分别向对应的第一数据消费服务器1402-1和第二数据消费服务器1402-2发送数据时,都是从数据缓存2304的数据序列中,拷贝数据发送,而不是直接发送,因此,可以同时向不同的数据消费执行组件方式。
如图12B所示,第一数据消费服务器接口单元按照数据缓存2304中存储的数据A-1的预计发送时间,复制数据A-1,发送至第一数据消费服务器1402-1。第一数据消费服务器1402-1消费完数据A-1后,向第一数据消费服务器接口单元发送消费完数据A-1的应答。第一数据消费服务器接口单元将接收所述应答的时间与数据A-2的预计发送时间进行比较,发现晚于数据A-2的预计发送时间,停止复制数据A-2发送到第一数据消费服务器1402-1,此时复制数据A-3发送到第一数据消费服务器1402-1。第一数据消费服务器1402-1消费完数据A-3后,向第一数据消费服务器接口单元发送消费完数据A-3的应答。第一数据消费服务器接口单元将接收所述应答的时间与数据A-4的预计发送时间进行比较,发现未晚于数据A-4的预计发送时间。这时,可以在数据A-4的预计发送时间,复制数据A-4,发送到第一数据消费服务器1402-1。
同时,第二数据消费服务器接口单元也按照数据缓存2304中存储的数据A-1的预计发送时间,复制数据A-1,发送至第二数据消费服务器1402-2。第二数据消费服务器1402-2消费完数据A-1后,向第二数据消费服务器接口单元发送消费完数据A-1的应答。第二数据消费服务器接口单元将接收所述应答的时间与数据A-2的预计发送时间进行比较,发现晚于数据A-2的预计发送时间,停止复制数据A-2发送到第二数据消费服务器1402-2,并复制数据A-3发送到第二数据消费服务器1402-2。第二数据消费服务器1402-2消费完数据A-3后,向第二数据消费服务器接口单元发送消费完数据A-3的应答。第二数据消费服务器接口单元将接收所述应答的时间与数据A-4的预计发送时间进行比较,发现晚于数据A-4的预计发送时间。这时,将数据A-4丢弃不发送。
因此,在图9B中,对于第一数据消费服务器1402-1来说,数据A-2没有被复制发送,而对于第二数据消费服务器1402-2来说,数据A-2和A-4没有被复制发送。
在上面的情况下,数据消费服务器1402有多个,但数据生产服务器1401只有一个,生产的都是同一种数据。但在某些情况下,多个数据生产指令执行单元分别生产不同类型的数据,多个数据消费服务器根据要消费的类型选择不同的数据消费。这种场景的实现稍微复杂。本公开一个进一步的实施例能够解决该场景的实现。
在该实施例中,如图10C和12C所示,数据生产服务器1401包括第一数据生产服务器1401-1和第二数据生产服务器1401-2。数据生产服务器接口单元2308包括第一数据生产服务器接口单元(未示)和第二数据生产服务器接口单元(未示)。数据缓存2304中的数据序列包括第一数据生产服务器1401-1发送的第一数据序列和第二数据生产服务器1401-2发送的第二数据序列。第一数据生产服务器接口单元接收第一数据生产服务器1401-1发送的第一数据序列,第二数据生产服务器接口单元接收第二数据生产服务器1401-2发送的第二数据序列。
为了让不同的数据消费服务器(图10C示出了第一数据消费服务器1402-1、第二数据消费服务器1402-2、第三数据消费服务器1402-3)能够区分出其需要的数据类型,从而能获得其需要的数据生产服务器生产出的数据,如图11所示,同步数据分发器230还包括注册单元2305。各个数据生产服务器1401将其生产的数据类型向注册单元2305注册,各个数据消费服务器1402也将其要消费的数据类型向注册单元2305注册。这样,异步数据分发中,可以根据各数据生产服务器1401生产的数据类型和各数据消费服务器1402消费的数据类型的匹配,来为数据消费服务器1402分发其需要的数据生产服务器1401生产的数据。
数据消费服务器接口单元2309接收到数据消费服务器1402的数据消费请求后,根据注册单元2305中数据消费服务器1402注册的数据类型,查找第一数据生产服务器1401-1的第一数据类型和第二数据生产服务器1401-2的第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据到所述数据消费服务器1402。
如图9C所示,第一数据生产服务器1401-1注册的数据类型是A,第二数据生产服务器1401-2注册的数据类型是B,第一数据消费服务器1402-1、第二数据消费服务器1402--2注册的需要的数据类型是A,第三数据消费服务器1402-3注册的需要的数据类型是B。因此,数据消费服务器接口单元2309接收到第一数据消费服务器1402-1或第二数据消费服务器1402-2的数据消费请求后,由于注册单元2305中注册的与第一数据消费服务器1402-1或第二数据消费服务器1402-2需要的数据类型A匹配的数据生产服务器是第一数据生产服务器1401-1,因此,从第一数据生产服务器1401-1生产的第一数据序列,复制数据到第一数据消费服务器1402-1和第二数据消费服务器1402-2,其复制过程如图12B类似,故不赘述。数据消费服务器接口单元2309接收到第三数据消费服务器1402-3的数据消费请求后,由于注册单元2305中注册的与第三数据消费服务器1402-3需要的数据类型B匹配的数据生产服务器是第二数据生产服务器1401-2,因此,从第二数据生产服务器1401-2生产的第二数据序列,复制数据到第三数据消费服务器1402-3,其复制过程如图12B类似,故不赘述。
通过上述过程,实现了多个数据生产服务器和多个数据消费服务器的情况下,各数据消费服务器按需消费其需要的数据生产服务器生产的数据。
根据本公开的一个实施例,还提供了一种异步数据分发方法,它由图5所示的异步数据分发器230执行。该方法可以包括:接收数据生产执行组件发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;按照第一数据的预计发送时间,将所述第一数据发送至所述数据消费执行组件,接收所述数据消费执行组件消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费执行组件。。
由于该方法的详细执行实际上在上面结合图4A-C、图5、图6A-C的描述中介绍,因此不再赘述。
根据本公开的一个实施例,还提供了一种异步数据分发方法,它由图8所示的异步数据分发器230执行。该方法可以包括:接收数据生产指令执行单元发送的数据序列并存储在数据缓存中,所述数据序列包括连续的第一数据、第二数据、第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;按照所述第一数据的预计发送时间,将所述第一数据发送至数据消费指令执行单元,接收所述数据消费指令执行单元消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费指令执行单元。
由于该方法的详细执行实际上在上面结合图7A-C、图8、图9A-C的描述中介绍,因此不再赘述。
根据本公开的一个实施例,还提供了一种异步数据分发方法,它由图11所示的异步数据分发器230执行。它包括:接收数据生产服务器发送的数据序列,所述数据序列至少包括时间连续的第一数据、第二数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;按照第一数据的预计发送时间,将所述第一数据发送至数据消费服务器,接收所述数据消费服务器消费完第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费服务器。
由于该方法的详细执行实际上在上面结合图10A-C、图11、图12A-C的描述中介绍,因此不再赘述。
需要领会,以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本说明书的实施例存在许多变型。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
Claims (37)
1.一种异步数据分发器,位于处理器核内,所述处理器核还包括指令执行单元,所述指令执行单元包括数据生产执行组件和数据消费执行组件,其中,所述异步数据分发器包括:
数据生产执行组件接口单元,用于接收所述数据生产执行组件发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
数据消费执行组件接口单元,用于按照所述第一数据的预计发送时间,将所述第一数据发送至所述数据消费执行组件,接收所述数据消费执行组件消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,则停止将所述第二数据发送到所述数据消费执行组件,并将所述第三数据发送到所述数据消费执行组件。
2.根据权利要求1所述的异步数据分发器,其中,所述数据缓存在所述异步数据分发器内部,或在所述处理器核中所述异步数据分发器外部。
3.根据权利要求1所述的异步数据分发器,其中,所述数据消费执行组件接口单元在接收所述应答的时间早于第二数据的预计发送时间的情况下,将第二数据发送到所述数据消费执行组件。
4.根据权利要求1所述的异步数据分发器,其中,所述异步数据分发器还包括:
调度单元,用于根据所述数据序列中每个数据的大小和数据消费执行组件的处理速度,确定每个数据的预计发送时间,以存储到所述数据缓存。
5.根据权利要求1所述的异步数据分发器,其中,所述数据消费执行组件包括第一数据消费执行组件和第二数据消费执行组件,所述数据消费执行组件接口单元包括第一数据消费执行组件接口单元和第二数据消费执行组件接口单元,
所述第一数据消费执行组件接口单元用于按照第一数据的预计发送时间,复制第一数据发送至所述第一数据消费执行组件,接收所述第一数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第一数据消费执行组件;
所述第二数据消费执行组件接口单元用于按照第一数据的预计发送时间,复制第一数据发送至所述第二数据消费执行组件,接收所述第二数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将第二数据发送到所述第二数据消费执行组件。
6.根据权利要求1所述的异步数据分发器,其中,所述数据生产执行组件包括第一数据生产执行组件和第二数据生产执行组件,所述数据生产执行组件接口单元包括第一数据生产执行组件接口单元和第二数据生产执行组件接口单元;所述数据序列包括第一数据序列和第二数据序列;
所述第一数据生产执行组件接口单元用于接收所述第一数据生产执行组件发送的第一数据序列,所述第二数据生产执行组件接口单元用于接收所述第二数据生产执行组件发送的第二数据序列;
所述异步数据分发器还包括注册单元,用于存储第一数据生产执行组件注册的第一数据类型、第二数据生成执行组件注册的第二数据类型、和数据消费执行组件注册的消费数据类型;
所述数据消费执行组件接口单元接收到数据消费执行组件的数据消费请求后,根据所述注册单元中所述数据消费执行组件注册的数据类型,查找第一数据类型和第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据发送到所述数据消费执行组件。
7.根据权利要求1所述的异步数据分发器,其中,所述数据包括视频数据,所述数据生产包括控制摄像头拍摄从而产生视频数据,所述数据消费包括对产生的视频数据进行处理。
8.根据权利要求1所述的异步数据分发器,其中,所述数据包括人声数据,所述数据生产包括控制麦克风收集人声从而产生人声数据,所述数据消费包括对产生的人声数据进行美化。
9.根据权利要求1所述的异步数据分发器,其中,所述数据包括车辆环境视频数据,所述数据生产包括控制无人车车载摄像头收集车辆环境视频数据,所述数据消费包括处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
10.一种处理器核,包括根据权利要求1-9中任一个所述的异步数据分发器。
11.一种处理器,包括根据权利要求10所述的处理器核。
12.一种片上系统,包括根据权利要求11所述的处理器。
13.一种服务器,包括根据权利要求11所述的处理器。
14.一种异步数据分发器,位于处理器内,由处理器内的处理器核共享,数据生产指令执行单元和数据消费指令执行单元分别位于不同的处理器核中,其中,所述异步数据分发器包括:
数据生产指令执行单元接口单元,用于接收所述数据生产指令执行单元发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
数据消费指令执行单元接口单元,用于按照第一数据的预计发送时间,将第一数据发送至所述数据消费指令执行单元,接收所述数据消费指令执行单元消费完第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,停止将第二数据发送到所述数据消费指令执行单元,并将所述第三数据发送到所述数据消费指令执行单元。
15.根据权利要求14所述的异步数据分发器,其中,所述数据缓存在所述异步数据分发器内部,或在所述处理器中所述异步数据分发器外部。
16.根据权利要求14所述的异步数据分发器,其中,所述数据消费指令执行单元接口单元在接收所述应答的时间早于第二数据的预计发送时间的情况下,将第二数据发送到所述数据消费指令执行单元。
17.根据权利要求14所述的异步数据分发器,其中,所述异步数据分发器还包括:
调度单元,用于根据所述数据序列中每个数据的大小和数据消费指令执行单元的处理速度,确定每个数据的预计发送时间,以存储到所述数据缓存。
18.根据权利要求14所述的异步数据分发器,其中,所述数据消费指令执行单元包括位于不同处理器核内的第一数据消费指令执行单元和第二数据消费指令执行单元, 所述数据消费指令执行单元接口单元包括第一数据消费指令执行单元接口单元和第二数据消费指令执行单元接口单元,
所述第一数据消费指令执行单元接口单元用于按照所述第一数据的预计发送时间,复制第一数据发送至所述第一数据消费指令执行单元,接收所述第一数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第一数据消费指令执行单元;
所述第二数据消费指令执行单元接口单元用于第一数据的预计发送时间,复制第一数据发送至所述第二数据消费指令执行单元,接收所述第二数据消费执行组件消费完第一数据的应答,将接收所述第一数据的应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将第二数据发送到所述第二数据消费指令执行单元。
19.根据权利要求14所述的异步数据分发器,其中,所述数据生产指令执行单元包括位于不同处理器核内的第一数据生产指令执行单元和第二数据生产指令执行单元;所述数据生产指令执行单元接口单元包括第一数据生产指令执行单元接口单元和第二数据生产指令执行单元接口单元;所述数据序列包括第一数据序列和第二数据序列;
所述第一数据生产指令执行单元接口单元用于接收所述第一数据生产指令执行单元发送的第一数据序列,所述第二数据生产指令执行单元接口单元用于接收所述第二数据生产指令执行单元发送的第二数据序列;
所述异步数据分发器还包括注册单元,用于存储第一数据生产指令执行单元注册的第一数据类型、第二数据生产指令执行单元注册的第二数据类型、和数据消费指令执行单元注册的消费数据类型;
所述数据消费指令执行单元接口单元接收到数据消费指令执行单元的数据消费请求后,根据所述注册单元中所述数据消费指令执行单元注册的数据类型,查找第一数据类型和第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据发送到所述数据消费指令执行单元。
20.根据权利要求14所述的异步数据分发器,其中,所述数据包括视频数据,所述数据生产包括控制摄像头拍摄从而产生视频数据,所述数据消费包括对产生的视频数据进行处理。
21.根据权利要求14所述的异步数据分发器,其中,所述数据包括人声数据,所述数据生产包括控制麦克风收集人声从而产生人声数据,所述数据消费包括对产生的人声数据进行美化。
22.根据权利要求14所述的异步数据分发器,其中,所述数据包括车辆环境视频数据,所述数据生产包括控制无人车车载摄像头收集车辆环境视频数据,所述数据消费包括处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
23.一种处理器,包括根据权利要求14-22中任一个所述的异步数据分发器。
24.一种片上系统,包括根据权利要求23所述的处理器。
25.一种服务器,包括根据权利要求23所述的处理器。
26.一种异步数据分发器,与数据生产服务器和数据消费服务器连接,其中,所述异步数据分发器包括:
数据生产服务器接口单元,用于接收所述数据生产服务器发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
数据消费服务器接口单元,用于按照所述第一数据的预计发送时间,复制第一数据发送至所述数据消费服务器,接收所述数据消费服务器消费完第一数据的应答,将接收所述应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,阻止复制第二数据发送到所述数据消费服务器,并复制第三数据发送到所述数据消费服务器。
27.根据权利要求26所述的异步数据分发器,其中,所述数据缓存在所述异步数据分发器内部或外部。
28.根据权利要求26所述的异步数据分发器,其中,所述数据消费服务器接口单元在接收所述应答的时间早于第二数据的预计发送时间的情况下,将第二数据发送到所述数据消费服务器。
29.根据权利要求26所述的异步数据分发器,其中,所述异步数据分发器还包括:
调度单元,用于根据所述数据序列中每个数据的大小和数据消费服务器的处理速度,确定每个数据的预计发送时间,以存储到所述数据缓存。
30.根据权利要求26所述的异步数据分发器,其中,所述数据消费服务器包括第一数据消费服务器和第二数据消费服务器, 所述数据消费服务器接口单元包括第一数据消费服务器接口单元和第二数据消费服务器接口单元,
所述第一数据消费服务器接口单元用于按照所述数据缓存中存储的第一数据的预计发送时间,复制第一数据发送至所述第一数据消费服务器,接收所述第一数据消费服务器消费完第一数据的应答,将接收所述应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第一数据消费服务器;
所述第二数据消费服务器接口单元用于按照所述数据缓存中存储的第一数据的预计发送时间,复制第一数据发送至所述第二数据消费服务器,接收所述第二数据消费服务器消费完第一数据的应答,将接收所述应答的时间与第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述第二数据消费服务器。
31.根据权利要求26所述的异步数据分发器,其中,所述数据生产服务器包括第一数据生产服务器和第二数据生产服务器;所述数据生产服务器接口单元包括第一数据生产服务器接口单元和第二数据生产服务器接口单元;所述数据序列包括第一数据序列和第二数据序列;
所述第一数据生产服务器接口单元用于接收所述第一数据生产服务器发送的第一数据序列,所述第二数据生产服务器接口单元用于接收所述第二数据生产服务器发送的第二数据序列;
所述异步数据分发器还包括注册单元,用于存储第一数据生产服务器注册的第一数据类型、第二数据生产服务器注册的第二数据类型、和数据消费服务器注册的消费数据类型;
所述数据消费服务器接口单元接收到数据消费服务器的数据消费请求后,根据所述注册单元中所述数据消费服务器注册的数据类型,查找第一数据类型和第二数据类型中匹配的数据类型,从第一数据序列和第二数据序列中相应的一个中,复制数据发送到所述数据消费服务器。
32.根据权利要求26所述的异步数据分发器,其中,所述数据包括视频数据,所述数据生产包括控制摄像头拍摄从而产生视频数据,所述数据消费包括对产生的视频数据进行处理。
33.根据权利要求26所述的异步数据分发器,其中,所述数据包括人声数据,所述数据生产包括控制麦克风收集人声从而产生人声数据,所述数据消费包括对产生的人声数据进行美化。
34.根据权利要求26所述的异步数据分发器,其中,所述数据包括车辆环境视频数据,所述数据生产包括控制无人车车载摄像头收集车辆环境视频数据,所述数据消费包括处理所述车辆环境视频数据以产生控制无人车行驶的控制信号。
35.一种异步数据分发方法,包括:
接收数据生产执行组件发送的数据序列并存储在数据缓存中,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
按照第一数据的预计发送时间,将所述第一数据发送至所述数据消费执行组件,接收所述数据消费执行组件消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费执行组件,并将所述第三数据发送到所述数据消费执行组件。
36.一种异步数据分发方法,包括:
接收数据生产指令执行单元发送的数据序列并存储在数据缓存中,所述数据序列包括时间连续的第一数据、第二数据、第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
按照所述第一数据的预计发送时间,将所述第一数据发送至数据消费指令执行单元,接收所述数据消费指令执行单元消费完所述第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于所述第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费指令执行单元,并将所述第三数据发送到所述数据消费指令执行单元。
37.一种异步数据分发方法,包括:
接收数据生产服务器发送的数据序列,所述数据序列至少包括时间连续的第一数据、第二数据和第三数据,且所述数据序列中的数据与对应的预计发送时间相关联存储;
按照第一数据的预计发送时间,将所述第一数据发送至数据消费服务器,接收所述数据消费服务器消费完第一数据的应答,将接收所述第一数据的应答的时间与所述第二数据的预计发送时间进行比较,如果晚于第二数据的预计发送时间,停止将所述第二数据发送到所述数据消费服务器,并将所述第三数据发送到所述数据消费服务器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010167795.0A CN113395302B (zh) | 2020-03-11 | 2020-03-11 | 异步数据分发器、相关装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010167795.0A CN113395302B (zh) | 2020-03-11 | 2020-03-11 | 异步数据分发器、相关装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113395302A CN113395302A (zh) | 2021-09-14 |
CN113395302B true CN113395302B (zh) | 2022-04-26 |
Family
ID=77615405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010167795.0A Active CN113395302B (zh) | 2020-03-11 | 2020-03-11 | 异步数据分发器、相关装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113395302B (zh) |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100459586C (zh) * | 2006-08-25 | 2009-02-04 | 华为技术有限公司 | 数据流量控制装置与流量控制方法 |
CN104145253B (zh) * | 2012-03-02 | 2017-03-15 | 富士通株式会社 | 图像发送方法、以及装置 |
GB2501271B (en) * | 2012-04-17 | 2015-05-06 | Canon Kk | Method and device for receiving multimedia data |
CN103607395A (zh) * | 2013-11-20 | 2014-02-26 | 深圳先进技术研究院 | 一种传输触觉数据的方法及装置 |
CN105099866B (zh) * | 2014-05-23 | 2019-04-12 | 腾讯科技(北京)有限公司 | 数据显示的控制方法及装置 |
CN108063746B (zh) * | 2016-11-08 | 2020-05-15 | 北京国双科技有限公司 | 数据的处理方法、客户端、服务器及系统 |
CN109039994B (zh) * | 2017-06-08 | 2020-12-08 | 中国移动通信集团甘肃有限公司 | 一种计算音频和视频异步时差的方法及设备 |
CN110213308A (zh) * | 2018-02-28 | 2019-09-06 | 杭州海康威视数字技术股份有限公司 | 一种解码视频数据的方法及装置 |
CN109040018B (zh) * | 2018-06-22 | 2021-02-23 | 深圳Tcl数字技术有限公司 | 数据匹配方法、装置、显示终端及可读存储介质 |
CN108881264B (zh) * | 2018-07-03 | 2021-04-02 | 深圳市通立威科技有限公司 | 防卡顿视频传输与接收方法 |
CN110851248B (zh) * | 2019-10-12 | 2024-09-13 | 中国平安财产保险股份有限公司 | 异步任务数据处理方法、装置及计算机可读存储介质 |
-
2020
- 2020-03-11 CN CN202010167795.0A patent/CN113395302B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113395302A (zh) | 2021-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11734179B2 (en) | Efficient work unit processing in a multicore system | |
Chen et al. | GFlink: An in-memory computing architecture on heterogeneous CPU-GPU clusters for big data | |
KR20210030282A (ko) | 게이트웨이 상의 호스트 프록시 | |
Almeida et al. | Evaluating the impact of task migration in multi-processor systems-on-chip | |
WO2012174128A1 (en) | General purpose digital data processor, systems and methods | |
US10372454B2 (en) | Allocation of a segmented interconnect to support the execution of instruction sequences by a plurality of engines | |
KR20210029725A (ko) | 게이트웨이를 통한 데이터 | |
WO2023160484A1 (zh) | 一种图像处理的方法及相关装置和系统 | |
US11467836B2 (en) | Executing cross-core copy instructions in an accelerator to temporarily store an operand that cannot be accommodated by on-chip memory of a primary core into a secondary core | |
Hruby et al. | On Sockets and System Calls: Minimizing Context Switches for the Socket {API} | |
CN110245024B (zh) | 静态存储块的动态分配系统及其方法 | |
CN114661353A (zh) | 支持多线程的数据搬运装置及处理器 | |
CN100547567C (zh) | 具有被优化以处理数据流应用的高速缓存的数据处理系统 | |
CN113395302B (zh) | 异步数据分发器、相关装置和方法 | |
Faraji et al. | Design considerations for GPU‐aware collective communications in MPI | |
US9442772B2 (en) | Global and local interconnect structure comprising routing matrix to support the execution of instruction sequences by a plurality of engines | |
CN110955461B (zh) | 计算任务的处理方法、装置、系统、服务器和存储介质 | |
CN113076189B (zh) | 具有多数据通路的数据处理系统及用多数据通路构建虚拟电子设备 | |
CN1602469A (zh) | 用在多处理器数据处理系统中的数据处理方法和相应的数据处理系统 | |
CN112732634A (zh) | 面向边缘计算的arm-fpga协同硬件资源局部动态重构处理方法 | |
Faraji | Improving communication performance in GPU-accelerated HPC clusters | |
CN113076180A (zh) | 上行数据通路的构建方法及数据处理系统 | |
Afsahi et al. | Efficient communication using message prediction for clusters of multiprocessors | |
Ostheimer | Parallel Functional Computation on STAR: DUST— | |
Aude et al. | The MULTIPLUS/MULPLIX parallel processing environment |
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 |