CN114880259B - 数据处理方法、装置、系统、电子设备及存储介质 - Google Patents

数据处理方法、装置、系统、电子设备及存储介质 Download PDF

Info

Publication number
CN114880259B
CN114880259B CN202210811944.1A CN202210811944A CN114880259B CN 114880259 B CN114880259 B CN 114880259B CN 202210811944 A CN202210811944 A CN 202210811944A CN 114880259 B CN114880259 B CN 114880259B
Authority
CN
China
Prior art keywords
data
processing unit
sequence
central processing
data block
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
Application number
CN202210811944.1A
Other languages
English (en)
Other versions
CN114880259A (zh
Inventor
梁建胜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiangdixian Computing Technology Chongqing Co ltd
Original Assignee
Beijing Xiangdixian Computing Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Xiangdixian Computing Technology Co Ltd filed Critical Beijing Xiangdixian Computing Technology Co Ltd
Priority to CN202210811944.1A priority Critical patent/CN114880259B/zh
Publication of CN114880259A publication Critical patent/CN114880259A/zh
Application granted granted Critical
Publication of CN114880259B publication Critical patent/CN114880259B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Bus Control (AREA)

Abstract

本公开提供一种数据处理方法、装置、系统、电子设备及存储介质。该方法包括第一中央处理器在对应的命令控制块中插入数据块序列,并将所述第一计数器的第一计数值加1;第一中央处理器将所述命令控制块发送至第二中央处理器,以通过所述第二中央处理器将所述数据块序列发送至DMA控制器进行数据的搬移;其中,所述第二中央处理器包括第二计数器;第一中央处理器将当前的第二计数值与当前的第一计数值进行比较;响应于二者的比较结果满足预设条件,第一中央处理器向目标设备发送对应的指令。大大减少了第一中央处理器与第二中央处理器之间的通知任务量,减少了交互开销,实现数据的高效传输。且避免了交互过程中出现数据块丢失的问题。

Description

数据处理方法、装置、系统、电子设备及存储介质
技术领域
本公开涉及数据处理技术领域,尤其涉及一种数据处理方法、装置、系统、电子设备及存储介质。
背景技术
目前的电子设备通常是通过中央处理器(Central Processing Unit,CPU)和图形处理器(Graphics Processing Unit,GPU)共同协作进行大数据处理的,在运算时,数据会在GPU和主机端之间传输。而GPU和主机端之间的数据传输一般会采用直接存储器访问(Direct Memory Access,DMA)技术。DMA 控制器的存在不再需要CPU参与数据传送的全过程,只需 CPU 对其进行配置即可自动开始数据传送,使得CPU能够从大量数据的交互过程中解放出来去执行其他操作,进而提高CPU的效率。
DMA控制器从源地址获取数据,然后再将数据送到目标地址。DMA控制器可以具有多个通道,每个DMA通道都是可以独立将源地址中的数据搬移到目标地址区域去。
但是,在现有的通过DMA控制器搬移数据的方案中,DMA控制器不同的通道上搬移完数据块的时间不一样,导致CPU收到各个数据块的搬移完成状态是乱序的,无法在第一时间判断对应的数据块序列的搬移状态,容易导致数据丢失。
发明内容
本公开的目的是提供一种数据处理方法、装置、系统、电子设备及存储介质,解决了现有技术中DMA控制器进行数据搬移过程中传输效率低和容易导致数据丢失的技术问题。
根据本公开的一个方面,提供一种数据处理方法,应用于第一中央处理器,第一中央处理器包括第一计数器,上述方法包括:
响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列,并将第一计数器的第一计数值加1;
将命令控制块发送至第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移;其中,第二中央处理器包括第二计数器;
响应于接收到第二中央处理器发送的第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的第二计数值为第二中央处理器在DMA控制器搬移完数据块序列后将第二计数值加1后更新得到;
响应于当前的第二计数值与当前的第一计数值的比较结果满足预设条件,向目标设备发送对应的指令。
在一些实施例中,上述数据处理方法中,响应于当前的第二计数值与当前的第一计数值的比较结果满足预设条件,向目标设备发送对应的指令,包括以下步骤:
计算当前的第二计数值和预设时间段之前接收到的第二计数值之间的第二差值;
响应于当前的第二差值,提取当前的第一计数值和预设时间段之前的第一计数值,并计算当前的第一计数值和预设时间段之前的第一计数值之间的第一差值;
响应于当前的第二差值大于等于当前的第一差值,向目标设备发送对应的指令。
在一些实施例中,上述数据处理方法中,响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列的步骤之后,上述方法还包括:
将数据块序列中的数据块的数量信息保存于命令控制块中的第一个数据块的头部信息中;和/或,
对命令控制块的写入偏移量进行更新。
在一些实施例中,上述数据处理方法中,将命令控制块发送至第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移的步骤之后,上述方法还包括:
向第二中央处理器发送对应的第一中断消息。
根据本公开的另一方面,提供一种数据处理方法,应用于第二中央处理器,第二中央处理器包括第二计数器,上述方法包括:
响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列;
将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移;
响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到数据块序列中各个数据块的搬移状态,响应于数据块序列中的各个数据块均搬移完成,将第二计数器的第二计数值加1,以得到更新后的第二计数值;
将更新后的第二计数值发送至第一中央处理器。
在一些实施例中,上述数据处理方法中,响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列的步骤之后,上述方法还包括:
生成数据块序列的序列标识;
获取数据块序列中的数据块的数量信息;
基于数据块序列的序列标识与数据块的数量信息,构建数据块序列的序列标识与数据块的数量信息的对应关系;
响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到数据块序列中各个数据块的搬移状态,响应于数据块序列中的各个数据块均搬移完成,将第二计数器的第二计数值加1,以得到更新后的第二计数值,包括以下步骤:
响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量;
根据当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量,将对应关系中数据块序列的序列标识当前对应的数据块的数量信息,减去当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量;
响应于数据块序列的序列标识当前对应的数据块的数量信息为0,将第二计数器的第二计数值加1,以得到更新后的第二计数值。
在一些实施例中,上述数据处理方法中,分配到DMA控制器的任一通道内的任一数据块占据该通道内的至少一个标签;
将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移的步骤之后,上述方法还包括:
获取分配到DMA控制器的至少一个通道内的各个数据块占据的标签;
将数据块序列的序列标识与各个数据块占据的标签进行绑定,以得到对应的绑定关系;
响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量,包括以下步骤:
响应于接收到DMA控制器的任一通道发送的第三中断消息,从当前接收到的第三中断消息对应的通道的状态寄存器中,读取该通道中当前状态发生变化的所有标签,以作为当前接收到的第三中断消息对应的所有标签;
根据绑定关系,判断当前接收到的第三中断消息对应的所有标签中,与数据块序列的序列标识相对应的标签数量,从而得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量。
在一些实施例中,上述数据处理方法中,根据绑定关系,判断当前接收到的第三中断消息对应的所有标签中,与数据块序列的序列标识相对应的标签数量,从而得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量的步骤之后,上述方法还包括:
对当前接收到的第三中断消息对应的通道的状态寄存器进行初始化,并释放当前接收到的第三中断消息对应的所有标签。
在一些实施例中,上述数据处理方法中,数据块序列中的数据块的数量信息保存于命令控制块中的第一个数据块的头部信息中。
在一些实施例中,上述数据处理方法中,将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移,包括以下步骤:
采用轮询负载均衡的方式,将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移。
在一些实施例中,上述数据处理方法中,分配到DMA控制器的任一通道内的任一数据块占据该通道内的至少一个标签;
采用轮询负载均衡的方式,将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移,包括以下步骤:
按照预设顺序遍历DMA控制器的各个通道;
确认当前一次遍历过程中,DMA控制器中处于空闲状态的通道;其中,处于空闲状态的通道为存在未被占据的标签的通道;
按照一对一的方式,将对应数量的未被分配的数据块分配至当前处于空闲状态的通道中进行数据的搬移;
返回按照预设顺序遍历DMA控制器的各个通道的步骤,直至将数据块序列中的各个数据块均分配给DMA控制器的对应通道中进行数据的搬移。
在一些实施例中,上述数据处理方法中,响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列,包括以下步骤:
响应于接收到第一中央处理器发送的命令控制块和第一中断消息,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列。在一些实施例中,上述数据处理方法中,上述方法还包括:
响应于接收到第一中央处理器发送的第一中断消息,关闭接收第一中断消息的功能。
在一些实施例中,上述数据处理方法中,将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移的步骤之后,上述方法还包括:
开启接收第一中断消息的功能。在一些实施例中,上述数据处理方法中,将更新后的第二计数值发送至第一中央处理器,包括以下步骤:
基于更新后的第二计数值生成第二中断消息,并将第二中断消息发送至第一中央处理器。
在一些实施例中,上述数据处理方法中,上述方法还包括:
响应于接收到DMA控制器的任一通道的第三中断消息,根据当前接收到的第三中断消息对应的通道,关闭接收该通道发送的第三中断消息的功能。
在一些实施例中,上述数据处理方法中,响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到数据块序列中各个数据块的搬移状态的步骤之后,上述方法还包括:
根据当前接收到的第三中断消息对应的通道,开启接收该通道发送的第三中断消息的功能。
在一些实施例中,上述数据处理方法中,响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列,包括以下步骤:
响应于接收到第一中央处理器发送的命令控制块,确认命令控制块的写入偏移量和读取偏移量,并将二者进行比较;
响应于命令控制块的写入偏移量和读取偏移量不一致,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列。
在一些实施例中,上述数据处理方法中,将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移的步骤之后,上述方法还包括:
对命令控制块的读取偏移量进行更新。
根据本公开的另一方面,提供一种数据处理装置,应用于第一中央处理器,第一中央处理器包括第一计数器,上述装置包括:
接收模块,被配置为响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列,并将第一计数器的第一计数值加1;
转发模块,被配置为将命令控制块发送至第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移;其中,第二中央处理器包括第二计数器;
比较模块,被配置为响应于接收到第二中央处理器发送的第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的第二计数值为第二中央处理器在DMA控制器搬移完数据块序列后将第二计数值加1后更新得到;
指令发出模块,被配置为响应于当前的第二计数值与当前的第一计数值的比较结果满足预设条件,向目标设备发送对应的指令。
根据本公开的另一方面,提供一种数据处理装置,应用于第二中央处理器,第二中央处理器包括第二计数器,上述装置包括:
接收模块,被配置为响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列;
分配模块,被配置为将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移;
计数模块,被配置为响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到数据块序列中各个数据块的搬移状态,响应于数据块序列中的各个数据块均搬移完成,将第二计数器的第二计数值加1,以得到更新后的第二计数值;
发送模块,被配置为将更新后的第二计数值发送至第一中央处理器。
根据本公开的另一方面,提供一种数据处理系统,系统包括存储器、第一中央处理器、第二中央处理器和DMA控制器;
存储器上存储有计算机程序,该计算机程序被第一中央处理器、第二中央处理器和DMA控制器执行时,执行上述任一实施例的数据处理方法;
第一中央处理器包括第一计数器,第二中央处理器包括第二计数器。
根据本公开的另一方面,提供一种电子装置,包括上述任一实施例的数据处理系统。
根据本公开的另一方面,提供一种电子设备,包括上述任一实施例的电子装置。
根据本公开的另一方面,提供一种存储介质,该存储介质存储的计算机程序,在被一个或多个处理器执行时,实现上述任一实施例的数据处理方法。
附图说明
图1为一种数据处理系统中各个部件的交互图;
图2为本公开一个实施例提供的一种数据处理方法(应用于第一中央处理器)的流程示意图;
图3为本公开一个实施例提供的一种命令控制块的结构示意图;
图4为本公开一个实施例提供的一种数据处理方法(应用于第一中央处理器)的另一流程示意图;
图5为本公开一个实施例提供的另一种数据处理方法(应用于第二中央处理器)的流程示意图;
图6为本公开一个实施例提供的采用轮询负载均衡的方式进行数据块分配的方法的流程示意图;
图7为本公开一个实施例提供的另一种数据处理方法(应用于第二中央处理器)的另一流程示意图;
图8为本公开一个实施例提供的另一种数据处理方法(应用于DMA控制器)的流程示意图;
图9为本公开一个实施例提供的一种数据处理方法的时序图;
图10为本公开一个实施例提供的一种数据处理装置(应用于第一中央处理器)的结构示意图;
图11为本公开一个实施例提供的一种数据处理装置(应用于第二中央处理器)的结构示意图;
图12为本公开一个实施例提供的一种数据处理系统中各个部件的交互示意图;
图13为本公开一个实施例提供的一种图形处理系统的结构示意图。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
一种数据处理系统100,如图1所示,包括存储器(图中未示出)、第一中央处理器110、第二中央处理器120和DMA控制器130。
其中,第一中央处理器110可以为应用程序控制用中央处理器(ApplicationControl Central Processing Unit,ACPU),第二中央处理器120可以为虚拟中央处理器(Virtual Central Processing Unit,VCPU)。
其中,DMA控制器130,可以用于执行主机端到图形处理系统内存(例如显卡内存)之间的数据搬移,例如,通过DMA控制器130将3D画图的顶点(vertex)数据从主机端搬到图形处理系统内存。
一种应用于上述数据处理系统100的数据处理方法,包括:
(1)主机端将需要GPU执行的待处理任务发送给GPU,同时将对应的包含需要DMA控制器进行数据搬移的数据块序列发送给第一中央处理器,一个数据块序列对应一个序列标识(GroupID),第一中央处理器收到新的待处理的数据块序列后,会从该数据块序列中获取其包含的数据块(Cmd)的数量信息,构建数据块序列的序列标识与数据块的数量信息的对应关系保存在本地,然后通过第一命令控制块(Submit CCB)将该数据块序列发送至第二中央处理器;
(2)第二中央处理器收到第一中央处理器发送的数据块序列之后,读取接收到的数据块序列的序列标识,并依次将接收到的数据块序列中的数据块发送给DMA控制器,同时记录下已发送给DMA控制器的数据块所对应的序列标识(GroupID),即建立序列标识(GroupID)与已发送给DMA控制器的数据块之间的对应关系;
(3)DMA控制器每执行完(搬移完成)一个数据块后都通知第二中央处理器,第二中央处理器再通过第二命令控制块(Complete CCB)将完成的数据块对应的序列标识(GroupID)发送至第一中央处理器;
(4)第一中央处理器收到第二中央处理器发送过来的序列标识(GroupID)后,将之前保存本地的该序列标识(GroupID)对应数据块的数量信息减1;
(5)第一中央处理器会检查当前该序列标识(GroupID)更新的数量信息是否为0(为0说明该序列标识对应的数据块序列中的所有数据块已经完成数据搬移),若是,则通知GPU有新的任务待处理。
在上述数据处理系统中,DMA控制器的各个通道中完成每个数据块的时间都不一样,使得第二中央处理器在和第一中央处理器交互的过程中第一中央处理器收到完成搬移的数据块的标识信息是乱序的,容易导致数据块信息的丢失,且不易排除故障。
且上述方案中,DMA控制器每执行完(搬移完成)一个数据块后都通过第二中央处理器通知第一中央处理器,当数据块的数量较多时,会造成系统更大的通知任务量,导致第一中央处理器和第二中央处理器的执行效率较低。
而本公开的目的是提供一种数据处理方法,旨在第一中央处理器响应于接收到主机端发送的待处理的数据块序列,将第一计数器的第一计数值加1,并将数据块序列发给第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移;第一中央处理器响应于接收到第二中央处理器发送的第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的第二计数值为第二中央处理器在DMA控制器搬移完数据块序列后将第二计数值加1后更新得到;响应于当前的第二计数值与当前的第一计数值的比较结果满足预设条件,向目标设备发送对应的指令。
这种方案中,由第二中央处理器直接统计DMA控制器对各个数据块的搬移进度,当一个数据块序列都搬移完成之后,再通知第一中央处理器,大大减少了第一中央处理器与第二中央处理器之间的通知任务量,减少了交互开销,能够实现数据的高效传输,提高系统性能。
其次,当一个数据块序列都搬移完成之后,第二中央处理器再通知第一中央处理器,由此,第一中央处理器收到的第二中央处理器发送的搬移完成的信息是有序的,且根据当前的第二计数值与当前的第一计数值的比较结果,再发出对应的指令,这种双重判断数据块序列搬移状态的方式,更大大避免了第一中央处理器和第二中央处理器交互过程中出现数据块信息丢失的问题。
本公开的一个实施例提供一种数据处理方法,应用于第一中央处理器,其中,第一中央处理器包括第一计数器,如图2所示,该方法包括:
步骤S210:响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列,并将第一计数器的第一计数值(AFenceID)加1;
步骤S220:将命令控制块发送至第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移;其中,第二中央处理器包括第二计数器;
步骤S230:响应于接收到第二中央处理器发送的第二计数器当前的第二计数值(VFenceID),将当前的第二计数值(VFenceID)与当前的第一计数值(AFenceID)进行比较;其中,当前的第二计数值(VFenceID)为第二中央处理器在DMA控制器搬移完数据块序列后将第二计数值(VFenceID)加1后更新得到;
步骤S240:响应于当前的第二计数值(VFenceID)与当前的第一计数值(AFenceID)的比较结果满足预设条件,向目标设备发送对应的指令。
其中,步骤S240可以理解为,第一中央处理器可以根据当前的第二计数值(VFenceID)与当前的第一计数值(AFenceID)的比较结果,判断当前发给第二中央处理器的数据块序列是否都已经搬移完成了,当该比较结果满足预设条件,说明当前发给第二中央处理器的数据块序列都已经搬移完成了,则第一中央处理器向目标设备发送对应的指令,以通知目标设备(如GPU)有新的任务待处理。
在一些实施例中,第一中央处理器可以为应用程序控制用中央处理器(ACPU),第二中央处理器可以为虚拟中央处理器(VCPU)。
在一些实施例中,目标设备可以为GPU。
在一些实施例中,第一中央处理器向GPU发送对应的指令,以通知GPU有新的任务待处理时,可以将对应的任务ID发送给GPU,便于GPU查找要处理的任务。
在一些实施例中,可以创建一个循环缓冲区,该循环缓冲区为一个先进先出缓冲区,其内缓存了GPU待处理的任务,第一中央处理器通知GPU有新的任务待处理时,GPU按照顺序处理循环缓冲区中当前排在最前面的任务。
进一步的,第一中央处理器通知GPU有新的任务待处理的方式可以通过更新GPU内的某个预设偏移量(offset)的值(如加1),当GPU识别到该预设偏移量(offset)的值变化时,就知道可以按照顺序处理循环缓冲区中当前排在最前面的任务了。
可以理解为,第一中央处理器中,第一计数器的第一计数值(AFenceID)在某个时间段内的变化值记录了该时间段内一共发送给第二中央处理器几个数据块序列(对应几组数据块)。
第二中央处理器中,第二计数器的第二计数值(VFenceID)在某个时间段内的变化值记录了该时间段内DMA控制器一共完成了几个数据块序列(对应几组数据块)。
在一些实施例中,步骤S240,包括以下步骤:
步骤S242:计算当前的第二计数值和预设时间段之前接收到的第二计数值之间的第二差值;
步骤S244:响应于当前的第二差值,提取当前的第一计数值和预设时间段之前的第一计数值,并计算当前的第一计数值和上述预设时间段之前的第一计数值之间的第一差值;
步骤S246:响应于当前的第二差值大于等于当前的第一差值,向目标设备发送对应的指令。
可以理解为,为了避免第二计数值(VFenceID)与第一计数值(AFenceID)的初始值不同,导致无法判断当前的数据块序列的搬移状态的情况,可以根据上述方法计算预设时间段内的第一计数值的第一差值(△AFenceID)和第二计数值的第二差值(△VFenceID),再进行比较,当当前的第二差值(△VFenceID)大于等于当前的第一差值(△AFenceID)时,说明上述预设时间段内发给第二中央处理器的数据块序列已经搬移完成了,则第一中央处理器向目标设备发送对应的指令,以通知目标设备(如GPU)有新的任务待处理。
在一些实施例中,当预设时间段之前的第二计数值(VFenceID)与第一计数值(AFenceID)相同(即第一计数值和第二计数值的初始值相同)时,也可以直接将当前的第二计数值与当前的第一计数值进行比较,对应的,当当前的第二计数值大于等于当前的第一计数值时,说明上述预设时间段内发给第二中央处理器的数据块序列已经搬移完成了,则第一中央处理器向目标设备发送对应的指令,以通知目标设备(如GPU)有新的任务待处理。
在一些实施例中,上述预设时间段可以为帧图像的刷新周期,可以理解为,当第一中央处理器识别到发给第二中央处理器的当前帧的数据块序列已经搬移完成了,则第一中央处理器向GPU发送对应的指令,以通知GPU对当前帧的图像数据进行处理。
进一步的,在一些实施例中,在不影响GPU对帧图像处理进程的基础上,主机端可以将当前帧的多个数据块序列,在当前帧的刷新周期一开始就同时发给第一中央处理器,也可以逐个发给第一中央处理器。
在一些实施例中,响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列的步骤之后,数据块序列中的数据块的数量信息保存于命令控制块中的第一个对应的数据块的头部信息中。
其中,命令控制块的结构,如图3所示,其中,每次插入的数据块序列的多个数据块(Cmd)为一组,可以赋予一个第一序列标识(GroupID)(对每次接收到的数据块序列可以依次赋予Group0、Group1、Group2、…、GroupN),而每次插入的数据块序列中的数据块(Cmd)的数量信息(每个GroupID对应的数量信息)保存于命令控制块中该组数据块(同一GroupID下的)的第一个数据块的头部(Header)信息中,该组数据块(同一GroupID下的)中的其它数据块的头部(Header)信息中填0。
在一些实施例中,响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列的步骤之后,上述方法还包括:
对命令控制块的写入偏移量进行更新。
其中,写入偏移量保存在命令控制块的控制信息(Ctl)中的。
而命令控制块的写入偏移量的更新变化值与上述数据块序列中的数据块的数量信息是对应的,接收该命令控制块的设备根据该命令控制块的写入偏移量的更新变化值中同样可以获得上述数据块序列中的数据块的数量信息。
在一些实施例中,将命令控制块发送至第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移的步骤之后,上述方法还包括:
向第二中央处理器发送对应的第一中断消息。
进一步的,可以通过第一门铃寄存器向第二中央处理器发送第一中断消息。
其中,第一中断消息可以将处于休眠状态的第二中央处理器唤醒,触发第二中央处理器去分析当前收到的命令控制块,以获得其中待处理的数据块序列。
图4为上述应用于第一中央处理器的数据处理方法的另一流程示意图,整个数据处理流程可以为:
(1)第一中央处理器收到主机端发送的待处理的数据块序列后,会从数据块序列中获取当前数据块序列一共包含几个数据块(Cmd),并将当前数据块序列中的各个数据块(Cmd)插入命令控制块中,一个数据块序列对应一个序列标识(GroupID),将该数据块序列对应的数据块数量信息保存于命令控制块中该组数据块(同一GroupID下的)的第一个数据块的头部(Header)信息中,该组数据块(同一GroupID下的)中的其它数据块的头部(Header)信息中填0;
(2)在命令控制块中每插入一个数据块序列(同一GroupID下的一组数据块),都将保存在第一中央处理器中的第一计数器的第一计数值(AFenceID)加1,并将第一计数器当前的第一计数值(AFenceID)保存在本地的数据缓冲区中(Local buffer)中,然后将通过命令控制块(Submit CCB)传输的方式,将对应的数据块序列的所有数据块(一组数据块)复制到第二中央处理器的存储器中,最后再通过第一门铃寄存器(Doorbell,DB)向第二中央处理器发送第一中断消息;
(3)第一中央处理器收到第二中央处理器通过第二门铃寄存器(DB)发送的第二中断消息后,从第二门铃寄存器中获取第二中央处理器中第二计数器当前的第二计数值(VFenceID)并保存在本地存储器(RAM)中,在第一中央处理器主程序中检查第二计数值(VFenceId)预设时间段内的第二差值(△VFenceID)是否大于或等于第一计数值(AFenceID)预设时间段内的第一差值(△AFenceID),如果成立,说明当前发给第二中央处理器的数据块序列都已经执行完成了,则第一中央处理器通知目标设备(如GPU)有新的任务待处理。
其中,第二门铃寄存器与第一门铃寄存器为两个不同的门铃寄存器。
在一些实施例中,在某个预设时间段(帧图像的刷新周期)内,如果某个时刻的第二差值小于第一差值,此时说明该刷新周期内,之前发给DMA控制器的数据块还未搬移完成,此时,在该刷新周期期满之前,都可以返回步骤S210,接收下一个数据块序列,继续插入命令控制块并发送给第二中央处理器。
基于相同的发明构思,本公开的一个实施例还提供另一种数据处理方法,应用于第二中央处理器,其中,第二中央处理器包括第二计数器,如图5所示,该方法包括:
步骤S310:响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列;
步骤S320:将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移;
步骤S330:响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到数据块序列中各个数据块的搬移状态,响应于数据块序列中的各个数据块均搬移完成,将第二计数器的第二计数值加1,以得到更新后的第二计数值;
步骤S340:将更新后的第二计数值发送至第一中央处理器;
上述方法中,由第二中央处理器直接统计DMA控制器对各个数据块的搬移进度,当一个数据块序列都搬移完成之后,再通知第一中央处理器,大大减少了第一中央处理器与第二中央处理器之间的通知任务量,减少了交互开销,能够实现数据的高效传输,提高系统性能。
其次,当一个数据块序列都搬移完成之后,第二中央处理器再通知第一中央处理器,因此,第一中央处理器收到的第二中央处理器发送的搬移完成的信息是有序的,避免了第一中央处理器和第二中央处理器交互过程中出现数据块信息丢失的问题。
再者,第二中央处理器直接将第二计数器更新后的第二计数值发送至第一中央处理器,不需要额外的命令控制块(如Complete CCB)来传递数据块的搬移状态,省去了额外的命令控制块(如Complete CCB)的空间,减少交互开销,能够实现数据的高效传输。
在一些实施例中,步骤S310的步骤之后,上述方法还包括:
(a)生成数据块序列的第二序列标识;
(b)获取数据块序列中的数据块的数量信息;
(c)基于数据块序列的第二序列标识与数据块的数量信息,构建数据块序列的第二序列标识与数据块的数量信息的对应关系。
对应的,步骤S330,包括以下步骤:
步骤S332:响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量;
步骤S334:根据当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量,将对应关系中数据块序列的序列标识当前对应的数据块的数量信息,减去当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量;
步骤S336:响应于数据块序列的第二序列标识当前对应的数据块的数量信息为0,将第二计数器的第二计数值加1,以得到更新后的第二计数值。
在一些实施例中,上述生成的待处理数据的第二序列标识的步骤,可以采用写入指针(DMACmdWriteOffset)作为第二序列标识,写入指针(DMACmdWriteOffset)在记录收到的待处理数据块序列的数量的同时作为第二序列标识使用,比如收到的第一个待处理数据块序列的第二序列标识(写入指针DMACmdWriteOffset)的值为1,收到的第二个待处理数据块序列的第二序列标识(写入指针DMACmdWriteOffset)的值为2,收到的第三个待处理数据块序列的第二序列标识(写入指针DMACmdWriteOffset)的值为3,以此类推。
可以理解为,DMA控制器的任一通道执行完一个数据块的数据搬移之后,都会发出一个第三中断消息(Int),对应的,第二中央处理器每收到DMA控制器的任一通道发送的第三中断消息,就可以对当前接收到的第三中断消息进行识别,以判断当前接收到的第三中断消息与哪个数据块序列相对应,并确认当前接收到的第三中断消息指示的数据块序列(如数据块序列A)中的数据块的搬移完成数量,就可以将上述对应关系中数据块序列A的第二序列标识当前对应的数据块的数量信息(待执行的数据块的数量信息)减去当前接收到的第三中断消息指示的数据块的搬移完成数量,当上述对应关系中数据块序列A的第二序列标识当前对应的数据块的数量信息(待执行的数据块的数量信息)为0时,就可以确认数据块序列A中的所有数据块搬移完成,从而可以将第二计数器的第二计数值加1,以得到更新后的第二计数值。
在一些实施例中,由于数据块序列的第二序列标识为写入指针(DMACmdWriteOffset),所以,在检查上述对应关系中某个数据块序列的第二序列标识(写入指针DMACmdWriteOffset)当前对应的数据块的数量信息(待执行的数据块的数量信息)是否为0时,可以通过对应的读取指针(DMACmdReadOffset)来读取。每当上述对应关系中某个数据块序列的第二序列标识(写入指针DMACmdWriteOffset)对应的数据块的数量信息发生变化时,都采用当前对应的数量信息发生变化的第二序列标识(写入指针DMACmdWriteOffset)对应的读取指针(DMACmdReadOffset),来检查上述对应关系中该第二序列标识(写入指针DMACmdWriteOffset)对应的数量信息是否为0,若是,则将第二中央处理器维护的第二计数器的第二计数值(VFenceID)加1,并将第二计数器当前的第二计数值(VFenceID)通过第二门铃寄存器生成中断消息(第二中断消息)发送给第一中央处理器,同时更新下本地存储器(RAM)中的读取指针变量(读取指针DMACmdReadOffset加1),以备下一次检查使用。
在一些实施例中,数据块序列中的数据块的数量信息保存于命令控制块中的第一个数据块的头部信息中。
在一些实施例中,在接收到第一中央处理器发送的命令控制块时,在读取命令控制块之前,还可以根据命令控制块的写入偏移量和读取偏移量的差值来获得数据块序列中的数据块的数量信息。
在一些实施例中,DMA控制器包括多个通道。优选的,DMA控制器包括4个通道,每个通道包括64个处理位,分别对应64个标签,分配到任一通道内的任一数据块占据该通道内的至少一个标签。
在一些实施例中,分配到一个通道中的一个数据块占据该通道内的一个标签。
在一些实施例中,数据块序列中的各个数据块的分配至DMA控制器的方式不限,各个数据块可以分配至任一处于空闲状态的通道内(存在未被占据的标签的通道)。
在一些实施例中,步骤S320之后,上述方法还包括:
(a)获取分配到DMA控制器的至少一个通道内的各个数据块占据的标签;
(b)将数据块序列的第二序列标识与各个数据块占据的标签进行绑定,以得到对应的绑定关系。
其中,上述绑定步骤可以理解为,将每分配一个数据块时申请到的可用的标签(CmdTag)和当前的该数据块对应的第二序列标识(写入指针DMACmdWriteOffset)进行绑定,得到对应的绑定关系,即一个第二序列标识(写入指针DMACmdWriteOffset)对应一个数据块序列,对应多个申请到的标签(CmdTag)。
对应的,上述步骤S332,包括以下步骤:
步骤S332a:响应于接收到DMA控制器的任一通道发送的第三中断消息,从当前接收到的第三中断消息对应的通道的状态寄存器中,读取该通道中当前状态发生变化的所有标签,以作为当前接收到的第三中断消息对应的所有标签;
步骤S332b:根据绑定关系,判断当前接收到的第三中断消息对应的所有标签中,与数据块序列的第二序列标识相对应的标签数量,从而得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量。
上述状态寄存器(INT_STAT)是DMA控制器中的完成状态寄存器,每个通道都有一个,该状态寄存器的位宽可以为64位(bit),对应64个标签(CmdTag),每个bit对应一个标签(CmdTag),如果该状态寄存器中,某个bit置1,则说明该bit对应的标签(CmdTag)对应的处理位已将其上的数据块搬移完成,该bit对应的标签(CmdTag)也即为与当前接收到的第三中断消息对应的标签(CmdTag)。通过这种方式,可以快速且有效地获取到与当前接收到的第三中断消息对应的所有标签(CmdTag)。
进一步的,步骤S332b之后,上述方法还包括:
对当前接收到的第三中断消息对应的通道的状态寄存器进行初始化,并释放当前接收到的第三中断消息对应的所有标签。
可以理解为,为了便于下一次对状态寄存器的读取,在当前一次读取之后,可以对上述任一通道的状态寄存器进行初始化。另外,为了便于下一次标签的申请,不造成资源的浪费,可以将与当前接收到的第三中断消息对应的标签进行释放。
优选地,步骤S320,包括以下步骤:
采用轮询负载均衡的方式,将数据块序列中的各个数据块分配给DMA控制器的各个通道进行数据的搬移。
进一步的,步骤S320中采用轮询负载均衡的方式进行数据块分配的步骤,包括以下步骤:
步骤S322:按照预设顺序遍历DMA控制器的各个通道;
步骤S324:确认当前一次遍历过程中,DMA控制器中处于空闲状态的通道;其中,处于空闲状态的通道为存在未被占据的标签的通道;
步骤S326:按照一对一的方式,将对应数量的未被分配的数据块分配至当前处于空闲状态的通道中进行数据的搬移;
步骤S328:返回按照预设顺序遍历DMA控制器的各个通道的步骤(即返回之后步骤S322),直至将数据块序列中的各个数据块均分配给DMA控制器的对应通道中进行数据的搬移。
在一些实施例中,上述采用轮询负载均衡的方式进行数据块分配的步骤还包括:响应于遍历完DMA控制器的所有通道后均未找到未被占据的标签,输出对应的提示信息。
可以理解为,在分配某个数据块,遍历完DMA控制器的所有通道后,均没有找到未被占据的标签,此时说明DMA控制器的所有通道都是满负载状态,此时可以报错,进一步的,也可以停止检查通道的操作。
上述轮询负载均衡的方式,可以理解为,在存在未被占据的标签(空闲标签)的通道中均衡地进行数据块的分配,保证数据块序列中的多个数据块可以均匀分到DMA控制器的各个通道中,而不是停留在某一通道上,最大限度地提高DMA控制器的数据搬移效率。
图6示出了一种采用轮询负载均衡的方式进行数据块分配的方法,整个数据块分配的方法流程可以为:将DMA控制器的4个通道分别编号为0~3 ,并定义一个数组Channel[4] = {0,2,1,3},该数组中的0、1、2、3分别对应的是DMA 的四个通道(Channel)。在本地定义一个全局变量vdmaChannel,每次DMA 控制器申请空闲标签时,会检查当前通道(Channel[vdmaChanne])是否还有可用的标签(也即未被占据的标签),如果当前通道(Channel[vdmaChanne])有可用的标签,则申请一个可用的标签,并更新vdmaChannel的值(运算方法为(vdmaChannel + 1 ) & 3)。这样下次申请可用标签时就会从下一个通道开始检查。如果当前通道(Channel[vdmaChanne])中没有可用的标签,则会更新vdmaChannel的值(方法同上),查询下一个通道是否还有可用的标签,直到找到可用的标签为止(此时输出Returntrue)或遍历完4个通道为止(即遍历完4个通道之后均没有找到可用的标签为止,此时输出Return false)。
上述全局变量vdmaChannel 是一个Uint32_t的数值,它在最开始会初始化为0,在后面每次申请到一次可用的标签都会+1(会一直加,直到加到最大溢出变为0为止),然后对4取余(结果范围就会为0~3,暂且称为Value),这样再利用Channel[Value] 就可以得到对应的通道,这样就保证了通道的随机性。
在一些实施例中,步骤S310包括以下步骤:
响应于接收到第一中央处理器发送的命令控制块和第一中断消息,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列。
其中,第一中央处理器发送的第一中断消息可以将处于休眠状态的第二中央处理器唤醒,触发第二中央处理器去分析当前收到的命令控制块,以获得其中待处理的数据块序列。
在一些实施例中,第二中央处理器在接收到第一中央处理器发送的第一中断消息后,会关闭接收第一中断消息的功能,以避免第二中央处理器中对命令控制块的分析被后续的中断消息打扰,以减少第二中央处理器对中断处理的开销。
对应的,当第二中央处理器对当前的命令控制块的分析完成之后,第二中央处理器会开启接收第一中断消息的功能,开启之后,当又收到第一中央处理器发送的第一中断消息后,再次对收到的命令控制块进行分析,以获得其中待处理的数据块序列,以继续后续的处理进程。
需要说明的是,在第二中央处理器在关闭接收第一中断消息的功能的这个时间段内,第一中央处理器还是可以继续在命令控制块插入新的序列块序列,并发送命令控制块和第一中断消息给第二中央处理器,但是由于命令控制块中的数据块是累加的(即后一命令控制块中包括了新的数据块序列和前一命令控制块中的所有数据块),所以在第二中央处理器再次开启接收第一中断消息的功能后,第二中央处理器再次接收到第一中断消息时,会对此时接收到的命令控制块进行识别,可以对其中所有待处理的数据块(包括上述时间段内接收到但是未被识别的数据块)一起进行分析。
在一些实施例中,第二中央处理器在接收到第一中央处理器发送的第一中断消息后,也可以不关闭接收第一中断消息的功能,此时,后一命令控制块对应的第一中断消息可能会影响第二中央处理器对前一命令控制块的识别,但是由于命令控制块中的数据块是累加的(即后一命令控制块中包括了新的数据块序列和前一命令控制块中的所有数据块),所以第二中央处理器收到该后一命令控制块对应的第一中断消息后,可以对其中所有待处理的数据块(包括前一命令控制块中未来得及被识别的数据块)一起进行分析。
在一些实施例中,上述方法还包括:
响应于接收到DMA控制器的任一通道的第三中断消息,根据当前接收到的第三中断消息对应的通道,关闭接收该通道发送的第三中断消息的功能。
这种方案,可以避免第二中央处理器中对该通道的状态寄存器的分析被后续的中断消息打扰,以减少第二中央处理器对中断处理的开销。
进一步的,第二中央处理器关闭接收该通道发送的第三中断消息的功能,可以通过置位一个事件(Event)函数的方式。
在一些实施例中,步骤S330之后,上述方法还包括:
根据当前接收到的第三中断消息对应的通道,开启接收该通道发送的第三中断消息的功能。
也就是说,在处理完当前一次的第三中断消息之后,就可以开启接收该第三中断消息对应的通道发送的第三中断消息,以不耽误后续的处理进程。
进一步的,可以在对当前接收到的第三中断消息对应的通道的状态寄存器进行初始化,并释放当前接收到的第三中断消息对应的所有标签的步骤之后,开启接收该通道发送的第三中断消息的功能。
需要说明的是,在第二中央处理器在关闭接收对应通道发送的第三中断消息的功能的这个时间段内,对应通道还是可以继续更新对应的状态寄存器,并发送第三中断消息给第二中央处理器,但是由于状态寄存器的位宽可以为64位(bit),对应64个标签(CmdTag),在初始化之前,状态寄存器上记录的各个标签的状态是记录下来的,所以在第二中央处理器再次开启接收对应通道发送的第三中断消息的功能后,再次接收到对应通道的第三中断消息时,会对此时接收到第三中断消息对应的通道的状态寄存器进行识别,以对其中当前状态发生变化的所有标签(包括上述时间段内完成数据搬移但是未被识别的标签)一起进行分析,分析完之后再初始化状态寄存器。
在一些实施例中,第二中央处理器在接收到DMA控制器的某个通道发送的第三中断消息后,也可以不关闭接收该通道发送的第三中断消息的功能,此时,该通道后续发送的第三中断消息可能会影响第二中央处理器对该通道发送的前一第三中断消息的识别,但是由于在初始化之前,状态寄存器上记录的各个标签的状态是记录下来的,所以第二中央处理器收到该通道后续发送的第三中断消息后,可以对前后两次对第三中断消息识别结果中的重复标签进行筛查,进而同样可以实现对数据块搬移状态的分析。
在一些实施例中,步骤S310,包括以下步骤;
步骤S312:响应于接收到第一中央处理器发送的命令控制块,确认命令控制块的写入偏移量和读取偏移量,并将二者进行比较;
步骤S314:响应于命令控制块的写入偏移量和读取偏移量不一致,对命令控制块进行识别,以得到与命令控制块中待处理的数据块序列。
其中,第二中央处理器对命令控制块的写入偏移量和读取偏移量的判断,可以通过生成一个第一中央处理器的事件(Event)标识,方便在第二中央处理器主函数中调用,在第二中央处理器的主程序中的Handle函数会根据命令控制块的写入偏移量(WriteOffset)和读取偏移量(ReadOffset)的比较结果,判断是否有新的数据块(Cmd)待处理。
在一些实施例中,步骤S320之后,上述方法还包括:
对命令控制块的读取偏移量进行更新。
可以理解为,为了便于对下一次命令控制块的分析,在对当前的命令控制块分析完成之后,需要对当前的命令控制块的读取偏移量(ReadOffset)进行更新。
图7为上述应用于第二中央处理器的数据处理方法的另一流程示意图,整个数据处理流程可以为:
(1)第二中央处理器收到第一中央处理器发送的命令控制块和通过第一门铃寄存器(DB)发送第一中断消息后,会关闭自身接收第一中断消息的功能,并生成一个事件(Event)标识,方便在第二中央处理器主函数中调用,在第二中央处理器的主程序中的Handle函数会根据命令控制块的写入偏移量(WriteOffset)和读取偏移量(ReadOffset)的比较结果,判断是否有新的数据块(Cmd)待处理;
(2)当写入偏移量和读取偏移量不一致(ReadOffset!= Write Offset)时,判断有新的数据块待处理,随后第二中央处理器对命令控制块进行识别,获得其中待处理的数据块序列;然后,第二中央处理器会轮询负载均衡的方式,依次当前检查的DMA控制器通道中从未被占据的标签(CmdTag)中申请至少一个标签,一旦获取到可用的标签,则将新收到的一个数据块(Cmd)分配给申请到的该至少一个标签对应的处理位进行数据的搬移,相当于将新收到的一个数据块(Cmd)写到DMA控制器的命令缓冲区中(Cmd Buffer)中,同时第二中央处理器会在本地维护一个第二序列标识(写入指针DMACmdWriteOffset),用于记录收到数据块序列的数量,每新来一个数据块序列(一组数据块),该第二序列标识(写入指针DMACmdWriteOffset)的值会加1,并将每分配一个数据块时申请到的可用的标签(CmdTag)和当前的该数据块对应的第二序列标识(写入指针DMACmdWriteOffset)进行绑定,即一个第二序列标识(写入指针DMACmdWriteOffset)对应一个数据块序列,对应多个申请到的标签(CmdTag);另外,第二中央处理器在收到数据块序列(一组数据块)时会从命令控制块中该数据块序列(该组数据块)中第一个数据块的头部(Header)信息中读取数据块序列中所包含的数据块的数量信息(或,从命令控制块的写入偏移量和读取偏移量的差值来获得数据块序列中的数据块的数量信息),并将其与对应的第二序列标识(写入指针DMACmdWriteOffset)建立对应关系(即函数HdlCmd[DMACmdWriteOffset].Num),并保存在本地的一个缓冲区中,第二中央处理器读取了该数据块序列中数据块的数量信息或分配完该数据块序列中数据块后,会更新下处理命令控制块的读取偏移量(ReadOffset);
(3)DMA控制器每完成一个数据块的数据搬移后,对应通道(DMA控制器中一共有4个通道)都会发出第三中断消息(Int)以通知第二中央处理器,第二中央处理收到DMA控制器发出的第三中断消息后,首先会关闭接收对应通道的发送的第三中断消息的功能(避免一直被中断打扰,影响效率),同时生成一个完成事件(Complete Event)函数,方便在主程序中被调用,在第二中央处理器的主程序中通过读取对应通道的状态寄存器(INT_STAT)的值,获取该通道内状态发生变化的处理位对应的标签(CmdTag),作为与当前接收到的第三中断消息对应的标签(CmdTag),然后初始化该通道的状态寄存器(INT_STAT);与当前接收到的第三中断消息对应的标签(CmdTag),即为已完成数据搬移的处理位对应的标签(CmdTag),根据已完成数据搬移的标签(CmdTag),通过标签(CmdTag)和第二序列标识(写入指针DMACmdWriteOffset)的绑定关系,获取第二序列标识(写入指针DMACmdWriteOffset)对应的已完成数据搬移的标签数量,即为第二序列标识(写入指针DMACmdWriteOffset)对应的数据块的搬移完成数量,并将本地缓存与该第二序列标识(写入指针DMACmdWriteOffset)对应的数据块的数量信息(对应的HdlCmd[DMACmdWriteOffset].Num记录的数量)减去对应的数据块的搬移完成数量,同时释放对应的已完成数据搬移的标签(CmdTag),方便下次资源的申请,在处理完收到的当前通道发送的所有第三中断消息对应的标签(CmdTag)后打开接收当前通道发送的第三中断消息的功能;
(4)在第二中央处理器的主程序中会调用更新第二计数器的第二计数值(VFenceID)的函数,在这个函数中会在本地维护一个与上述第二序列标识(DMACmdWriteOffset)对应的数据块的读取指针(DMACmdReadOffset),在每次循环中都会检查该第二序列标识(写入指针DMACmdWriteOffset)对应的数据块是否均完成数据的搬移(即写入指针DMACmdWriteOffset对应的数量信息是否为0),如果完成,则将第二中央处理器维护的第二计数器的第二计数值(VFenceID) 加1,并将第二计数器当前的第二计数值(VFenceID)通过第二门铃寄存器生成第二中断消息发送给第一中央处理器 ,同时更新下本地存储器(RAM)中的读取指针变量(DMACmdReadOffset指针加1),以备下一次循环使用。
基于相同的发明构思,本公开的一个实施例还提供另一种数据处理方法,应用于DMA控制器,如图8所示,该方法包括:
步骤S410:响应于接收到第二中央处理器分配到任一通道的数据块,对数据块进行数据的搬移;
步骤S420:响应于任一数据块搬移完成,该任一数据块对应的通道向第二中央处理器发送第三中断消息。
基于相同的发明构思,本公开的一个实施例还提供另一种数据处理方法,如图9所示,该方法包括:
(1)主机端(Host端)通过PCIe接口将需要GPU执行的待处理任务发送给GPU,同时将对应的包含需要DMA控制器进行数据搬移的数据块序列发送给第一中央处理器,一个数据块序列对应一个第一序列标识(GroupID),一旦第一中央处理器收到新的数据块序列后,会从数据块序列中获取当前数据块序列一共包含几个数据块(Cmd),将当前数据块序列中的多个数据块(Cmd)插入命令控制块中,并将该数据块序列对应的数据块数量信息保存于命令控制块中该组数据块(同一GroupID下的)的第一个数据块的头部(Header)信息中,该组数据块(同一GroupID下的)中的其它数据块的头部(Header)信息中填0;在命令控制块中每插入一个数据块序列(同一GroupID下的一组数据块),都将保存在第一中央处理器中的第一计数器的第一计数值(AFenceID)加1,并将第一计数器当前的第一计数值(AFenceID)保存在本地的数据缓冲区中(Local buffer)中,然后将通过命令控制块(submit CCB)传输的方式,将对应的数据块序列的所有数据块(一组数据块)复制到第二中央处理器的存储器中,同时更新下命令控制块的写入偏移量(WriteOffset),最后再通过第一门铃寄存器(DB)向第二中央处理器发送中断消息;
(2)第二中央处理器收到第一中央处理器发送的命令控制块和通过第一门铃寄存器(DB)发送第一中断消息后,第二中央处理器会暂时关闭接收第一中断消息的功能,并生成一个第事件(Event)标识,方便在第二中央处理器主函数中调用,在第二中央处理器的主程序中的Handle函数会根据命令控制块的写入偏移量(WriteOffset)和读取偏移量(ReadOffset)的比较结果,判断是否有新的数据块(Cmd)待处理;
(3)当写入偏移量和读取偏移量不一致(ReadOffset!= Write Offset)时,判断有新的数据块待处理,随后第二中央处理器对命令控制块进行识别,获得其中待处理的数据块序列;然后,第二中央处理器会轮询负载均衡的方式,先去当前检查的DMA控制器通道中从未被占据的标签(CmdTag)中申请至少一个标签,一旦获取到可用的标签,则将新收到的一个数据块(Cmd)分配给申请到的该至少一个标签对应的处理位进行数据的搬移,相当于将新收到的一个数据块(Cmd)写到DMA控制器的命令缓冲区中(Cmd Buffer)中,同时第二中央处理器会在本地维护一个第二序列标识(写入指针DMACmdWriteOffset),用于记录收到数据块序列的数量,每新来一个数据块序列(一组数据块),该第二序列标识(写入指针DMACmdWriteOffset)的值会加1,并将每分配一个数据块时申请到的可用的标签(CmdTag)和当前的该数据块对应的第二序列标识(写入指针DMACmdWriteOffset)进行绑定,即一个第二序列标识(写入指针DMACmdWriteOffset)对应一个数据块序列,对应多个申请到的标签(CmdTag);另外,第二中央处理器在收到数据块序列(一组数据块)时会从命令控制块中该数据块序列(该组数据块)中第一个数据块的头部(Header)信息中读取数据块序列中所包含的数据块的数量信息(或,从命令控制块的写入偏移量和读取偏移量的差值来获得数据块序列中的数据块的数量信息),并将其与对应的第二序列标识(写入指针DMACmdWriteOffset)建立对应关系(即函数HdlCmd[DMACmdWriteOffset].Num),并保存在本地的一个缓冲区中,第二中央处理器读取了该数据块序列中数据块的数量信息或分配完该数据块序列中数据块后,会更新下处理命令控制块的读取偏移量(ReadOffset);
(4)DMA控制器每完成一个数据块的数据搬移后,对应通道(DMA控制器中一共有4个通道)都会发出第三中断消息(Int)以通知第二中央处理器,第二中央处理收到DMA控制器发出的第三中断消息后,首先会关闭接收对应通道的发送的第三中断消息的功能(避免一直被中断打扰,影响效率),同时生成一个完成事件(Complete Event)函数,方便在主程序中被调用,在第二中央处理器的主程序中通过读取对应通道的状态寄存器(INT_STAT)的值,获取该通道内状态发生变化的处理位对应的标签(CmdTag),作为与当前接收到的第三中断消息对应的标签(CmdTag),然后初始化该通道的状态寄存器(INT_STAT);与当前接收到的第三中断消息对应的标签(CmdTag),即为已完成数据搬移的处理位对应的标签(CmdTag),根据已完成数据搬移的标签(CmdTag),通过标签(CmdTag)和第二序列标识(写入指针DMACmdWriteOffset)的绑定关系,获取第二序列标识(写入指针DMACmdWriteOffset)对应的已完成数据搬移的标签数量,即为第二序列标识(写入指针DMACmdWriteOffset)对应的数据块的搬移完成数量,并将本地缓存与该第二序列标识(写入指针DMACmdWriteOffset)对应的数据块的数量信息(对应的HdlCmd[DMACmdWriteOffset].Num记录的数量)减去对应的数据块的搬移完成数量,同时释放对应的已完成数据搬移的标签(CmdTag),方便下次资源的申请,在处理完收到的当前通道发送的所有第三中断消息对应的标签(CmdTag)后打开接收对应通道发送的第三中断消息的功能;
(5)在第二中央处理器的主程序中会调用更新第二计数器的第二计数值(VFenceID)的函数,在这个函数中会在本地维护一个与上述第二序列标识(DMACmdWriteOffset)对应的数据块的读取指针(DMACmdReadOffset),在每次循环中都会检查该第二序列标识(写入指针DMACmdWriteOffset)对应的数据块是否均完成数据的搬移(即写入指针DMACmdWriteOffset对应的数量信息是否为0),如果完成,则将第二中央处理器维护的第二计数器的第二计数值(VFenceID) 加1,并将第二计数器当前的第二计数值(VFenceID)通过第二门铃寄存器(DB)生成第二中断消息发送给第一中央处理器 ,同时更新下本地存储器(RAM)中的读取指针变量(DMACmdReadOffset指针加1),以备下一次循环使用。
(6)第一中央处理器收到第二中央处理器通过第二门铃寄存器发送的第二中断消息后,从第二门铃寄存器中获取第二中央处理器中第二计数器当前的第二计数值(VFenceID)并保存在本地存储器(RAM)中,在第二中央处理器主程序中检查第二计数值(VFenceId)预设时间段内的第二差值(△VFenceID)是否大于或等于第一计数值(AFenceID)预设时间段内的第一差值(△AFenceID),如果成立,说明当前发给第二中央处理器的数据块序列都已经执行完成了,则第一中央处理器通知目标设备(如GPU)有新的任务待处理。
该方法中,上述方法中,由第二中央处理器直接统计DMA控制器对各个数据块的搬移进度,当一个数据块序列都搬移完成之后,再通知第一中央处理器,大大减少了第一中央处理器与第二中央处理器之间的通知任务量,减少了交互开销,能够实现数据的高效传输,提高系统性能。
其次,当一个数据块序列都搬移完成之后,第二中央处理器再通知第一中央处理器,由此,第一中央处理器收到的第二中央处理器发送的搬移完成的信息是有序的,避免了第一中央处理器和第二中央处理器交互过程中出现数据块信息丢失的问题。
再者,第二中央处理器直接将第二计数器更新后的第二计数值发送至第一中央处理器,不需要额外的命令控制块(如Complete CCB)来传递数据块的搬移状态,省去了额外的命令控制块(如Complete CCB)的空间,减少交互开销,能够实现数据的高效传输。
采用轮询负载均衡的方式进行数据块分配的方式,保证了数据块序列中的多个数据块可以均匀分到DMA控制器的各个通道中,而不是停留在某一通道上,最大限度地提高DMA控制器的数据搬移效率。
基于相同的发明构思,如图10所示,本公开实施例还提供一种数据处理装置500,应用于第一中央处理器,第一中央处理器包括第一计数器,上述装置包括:
接收模块510,被配置为响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入数据块序列,并将第一计数器的第一计数值加1;
转发模块520,被配置为将命令控制块发送至第二中央处理器,以通过第二中央处理器将数据块序列发送至DMA控制器进行数据的搬移;其中,第二中央处理器包括第二计数器;
比较模块530,被配置为响应于接收到第二中央处理器发送的第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的第二计数值为第二中央处理器在DMA控制器搬移完数据块序列后将第二计数值加1后更新得到;
指令发出模块540,被配置为响应于当前的第二计数值与当前的第一计数值的比较结果满足预设条件,向目标设备发送对应的指令。
在一些实施例中,指令发出模块540,被配置为:
计算当前的第二计数值和预设时间段之前接收到的第二计数值之间的第二差值;
响应于当前的第二差值,提取当前的第一计数值和预设时间段之前的第一计数值,并计算当前的第一计数值和预设时间段之前的第一计数值之间的第一差值;
响应于当前的第二差值大于等于当前的第一差值,向目标设备发送对应的指令。
在一些实施例中,上述数据处理装置500还包括:
数量信息保存模块,被配置为将数据块序列中的数据块的数量信息保存于命令控制块中的第一个数据块的头部信息中;和/或,
更新模块,被配置为对命令控制块的写入偏移量进行更新。
在一些实施例中,转发模块520,还被配置为:
向第二中央处理器发送对应的第一中断消息。
基于相同的发明构思,如图11所示,本公开实施例还提供一种数据处理装置600,应用于第二中央处理器,第二中央处理器包括第二计数器,上述装置包括:
接收模块610,被配置为响应于接收到第一中央处理器发送的命令控制块,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列;
分配模块620,被配置为将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移;
计数模块630,被配置为响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到数据块序列中各个数据块的搬移状态,响应于数据块序列中的各个数据块均搬移完成,将第二计数器的第二计数值加1,以得到更新后的第二计数值;
发送模块640,被配置为将更新后的第二计数值发送至第一中央处理器。
在一些实施例中,上述数据处理装置600还包括:
标识生成模块,被配置为生成数据块序列的序列标识;
读取模块,被配置为获取数据块序列中的数据块的数量信息;
构建模块,被配置为基于数据块序列的序列标识与数据块的数量信息,构建数据块序列的序列标识与数据块的数量信息的对应关系;
计数模块640包括:
识别模块,被配置为响应于接收到DMA控制器的任一通道发送的第三中断消息,对当前接收到的第三中断消息进行识别,以得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量;
统计模块,被配置为根据当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量,将对应关系中数据块序列的序列标识当前对应的数据块的数量信息,减去当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量;
计数子模块,被配置为响应于数据块序列的序列标识当前对应的数据块的数量信息为0,将第二计数器的第二计数值加1,以得到更新后的第二计数值。
在一些实施例中,分配到DMA控制器的任一通道内的任一数据块占据该通道内的至少一个标签;上述数据处理装置600还包括:
标签获取模块,被配置为获取分配到DMA控制器的至少一个通道内的各个数据块占据的标签;
绑定模块,被配置为将数据块序列的序列标识与各个数据块占据的标签进行绑定,以得到对应的绑定关系;
上述识别模块,被配置为:
响应于接收到DMA控制器的任一通道发送的第三中断消息,从当前接收到的第三中断消息对应的通道的状态寄存器中,读取该通道中当前状态发生变化的所有标签,以作为当前接收到的第三中断消息对应的所有标签;
根据绑定关系,判断当前接收到的第三中断消息对应的所有标签中,与数据块序列的序列标识相对应的标签数量,从而得到当前接收到的第三中断消息指示的数据块序列中的数据块的搬移完成数量。
在一些实施例中,上述数据处理装置600还包括:
初始化模块,被配置为对当前接收到的第三中断消息对应的通道的状态寄存器进行初始化,并释放当前接收到的第三中断消息对应的所有标签。
在一些实施例中,上述数据处理装置600中,数据块序列中的数据块的数量信息保存于命令控制块中的第一个数据块的头部信息中。
在一些实施例中,分配模块620,被配置为:
采用轮询负载均衡的方式,将数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移。
在一些实施例中,上述数据处理装置600中,分配到DMA控制器的任一通道内的任一数据块占据该通道内的至少一个标签;
分配模块620,被配置为:
按照预设顺序遍历DMA控制器的各个通道;
确认当前一次遍历过程中,DMA控制器中处于空闲状态的通道;其中,处于空闲状态的通道为存在未被占据的标签的通道;
按照一对一的方式,将对应数量的未被分配的数据块分配至当前处于空闲状态的通道中进行数据的搬移;
返回按照预设顺序遍历DMA控制器的各个通道的步骤,直至将数据块序列中的各个数据块均分配给DMA控制器的对应通道中进行数据的搬移。
在一些实施例中,接收模块610被配置为:
响应于接收到第一中央处理器发送的命令控制块和第一中断消息,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列。
在一些实施例中,上述数据处理装置600还被配置为:
响应于接收到第一中央处理器发送的第一中断消息,关闭接收第一中断消息的功能。
在一些实施例中,上述数据处理装置600还被配置为:
开启接收第一中断消息的功能。
在一些实施例中,发送模块640被配置为:
基于更新后的第二计数值生成第二中断消息,并将第二中断消息发送至第一中央处理器。
在一些实施例中,上述数据处理装置600还被配置为:
响应于接收到DMA控制器的任一通道的第三中断消息,根据当前接收到的第三中断消息对应的通道,关闭接收该通道发送的第三中断消息的功能。
在一些实施例中,上述数据处理装置600还被配置为:根据当前接收到的第三中断消息对应的通道,开启接收该通道发送的第三中断消息的功能。
在一些实施例中,接收模块610被配置为:
响应于接收到第一中央处理器发送的命令控制块,确认命令控制块的写入偏移量和读取偏移量,并将二者进行比较;
响应于命令控制块的写入偏移量和读取偏移量不一致,对命令控制块进行识别,以得到命令控制块中待处理的数据块序列。
在一些实施例中,接收模块610还被配置为:
对命令控制块的读取偏移量进行更新。
基于相同的发明构思,本公开实施例还提供一种数据处理系统700,如图12所示,该数据处理系统700包括存储器(图中未示出)、第一中央处理器710、第二中央处理器720和DMA控制器730;
存储器上存储有计算机程序,该计算机程序被第一中央处理器710、第二中央处理器720和DMA控制器730执行时,执行前述任意一项的数据处理方法;
第一中央处理器710包括第一计数器,第二中央处理器720包括第二计数器。
在一些使用场景下,该数据处理系统的产品形式体现为显卡;在另一些使用场景下,该数据处理系统的产品形式体现为CPU主板。
存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器。
存储器可通过至少一个通信接口(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
各个处理器或控制器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述任一项方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。
结合本公开实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
基于同样的发明构思,本公开实施例还提供一种图形处理系统,该图形处理系统可以是一个die(管芯),也可以是多die互联的一个SOC(System on Chip,片上系统),或者其他的组织形式。
下面以一个die为例,对本公开提供的图形处理系统的架构及工作原理进行说明。
在图13所示的一个实施例中,单die的图形处理系统包括多个GPU核(即上述任一实施例的图形处理器GPU)。
每个GPU核用来处理画图的命令,根据画图命令,执行图像渲染的Pipeline,还可以用来执行其他运算命令;多个GPU核作为一个整体完成执行画图或其他计算任务。每个GPU核中进一步包括:计算单元,用于执行着色器编译后的指令,属于可编程模块,由大量的ALU组成;缓存(Cache),用于GPU核数据的缓存,以减少对内存的访问;光栅化模块,3D渲染管线的一个固定的阶段;划片(Tilling)模块,TBR和TBDR GPU架构中对一帧进行划片处理;裁剪模块,3D渲染管线的一个固定的阶段,裁剪掉观察范围外,或者背面不显示的图元;后处理模块,用于对画完的图进行缩放,裁剪,旋转等操作;微核(Micro core),用于GPU核上各个管线硬件模块之间的调度,或者用于多GPU核的任务调度。
如图13所示,图形处理系统还可以包括:
片上网络用于图形处理系统上各个IP核之间的数据交换;
通用DMA(Direct Memory Access,直接存储器访问),用于执行主机端到图形处理系统内存(例如显卡内存)之间的数据搬移,例如,通过DMA将3D画图的顶点(vertex)数据从主机端搬到图形处理系统内存;
PCIe控制器,用于和主机通信的接口,实现PCIe协议,使图形处理系统通过PCIe接口连接到主机上,主机上运行了图形API以及显卡的驱动等程序;
应用处理器,用于图形处理系统上各个模块任务的调度,例如GPU渲染完一帧图后通知应用处理器,应用处理器再启动显示控制器将GPU画完的图显示到屏幕上;
内存控制器,用于连接系统内存,用于保存SOC上的数据;
显示控制器,控制将系统内存里的frame buffer以显示接口(HDMI, DP等)输出到显示器上;
视频解码,可以将主机硬盘上的编码的视频解码成能显示的画面;
视频编码,可以将主机硬盘上原始的视频码流编码成指定的格式返回给主机。
基于图13所示的图形处理系统,在一个实施例中,应用处理器(即第一中央处理器)响应于接收到主机端通过PCIe接口发送的待处理的数据块序列,在对应的命令控制块中插入该数据块序列,并将第一计数器的第一计数值加1;
应用处理器(即第一中央处理器)将命令控制块发送至应用于上述图形处理系统的虚拟中央处理器(即第二中央处理器)(图中未示出),以通过虚拟中央处理器(即第二中央处理器)将上述数据块序列中的多个数据块发送至DMA控制器进行数据的搬移;
应用处理器(即第一中央处理器)响应于接收到虚拟中央处理器(即第二中央处理器)发送的第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的第二计数值为第二中央处理器在DMA控制器搬移完数据块序列后将第二计数值加1后更新得到;
响应于当前的第二计数值与当前的第一计数值的比较结果满足预设条件,第一中央处理器向GPU发送对应的指令。
基于相同的发明构思,本公开实施例还提供一种电子装置,该电子装置包括上述任一实施例中的数据处理系统。在一些使用场景下,该电子装置的产品形式体现为显卡;在另一些使用场景下,该电子装置的产品形式体现为CPU主板。
基于相同的发明构思,本公开实施例还提供一种电子设备,该电子设备包括上述的电子装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
基于相同的发明构思,本公开实施例还提供一种存储介质,该存储介质存储的计算机程序,在被一个或多个处理器执行时,实现任意一项数据处理方法。其中,该数据处理方法的实现过程与前述实施例相同,此处不再赘述。

Claims (24)

1.一种数据处理方法,应用于第一中央处理器,其中,所述第一中央处理器包括第一计数器,所述方法包括:
响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入所述数据块序列,并将所述第一计数器的第一计数值加1;
将所述命令控制块发送至第二中央处理器,以通过所述第二中央处理器将所述数据块序列发送至DMA控制器进行数据的搬移;其中,所述第二中央处理器包括第二计数器;
响应于接收到所述第二中央处理器发送的所述第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的所述第二计数值为所述第二中央处理器在所述DMA控制器搬移完所述数据块序列后将所述第二计数值加1后更新得到;
响应于当前的所述第二计数值与当前的所述第一计数值的比较结果满足预设条件,向目标设备发送对应的指令。
2.根据权利要求1所述的方法,其中,响应于当前的所述第二计数值与当前的所述第一计数值的比较结果满足预设条件,向目标设备发送对应的指令,包括以下步骤:
计算当前的所述第二计数值和预设时间段之前接收到的所述第二计数值之间的第二差值;
响应于当前的所述第二差值,提取当前的所述第一计数值和所述预设时间段之前的所述第一计数值,并计算当前的所述第一计数值和所述预设时间段之前的所述第一计数值之间的第一差值;
响应于当前的所述第二差值大于等于当前的所述第一差值,向目标设备发送对应的指令。
3.根据权利要求1所述的方法,其中,响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入所述数据块序列的步骤之后,所述方法还包括:
将所述数据块序列中的数据块的数量信息保存于所述命令控制块中的第一个所述数据块的头部信息中;和/或,
对所述命令控制块的写入偏移量进行更新。
4.一种数据处理方法,应用于第二中央处理器,其中,所述第二中央处理器包括第二计数器,所述方法包括:
响应于接收到第一中央处理器发送的命令控制块,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列;
将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移;
响应于接收到所述DMA控制器的任一通道发送的第三中断消息,对当前接收到的所述第三中断消息进行识别,以得到所述数据块序列中各个所述数据块的搬移状态,响应于所述数据块序列中的各个所述数据块均搬移完成,将所述第二计数器的第二计数值加1,以得到更新后的所述第二计数值;
将更新后的所述第二计数值发送至所述第一中央处理器。
5.根据权利要求4所述的方法,其中,响应于接收到第一中央处理器发送的命令控制块,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列的步骤之后,所述方法还包括:
生成所述数据块序列的序列标识;
获取所述数据块序列中的所述数据块的数量信息;
基于所述数据块序列的序列标识与所述数据块的数量信息,构建所述数据块序列的序列标识与所述数据块的数量信息的对应关系;
响应于接收到所述DMA控制器的任一通道发送的第三中断消息,对当前接收到的所述第三中断消息进行识别,以得到所述数据块序列中各个所述数据块的搬移状态,响应于所述数据块序列中的各个所述数据块均搬移完成,将所述第二计数器的第二计数值加1,以得到更新后的所述第二计数值,包括以下步骤:
响应于接收到所述DMA控制器的任一通道发送的第三中断消息,对当前接收到的所述第三中断消息进行识别,以得到当前接收到的所述第三中断消息指示的所述数据块序列中的所述数据块的搬移完成数量;
根据当前接收到的所述第三中断消息指示的所述数据块序列中的所述数据块的搬移完成数量,将所述对应关系中所述数据块序列的序列标识当前对应的所述数据块的数量信息,减去当前接收到的所述第三中断消息指示的所述数据块序列中的所述数据块的搬移完成数量;
响应于所述数据块序列的序列标识当前对应的所述数据块的数量信息为0,将所述第二计数器的第二计数值加1,以得到更新后的所述第二计数值。
6.根据权利要求5所述的方法,其中,分配到所述DMA控制器的任一通道内的任一所述数据块占据该通道内的至少一个标签;
将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移的步骤之后,所述方法还包括:
获取分配到DMA控制器的至少一个通道内的各个所述数据块占据的所述标签;
将所述数据块序列的序列标识与各个所述数据块占据的所述标签进行绑定,以得到对应的绑定关系;
响应于接收到所述DMA控制器的任一通道发送的第三中断消息,对当前接收到的所述第三中断消息进行识别,以得到当前接收到的所述第三中断消息指示的所述数据块序列中的所述数据块的搬移完成数量,包括以下步骤:
响应于接收到所述DMA控制器的任一通道发送的第三中断消息,从当前接收到的所述第三中断消息对应的通道的状态寄存器中,读取该通道中当前状态发生变化的所有所述标签,以作为当前接收到的所述第三中断消息对应的所有所述标签;
根据所述绑定关系,判断当前接收到的所述第三中断消息对应的所有所述标签中,与所述数据块序列的序列标识相对应的标签数量,从而得到当前接收到的所述第三中断消息指示的所述数据块序列中的所述数据块的搬移完成数量。
7.根据权利要求6所述的方法,其中,根据所述绑定关系,判断当前接收到的所述第三中断消息对应的所有所述标签中,与所述数据块序列的序列标识相对应的标签数量,从而得到当前接收到的所述第三中断消息指示的所述数据块序列中的所述数据块的搬移完成数量的步骤之后,所述方法还包括:
对当前接收到的所述第三中断消息对应的通道的状态寄存器进行初始化,并释放当前接收到的所述第三中断消息对应的所有所述标签。
8.根据权利要求5所述的方法,其中,所述数据块序列中的所述数据块的数量信息保存于所述命令控制块中的第一个所述数据块的头部信息中。
9.根据权利要求4所述的方法,其中,将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移,包括以下步骤:
采用轮询负载均衡的方式,将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移。
10.根据权利要求9所述的方法,其中,分配到所述DMA控制器的任一通道内的任一所述数据块占据该通道内的至少一个标签;
采用轮询负载均衡的方式,将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移,包括以下步骤:
按照预设顺序遍历DMA控制器的各个通道;
确认当前一次遍历过程中,所述DMA控制器中处于空闲状态的通道;其中,处于空闲状态的通道为存在未被占据的所述标签的通道;
按照一对一的方式,将对应数量的未被分配的所述数据块分配至当前所述处于空闲状态的通道中进行数据的搬移;
返回所述按照预设顺序遍历DMA控制器的各个通道的步骤,直至将所述数据块序列中的各个所述数据块均分配给所述DMA控制器的对应通道中进行数据的搬移。
11.根据权利要求4所述的方法,其中,响应于接收到第一中央处理器发送的命令控制块,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列,包括以下步骤:
响应于接收到第一中央处理器发送的命令控制块和第一中断消息,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列。
12.根据权利要求11所述的方法,其中,所述方法还包括:
响应于接收到所述第一中央处理器发送的第一中断消息,关闭接收所述第一中断消息的功能。
13.根据权利要求12所述的方法,其中,将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移的步骤之后,所述方法还包括:
开启接收所述第一中断消息的功能。
14.根据权利要求4所述的方法,其中,将更新后的所述第二计数值发送至所述第一中央处理器,包括以下步骤:
基于更新后的所述第二计数值生成第二中断消息,并将所述第二中断消息发送至所述第一中央处理器。
15.根据权利要求4所述的方法,其中,所述方法还包括:
响应于接收到所述DMA控制器的任一通道的第三中断消息,根据当前接收到的所述第三中断消息对应的通道,关闭接收该通道发送的所述第三中断消息的功能。
16.根据权利要求15所述的方法,其中,响应于接收到所述DMA控制器的任一通道发送的第三中断消息,对当前接收到的所述第三中断消息进行识别,以得到所述数据块序列中各个所述数据块的搬移状态的步骤之后,所述方法还包括:
根据当前接收到的所述第三中断消息对应的通道,开启接收该通道发送的所述第三中断消息的功能。
17.根据权利要求4所述的方法,其中,响应于接收到第一中央处理器发送的命令控制块,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列,包括以下步骤:
响应于接收到第一中央处理器发送的命令控制块,确认所述命令控制块的写入偏移量和读取偏移量,并将二者进行比较;
响应于所述命令控制块的所述写入偏移量和所述读取偏移量不一致,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列。
18.根据权利要求17所述的方法,其中,将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移的步骤之后,所述方法还包括:
对所述命令控制块的所述读取偏移量进行更新。
19.一种数据处理装置,应用于第一中央处理器,其中,所述第一中央处理器包括第一计数器,所述装置包括:
接收模块,被配置为响应于接收到主机端发送的待处理的数据块序列,在对应的命令控制块中插入所述数据块序列,并将所述第一计数器的第一计数值加1;
转发模块,被配置为将所述命令控制块发送至第二中央处理器,以通过所述第二中央处理器将所述数据块序列发送至DMA控制器进行数据的搬移;其中,所述第二中央处理器包括第二计数器;
比较模块,被配置为响应于接收到所述第二中央处理器发送的所述第二计数器当前的第二计数值,将当前的第二计数值与当前的第一计数值进行比较;其中,当前的所述第二计数值为所述第二中央处理器在所述DMA控制器搬移完所述数据块序列后将所述第二计数值加1后更新得到;
指令发出模块,被配置为响应于当前的所述第二计数值与当前的所述第一计数值的比较结果满足预设条件,向目标设备发送对应的指令。
20.一种数据处理装置,应用于第二中央处理器,其中,所述第二中央处理器包括第二计数器,所述装置包括:
接收模块,被配置为响应于接收到第一中央处理器发送的命令控制块,对所述命令控制块进行识别,以得到所述命令控制块中待处理的数据块序列;
分配模块,被配置为将所述数据块序列中的各个数据块分配给DMA控制器的至少一个通道进行数据的搬移;
计数模块,被配置为响应于接收到所述DMA控制器的任一通道发送的第三中断消息,对当前接收到的所述第三中断消息进行识别,以得到所述数据块序列中各个所述数据块的搬移状态,响应于所述数据块序列中的各个所述数据块均搬移完成,将所述第二计数器的第二计数值加1,以得到更新后的所述第二计数值;
发送模块,被配置为将更新后的所述第二计数值发送至所述第一中央处理器。
21.一种数据处理系统,其中,所述系统包括存储器、第一中央处理器、第二中央处理器和DMA控制器;
所述存储器上存储有计算机程序,该计算机程序被所述第一中央处理器、所述第二中央处理器和所述DMA控制器执行时,执行如权利要求1至18中任意一项所述的数据处理方法;
所述第一中央处理器包括第一计数器,所述第二中央处理器包括第二计数器。
22.一种电子装置,其中,包括如权利要求21中所述的数据处理系统。
23.一种电子设备,其中,包括如权利要求22中所述的电子装置。
24.一种存储介质,其中,该存储介质存储的计算机程序,在被一个或多个处理器执行时,实现如权利要求1至18中任一项所述的数据处理方法。
CN202210811944.1A 2022-07-12 2022-07-12 数据处理方法、装置、系统、电子设备及存储介质 Active CN114880259B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210811944.1A CN114880259B (zh) 2022-07-12 2022-07-12 数据处理方法、装置、系统、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210811944.1A CN114880259B (zh) 2022-07-12 2022-07-12 数据处理方法、装置、系统、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN114880259A CN114880259A (zh) 2022-08-09
CN114880259B true CN114880259B (zh) 2022-09-16

Family

ID=82683297

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210811944.1A Active CN114880259B (zh) 2022-07-12 2022-07-12 数据处理方法、装置、系统、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114880259B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115878521B (zh) * 2023-01-17 2023-07-21 北京象帝先计算技术有限公司 命令处理系统、电子装置及电子设备
CN116578631B (zh) * 2023-07-13 2023-10-13 国仪量子(合肥)技术有限公司 数据交互方法、数据采集设备、数据处理设备及交互系统
CN116820580B (zh) * 2023-08-31 2023-11-10 摩尔线程智能科技(北京)有限责任公司 指令的执行方法、系统及装置、图形处理器及电子设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0458625A1 (en) * 1990-05-22 1991-11-27 Nec Corporation Data transfer controlling device
CN102385529A (zh) * 2010-08-31 2012-03-21 晨星软件研发(深圳)有限公司 多cpu领域移动电子装置与其操作方法
CN102866971A (zh) * 2012-08-28 2013-01-09 华为技术有限公司 传输数据的装置、系统及方法
CN103970709A (zh) * 2014-04-29 2014-08-06 国家电网公司 一种fft协处理器与主处理器通信方法
CN110046114A (zh) * 2019-03-06 2019-07-23 上海熠知电子科技有限公司 基于pcie协议的dma控制器及dma数据传输方法
WO2020019255A1 (zh) * 2018-07-26 2020-01-30 华为技术有限公司 一种数据块处理的方法及控制器
CN111615692A (zh) * 2019-05-23 2020-09-01 深圳市大疆创新科技有限公司 数据搬运方法、计算处理装置、设备及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378167B2 (en) * 2013-08-19 2016-06-28 Futurewei Technologies, Inc. Enhanced data transfer in multi-CPU systems

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0458625A1 (en) * 1990-05-22 1991-11-27 Nec Corporation Data transfer controlling device
CN102385529A (zh) * 2010-08-31 2012-03-21 晨星软件研发(深圳)有限公司 多cpu领域移动电子装置与其操作方法
CN102866971A (zh) * 2012-08-28 2013-01-09 华为技术有限公司 传输数据的装置、系统及方法
CN103970709A (zh) * 2014-04-29 2014-08-06 国家电网公司 一种fft协处理器与主处理器通信方法
WO2020019255A1 (zh) * 2018-07-26 2020-01-30 华为技术有限公司 一种数据块处理的方法及控制器
CN110046114A (zh) * 2019-03-06 2019-07-23 上海熠知电子科技有限公司 基于pcie协议的dma控制器及dma数据传输方法
CN111615692A (zh) * 2019-05-23 2020-09-01 深圳市大疆创新科技有限公司 数据搬运方法、计算处理装置、设备及存储介质

Also Published As

Publication number Publication date
CN114880259A (zh) 2022-08-09

Similar Documents

Publication Publication Date Title
CN114880259B (zh) 数据处理方法、装置、系统、电子设备及存储介质
CN107077377B (zh) 一种设备虚拟化方法、装置、系统及电子设备、计算机程序产品
CN100336075C (zh) 利用具有时间分配器的图形渲染引擎的装置、方法和系统
CN113515396B (zh) 图形渲染方法、装置、电子设备与存储介质
US7876328B2 (en) Managing multiple contexts in a decentralized graphics processing unit
US8941669B1 (en) Split push buffer rendering for scalability
US10152275B1 (en) Reverse order submission for pointer rings
US7760205B2 (en) Information processing apparatus for efficient image processing
US11941514B2 (en) Method for execution of computational graph in neural network model and apparatus thereof
CN105373484A (zh) 一种网络通信芯片中内存分配、存储和管理的方法
CN111274019A (zh) 一种数据处理方法、装置及计算机可读存储介质
WO2023173516A1 (zh) 数据交互的方法、装置、存储介质及电子设备
CN110245024B (zh) 静态存储块的动态分配系统及其方法
US20060061579A1 (en) Information processing apparatus for efficient image processing
CN111310638A (zh) 一种数据处理方法、装置及计算机可读存储介质
US8041903B2 (en) Processor and method for controlling memory
WO2022227563A1 (zh) 一种硬件电路、数据搬移方法、芯片和电子设备
CN115564635A (zh) 一种gpu资源调度方法、装置、电子设备及存储介质
US5713000A (en) Circuits system and methods for transferring data between a host device and a slave device in a single cycle using alias memory
CN116795442B (zh) 一种寄存器配置方法、dma控制器及图形处理系统
JPWO2006001051A1 (ja) マルチプロセッサ装置及びその制御方法
CN113238852A (zh) 一种任务分配方法、装置、电子设备及存储介质
CN116881191B (zh) 数据处理方法、装置、设备及存储介质
CN110580238A (zh) 数据处理系统中的硬件单元的同步
CN117412059B (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
TR01 Transfer of patent right

Effective date of registration: 20240115

Address after: 401135 No. 618 Liangjiang Avenue, Longxing Town, Yubei District, Chongqing

Patentee after: Xiangdixian Computing Technology (Chongqing) Co.,Ltd.

Address before: Room 901, 901, floor 9 (09), building 1, yard 5, Anding Road, Chaoyang District, Beijing 100029

Patentee before: Beijing xiangdixian Computing Technology Co.,Ltd.

TR01 Transfer of patent right