CN117407336A - Dma传输方法、装置、soc及电子设备 - Google Patents

Dma传输方法、装置、soc及电子设备 Download PDF

Info

Publication number
CN117407336A
CN117407336A CN202210794039.XA CN202210794039A CN117407336A CN 117407336 A CN117407336 A CN 117407336A CN 202210794039 A CN202210794039 A CN 202210794039A CN 117407336 A CN117407336 A CN 117407336A
Authority
CN
China
Prior art keywords
task
transmission
dma
task node
node
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.)
Pending
Application number
CN202210794039.XA
Other languages
English (en)
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
Xiangdixian Computing Technology Chongqing 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 Xiangdixian Computing Technology Chongqing Co ltd filed Critical Xiangdixian Computing Technology Chongqing Co ltd
Priority to CN202210794039.XA priority Critical patent/CN117407336A/zh
Publication of CN117407336A publication Critical patent/CN117407336A/zh
Pending legal-status Critical Current

Links

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
    • G06F13/282Cycle stealing DMA
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

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

Abstract

本公开提供一种DMA传输方法、装置、SOC及电子设备,该方法包括:遍历用于保存任务节点的传输队列,并在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道;所述任务节点用于记录对应传输任务的任务信息;若存在,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除;向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。通过该方法,可尽可能地减少传输任务的排队等待时间,提高传输效率。

Description

DMA传输方法、装置、SOC及电子设备
技术领域
本公开涉及DMA传输技术领域,尤其涉及一种DMA传输方法、装置、SOC、电子设备及可读存储介质。
背景技术
DMA(Direct Memory Access,直接存储器访问)传输一般为多通道传输,是图形/图像类产品提升性能的重要技术。主机(Master)设备可利用设备端(即Device端,例如为显卡设备或者其他PICE设备)SOC(System on Chip,片上***)内部的DMA硬件,将本地内存中的数据搬运到显卡内部的GDDR(Graphics Double Data Rate,图形用双倍数据传输率存储器)中,实现DMA传输。此外,位于设备端SOC内部的其他IP Core(功能模块)所包括的主控CPU也可能会使用DMA硬件进行数据传输。
针对传统的DMA传输,在主机或者其他主控CPU生成传输任务时,将会为该传输任务指定对应的DMA通道,且该传输任务在后续只能由指定的DMA通道来进行传输,即传输任务与DMA通道一直存在绑定关系。由于同一DMA通道在同一时刻只能被一个传输任务所使用,那么当多个传输任务绑定同一个DMA通道时,在传统DMA传输调度下就会出现排队等待现象,只有等前一个传输任务执行完成后,后一个传输任务才会被其所绑定的DMA通道执行,严重影响传输效率。
发明内容
本公开的目的是提供一种DMA传输方法、装置、SOC、电子设备及可读存储介质,可尽可能地减少传输任务的排队等待时间,提高传输效率。
根据本公开的一个方面,提供一种DMA传输方法,该方法包括:遍历用于保存任务节点的传输队列,并在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道;所述任务节点用于记录对应传输任务的任务信息;若存在,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除;向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。
本公开一种可行的实现方式中,所述方法还包括:若不存在,且在后续接收到第一中断时,通过中断处理函数将所述第一中断所对应的DMA通道解绑,并将该解绑的DMA通道与所述第一任务节点进行绑定,并将所述第一任务节点从所述传输队列中移除;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务;向所述DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制该解绑的DMA通道执行与所述第一任务节点对应的传输任务。
本公开一种可行的实现方式中,所述传输队列的数量为一个,所述第一任务节点是位于所述传输队列的队列头部的任务节点。
本公开一种可行的实现方式中,所述传输队列的数量为多个,且不同的传输队列之间具有不同的优先级,每个所述传输队列用于保存具有对应优先级的任务节点;所述将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,包括:按照优先级从高到低的顺序依次遍历各个传输队列,且将首次搜索到的任务节点与所述任一未绑定的DMA通道进行绑定;所述首次搜索到的任务节点为所述第一任务节点。
本公开一种可行的实现方式中,所述方法还包括:获取传输任务的请求指令并对其进行解析,得到该传输任务的任务信息;将该传输任务的任务信息填充到新申请的任务节点内,并将填充后的任务节点保存到所述传输队列。
本公开一种可行的实现方式中,所述方法应用于MCU,所述MCU位于SOC内;所述传输任务的请求指令的发送方是位于所述SOC内的其他主控CPU,或是位于所述SOC外的其他Master设备。
本公开一种可行的实现方式中,在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第一buffer,所述第一buffer用于保存对应的发送方所写入的所述传输任务的请求指令;所述获取传输任务的请求指令,包括:从所述第一buffer内读取所述传输任务的请求指令。
本公开一种可行的实现方式中,所述方法还包括:在接收到第一中断时,通过中断处理函数向所述传输任务的请求指令的发送方发送任务执行完毕消息,并触发第二中断发送给所述传输任务的请求指令的发送方;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务。
本公开一种可行的实现方式中,所述方法应用于MCU,所述MCU位于SOC内;在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第二buffer;所述向所述传输任务的请求指令的发送方发送任务执行完毕消息,包括:将所述任务执行完毕消息保存到与所述传输任务的请求指令的发送方对应的第二buffer,以使所述传输任务的请求指令的发送方在获取到所述第二中断后,从所述对应的第二buffer读取到所述任务执行完毕消息。
根据本公开的另一方面,还提供一种DMA传输装置,包括:遍历模块、判断模块、绑定模块以及发送模块。
遍历模块,用于遍历用于保存任务节点的传输队列;判断模块,用于在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道;所述任务节点用于记录对应传输任务的任务信息;绑定模块,用于在所述判断模块判断为是时,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除;发送模块,用于向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。
本公开一种可行的实现方式中,绑定模块,还用于在所述判断模块判断为否,且在后续接收到第一中断时,通过中断处理函数将所述第一中断所对应的DMA通道解绑,并将该解绑的DMA通道与所述第一任务节点进行绑定,并将所述第一任务节点从所述传输队列中移除;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务;所述发送模块,还用于向所述DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制该解绑的DMA通道执行与所述第一任务节点对应的传输任务。
本公开一种可行的实现方式中,所述传输队列的数量为一个,所述第一任务节点是位于所述传输队列的队列头部的任务节点。
本公开一种可行的实现方式中,所述传输队列的数量为多个,且不同的传输队列之间具有不同的优先级,每个所述传输队列用于保存具有对应优先级的任务节点;所述绑定模块,用于按照优先级从高到低的顺序依次遍历各个传输队列,且将首次搜索到的任务节点与所述任一未绑定的DMA通道进行绑定;所述首次搜索到的任务节点为所述第一任务节点。
本公开一种可行的实现方式中,所述装置还包括获取模块以及填充模块;获取模块,用于获取传输任务的请求指令并对其进行解析,得到该传输任务的任务信息;填充模块,用于将该传输任务的任务信息填充到新申请的任务节点内,并将填充后的任务节点保存到所述传输队列。
本公开一种可行的实现方式中,所述装置应用于MCU,所述MCU位于SOC内;所述传输任务的请求指令的发送方是位于所述SOC内的其他主控CPU,或是位于所述SOC外的其他Master设备。
本公开一种可行的实现方式中,在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第一buffer,所述第一buffer用于保存对应的发送方所写入的所述传输任务的请求指令;所述获取模块,用于从所述第一buffer内读取所述传输任务的请求指令。
本公开一种可行的实现方式中,所述发送模块,还用于在接收到第一中断时,通过中断处理函数向所述传输任务的请求指令的发送方发送任务执行完毕消息,并触发第二中断发送给所述传输任务的请求指令的发送方;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务。
本公开一种可行的实现方式中,所述装置应用于MCU,所述MCU位于SOC内;在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第二buffer;所述发送模块,用于:将所述任务执行完毕消息保存到与所述传输任务的请求指令的发送方对应的第二buffer,以使所述传输任务的请求指令的发送方在获取到所述第二中断后,从所述对应的第二buffer读取到所述任务执行完毕消息。
根据本公开的另一方面,还提供一种SOC,包括DMA、MCU以及其他主控CPU,所述其他主控CPU通过所述MCU与所述DMA通信连接;在所述MCU内存储有DMA传输程序,所述DMA传输程序被所述MCU执行时,实现上述任一所述的DMA传输方法。其中,该SOC可能位于显卡设备内,也可能位于其他PICE设备内。
根据本公开的另一方面,还提供一种电子设备,包括上述SOC。对于移动端,该电子设备可以是智能手机、平板电脑、VR眼镜、车载电脑等等电子产品;对于桌面端,该电子设备可以是台式机、笔记本电脑等电子产品。
根据本公开的另一方面,还提供一种计算机可读存储介质,该计算机可读存储介质上存储有DMA传输程序,当DMA传输程序被执行时,实现上述任一可行的实现方式所提供的DMA传输方法。
附图说明
图1为传统的DMA传输方法的调度示意图;
图2为本公开一个实施例的DMA传输方法的流程示意图之一;
图3为本公开一个实施例的DMA传输方法的调度示意图;
图4为本公开一个实施例的DMA传输方法的流程示意图之二;
图5为本公开一个实施例的DMA传输装置的结构示意图;
图6为本公开一个实施例的SOC的结构示意图。
附图标记:
400-DMA传输装置;410-遍历模块;420-判断模块;430-绑定模块;440-发送模块。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
传统的DMA传输,传输任务在生成之初就与DMA通道(Channel)存在绑定关系。
例如在某个SOC上存在包括4个DMA通道(分别为DMA通道1、DMA通道2、DMA通道3以及DMA通道4)的DMA硬件,主机CPU的应用程序生成6个需要使用DMA硬件传输数据的传输任务,分为是传输任务A、传输任务B、传输任务C、传输任务D、传输任务E以及传输任务F。
如图1所示,在传输任务生成之初,主机CPU的应用程序为这6个传输任务指定了其需要绑定使用的DMA通道,依次为DMA通道1、DMA通道2、DMA通道3、DMA通道4、DMA通道1及DMA通道2。后续在***运行到某个时刻后,传输任务C与传输任务D已传输完成,但传输任务E与传输任务F依旧未传输完成,出现了传输任务A、传输任务B、传输任务E、传输任务F需要请求DMA传输的情况。
由于DMA通道1被传输任务A和传输任务E绑定,DMA通道2被传输任务B和传输任务F绑定,且同一个DMA通道在同一时刻只能被一个传输任务所使用,那么此时就会出现图1所示的传输任务A排队等待DMA通道1,传输任务B排队等待DMA通道2,但DMA通道3和DMA通道4却闲置的现象,影响了传输效率,且DMA通道的资源利用率未最大化。
为解决上述问题,本公开用于提供一种DMA传输方案,有利于将DMA通道的资源利用率最大化,且尽可能地减少传输任务的排队等待时间,以提高DMA传输效率。
下面将针对本公开所提供的DMA传输方案进行详细介绍。
首先请参照图2,本公开的一个实施例提供一种DMA传输方法,该方法可以包括:
S110:遍历用于保存任务节点的传输队列,并在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道。
其中,任务节点用于记录对应传输任务的任务信息。
S120:若存在,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除。
S130:向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。
也就是说,在本公开实施例中,针对DMA多通道传输的效率问题,采用了一种虚拟的传输队列技术,将各个传输任务以任务节点的方式挂在该传输队列上。后续在遍历到传输队列内存在任务节点时,表示存在未执行的传输任务,即可继续判断当前是否存在未绑定的DMA通道,且在存在时,将传输队列内的第一任务节点与任一一个未绑定的DMA通道进行绑定,并将第一任务节点从传输队列中移除,且向DMA控制器发送启动指令,以便与第一任务节点绑定的DMA通道执行与第一任务节点对应的传输任务。
从上述过程可以看出,在本公开实施例中,不再将传输任务直接与DMA通道进行固定绑定,而是根据当前的实际情况,实时地将传输任务所对应的任务节点与当前未绑定的DMA通道(处于闲置状态的DMA通道)进行绑定,那么在传输任务并发量高的情况下,有利于DMA硬件的DMA通道全部打开,从而有利于DMA通道的资源利用率最大化,以便DMA硬件以最大吞吐率完成传输任务,可以提高DMA传输效率。
此外,就传输任务本身而言,可实时利用闲置的DMA通道来执行,而不必再等待预先为其指定的DMA通道闲置后才可被执行,进而减少了传输任务的排队等待时间,可以提高DMA传输效率。
相应的,如图3所示,按照本公开所提供的DMA传输方法执行后,对应于图1所出现的传输任务A排队等待DMA通道1,传输任务B排队等待DMA通道2,且DMA通道3和DMA通道4闲置的情况,即可将传输任务A与DMA通道3绑定,将传输任务B与DMA通道4绑定。
如此操作之后,传输任务A不必再等待传输1闲置即可被执行,传输任务B不必再等待传输2闲置即可被执行,从整体上可以提高DMA传输效率。
在一些实施方式中,在步骤S110判断当前是否存在未绑定的DMA通道时,也有可能存在判断结果为否,即当前不存在闲置的DMA通道的情况。
为了应对判断结果为否的情况,在本公开实施例中,每当绑定了任务节点的DMA通道执行完与其绑定的任务节点所对应的传输任务之后,便会触发一个中断(第一中断),用于表征本DMA通道已经执行完与自身绑定的任务节点所对应的传输任务。在这种前提下,请参考图4,在步骤S110的判断结果为否时,该DMA传输方法还可以包括:
步骤S121:在后续接收到第一中断时,通过中断处理函数将所述第一中断所对应的DMA通道解绑,并将该解绑的DMA通道与所述第一任务节点进行绑定,并将所述第一任务节点从所述传输队列中移除。
其中,所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务。
步骤S131:向所述DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制该解绑的DMA通道执行与所述第一任务节点对应的传输任务。
也就是说,用于执行本方法的执行主体在判断当前不存在闲置的DMA通道后,可进行等待。一般而言,待传输的数据量相对较少的传输任务会先于待传输的数据量相对较多的传输任务被执行完,且DMA通道执行完传输任务之后会触发第一中断。那么在进入等待期,且后续接收到DMA通道的第一中断时,可以再依赖于第一中断实时将已经完成传输任务的DMA通道解绑,将第一任务节点与该解绑的DMA通道进行绑定,将第一任务节点从传输队列中移除,且向DMA控制器发送启动指令,以便与第一任务节点绑定的DMA通道执行与第一任务节点对应的传输任务。
当然,针对步骤S130以及步骤S131中所涉及到的DMA控制器基于第一任务节点的任务信息,控制DMA通道执行第一任务节点对应的传输任务的过程,是较为成熟的现有技术,此处不再赘述。
针对上述各个实施例所提及到的第一任务节点,在一些实施方式中,传输队列的数量可以是一个,第一任务节点是位于该传输队列的队列头部的任务节点。
在另一些实施方式中,传输任务存在优先级属性,且不同的传输任务之间的优先级可根据实际情况设置相同的优先级或不同的优先级,相应的,不同的任务节点之间的优先级可能相同,也可能不同。基于此,可以预先虚拟化多个传输队列,且不同的传输队列之间具有不同的优先级。相应的,每个传输队列用于保存具有对应优先级的任务节点。在这种实施方式下,第一任务节点是位于所有传输队列中的优先级最高的任务节点。
基于此,在将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定时,是按照优先级从高到低的顺序依次遍历各个传输队列,且将首次搜索到的任务节点与任一未绑定的DMA通道进行绑定;该首次搜索到的任务节点即为第一任务节点。
在现有技术中,为了保证Master设备能够使用设备端SOC内部的DMA硬件,Master设备侧的驱动程序需要掌握DMA的硬件信息,例如DMA通道数量、寄存器的硬件地址、长度、偏移、位宽等,这对Master设备的同一驱动程序所对应的不同产品的兼容性和扩展性带来不便,尤其是当驱动程序开放给第三方开发人员时,往往需要针对购买的产品型号修改驱动的硬件细节,存在可移植性差的问题。
为了应对上述问题,在一些实施方式中,本公开任一实施例所提及到的用于执行该DMA传输方法的执行主体,可以是位于设备端SOC内新增的MCU,该MCU专用于管理SOC内的DMA传输。
如此设置之后,当Master设备使用设备端SOC内部的DMA硬件进行DMA传输时,只需要与SOC内部的MCU进行交互,由MCU来操作DMA硬件,使得Master设备不再直接访问DMA硬件,那么Master设备就没有必要再去获取DMA硬件的相关信息,进而当DMA硬件需要进行升级时,由于Master设备屏蔽了DMA硬件的相关信息,就不再需要针对Master设备内部的驱动程序进行相应的修改,增加了Master设备侧的兼容性和扩展性,同时也提高了设备端SOC的可移植性。
此外,在现有技术中,当Master设备使用设备端SOC内部的DMA硬件进行DMA传输时,需要通过MMU(Memory Management Unit,内存管理单元)映射后访问到PCIE桥,然后再访问到PCIE设备,存在访问路径较长的问题。同时,一个DMA操作可能会对DMA硬件进行写地址、查询状态等多次操作,若每次访问都需要跨越PCIE桥才能执行,Master设备大量的DMA操作会影响设备端SOC的操作效率。
而在本公开实施例中,当Master设备使用设备端SOC内部的DMA硬件进行DMA传输时,只需要与SOC内部的MCU进行交互,具体的DMA硬件操作由MCU来管理。由于MCU和DMA均位于设备端的SOC内部,操作路径极大缩短,且MCU通过SOC内部总线即可更快更高效地操作DMA硬件,可以解决现有技术中的操作效率低的问题。
下面将针对本公开所提供的DMA传输方法所涉及到的一些实施细节进行详细介绍。
前文提及,任务节点用于记录对应传输任务的任务信息。相应的,在一些实施方式中,该DMA传输方法还可以包括:用于执行该DMA传输方法的执行主体(下文以MCU代替该执行主体)获取传输任务的请求指令并对其进行解析,得到该传输任务的任务信息;将该传输任务的任务信息填充到新申请的任务节点内,并将填充后的任务节点保存到传输队列。
其中,任务节点的本质为软件数据结构体,例如Java数据结构体。
MCU收到传输任务的请求指令(Cmd)并解析后,会通过软件的方式申请一个数据结构体,然后将解析得到的任务信息填充到数据结构体内,然后将填充后的数据结构体挂到传输队列中。
值得指出的是,MCU只要获取到涉及DMA的传输任务的请求指令后,便会执行填充任务节点并将其保存到传输队列的过程。也就是说,填充任务节点并将其保存到传输队列的过程的执行时机,可能发生于步骤S110之前,也可能发生于步骤S110之时,也可能发生于步骤S110之后。
当然,前述提及到的传输任务的请求指令的发送方,可以如前文所述,是位于该SOC外的其他Master设备,还可以是位于该SOC内的其他主控CPU。
前文提及,Master设备可利用设备端SOC内部的DMA硬件,将本地内存中的数据搬运到显卡内部的GDDR中,实现DMA传输,位于设备端SOC内部的其他主控CPU也可能会使用DMA进行数据传输。也就是说,可能存在多核需要同时操作DMA硬件的情况,进而可能会引起冲突问题。
为了解决上述冲突,在本公开的一种实施方式中,可以在SOC内预先配置一段用于与Master设备共享的共享内存。示例性的,Master设备内的驱动程序可以通过读取/配置SOC所在的Device端的PCIE Bar(基地址寄存器BAR)空间,并将SOC内预计用于作为共享内存的地址映射到Master设备的***内存中。
在配置好共享内存后,可以从共享内存中为每个可能作为传输任务的请求指令(Cmd)的发送方配置对应的消息缓存组,使得每个可能作为发送方的对象与MCU之间存在一一对应的消息缓存组。
其中,每个消息缓存组包括第一buffer和第二buffer。
第一buffer用于保存对应的发送方所写入的传输任务的请求指令Cmd。当发送方将生成的传输任务的Cmd通过PCIE链路存入对应的消息缓存组的第一buffer后,MCU从对应的第一buffer内读取传输任务的Cmd并进行解析。
在本公开实施例中,由于引入了消息缓存组,那么每个核并不会直接操作DMA硬件,而是通过对应的消息缓存组与MCU之间进行通信,从而可以避免多核直接操作DMA硬件所引起的互斥冲突问题。
第二buffer用于保存MCU所写入的,预计发送给对应的发送方的消息,该消息可以是用于告知发送方传输任务已完成的任务执行完毕消息。
前文提及,在本公开实施例中,每当绑定了任务节点的DMA通道执行完与其绑定的任务节点所对应的传输任务之后,便会触发一个第一中断,用于表征本DMA通道已经执行完与自身绑定的任务节点所对应的传输任务。基于此,本方法还可以包括:当MCU接收到第一中断时,通过中断处理函数向第一中断所对应的传输任务的请求指令的发送方发送任务执行完毕消息,并触发第二中断发送给传输任务的请求指令的发送方。
而向传输任务的请求指令的发送方发送任务执行完毕消息,可以是将任务执行完毕消息保存到与传输任务的请求指令的发送方对应的第二buffer,以使传输任务的请求指令的发送方在获取到第二中断后,从对应的第二buffer读取到任务执行完毕消息。
以传输任务的请求指令的发送方是Master设备为例,Master设备在启动一次DMA传输后,首先向与自身对应的第一buffer内写入传输任务的Cmd,并向MCU发起一个第三中断。在该Cmd内包括源地址,目的地址,长度等参数。
MCU收到第三中断后,去对应的第一buffer中读取传输任务的Cmd并解析,然后执行步骤S110、步骤S120以及步骤S130发起DMA操作,或者执行步骤S110、步骤S121以及步骤S131发起DMA操作。
后续,当MCU收到第一中断后,生成任务执行完毕消息写入到对应的第二buffer中,并向Master设备发送第二中断。同样,当Master设备收到第二中断后,从对应的第二buffer中拿到任务执行完毕消息后再做后续的逻辑处理。
可以理解,当传输任务的请求指令的发送方是其他主控CPU时,其执行过程与上述传输任务的请求指令的发送方是Master设备相似,此处不再赘述。
值得指出的是,在本公开实施例中,第一buffer和第二buffer均为循环buffer。针对每个消息缓存组,需要通过引入读指针(r)和写指针(w)来对其所包括的第一buffer和第二buffer进行管理。读指针以及写指针均为软件指针。
具体的管理流程如下:
无论是第一buffer或第二buffer,向其内写数据的一方管理写指针(w),从其内读数据的一方管理读指针(r)。
针对第一buffer,向其内写数据的一方为传输任务的请求指令的发送方(Master或其他主控CPU),向其内读数据的一方为MCU,因此,针对第一buffer,传输任务的请求指令的发送方(Master或其他主控CPU)管理写指针,MCU管理读指针。
针对第二buffer,向其内写数据的一方为MCU,向其内读数据的为传输任务的请求指令的发送方(Master或其他主控CPU),因此,针对第二buffer,MCU管理写指针,传输任务的请求指令的发送方(Master或其他主控CPU)管理读指针。
以第一buffer为例,当传输任务的请求指令的发送方(Master或其他主控CPU)往第一buffer中写数据之前,需要获取当前读指针(r)的位置以及当前写指针(w)的位置,以检查第一buffer是否当前已满。其中,在当前读指针(r)的位置与当前写指针(w)的位置未指向同一个位置时,表示第一buffer当前未满,则往第一buffer内写入数据,同时将写指针(w)的位置加1,即更新写指针(w)的位置至下一个位置。在当前读指针(r)的位置与当前写指针(w)的位置指向同一个位置时,表示第一buffer当前已满,则等待第一buffer有剩余空间后再将数写入第一buffer,以及在写入数据后更新写指针(w)的位置至下一个位置,以防止写入的数据覆盖MCU未读的数据。
当MCU从第一buffer内读数据之前,需要获取当前读指针(r)的位置以及当前写指针(w)的位置,以检查第一buffer是否当前已空。其中,在当前读指针(r)的位置与当前写指针(w)的位置未指向同一个位置时,表示第一buffer当前未空,则从第一buffer内读取数据,同时更新读指针(r)的位置至下一个位置。在当前读指针(r)的位置与当前写指针(w)的位置指向同一个位置时,表示第一buffer当前已空,则等待第一buffer不为空后再从第一buffer内读数据,同时更新读指针(r)的位置至下一个位置,以防止MCU读取到重复的数据。
类似的,针对第二buffer,MCU往第二buffer写数据前也需要检查第二buffer是否当前已满,以及根据第二buffer的不同检测结果执行立即往第二buffer内写入数据,或者执行等待第二buffer有剩余空间后再第二buffer内写入数据;传输任务的请求指令的发送方(Master或其他主控CPU)从第二buffer读取数据前也需要检查第二buffer是否当前已空,以及根据第二buffer的不同检测结果执行立即从第二buffer内读数据,或者执行等待第二buffer不为空后再从第二buffer内读数据。
此外,请参照图5,本公开实施例还提供一种DMA传输装置400,可以包括遍历模块410、判断模块420、绑定模块430以及发送模块440。
遍历模块410,用于遍历用于保存任务节点的传输队列;
判断模块420,用于在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道;所述任务节点用于记录对应传输任务的任务信息;
绑定模块430,用于在所述判断模块420判断为是时,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除;
发送模块440,用于向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。
在本公开一种可行的实现方式中,绑定模块430,还用于在所述判断模块420判断为否,且在后续接收到第一中断时,通过中断处理函数将所述第一中断所对应的DMA通道解绑,并将该解绑的DMA通道与所述第一任务节点进行绑定,并将所述第一任务节点从所述传输队列中移除;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务;所述发送模块440,还用于向所述DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制该解绑的DMA通道执行与所述第一任务节点对应的传输任务。
在本公开一种可行的实现方式中,所述传输队列的数量为一个,所述第一任务节点是位于所述传输队列的队列头部的任务节点。
在本公开一种可行的实现方式中,所述传输队列的数量为多个,且不同的传输队列之间具有不同的优先级,每个所述传输队列用于保存具有对应优先级的任务节点;所述绑定模块430,用于按照优先级从高到低的顺序依次遍历各个传输队列,且将首次搜索到的任务节点与所述任一未绑定的DMA通道进行绑定;
所述首次搜索到的任务节点为所述第一任务节点。
在本公开一种可行的实现方式中,所述DMA传输装置400还包括获取模块以及填充模块;获取模块,用于获取传输任务的请求指令并对其进行解析,得到该传输任务的任务信息;填充模块,用于将该传输任务的任务信息填充到新申请的任务节点内,并将填充后的任务节点保存到所述传输队列。
在本公开一种可行的实现方式中,所述DMA传输装置400应用于MCU,所述MCU位于SOC内;所述传输任务的请求指令的发送方是位于所述SOC内的其他主控CPU,或是位于所述SOC外的其他Master设备。
在本公开一种可行的实现方式中,在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第一buffer,所述第一buffer用于保存对应的发送方所写入的所述传输任务的请求指令;所述获取模块,用于从所述第一buffer内读取所述传输任务的请求指令。
在本公开一种可行的实现方式中,所述发送模块440,还用于在接收到第一中断时,通过中断处理函数向所述传输任务的请求指令的发送方发送任务执行完毕消息,并触发第二中断发送给所述传输任务的请求指令的发送方;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务。
在本公开一种可行的实现方式中,所述DMA传输装置应用于MCU,所述MCU位于SOC内;在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第二buffer;所述发送模块440,用于:将所述任务执行完毕消息保存到与所述传输任务的请求指令的发送方对应的第二buffer,以使所述传输任务的请求指令的发送方在获取到所述第二中断后,从所述对应的第二buffer读取到所述任务执行完毕消息。
此外,请参照图6,本公开实施例还提供一种SOC,该SOC可以包括DMA、MCU以及其他主控CPU,其他主控CPU通过MCU与DMA通信连接。在MCU内存储有DMA传输程序,该DMA传输程序被MCU执行时,用于实现本公开任一实施方式所述的DMA传输方法。
其中,其他主控CPU可以理解成SOC内所包括的其他IP Core内的CPU,其他IP Core可以包括,但不限于VPU(Video Processing Unit,视频处理单元)、DC(DisplayController,显示控制器)等功能模块。
可选的,该SOC的产品形式体现为显卡;在另一些使用场景下,该SOC的产品形式体现为GPU主板。
此外,本公开实施例还提供一种电子设备,该电子设备包括上述的SOC以及其他必要的部件。
在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
此外,本公开实施例还提供一种计算机可读存储介质,在该计算机可读存储介质上存储有DMA传输程序,该DMA传输程序被执行时,可实现上述任一可行的实现方式所提供的DMA传输方法。至于具体的执行过程可参照上述方法实施例,此处不再赘述。
基于上述DMA传输方案,不再将传输任务直接与DMA通道进行固定绑定,而是根据当前的实际情况,实时地将传输任务所对应的任务节点与当前处于闲置状态的DMA通道进行绑定,那么在传输任务并发量高的情况下,有利于DMA硬件的DMA通道全部打开,有利于DMA通道的资源利用率最大化,以便DMA硬件以最大吞吐率完成传输任务,可以提高DMA传输效率。
此外,就传输任务本身而言,可实时利用闲置的DMA通道来执行,而不必再等待预先为其指定的DMA通道闲置后才可执行,进而减少了传输任务的排队等待时间,可以提高DMA传输效率。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。
本领域内的技术人员应明白,本公开的实施例可提供为方法、***或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(***)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用于说明本公开的技术方案而非对其保护范围的限制,尽管参照上述实施例对本公开进行了详细的说明,所属领域的普通技术人员应当理解:本领域技术人员阅读本公开后依然可对发明的具体实施方式进行种种变更、修改或者等同替换,但这些变更、修改或者等同替换,均在公开待批的权利要求保护范围之内。

Claims (13)

1.一种DMA传输方法,所述方法包括:
遍历用于保存任务节点的传输队列,并在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道;所述任务节点用于记录对应传输任务的任务信息;
若存在,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除;
向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。
2.根据权利要求1所述的方法,所述方法还包括:
若不存在,且在后续接收到第一中断时,通过中断处理函数将所述第一中断所对应的DMA通道解绑,并将该解绑的DMA通道与所述第一任务节点进行绑定,并将所述第一任务节点从所述传输队列中移除;所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务;
向所述DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制该解绑的DMA通道执行与所述第一任务节点对应的传输任务。
3.根据权利要求1所述的方法,所述传输队列的数量为一个,所述第一任务节点是位于所述传输队列的队列头部的任务节点。
4.根据权利要求1所述的方法,所述传输队列的数量为多个,且不同的传输队列之间具有不同的优先级,每个所述传输队列用于保存具有对应优先级的任务节点;所述将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,包括:
按照优先级从高到低的顺序依次遍历各个传输队列,且将首次搜索到的任务节点与所述任一未绑定的DMA通道进行绑定;
所述首次搜索到的任务节点为所述第一任务节点。
5.根据权利要求1-4中任一项所述的方法,所述方法还包括:
获取传输任务的请求指令并对其进行解析,得到该传输任务的任务信息;
将该传输任务的任务信息填充到新申请的任务节点内,并将填充后的任务节点保存到所述传输队列。
6.根据权利要求5所述的方法,所述方法应用于MCU,所述MCU位于SOC内;所述传输任务的请求指令的发送方是位于所述SOC内的其他主控CPU,或是位于所述SOC外的其他Master设备。
7.根据权利要求6所述的方法,在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第一buffer,所述第一buffer用于保存对应的发送方所写入的所述传输任务的请求指令;所述获取传输任务的请求指令,包括:
从所述第一buffer内读取所述传输任务的请求指令。
8.根据权利要求5所述的方法,所述方法还包括:
在接收到第一中断时,通过中断处理函数向所述传输任务的请求指令的发送方发送任务执行完毕消息,并触发第二中断发送给所述传输任务的请求指令的发送方;
所述第一中断用于表征任一已绑定的DMA通道执行完与其绑定的任务节点所对应的传输任务。
9.根据权利要求8所述的方法,所述方法应用于MCU,所述MCU位于SOC内;在所述SOC内预先配置共享内存,且从所述共享内存中为每个所述发送方分配对应的消息缓存组,每个所述消息缓存组包括第二buffer;所述向所述传输任务的请求指令的发送方发送任务执行完毕消息,包括:
将所述任务执行完毕消息保存到与所述传输任务的请求指令的发送方对应的第二buffer,以使所述传输任务的请求指令的发送方在获取到所述第二中断后,从所述对应的第二buffer读取到所述任务执行完毕消息。
10.一种DMA传输装置,包括:
遍历模块,用于遍历用于保存任务节点的传输队列;
判断模块,用于在确定所述传输队列不为空时,判断当前是否存在未绑定的DMA通道;所述任务节点用于记录对应传输任务的任务信息;
绑定模块,用于在所述判断模块判断为是时,将所述传输队列中的第一任务节点与任一未绑定的DMA通道进行绑定,并将所述第一任务节点从所述传输队列中移除;
发送模块,用于向DMA控制器发送启动指令,以使所述DMA控制器基于所述第一任务节点记录的任务信息,控制与所述第一任务节点绑定的DMA通道执行与所述第一任务节点对应的传输任务。
11.一种SOC,包括DMA、MCU以及其他主控CPU,所述其他主控CPU通过所述MCU与所述DMA通信连接;在所述MCU内存储有DMA传输程序,所述DMA传输程序被所述MCU执行时,实现如权利要求1-9中任一项所述的DMA传输方法。
12.一种电子设备,包括权利要求11所述的SOC。
13.一种计算机可读存储介质,所述计算机可读存储介质上存储有DMA传输程序,所述DMA传输程序被执行时,实现如权利要求1-9中任一项所述的DMA传输方法。
CN202210794039.XA 2022-07-07 2022-07-07 Dma传输方法、装置、soc及电子设备 Pending CN117407336A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210794039.XA CN117407336A (zh) 2022-07-07 2022-07-07 Dma传输方法、装置、soc及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210794039.XA CN117407336A (zh) 2022-07-07 2022-07-07 Dma传输方法、装置、soc及电子设备

Publications (1)

Publication Number Publication Date
CN117407336A true CN117407336A (zh) 2024-01-16

Family

ID=89491289

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210794039.XA Pending CN117407336A (zh) 2022-07-07 2022-07-07 Dma传输方法、装置、soc及电子设备

Country Status (1)

Country Link
CN (1) CN117407336A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102063337A (zh) * 2009-11-17 2011-05-18 中兴通讯股份有限公司 多处理器核的信息交互和资源分配的方法及***
CN106502935A (zh) * 2016-11-04 2017-03-15 郑州云海信息技术有限公司 Fpga异构加速***、数据传输方法及fpga
US20180052789A1 (en) * 2015-06-29 2018-02-22 Huawei Technologies Co., Ltd. Direct Memory Access Transmission Control Method and Apparatus
CN108334464A (zh) * 2017-01-18 2018-07-27 恩智浦美国有限公司 具有支持三个dma模式的命令队列结构的多信道dma***
CN109547357A (zh) * 2018-12-03 2019-03-29 郑州云海信息技术有限公司 一种存储***中数据信息的传输方法、装置、设备及介质
CN112131154A (zh) * 2020-09-29 2020-12-25 北京计算机技术及应用研究所 一种通道与业务动态匹配的dma传输控制方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102063337A (zh) * 2009-11-17 2011-05-18 中兴通讯股份有限公司 多处理器核的信息交互和资源分配的方法及***
US20180052789A1 (en) * 2015-06-29 2018-02-22 Huawei Technologies Co., Ltd. Direct Memory Access Transmission Control Method and Apparatus
CN106502935A (zh) * 2016-11-04 2017-03-15 郑州云海信息技术有限公司 Fpga异构加速***、数据传输方法及fpga
CN108334464A (zh) * 2017-01-18 2018-07-27 恩智浦美国有限公司 具有支持三个dma模式的命令队列结构的多信道dma***
CN109547357A (zh) * 2018-12-03 2019-03-29 郑州云海信息技术有限公司 一种存储***中数据信息的传输方法、装置、设备及介质
CN112131154A (zh) * 2020-09-29 2020-12-25 北京计算机技术及应用研究所 一种通道与业务动态匹配的dma传输控制方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陈骄阳;: "高速多通道DMA控制器的设计", 信息与电脑(理论版), no. 11, 15 November 2009 (2009-11-15) *

Similar Documents

Publication Publication Date Title
USRE48736E1 (en) Memory system having high data transfer efficiency and host controller
CN106951388A (zh) 一种基于PCIe的DMA数据传输方法及***
CN109558344B (zh) 一种适用于网络传输的dma传输方法及dma控制器
CN114553635B (zh) Dpu网络设备中的数据处理方法、数据交互方法及产品
CN110109626A (zh) 一种基于FPGA的NVMe SSD命令处理方法
CN110046114B (zh) 基于pcie协议的dma控制器及dma数据传输方法
CN111782154A (zh) 数据搬移方法、装置及***
US20060236001A1 (en) Direct memory access controller
CN103324599A (zh) 处理器间通信方法与***级芯片
US20050262327A1 (en) Data transfer control circuit, control apparatus and data transfer method
CN115629882A (zh) 多进程中的内存的管理方法
CN116893991B (zh) 一种axi协议下的存储模块转换接口及其转换方法
CN109992539B (zh) 双主机协同工作装置
KR20210061583A (ko) 적응형 딥러닝 가속 장치 및 방법
CN117407336A (zh) Dma传输方法、装置、soc及电子设备
CN116166581A (zh) 用于pcie总线的队列式dma控制器电路及数据传输方法
CN116303169A (zh) Dma控制装置和方法及芯片
CN106909523B (zh) 大规模数据传输方法及***
CN109145397A (zh) 一种支持并行流水访问的外存仲裁结构
CN114579319A (zh) 显存管理方法、显存管理模块、soc及电子设备
CN114567445A (zh) 一种验签数据传输方法、装置、设备及介质
CN112306927B (zh) 一种io请求的处理方法、装置及***
CN107807888B (zh) 一种用于soc架构的数据预取***及其方法
CN117971135B (zh) 存储设备的访问方法、装置、存储介质和电子设备
KR100615694B1 (ko) 복수개의 기능블럭을 제어하는 제어시스템

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