CN114721975A - 链表处理方法、装置、加速器、电路板、设备和存储介质 - Google Patents
链表处理方法、装置、加速器、电路板、设备和存储介质 Download PDFInfo
- Publication number
- CN114721975A CN114721975A CN202210350048.XA CN202210350048A CN114721975A CN 114721975 A CN114721975 A CN 114721975A CN 202210350048 A CN202210350048 A CN 202210350048A CN 114721975 A CN114721975 A CN 114721975A
- Authority
- CN
- China
- Prior art keywords
- command
- list
- linked list
- link
- read
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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 Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供一种链表处理方法、装置、加速器、电路板、设备和存储介质,该方法包括:接收来自主机的多个链表读请求至预设的命令提交队列中,其中,命令提交队列被配置有预设数量的容纳空间,预设数量的容纳空间用于缓存所述多个链表读请求;根据每个所述链表读请求的接收次序,依次从存储器中读取每个所述链表读请求对应的链表数据,并依次执行多个所述链表数据,链表数据包括:至少一个命令列表;在一个所述链表数据执行完毕后,释放已执行完毕的所述链表数据在所述命令提交队列中对应的容纳空间,以从所述主机接收下一个链表读请求。本申请降低了CPU与计算加速器之间的交互功耗,命令预取模块通过共享命令列表存储器,节约芯片资源。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种链表处理方法、装 置、加速器、电路板、设备和存储介质。
背景技术
图形处理器(Graphics Processing Unit,简称“GPU”),又称显示核心、 视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些 移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微 处理器。近年来,图形处理器GPU和人工智能专用加速芯片随着深度学 习技术的发展而得到了广泛的应用。GPU或人工智能加速芯片通常作为主 机CPU(Central Processing Unit)的计算加速器,由主机CPU产生命令和 分配资源,并和CPU一起完成数据处理任务。一般的,CPU位于在主板 上,而计算加速器在单独的电路板上,两者通过PCIe(peripheral component interconnect express,一种高速串行计算机扩展总线标准)总线 相连接。这种分离的设计会对计算系统产生很多挑战,如CPU和计算加 速器之间需要高效的通信,分离的存储器之间需要高效的交换数据。
主机CPU发给计算加速器的命令通常以命令列表的形式储存在存储 器中,该存储器可能是主机端的存储器,也可能是加速器端的存储器。每 个命令列表通常被设计成环形缓冲结构,环形缓冲结构通过写指针和读指 针来完成命令列表的管理:当主机CPU端的软件添加命令时,会更新写 指针。计算加速器读取命令后,会更新读指针。计算加速器需要检查环形 结构的写指针来判断是否有新的命令产生,主机端的软件需要检查环形结 构的读指针来判断命令存储是否可以继续添加新的命令。并且主机一次只 能提交给计算加速器一个命令列表,要等到计算加速器通知主机上一个命 令列表读完了,主机才会继续提交下一个命令列表,很容易造成计算加速 器无效等待间隙,效率低下。
发明内容
本申请实施例的目的在于提供一种链表处理方法、装置、加速器、电 路板、设备和存储介质,采用多链表结构管理命令列表,可以降低CPU 与计算加速器之间的交互频次,降低访存功耗,减少计算加速器的无效等 待时间,减少主机与计算加速器之间的数据交互空隙,提高系统性能。
通过预先检查最后一条目是否为链接命令可以减少新的命令列表的读 取延迟,实现了在不需要添加额外的缓存的情况下,节约芯片资源。
本申请实施例第一方面提供了一种命令链表处理方法,包括:接收来 自主机的多个链表读请求至预设的命令提交队列中,其中,所述命令提交 队列被配置有预设数量的容纳空间,所述预设数量的容纳空间用于缓存所 述多个链表读请求;根据每个所述链表读请求的接收次序,依次从存储器 中读取每个所述链表读请求对应的链表数据,并依次执行多个所述链表数 据,所述链表数据包括:至少一个命令列表;在一个所述链表数据执行完 毕后,释放已执行完毕的所述链表数据在所述命令提交队列中对应的容纳 空间,以从所述主机接收下一个链表读请求。
于一实施例中,所述接收来自主机的多个链表读请求至预设的命令提 交队列中,包括:当检测到来自主机的一个所述链表读请求时,若所述命 令提交队列中现有的所述链表读请求数量小于所述预设数量,则接收当前 的所述链表读请求至所述命令提交队列中。
于一实施例中,所述根据每个所述链表读请求的接收次序,依次从存 储器中读取每个所述链表读请求对应的链表数据,包括:
针对每个所述链表读请求,当检测到所述命令提交队列的命令读请求 时,根据所述命令读请求从指定的存储器中获取待处理的命令列表,其中 所述命令列表中包括多个条目,每个所述条目中存储有待处理的命令;检 查所述命令列表中最后一个条目存储的是否为链接命令;若所述命令列表 最后一个条目存储的是链接命令,根据所述链接命令从指定的存储器中获 取新的命令列表。
于一实施例中,所述当检测到所述命令提交队列的命令读请求时,根 据所述命令读请求从指定的存储器中获取待处理的命令列表,包括:当检 测到所述命令提交队列的命令读请求时,响应于所述命令读请求,从命令 提交队列中解析出所述待处理的命令列表的存储地址和长度信息;根据所 述存储地址和所述长度信息,向指定的存储器发出访问请求,并缓存所述 存储器返回的命令列表数据至预设缓存,并更新所述预设缓存的写指针。
于一实施例中,所述根据所述存储地址和所述长度信息,向指定的存 储器发出访问请求,并缓存所述存储器返回的命令列表数据至预设缓存, 包括:根据所述长度信息,为所述命令读请求从所述预设缓存中分配对应 的存储空间,根据所述存储地址向指定的存储器发出访问请求,并将所述 存储器返回的命令列表数据缓存在被分配的所述存储空间中。
于一实施例中,所述检查所述命令列表中最后一个条目存储的是否为 链接命令,包括:当所述预设缓存的所述写指针与对所述预设缓存的第一 读指针不同时,检查所述预设缓存中所述命令列表的每一个条目,直到找 到所述命令列表最后一条目时,判断所述命令列表最后一条目中存储的是 否为链接命令。
于一实施例中,所述检查所述命令列表中最后一个条目存储的是否为 链接命令,包括:当所述预设缓存的所述写指针与对所述预设缓存的第一 读指针不同时,读取所述预设缓存中的所述命令列表,根据所述命令列表 的长度信息计算所述命令列表的最后一个条目所在位置,判断所述最后一 个条目所在位置处的命令是否为链接命令。
于一实施例中,所述依次执行多个所述链表数据,包括:针对每个所 述链表数据,当所述预设缓存的所述写指针与对所述预设缓存的第二读指 针不同时,对所述预设缓存中的待处理命令进行解码,并执行解码后的所 述待处理命令,释放所述待处理命令在所述预设缓存的对应资源。
于一实施例中,所述在一个所述链表数据执行完毕后,释放已执行完 毕的所述链表数据在所述命令提交队列中对应的容纳空间,包括:针对每 个所述链表数据,当解码出的所述待处理命令为结束命令时,在当前链表 数据中所有命令执行完成后,释放对应的链表读取请求在所述命令提交队 列中对应的容纳空间。
本申请实施例第二方面提供了一种命令链表处理装置,包括:接收模 块,用于接收来自主机的多个链表读请求至预设的命令提交队列中,其中, 所述命令提交队列被配置有预设数量的容纳空间,所述预设数量的容纳空 间用于缓存所述多个链表读请求;第一处理模块,用于根据每个所述链表 读请求的接收次序,依次从存储器中读取每个所述链表读请求对应的链表 数据,并依次执行多个所述链表数据,所述链表数据包括:至少一个命令列表;第二处理模块,用于在一个所述链表数据执行完毕后,释放已执行 完毕的所述链表数据在所述命令提交队列中对应的容纳空间,以从所述主 机接收下一个链表读请求。
于一实施例中,所述接收模块用于:当检测到来自主机的一个所述链 表读请求时,若所述命令提交队列中现有的所述链表读请求数量小于所述 预设数量,则接收当前的所述链表读请求至所述命令提交队列中。
于一实施例中,所述第一处理模块用于:针对每个所述链表读请求, 当检测到所述命令提交队列的命令读请求时,根据所述命令读请求从指定 的存储器中获取待处理的命令列表,其中所述命令列表为链表结构,所述 命令列表中包括多个条目,每个所述条目中存储有待处理的命令;检查所 述命令列表中最后一个条目存储的是否为链接命令;若所述命令列表最后 一个条目存储的是链接命令,根据所述链接命令从指定的存储器中获取新 的命令列表。
于一实施例中,所述第一处理模块还用于:当检测到所述命令提交队 列的命令读请求时,响应于所述命令读请求,从命令提交队列中解析出所 述待处理的命令列表的存储地址和长度信息;根据所述存储地址和所述长 度信息,向指定的存储器发出访问请求,并缓存所述存储器返回的命令列 表数据至预设缓存,并更新所述预设缓存的写指针。
于一实施例中,所述第一处理模块还用于:根据所述长度信息,为所 述命令读请求从所述预设缓存中分配对应的存储空间,根据所述存储地址 向指定的存储器发出访问请求,并将所述存储器返回的命令列表数据缓存 在被分配的所述存储空间中。
于一实施例中,所述第一处理模块还用于:当所述预设缓存的所述写 指针与对所述预设缓存的第一读指针不同时,检查所述预设缓存中所述命 令列表的每一个条目,直到找到所述命令列表最后一条目时,判断所述命 令列表最后一条目中存储的是否为链接命令。
于一实施例中,所述第一处理模块还用于:当所述预设缓存的所述写 指针与对所述预设缓存的第一读指针不同时,读取所述预设缓存中的所述 命令列表,根据所述命令列表的长度信息计算所述命令列表的最后一个条 目所在位置,判断所述最后一个条目所在位置处的命令是否为链接命令。
于一实施例中,所述第一处理模块还用于:针对每个所述链表数据, 当所述预设缓存的所述写指针与对所述预设缓存的第二读指针不同时,对 所述预设缓存中的待处理命令进行解码,并执行解码后的所述待处理命令, 释放所述待处理命令在所述预设缓存的对应资源。
于一实施例中,所述第二处理模块用于:针对每个所述链表数据,当 解码出的所述待处理命令为结束命令时,在当前链表数据中所有命令执行 完成后,释放对应的链表读取请求在所述命令提交队列中对应的容纳空间。
本申请实施例第三方面提供了一种计算加速器,包括:命令提交队列, 用于接收来自主机的多个链表读请求,其中,所述命令提交队列被配置有 预设数量的容纳空间,所述预设数量的容纳空间用于缓存所述多个链表读 请求;命令读取模块,用于当检测到来自所述命令提交队列的命令读请求 时,根据所述命令读请求从指定的存储器中获取待处理的命令列表,其中 所述命令列表中包括多个条目,每个所述条目中存储有待处理的指令;命 令缓存模块,配置有写指针,用于缓存所述存储器返回的命令列表数据, 并更新所述命令缓存模块的写指针;命令预解析模块,配置有对命令缓存 模块的第一读指针,用于当所述第一读指针与所述写指针不同时,从所述 命令缓存模块读取所述命令列表数据,检查所述命令列表中最后一个条目 存储的是否为链接命令,并用于若所述命令列表最后一个条目存储的是链 接命令,通知所述命令读取模块根据所述链接命令从指定的存储器中获取新的命令列表。
于一实施例中,还包括:命令解码模块,配置有对命令缓存模块的第 二读指针,用于当所述第二读指针与所述写指针不同时,从所述命令缓存 模块读取所述命令列表数据,并对所述命令列表进行解码,得到所述命令 列表中每个条目中存储的待处理命令;执行模块,用于执行所述待处理命 令。
本申请实施例第四方面提供了一种电路板,所述电路板上部署有:本 申请实施例第三方面及其任一实施例的计算加速器。
本申请实施例第五方面提供了一种电子设备,包括:存储器,用以存 储计算机程序;处理器,用以执行所述计算机程序,以实现本申请实施例 第一方面及其任一实施例的方法。
本申请实施例第六方面提供了一种非暂态电子设备可读存储介质,包 括:程序,当其藉由电子设备运行时,使得所述电子设备执行本申请实施 例第一方面及其任一实施例的方法。
本申请提供的链表处理方法、装置、加速器、电路板、设备和存储介 质,通过配置命令提交队列的容纳空间,来管理来自主机的多个链表读请 求,然后依次从存储器中读取每个链表读请求对应的链表数据并执行,当 一个链表数据被执行完毕后,会释放该链表数据对应的链表读请求在命令 提交队列中的占用资源,以便于从主机接收下一个链表读请求,如此只要 命令提交队列中有空余的容纳空间,主机就可以提交链表读请求,而计算 加速器则继续按次序执行命令提交队列中的其他链表读请求,实现了对多 个链表读请求的乒乓处理,减少一个链表处理完之后出现等待间隙的状况, 提高系统资源利用率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例 中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请 的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人 员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相 关的附图。
图1为本申请一实施例的电子设备的示意图;
图2A为本申请一实施例的数据交换系统示意图;
图2B为本申请一实施例的命令列表的结构示意图;
图2C为本申请一实施例的计算加速器的结构示意图;
图3为本申请一实施例的命令链表处理方法的流程示意图;
图4为本申请一实施例的命令链表处理方法的流程示意图;
图5为本申请一实施例的命令链表处理方法的流程示意图;
图6为本申请一实施例的命令链表处理装置的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进 行描述。在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而 不能理解为指示或暗示相对重要性。
为了清楚的描述本实施例的方案,现将涉及的名词定义如下:
CPU:Central Processing Unit,中央处理器,是计算机系统的运算和 控制核心,是软件程序的执行单元。
GPU:Graphics Processing Unit,图形处理器,一种专门在个人电脑、 工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和 图形相关运算工作的微处理器,可以作为CPU的计算加速器。
如图1所示,本实施例提供一种电子设备100,包括:至少一个处理 器110和存储器120,图1中以一个处理器为例。处理器110和存储器 120通过总线10连接。存储器120存储有可被处理器110执行的指令,指 令被处理器110执行,以使电子设备100可执行下述的实施例中方法的全 部或部分流程,以降低CPU与计算加速器之间的交互频次,降低功耗, 并减少命令列表的读取延迟,提高数据处理效率。
于一实施例中,电子设备100可以是手机、平板电脑、笔记本电脑、 台式计算机或者多个计算机组成的大型运算系统。
如图2A所示,为本申请实施例提供的一种数据交换系统200示意图, 包括主机20和计算加速器30,其中,由主机20的CPU产生命令、并为 计算加速器30分配资源,计算加速器30和主机20的CPU一起完成数据 处理任务,计算加速器30可以是GPU处理器。实际场景中,主机20的 CPU可以位于在主板上,而计算加速器30可以在单独的电路板上,两者 可以通过PCIe总线相连接。这种分离的设计会对计算系统产生很多挑战, 如CPU和计算加速器30之间需要高效的通信,分离的存储器之间需要高 效的交换数据。为了减少二者数据交互过程中的无效存储器访问,提高数 据交互效率,本实施例提供一种命令列表管理方案。
如图2B所示,为本申请实施例提供的一种命令列表的结构示意图, 本实施例的命令列表采用链表结构:即一个链表可以包括多个命令列表, 这些命令列表通过链接命令串联在一起。图2B展示了一个包含3个命令 列表(以命令列表0、命令列表1和命令列表3为例)的链表。每个命令 列表可以包括多个条目,命令列表的每个条目储存了若干个计算加速器30需要执行的命令,比如命令列表0中第一个条目存储有待处理的命令0, 第二条目中存储有待处理的命令1。其中每个命令列表的最后一个条目是 链接命令或者是结束命令。
比如图2B中,命令列表0的最后一个条目存储的是指向命令列表1 的链接命令,命令列表1的最后一个条目存储的是指向命令列表2的链接 命令,命令列表3的最后一个条目存储的是结束命令。
链接命令:如果主机20端有新的命令列表需要追加时,可以通过链 接命令来指明下一个命令列表在存储器中的地址和长度。当计算加速器 30解析到链接命令时,会根据该链接命令从存储器中读取新的命令列表, 然后继续进行解析和执行该新的命令列表。
结束命令:如果主机20端没有产生新的命令列表时,链表的最后一 个命令列表的最后一个条目会设置为结束命令。当计算加速器30解析到 结束命令,且当前链表的所有命令列表执行完成后,就可以进入休眠状态。
采用链表结构可以避免主机20CPU和计算加速器30之间频繁交互命 令列表的存储指针,而且主机20CPU软件不需要为命令列表分配一个大 的而且连续的存储资源,可以通过一些小的分散的命令列表构成一个大的 命令列表,进而节约资源,降低能耗。
本实施例在主机20与计算加速器30的交互过程中,可以采用多个链 表的管理方式,各个链表彼此独立。当有一个全新的计算任务产生时,主 机20的CPU会在存储器中建立一个新的链表,并通过写寄存器的方式通 知计算加速器30有一个新的链表产生。如果计算加速器30处于休眠状态, 会启动新的链表的执行。如果计算加速器30处于工作状态,可以保存新 的链表在存储器中的地址(例如,可以是首地址),并会按链表的提交顺 序依次执行。这样的方式实现简单而且实时性高。
于一实施例中,也可以将链表的最后一个条目设为等待命令,而非结 束命令。这就需要计算加速器30反复读取存储器,并检查该条目是否被 主机20的CPU更新为一个链接命令,从而确定是否有新的命令列表产生。
基于链表结构的命令列表,在读取过程中,只有当计算加速器30解 析到命令列表的最后一个条目才能知道下一个命令列表的存储地址,此时 再发出读取命令列表的请求,实际场景中会造成计算加速器30执行命令 的空隙,从而浪费硬件计算资源。为了避免这个问题,本实施例还提供了 一种针对链表结构的命令列表预取的计算加速器30。
如图2C所示,为本申请实施例提供的一种计算加速器30,包括:命 令读取模块31、命令提交队列32,命令缓存模块33、命令预解析模块34、 命令解码模块35和执行模块36,计算加速器30中的各个模块之间直接或 间接连接。其中:
命令提交队列32,用于接收来自主机的多个链表读请求,其中,命令 提交队列32被配置有预设数量的容纳空间,该预设数量的容纳空间用于 缓存多个链表读请求。可选的,一个容纳空间用于缓存一个链表读请求。 可以通过命令提交队列32来储存主机20的CPU提交的多个链表的控制信 息。命令读取模块31用于当检测到来自命令提交队列32的命令读请求时, 根据命令读请求从指定的存储器中获取待处理的命令列表,其中命令列表可以为如图2B所示的链表结构,命令列表中包括多个条目,每个条目中 存储有待处理的命令。详细描述参见图2A对应的描述。
命令缓存模块33,配置有写指针,用于缓存存储器返回的命令列表数 据,并更新命令缓存模块33的写指针。当存储器返回命令数据到命令缓 存模块33后,命令缓存模块33的写指针会更新。当写指针和命令预解析 模块34对命令缓存模块33的第一读指针不相同时,通知命令预解析模块34有新的命令可以进行预解码。当写指针和命令解码模块35的第二读指 针不相同时,通知命令解码模块35命令缓存有新的命令可以解码。
命令预解析模块34,配置有对命令缓存模块33的第一读指针,用于 当第一读指针与写指针不同时,从命令缓存模块33读取命令列表数据, 还用于检查命令列表中最后一个条目存储的是否为链接命令。其中,若确 定命令列表最后一个条目存储的是链接命令,命令预解析模块34可用于 通知命令读取模块31根据该链接命令,从指定的存储器中获取新的命令 列表。其中,命令预解析模块34在读取命令缓存模块33的每个条目后, 不会释放对应条目的缓存空间,只是更新其第一读指针。
命令解码模块35,配置有对命令缓存模块33的第二读指针,用于当 第二读指针与写指针不同时,从命令缓存模块33读取命令列表数据,并 对命令列表进行解码,得到命令列表中每个条目中存储的待处理命令。并 将待处理命令发送到计算加速器30的各个执行模块36。执行模块36,用 于执行待处理命令。
当命令解码模块35读取命令缓存模块33中的命令列表的条目后,才 会释放对应命令条目的缓存空间。如此,命令预解析模块34和命令解码 模块35可以共用缓存单元,避免了需要额外缓存来存储预解码的命令, 节省了芯片面积。
于一实施例中,计算加速器30还可以包括:选择器37,用来对命令 解码模块35和命令预解析模块34的读指针进行仲裁。命令解码模块35 的运行过程与命令预解析模块34的运行过程互不干扰,当具体到实际应 用场景时,可以根据实际场景需求选择二者读指针的仲裁方式,通常的情 况,命令解码模块35处理命令的速度相较于预解析模块34较慢,则为了 保证命令被正常解码后执行,可以设定仲裁规则为命令解码模块35优先 级大于预解析模块34。假设命令解码模块35执行比较快,则可以采用二 者优先级平等的方案。如此可以使计算加速器30适用于不同的场景,增 添方案的灵活性。
上述计算加速器30针对链表结构的命令列表,配置了包含双指针命 令缓存模块33的预取硬件结构,以使命令预解析模块34和命令解码模块 可以共享命令缓存模块33,节省了芯片的面积。该计算加速器30可以用 可编程电路实现,也可以由不可编程电路模组实现,本实施例中优选为不 可编程电路模组来实现,可以达到更高的效率。
在一个应用场景下,本申请实施例所提供的计算加速器30可以是一 个独立电子设备100的组成部分(可以是但不限于设备的GPU处理器),在 另一个应用场景下,计算加速器30也可以是独立的装置或设备形式,例 如,将一个电子设备100作为数据交换系统200中的计算加速器30从而执 行本申请实施例提供的方法。
本申请实施例还提供一种电路板,该电路板上部署有:如图2C所示 的计算加速器30,因此具备计算加速器30的所有有益效果,此处不再赘 述。该电路板上可以部署含有图2C所示计算加速器30的芯片结构、电路 结构。
下面结合图文进一步详细叙述本申请实施例的命令链表处理方法。
请参看图3,其为本申请一实施例的命令链表处理方法300,该方法 可以由本申请实施例提供的计算加速器30执行,也可以由电子设备100 执行。在一些应用场景下,该方法可由图1所示的电子设备100作为计算 加速器30来执行,并可以应用于对上述图2A-图2C中的数据交互场景中, 以降低CPU与计算加速器30之间的交互频次,降低功耗,并减少多个链表之间的读取延迟,提高数据处理效率。如图3所示,该方法包括:
步骤301:接收来自主机的多个链表读请求至预设的命令提交队列32 中。
在本步骤中,当主机20与计算加速器30之间有一个数据处理任务时, 主机20CPU端的软件可以通过写寄存器,通知计算加速器30有一个新的 命令链表需要执行。通知信息主要包括该链表在指定存储器中的地址和长 度,该信息会存入到计算加速器30的命令提交队列32中。命令提交队列 32被配置有预设数量的容纳空间,该预设数量的容纳空间用于缓存多个链 表读请求。可选的,一个容纳空间可用于缓存一个链表读请求。主机20 可以提交多个链表,主机20可以与加速器预先约定好命令提交队列32能 承载的链表数量,比如预设数量可以为5个,然后当主机20有计算任务 的时候,就提交链表读请求,再有任务还可以继续提交链表读请求,相邻 两个链表读请求可以不是连续的,也可以在时间上是连续的,直到命令提 交队列32中满5个链表读请求时,计算加速器30停止接收来自主机20的 链表读请求。
于一实施例中,步骤301具体可以包括:当检测到来自主机20的一 个链表读请求时,若命令提交队列32中现有的链表读请求数量小于预设 数量,则接收当前的链表读请求至命令提交队列32中,否则说明命令提 交队列32中满了,计算加速器30停止接收来自主机20的链表读请求,以 避免数据阻塞。预设数量可以基于实际需求设定。
步骤302:根据每个链表读请求的接收次序,依次从存储器中读取每 个链表读请求对应的链表数据,并依次执行多个链表数据。
在本步骤中,命令提交队列32中可以由多个链表读请求,每个链表 数据包括:至少一个如图2B所示的命令列表,可以理解的是,图2B所示 的结构仅为示意。计算加速器30可以按照主机20提交这些链表读请求的 顺序,依次进行处理,以使数据交互过程有序进行。
步骤303:在一个链表数据执行完毕后,释放已执行完毕的链表数据 在命令提交队列32中对应的容纳空间,以从主机20接收下一个链表读请 求。
在本步骤中,当一个链表数据被执行完毕后,为了节约命令提交队列 32的缓存资源,会释放该链表数据对应的链表读请求在命令提交队列32 中占用的容纳空间,以此为后续主机20再提交链表读请求腾出位置,提 高资源利用率。
其中,在步骤S303释放已执行完毕的链表数据在命令提交队列32中 对应的容纳空间后,可执行步骤S304。
步骤304:发送通知消息至主机20。
在本步骤中,可以通过发送中断的方式通知主机20,以供主机20可 以根据该通知消息继续提交下一个链表读请求,如此只要命令提交队列 32中有空余的容纳空间,主机20就可以提交链表读请求,而计算加速器 30则继续按次序执行命令提交队列32中的其他链表读请求,实现了对多 个链表读请求的乒乓处理,减少一个链表处理完之后出现等待间隙的状况, 提高系统资源利用率。通过本申请实施例提供命令链表处理方法,可以提 升计算加速器与主机处理器共同处理任务的处理效率,可降低整体访存功 耗,降低计算加速器协同主机处理器处理任务时对于多个命令列表、多个 命令链表的读取延迟,减少数据交互空隙,提升系统整体处理效率。
请参看图4,其为本申请一实施例的命令链表处理方法400,该方法 可以由本申请实施例提供的计算加速器30执行,也可以由电子设备100 执行。在一些应用场景下,该方法可由图1所示的电子设备100作为计算 加速器30来执行,并可以应用于对上述图2A-图2C中的数据交互场景中, 以降低CPU与计算加速器30之间的交互频次,降低功耗,并减少多个链表之间的读取延迟,提高数据处理效率。如图4所示,该方法包括如下步 骤:
步骤401:接收来自主机的多个链表读请求至预设的命令提交队列32 中。详细参见上述实施例中对步骤301的描述。
步骤402:针对每个链表读请求,当检测到来自命令提交队列32的命 令读请求时,根据命令读请求从指定的存储器中获取待处理的命令列表。
在本步骤中,命令列表为链表结构,命令列表中包括多个条目,每个 条目中存储有待处理的命令,具体结构可参阅上述图2B中对应的描述。 命令读请求可以由命令提交队列32发出,当计算加速器30的命令读取模 块31收到命令读请求时,如果当前没有命令列表正在执行,则响应该读 请求,从指定的存储器中获取待处理的命令列表数据,将存储器返回的命 令列表数据缓存至预设缓存,并更新预设缓存的写指针,此处预设缓存可 以由图2C中的命令缓存模块33实现。
步骤403:检查命令列表中最后一个条目存储的是否为链接命令。若 是,进入步骤404。
在本步骤中,在命令列表读取的过程中,只有当计算加速器30解析 到命令列表的最后一个条目才能知道下一个命令列表的存储地址,此时再 发出读取命令列表的请求,实际场景中会造成计算加速器30执行命令的 空隙,为了避免出现上述执行命令的空隙,可以预先对命令列表中的命令 逐个进行检查,检查一下当前命令列表的最后一个条目是否为链接命令, 如果是,进入步骤404,可以继续对新的命令列表或命令条目进行检查。 该检查步骤可以由计算加速器30的命令预解析模块34来执行,由于只是 对命令列表的条目进行检查,并不做实际的解码过程,因此该步骤速度会 比真实的命令解码过程快。
于一实施例中,步骤403具体可以包括:当预设缓存的写指针与第一 读指针不同时,检查预设缓存中命令列表的每一个条目,直到找到命令列 表最后一条目时,判断命令列表最后一条目中存储的是否为链接命令。可 以对预设缓存中命令列表的多个条目的命令类型进行扫描,基于扫描结果, 判断最后一个条目中是否为链接命令。当检查到的条目是结束命令时,说 明该链表的所有命令列表已经读取完毕,计算加速器30向主机20CPU发送链表读取完毕的中断,通知主机20CPU释放该链表的存储资源。需要 说明的是,由于检查最后一个条目的类型并不意味着在解码执行最后一个 条目的命令内容,所以预设缓存中可继续保留链表中被检查过但还未真正 解码执行的内容。当检查解析的条目对应的命令不是链接命令也不是结束 命令时,可以直接跳过,只更新命令预解析模块34对命令缓存模块33的 第一读指针。
步骤404:根据链接命令从指定的存储器中获取新的命令列表。
在本步骤中,若命令列表最后一个条目存储的是链接命令,说明当前 链表中还有新的命令列表需要读取,则可以根据链接命令中的信息从指定 的存储器中获取新的命令列表。此过程不会受到解码过程的干扰,并且不 需要等到命令列表中的条目被完全解码后再去读取新的命令列表,如此避 免了上述计算加速器30执行命令的空隙,减少命令列表的读取延迟,提 高命令交互效率。
步骤405:针对每个链表数据,当预设缓存的写指针与对预设缓存的 第二读指针不同时,对预设缓存中的待处理命令进行解码,并执行解码后 的待处理命令,释放待处理命令在预设缓存的对应资源。
在本步骤中,针对一个正在处理的链表数据,当预设缓存的写指针与 对预设缓存的第二读指针不同时,说明预设缓存中存在还未被解码的新的 待处理命令列表或者新的命令条目,计算加速器30对已缓存的命令列表 中的每个条目进行解码,并将得到的待处理命令一一执行,对于已经执行 过的待处理命令,可释放其在预设缓存中的对应资源。当解析的条目是链 接命令时,会直接跳过,因为该命令已经在步骤403和步骤404中处理完 毕。当解析的条目是需要功能模块执行的待处理命令,会发送给计算加速 器30中对应的执行模块36进行执行。该步骤可以由上述图2C中计算加 速器30的命令解码模块35来执行。
需要说明的是,步骤405与步骤403-步骤404之间可以互不干扰,当 获取到一个命令列表时,计算加速器30可以同时执行步骤403-步骤404 和步骤405,只不过,步骤403-步骤404中查询过程不需要解码所有条目 的命令,因此会相对较快的完成,当步骤405中解码到最后一个条目为链 接命令时,该链接命令已在步骤403-步骤404中查询过程处理完毕,步骤 405中则可以直接跳过,避免间隙的产生。
步骤406:针对每个链表数据,当解码出的待处理命令为结束命令时, 在当前链表数据中所有命令执行完成后,释放对应的链表读取请求在命令 提交队列中对应的容纳空间,以从主机20接收下一个链表读请求。
在本步骤中,针对一个正在处理的链表数据,当解析的条目是结束命 令时,计算加速器30可以等待当前链表数据的其他命令执行完成后,释 放对应的链表读取请求在命令提交队列中对应的容纳空间,以使计算加速 器可以腾出命令提交队列中的容纳空间来接收主机20发送的其他的链表 读请求,合理利用资源。
步骤407:发送通知信息给主机20。详细参见上述实施例中对步骤 304的描述。
上述命令链表处理方法,针对每个链表读请求,在获取到待处理的命 令列表时,通过预先对已缓存的命令列表检查最后一条目是否为链接命令, 当发现是链接命令时,直接根据链接命令地址从存储器读取新的命令列表, 无需将已缓存的所有条目对应的命令都完全解码,减少对于新的命令列表 的读取延迟,实现了在不需要添加额外的缓存的情况下,节约芯片资源, 并且链表结构可以降低CPU与计算加速器30之间的交互频次,降低功耗。
请参看图5,其为本申请一实施例的命令链表处理方法500,该方法 可以由本申请实施例提供的计算加速器30执行,也可以由电子设备100 执行。在一些应用场景下,该方法可由图1所示的电子设备100作为计算 加速器30来执行,并可以应用于对上述图2A-图2C中的数据交互场景中, 以降低CPU与计算加速器30之间的交互频次,降低功耗,并减少命令列表的读取延迟,提高数据处理效率。如图5所示,该方法包括如下步骤:
步骤501:接收来自主机的多个链表读请求至预设的命令提交队列32 中。详细参见上述实施例中对步骤301的描述。
步骤502:当检测到命令提交队列32的命令读请求时,响应于命令读 请求,从命令提交队列32中解析出待处理的命令列表的存储地址和长度 信息。
在本步骤中,当有一个全新的计算任务产生时,主机20CPU会在存 储器中建立一个新的链表,并通过写寄存器的方式通知计算加速器30有 一个新的链表产生,在一些实施例中,对于一个计算任务,也可建立多个 链表。通知信息主要包括该链表在指定存储器中的地址和长度,该信息会 存入到计算加速器30的命令提交队列32中。针对一个正在处理链表读请 求,计算加速器30的命令读取模块31收到命令提交队列32的命令读请求 时,如果当前没有命令列表正在执行,则响应命令提交队列32的读请求, 将提交队列头部的链表信息取出,并计算命令列表的存储地址和长度信息。
步骤503:根据存储地址和长度信息,向指定的存储器发出访问请求, 并缓存存储器返回的命令列表数据至预设缓存,更新预设缓存的写指针。
在本步骤中,存储地址是主机20指定的命令列表在存储器中的存储 地址,计算加速器30需要向该存储地址指向的存储器资源发出访问请求, 并将存储器返回的命令列表数据缓存在命令缓存模块33,更新命令缓存模 块33的写指针。
于一实施例中,步骤503具体可以包括:根据长度信息,为命令读请 求从预设缓存中分配对应的存储空间,根据存储地址向指定的存储器发出 访问请求,并将存储器返回的命令列表数据缓存在被分配的存储空间中。
实际场景中,预设缓存可以由命令缓存模块33实现,由于数据总线 或存储器的访问限制,一个命令列表的读取操作可以被分割成多个读请求 命令。命令读取模块31在向存储器发送每个读请求命令之前,可以为每 个读请求向命令缓存模块33发出分配存储空间请求,以确保缓存模块有 足够的空间接收存储器返回的命令数据。可以避免命令缓存模块33由于 没有接收空间而反压存储器返回的命令数据,从而避免造成阻塞数据总线。
步骤504:当预设缓存的写指针与对预设缓存的第一读指针不同时, 读取预设缓存中的命令列表,根据命令列表的长度信息计算命令列表的最 后一个条目所在位置,判断最后一个条目所在位置处的命令是否为链接命 令。若是,进入步骤506。
在本步骤中,当预设缓存的写指针与对预设缓存的第一读指针不同时, 说明有新的命令列表被缓存,读取预设缓存中的命令列表,计算加速器 30的命令预解析模块34可以根据当前命令列表的长度信息,直接计算出 当前命令列表最后一个条目所在的位置,等待命令缓存模块33的写指针 为该位置时,对命令缓存模块33进行读取,判断该位置的命令是否为链 接命令,如果是,进入步骤506,否则进入步骤505。这样不需要对每个 条目都进行解析检查,可以减轻读取命令缓存的带宽,并节省功耗。
于一实施例中,假设当前命令预解析模块34的第一读指针的位置值 A,此位置处对应的是一个命令列表的链接命令,命令列表长度值为L, 下一个命令列表链接命令读指针位置值S的计算方式如下:
当第一读指针的位置值A大于命令缓存模块33的深度值H时,会从 零地址开始,采用如下公式计算S,在该表达式中,“/”表示除法运算取 商,“%”表示取余数:
S=A+H*(L/H)+L%H
当命令列表长度值L小于命令缓存模块33的深度值H时,采用如下 公式计算S:
S=A+L
步骤505:判断最后一个条目所在位置处的命令是否为结束命令。若 是,进入步骤508,否则返回步骤502。
在本步骤中,如果是结束命令,则可以通知主机20链表已执行完毕, 可以释放资源。如果不是链接命令也不是结束命令,则直接跳过,返回步 骤502。
步骤506:根据链接命令从指定的存储器中获取新的命令列表。详细 参见上述实施例中对步骤404的描述。
步骤507:针对每个链表数据,当预设缓存的写指针与对预设缓存的 第二读指针不同时,对预设缓存中的待处理命令进行解码,并执行解码后 的待处理命令,释放待处理命令在预设缓存的对应资源。详细参见上述实 施例中对步骤405的描述。
步骤508:针对每个链表数据,当解码出的待处理命令为结束命令时, 在当前链表数据中所有命令执行完成后,释放对应的链表读取请求在命令 提交队列中对应的容纳空间,以从主机20接收下一个链表读请求。详细 参见上述实施例中对步骤406的描述。
步骤509:发送通知信息给主机20。详细参见上述实施例中对步骤 407或步骤304的描述。
上述命令链表处理方法,可以减少主机20与计算加速器30之间无效 的存储器访问。通过命令列表预查询的方式减少命令读取延迟,提高数据 交互效率。
请参看图6,其为本申请一实施例的命令链表处理装置600,该装置 可应用于图1所示的电子设备100或者应用于计算加速器30,并可以应用 于对上述图2A-图2C中的数据交互场景中,以降低CPU与计算加速器30 之间的交互频次,降低功耗,并减少命令列表的读取延迟,提高数据处理 效率。该装置包括:接收模块601、第一处理模块602、第二处理模块603 和发送模块604,各个模块的原理关系如下:
接收模块601,用于接收来自主机的多个链表读请求至预设的命令提 交队列中,其中,命令提交队列被配置有预设数量的容纳空间,一个容纳 空间用于缓存一个链表读请求;
第一处理模块602,用于根据每个链表读请求的接收次序,依次从存 储器中读取每个链表读请求对应的链表数据,并依次执行多个链表数据, 链表数据包括:至少一个命令列表;
第二处理模块603,用于在一个链表数据执行完毕后,释放已执行完 毕的链表数据在命令提交队列中对应的容纳空间;
发送模块604,用于发送通知消息至主机,以从主机接收下一个链表 读请求。
于一实施例中,接收模块601用于:当检测到来自主机的一个链表读 请求时,若命令提交队列中现有的链表读请求数量小于预设数量,则接收 当前的链表读请求至命令提交队列中。
于一实施例中,第一处理模块602用于:针对每个链表读请求,当检 测到命令提交队列的命令读请求时,根据命令读请求从指定的存储器中获 取待处理的命令列表,其中命令列表为链表结构,命令列表中包括多个条 目,每个条目中存储有待处理的命令;检查命令列表中最后一个条目存储 的是否为链接命令;若命令列表最后一个条目存储的是链接命令,根据链 接命令从指定的存储器中获取新的命令列表。
于一实施例中,第一处理模块602还用于:当检测到命令提交队列的 命令读请求时,响应于命令读请求,从命令提交队列中解析出待处理的命 令列表的存储地址和长度信息;根据存储地址和长度信息,向指定的存储 器发出访问请求,并缓存存储器返回的命令列表数据至预设缓存,并更新 预设缓存的写指针。
于一实施例中,第一处理模块602还用于:根据长度信息,为命令读 请求从预设缓存中分配对应的存储空间,根据存储地址向指定的存储器发 出访问请求,并将存储器返回的命令列表数据缓存在被分配的存储空间中。
于一实施例中,第一处理模块602还用于:当预设缓存的写指针与对 预设缓存的第一读指针不同时,检查预设缓存中命令列表的每一个条目, 直到找到命令列表最后一条目时,判断命令列表最后一条目中存储的是否 为链接命令。
于一实施例中,第一处理模块602还用于:当预设缓存的写指针与对 预设缓存的第一读指针不同时,读取预设缓存中的命令列表,根据命令列 表的长度信息计算命令列表的最后一个条目所在位置,判断最后一个条目 所在位置处的命令是否为链接命令。
于一实施例中,第一处理模块602还用于:针对每个链表数据,当预 设缓存的写指针与对预设缓存的第二读指针不同时,对预设缓存中的待处 理命令进行解码并执行解码后的待处理命令,释放待处理命令在预设缓存 的对应资源。
于一实施例中,第二处理模块603用于:针对每个链表数据,当解码 出的待处理命令为结束命令时,在当前链表数据中所有命令执行完成后, 释放对应的链表读取请求在命令提交队列中对应的容纳空间。
上述命令链表处理装置600的详细描述,请参见上述实施例中相关方 法步骤的描述。
本发明实施例还提供了一种非暂态电子设备可读存储介质,包括:程 序,当其在电子设备上运行时,使得电子设备可执行上述实施例中方法的 全部或部分流程。其中,存储介质可为磁盘、光盘、只读存储记忆体 (Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory, RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写: HDD)或固态硬盘(Solid-State Drive,SSD)等。存储介质还可以包括上述 种类的存储器的组合。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不 脱离本发明的精神和范围的情况下作出各种修改和变型,这样的修改和变 型均落入由所附权利要求所限定的范围之内。
Claims (15)
1.一种命令链表处理方法,其特征在于,包括:
接收来自主机的多个链表读请求至预设的命令提交队列中,其中,所述命令提交队列被配置有预设数量的容纳空间,所述预设数量的容纳空间用于缓存所述多个链表读请求;
根据每个所述链表读请求的接收次序,依次从存储器中读取每个所述链表读请求对应的链表数据,并依次执行多个所述链表数据,所述链表数据包括至少一个命令列表;
在一个所述链表数据执行完毕后,释放已执行完毕的所述链表数据在所述命令提交队列中对应的容纳空间,以从所述主机接收下一个链表读请求。
2.根据权利要求1所述的方法,其特征在于,所述接收来自主机的多个链表读请求至预设的命令提交队列中,包括:
当检测到来自主机的一个所述链表读请求时,若所述命令提交队列中现有的所述链表读请求数量小于所述预设数量,则接收当前的所述链表读请求至所述命令提交队列中。
3.根据权利要求1所述的方法,其特征在于,所述根据每个所述链表读请求的接收次序,依次从存储器中读取每个所述链表读请求对应的链表数据,包括:
针对每个所述链表读请求,当检测到所述命令提交队列的命令读请求时,根据所述命令读请求从指定的存储器中获取待处理的命令列表,其中所述命令列表为链表结构,所述命令列表中包括多个条目,每个所述条目中存储有待处理的命令;
检查所述命令列表中最后一个条目存储的是否为链接命令;
若所述命令列表中最后一个条目存储的是链接命令,根据所述链接命令从指定的存储器中获取新的命令列表。
4.根据权利要求3所述的方法,其特征在于,所述当检测到所述命令提交队列的命令读请求时,根据所述命令读请求从指定的存储器中获取待处理的命令列表,包括:
当检测到所述命令提交队列的命令读请求时,响应于所述命令读请求,从所述命令提交队列中解析出所述待处理的命令列表对应的存储地址和长度信息;
根据所述存储地址和所述长度信息,向指定的存储器发出访问请求,并缓存所述存储器返回的命令列表数据至预设缓存,更新所述预设缓存的写指针。
5.根据权利要求4所述的方法,其特征在于,所述根据所述存储地址和所述长度信息,向指定的存储器发出访问请求,并缓存所述存储器返回的命令列表数据至预设缓存,包括:
根据所述长度信息,为所述命令读请求从所述预设缓存中分配对应的存储空间;
根据所述存储地址向指定的存储器发出访问请求,并将所述存储器返回的命令列表数据缓存在被分配的所述存储空间中。
6.根据权利要求4所述的方法,其特征在于,所述检查所述命令列表中最后一个条目存储的是否为链接命令,包括:
当所述预设缓存的所述写指针与对所述预设缓存的第一读指针不同时,检查所述预设缓存中所述命令列表的每一个条目,直到找到所述命令列表最后一条目时,判断所述命令列表最后一条目中存储的是否为链接命令。
7.根据权利要求4所述的方法,其特征在于,所述检查所述命令列表中最后一个条目存储的是否为链接命令,包括:
当所述预设缓存的所述写指针与对所述预设缓存的第一读指针不同时,读取所述预设缓存中的所述命令列表,根据所述命令列表的长度信息计算所述命令列表的最后一个条目所在位置,判断所述最后一个条目所在位置处的命令是否为链接命令。
8.根据权利要求4所述的方法,其特征在于,所述依次执行多个所述链表数据,包括:
针对每个所述链表数据,当所述预设缓存的所述写指针与对所述预设缓存的第二读指针不同时,对所述预设缓存中的待处理命令进行解码,并执行解码后的所述待处理命令,释放所述待处理命令在所述预设缓存的对应资源。
9.根据权利要求8所述的方法,其特征在于,所述在一个所述链表数据执行完毕后,释放已执行完毕的所述链表数据在所述命令提交队列中对应的容纳空间,包括:
针对每个所述链表数据,当解码出的所述待处理命令为结束命令时,在当前链表数据中所有命令执行完成后,释放对应的链表读取请求在所述命令提交队列中对应的容纳空间。
10.一种命令链表处理装置,其特征在于,包括:
接收模块,用于接收来自主机的多个链表读请求至预设的命令提交队列中,其中,所述命令提交队列被配置有预设数量的容纳空间,所述预设数量的容纳空间用于缓存所述多个链表读请求;
第一处理模块,用于根据每个所述链表读请求的接收次序,依次从存储器中读取每个所述链表读请求对应的链表数据,并依次执行多个所述链表数据,所述链表数据包括:至少一个命令列表;
第二处理模块,用于在一个所述链表数据执行完毕后,释放已执行完毕的所述链表数据在所述命令提交队列中对应的容纳空间,以从所述主机接收下一个链表读请求。
11.一种计算加速器,其特征在于,包括:
命令提交队列,用于接收来自主机的多个链表读请求,其中,所述命令提交队列被配置有预设数量的容纳空间,所述预设数量的容纳空间用于缓存所述多个链表读请求;
命令读取模块,用于当检测到来自所述命令提交队列的命令读请求时,根据所述命令读请求从指定的存储器中获取待处理的命令列表,其中所述命令列表为链表结构,所述命令列表中包括多个条目,每个所述条目中存储有待处理的命令;
命令缓存模块,配置有写指针,用于缓存所述存储器返回的命令列表数据,并更新所述命令缓存模块的写指针;
命令预解析模块,配置有对所述命令缓存模块的第一读指针,用于当所述第一读指针与所述写指针不同时,从所述命令缓存模块读取所述命令列表数据,检查所述命令列表中最后一个条目存储的是否为链接命令,并用于若所述命令列表最后一个条目存储的是链接命令,通知所述命令读取模块根据所述链接命令从指定的存储器中获取新的命令列表。
12.根据权利要求11所述的计算加速器,其特征在于,还包括:
命令解码模块,配置有对所述命令缓存模块的第二读指针,用于当所述第二读指针与所述写指针不同时,从所述命令缓存模块读取所述命令列表数据,并对所述命令列表进行解码,得到所述命令列表中每个条目中存储的待处理命令;
执行模块,用于执行所述待处理命令。
13.一种电路板,其特征在于,所述电路板上部署有:如权利要求11至12中任一项所述的计算加速器。
14.一种电子设备,其特征在于,包括:
存储器,用以存储计算机程序;
处理器,用以执行所述计算机程序,以实现如权利要求1至9中任一项所述的方法。
15.一种非暂态电子设备可读存储介质,其特征在于,包括:程序,当其藉由电子设备运行时,使得所述电子设备执行权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210350048.XA CN114721975A (zh) | 2022-04-02 | 2022-04-02 | 链表处理方法、装置、加速器、电路板、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210350048.XA CN114721975A (zh) | 2022-04-02 | 2022-04-02 | 链表处理方法、装置、加速器、电路板、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114721975A true CN114721975A (zh) | 2022-07-08 |
Family
ID=82240908
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210350048.XA Pending CN114721975A (zh) | 2022-04-02 | 2022-04-02 | 链表处理方法、装置、加速器、电路板、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114721975A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858018A (zh) * | 2023-02-27 | 2023-03-28 | 珠海星云智联科技有限公司 | 一种嵌入式系统的自适应寄存器更新方法、设备及介质 |
CN115952326A (zh) * | 2023-03-13 | 2023-04-11 | 北京云豹创芯智能科技有限公司 | 一种链表式数据结构及其数据处理方法、存储介质、电子设备 |
-
2022
- 2022-04-02 CN CN202210350048.XA patent/CN114721975A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115858018A (zh) * | 2023-02-27 | 2023-03-28 | 珠海星云智联科技有限公司 | 一种嵌入式系统的自适应寄存器更新方法、设备及介质 |
CN115952326A (zh) * | 2023-03-13 | 2023-04-11 | 北京云豹创芯智能科技有限公司 | 一种链表式数据结构及其数据处理方法、存储介质、电子设备 |
CN115952326B (zh) * | 2023-03-13 | 2023-05-09 | 北京云豹创芯智能科技有限公司 | 一种链表式数据结构及其数据处理方法、存储介质、电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3796179A1 (en) | System, apparatus and method for processing remote direct memory access operations with a device-attached memory | |
JP7087029B2 (ja) | 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 | |
US9898338B2 (en) | Network computer system and method for dynamically changing execution sequence of application programs | |
CN107526546B (zh) | 一种Spark分布式计算数据处理方法及系统 | |
US8035648B1 (en) | Runahead execution for graphics processing units | |
US11379381B2 (en) | Main memory device having heterogeneous memories, computer system including the same, and data management method thereof | |
US11474712B2 (en) | Method, apparatus, device and storage medium for managing access request | |
CN114721975A (zh) | 链表处理方法、装置、加速器、电路板、设备和存储介质 | |
JP2008047116A (ja) | 入力/出力装置とメモリ間のデータ転送の融通性のある制御 | |
EP4158486A1 (en) | Computer memory expansion device and method of operation | |
US11307801B2 (en) | Method, apparatus, device and storage medium for processing access request | |
US11940915B2 (en) | Cache allocation method and device, storage medium, and electronic device | |
CN116324745A (zh) | 读取可选命令和写入可选命令 | |
EP3872629B1 (en) | Method and apparatus for executing instructions, device, and computer readable storage medium | |
CN116670661A (zh) | 图形处理器的缓存访问方法、图形处理器及电子设备 | |
US9405470B2 (en) | Data processing system and data processing method | |
CN113220608B (zh) | 一种NVMe命令处理器及其处理方法 | |
US10019390B2 (en) | Using memory cache for a race free interrupt scheme without the use of “read clear” registers | |
US20140173225A1 (en) | Reducing memory access time in parallel processors | |
KR102334473B1 (ko) | 적응형 딥러닝 가속 장치 및 방법 | |
CN114168495A (zh) | 存储设备的增强的预读能力 | |
US10891244B2 (en) | Method and apparatus for redundant array of independent drives parity quality of service improvements | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
CN109032965B (zh) | 一种数据读取方法、主机及存储设备 | |
CN113094170B (zh) | 一种5g通信虚拟化网元的内存总线分配方法和终端 |
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 |