CN115658625A - 数据解压系统、图形处理系统、装置、设备及解压方法 - Google Patents
数据解压系统、图形处理系统、装置、设备及解压方法 Download PDFInfo
- Publication number
- CN115658625A CN115658625A CN202211587573.XA CN202211587573A CN115658625A CN 115658625 A CN115658625 A CN 115658625A CN 202211587573 A CN202211587573 A CN 202211587573A CN 115658625 A CN115658625 A CN 115658625A
- Authority
- CN
- China
- Prior art keywords
- data
- read
- data buffer
- buffer area
- buffer
- 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.)
- Granted
Links
- 230000006837 decompression Effects 0.000 title claims abstract description 181
- 238000000034 method Methods 0.000 title claims abstract description 43
- 239000000872 buffer Substances 0.000 claims abstract description 671
- 230000002093 peripheral effect Effects 0.000 claims abstract description 170
- 230000004044 response Effects 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000004891 communication Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 239000000284 extract Substances 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供一种数据解压系统、图形处理系统、装置、设备及解压方法,旨在提高解压效率。其中,数据解压系统包括外围模块和解压模块。外围模块接收目标模块基于AXI总线协议发送的读数据请求,针对携带相同rid的多个读数据请求,分配具有顺序关系的多个数据缓冲区。外围模块根据头文件缓冲区中的头文件,从内存读取相应的压缩数据并存入相应的数据缓冲区,以及针对该数据缓冲区向解压模块提交解压请求。解压模块响应于解压请求,从相应数据缓冲区读取压缩数据并解压,解压后的原始数据被存储至相应的数据缓冲区;具有顺序关系的多个数据缓冲区依次将原始数据返回给目标模块。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种数据解压系统、图形处理系统、电子装置、电子设备及数据解压方法。
背景技术
相关技术中,由于解压模块进行数据解压时涉及多次内存读取操作,限制了数据解压速度。以图像数据为例,图像数据被编码后会形成多个头文件(header)和多个压缩数据,每个头文件至少用于记录该头文件对应的压缩数据的长度。解压模块在解压时,需要首先从内存中读取出一个头文件,然后根据该头文件中记录的信息,再从内存中读取出相应的压缩数据,最后根据该头文件对读取出的压缩数据进行解码。可以看出,解压模块执行解压操作时需要频繁地访问内存,限制了数据解压速度。
此外,在基于AXI总线协议的装置/设备中,每个读数据请求携带有rid,然而rid相同的多个读数据请求具有保序的要求。如何在提高数据解压效率的同时又兼顾保序要求,也是亟待解决的问题。
发明内容
本公开的目的是提供一种数据解压系统、图形处理系统、电子装置、电子设备及数据解压方法,旨在提高数据解压效率,同时兼顾rid相同的多个请求的保序要求。
根据本公开的一个方面,提供一种数据解压系统,包括外围模块和解压模块;
外围模块被配置为:接收目标模块基于AXI总线协议发送的读数据请求,为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区;其中,携带相同rid的多个读数据请求对应的多个数据缓冲区具有顺序关系,顺序关系与携带相同rid的多个读数据请求的发送顺序对应;
外围模块还被配置为:从头文件缓冲区中读取读数据请求对应的头文件,根据头文件从内存读取压缩数据,并将压缩数据存储至读数据请求对应的数据缓冲区,以及针对该数据缓冲区向解压模块提交解压请求;
解压模块被配置为:响应于解压请求,从相应数据缓冲区读取压缩数据并解压;其中,解压获得的原始数据被存储至相应数据缓冲区;
外围模块还被配置为:根据数据缓冲区的rid,将数据缓冲区存储的原始数据返回给目标模块;其中,具有顺序关系的多个数据缓冲区存储的多份原始数据在返回时间上具有先后顺序,先后顺序与所述顺序关系对应。
本公开一种可行的实现方式中,每个数据缓冲区包括rid字段和链式指向字段;rid字段用于填充相应读数据请求携带的rid;链式指向字段用于填充与该数据缓冲区具有顺序关系的下一个数据缓冲区的地址信息。
本公开一种可行的实现方式中,外围模块在为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区时,具体被配置为:
确定一个可用的数据缓冲区,将读数据请求携带的rid填充至可用的数据缓冲区的rid字段;
根据读数据请求携带的rid,判断是否已经存在填充有该rid的数据缓冲区;
在已经存在填充有该rid的数据缓冲区的情况下,从填充有该rid的数据缓冲区中查找目标缓冲区,目标缓冲区为链式指向字段中没有填充下一个数据缓冲区的地址信息的数据缓冲区,将可用的数据缓冲区的地址信息填充至目标缓冲区的链式指向字段。
本公开一种可行的实现方式中,数据缓冲区还包括头部指定字段,头部指定字段至少用于填充第一标识,填充有第一标识的数据缓冲区为具有顺序关系的多个数据缓冲区中当前待填充压缩数据的数据缓冲区;
外围模块在为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区时,还具体被配置为:在不存在填充有该rid的数据缓冲区的情况下,在可用的数据缓冲区的头部指定字段中填充第一标识。
本公开一种可行的实现方式中,外围模块在将压缩数据存储至读数据请求对应的数据缓冲区时,具体被配置为:
根据压缩数据对应的rid,从填充有该rid的数据缓冲区中查找填充有第一标识的数据缓冲区,并将压缩数据存入该数据缓冲区;
在数据缓冲区存储完一份完整的压缩数据后,将该数据缓冲区的第一标识删除或者将第一标识替换为第二标识。
本公开一种可行的实现方式中,外围模块还被配置为:在数据缓冲区存储完一份完整的压缩数据后,且在该数据缓冲区的链式指向字段填充有下一个数据缓冲区的地址信息的情况下,根据该数据缓冲区的链式指向字段填充的地址信息,在相应的数据缓冲区的头部指定字段中填充第一标识。
本公开一种可行的实现方式中,外围模块在针对数据缓冲区向解压模块提交解压请求时,具体被配置为:在数据缓冲区存满最新读取的压缩数据后,开始对该数据缓冲区进行计时,周期性地比较各个数据缓冲区的计时数据大小,在该数据缓冲区的计时数据最大的情况下,针对该数据缓冲区向解压模块提交解压请求,并清除该数据缓冲区的计时数据。
本公开一种可行的实现方式中,外围模块还被配置为:从内存读取头文件,并将读取的头文件存储至头文件缓冲区;
其中,外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个;
外围模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件填满或者内存中待读取的头文件被读完。
本公开一种可行的实现方式中,外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的优先级越高。
本公开一种可行的实现方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序对应;
外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件在头文件缓冲区中的位置,以相应优先级从内存读取其余头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,从内存读取其余头文件的优先级越高。
根据本公开的另一方面,还提供一种图形处理系统,该图形处理系统包括上述任一实施例中的数据解压系统。
根据本公开的另一方面,还提供一种电子装置,该电子装置包括上述实施例中的图形处理系统。
根据本公开的另一方面,还提供一种电子设备,该电子设备包括上述实施例中的电子装置。
根据本公开的另一方面,还提供一种数据解压方法,该方法包括:
接收目标模块基于AXI总线协议发送的读数据请求,为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区;其中,携带相同rid的多个读数据请求对应的多个数据缓冲区具有顺序关系,顺序关系与携带相同rid的多个读数据请求的发送顺序对应;
从头文件缓冲区中读取读数据请求对应的头文件,根据头文件从内存读取压缩数据,并将压缩数据存储至读数据请求对应的数据缓冲区,以及针对该数据缓冲区向解压模块提交解压请求,使解压模块从该数据缓冲区读取压缩数据并解压;
将解压获得的原始数据存储至对应的数据缓冲区;
根据数据缓冲区的rid,将数据缓冲区存储的原始数据返回给目标模块;其中,具有顺序关系的多个数据缓冲区存储的多份原始数据在返回时间上具有先后顺序,先后顺序与顺序关系对应。
本公开一种可行的实现方式中,每个数据缓冲区包括rid字段和链式指向字段;rid字段用于填充相应读数据请求携带的rid;链式指向字段用于填充与该数据缓冲区具有顺序关系的下一个数据缓冲区的地址信息。
本公开一种可行的实现方式中,为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区的步骤,包括:
确定一个可用的数据缓冲区,将读数据请求携带的rid填充至可用的数据缓冲区的rid字段;
根据读数据请求携带的rid,判断是否已经存在填充有该rid的数据缓冲区;
在已经存在填充有该rid的数据缓冲区的情况下,从填充有该rid的数据缓冲区中查找目标缓冲区,目标缓冲区为链式指向字段中没有填充下一个数据缓冲区的地址信息的数据缓冲区,将可用的数据缓冲区的地址信息填充至目标缓冲区的链式指向字段。
本公开一种可行的实现方式中,数据缓冲区还包括头部指定字段,头部指定字段至少用于填充第一标识,填充有第一标识的数据缓冲区为具有顺序关系的多个数据缓冲区中当前待填充压缩数据的数据缓冲区;
为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区的步骤,还包括:
在不存在填充有该rid的数据缓冲区的情况下,在可用的数据缓冲区的头部指定字段中填充第一标识。
本公开一种可行的实现方式中,将压缩数据存储至读数据请求对应的数据缓冲区的步骤,包括:
根据压缩数据对应的rid,从填充有该rid的数据缓冲区中查找填充有第一标识的数据缓冲区,并将压缩数据存入该数据缓冲区;
在数据缓冲区存储完一份完整的压缩数据后,将该数据缓冲区的第一标识删除或者将第一标识替换为第二标识。
本公开一种可行的实现方式中,方法还包括:
在数据缓冲区存储完一份完整的压缩数据后,且在该数据缓冲区的链式指向字段填充有下一个数据缓冲区的地址信息的情况下,根据该数据缓冲区的链式指向字段填充的地址信息,在相应的数据缓冲区的头部指定字段中填充第一标识。
本公开一种可行的实现方式中,针对该数据缓冲区向解压模块提交解压请求的步骤,包括:
在数据缓冲区存满最新读取的压缩数据后,开始对该数据缓冲区进行计时,周期性地比较各个数据缓冲区的计时数据大小,在该数据缓冲区的计时数据最大的情况下,针对该数据缓冲区向所述解压模块提交解压请求,并清除该数据缓冲区的计时数据。
本公开一种可行的实现方式中,方法还包括:
从内存读取头文件,并将读取的头文件存储至头文件缓冲区;其中,从内存读取头文件的时间早于接收到第一个读数据请求的时间。
本公开一种可行的实现方式中,头文件缓冲区的数量为两个,方法还包括:
在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取;
若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件填满或者内存中待读取的头文件被读完。
本公开一种可行的实现方式中,继续从内存读取头文件,包括:
根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的优先级越高。
本公开一种可行的实现方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配;继续从内存读取头文件,包括:
根据当前读取的头文件在头文件缓冲区中的位置,以相应优先级从内存读取其余头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,从内存读取其余头文件的优先级越高。
附图说明
图1是本公开一实施例提出的数据解压系统的结构示意图;
图2是本公开一实施例提出的数据缓冲区的结构示意图;
图3是本公开一实施例提出的数据缓冲区的结构示意图;
图4是本公开一实施例提供的外围模块读取头文件的示意图;
图5是本公开一实施例提供的数据解压方法的流程示意图。
具体实施方式
在介绍本公开实施例之前,应当说明的是:本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
相关技术中,解压模块进行数据解压时涉及多次内存读取操作,而多次内存读取操作限制了数据解压速度。此外,在基于AXI总线协议的装置/设备中,每个数据解压请求携带有rid,然而rid相同的多个数据解压请求具有保序的要求。如何在提高数据解压效率的同时又兼顾保序要求,也是亟待解决的问题。
为了提高数据解压效率,同时兼顾rid的多个请求的保序要求,本公开通过以下多个实施例,提出至少一种数据解压系统、图形处理系统、电子装置、电子设备及数据解压方法。
参考图1,图1是本公开一实施例提出的数据解压系统的结构示意图。如图1所示,数据解压系统包括外围模块和解压模块。
其中,外围模块被配置为:接收目标模块基于AXI总线协议发送的读数据请求,为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区;其中,携带相同rid的多个读数据请求对应的多个数据缓冲区具有顺序关系,该顺序关系与携带相同rid的多个读数据请求的发送顺序对应。
外围模块还被配置为:从头文件缓冲区中读取读数据请求对应的头文件,根据头文件从内存读取压缩数据,并将压缩数据存储至读数据请求对应的数据缓冲区,以及针对该数据缓冲区向解压模块提交解压请求。
解压模块被配置为:响应于解压请求,从相应数据缓冲区读取压缩数据并解压;其中,解压获得的原始数据被存储至相应数据缓冲区。
外围模块还被配置为:根据数据缓冲区的rid,将数据缓冲区存储的原始数据返回给目标模块;其中,具有顺序关系的多个数据缓冲区存储的多份原始数据在返回时间上具有先后顺序,该先后顺序与上述顺序关系对应。
本公开中,目标模块基于AXI总线持续向外围模块发送读数据请求,目标模块发送的每个读数据请求用于请求数据解压系统对相应数据进行解压。每个读数据请求携带有rid,每个读数据请求携带的rid可以与之前已经发送的读数据请求的rid相同或不同。换言之,外围模块陆续接收到目标模块发送的多个读数据请求,多个读数据请求中,一些读数据请求携带的rid可能与其他读数据请求的rid均不相同,还有一些读数据请求携带的rid可能是彼此相同的。
外围模块每接收到一个读数据请求,就需要对该读数据请求进行处理,具体的处理方式主要包括两方面。第一方面是为读数据请求分配一个数据缓冲区。第二方面是从头文件缓冲区中读取该读数据请求对应的头文件,然后根据该头文件,基于AXI协议从内存中读取相应的压缩数据,并将该压缩数据存入该读数据请求的数据缓冲区。其中,在基于AXI协议从内存读取压缩数据时,可以携带与相应读数据请求的rid相同的rid,也可以携带新的rid。但需要说明的是,如果携带新的rid,则对于携带相同rid的多个读数据请求对应的多次读压缩数据操作,每次读压缩数据操作携带的新rid应该是相同的。为了简化说明,以下均以读压缩数据携带的rid与读数据请求携带的rid两者相同为例。
其中,外围模块在为读数据请求分配数据缓冲区时,针对携带相同rid的多个读数据请求,分配多个数据缓冲区,多个数据缓冲区具有顺序关系。为便于理解,如图1所示,图1中由虚线箭头连接的3个数据缓冲区就是为携带相同rid的3个读数据请求分配的,虚线箭头的指向表示3个数据缓冲区的顺序关系。
外围模块在将压缩数据存入数据缓冲区时,针对携带相同rid的多个读数据请求各自对应的压缩数据,根据多个缓冲区的顺序关系,将每份压缩数据分别存入相应的数据缓冲区。为便于理解,假设携带相同rid的3个读数据请求,其携带的rid具体是x。则对于从内存中读取的第一份携带x的压缩数据(即第一个读数据请求对应的压缩数据),将其存入3个数据缓冲区中的第一个数据缓冲区;对于从内存中读取的第二份携带x的压缩数据,将其存入3个数据缓冲区中的第二个数据缓冲区;对于从内存中读取的第三份携带x的压缩数据,将其存入3个数据缓冲区中的第三个数据缓冲区。
本公开中,每个数据缓冲区是可以被多次复用的。比如当一个数据缓冲区中的原始数据被返回给目标模块后,该数据缓冲区又可以被分配给新的读数据请求,从而填充新读取的压缩数据。本公开中,外围模块还持续检测每个数据缓冲区是否被新读取的压缩数据填满,当一个数据缓冲区被新读取的压缩数据填满后,外围模块会针对该数据缓冲区向解压模块发送解压请求。其中,数据缓冲区被新读取的压缩数据填满,可以理解成:数据缓冲区中用于存储压缩数据的一部分空间,被新读取的压缩数据填满。或者理解成:数据缓冲区中新读取的压缩数据达到预设数据长度。
解压模块收到解压请求后,从相应数据缓冲区读取压缩数据,并从头文件缓冲区读取相应的头文件,从而根据读取的头文件,对读取的压缩数据进行解压,再将解压后得到的原始数据返回给外围模块,使得外围模块将原始数据存储至该解压请求对应的数据缓冲区。
外围模块还根据数据缓冲区的rid,基于AXI协议,将数据缓冲区中的原始数据返回给目标模块。对于具有相同rid的多个数据缓冲区,外围模块按照数据缓冲区的顺序,依次将每个数据缓冲区中的原始数据返回给目标模块。
本公开中,外围模块和解压模块相结合,外围模块在接收到目标模块发送的读数据请求后,可以直接根据头文件缓冲区中的头文件从内存读取压缩数据,解压模块对读回的压缩数据进行解压。上述解压过程中,从接收到读数据请求至相应压缩数据被解压,不需要再临时从内存读取头文件,可以有效缩短解压时间,从而能提升数据解压速率。此外,外围模块为rid相同的多个读数据请求分配了多个具有顺序关系的数据缓冲区,多个读数据请求各自对应的压缩数据按照多个数据缓冲区的顺序关系,依次存储至相应数据缓冲区,每个数据缓冲区中的压缩数据被解压成原始数据后,原始数据也会存储回该数据缓冲区,并且外围模针对具有顺序关系的多个数据缓冲区,也会基于该顺序关系,将各个数据缓冲区中的原始数据依次返回给目标模块,从而满足了多个读数据请求的保序要求。
为便于理解,以下结合图1对本公开做进一步解释。在一些具体实施方式中,如图1所示,目标模块可以基于AXI协议的outstanding机制向外围模块连续发送多个读数据请求,每个读数据请求分别用于请求对一份压缩数据进行解压,每个读数据请求携带rid和基地址。目标模块每次发送读数据请求时,不需要等待已经发送的读数据请求对应的解压后的数据被返回,就可以向外围模块发送新的读数据请求,如此,外围模块可以同时对多个读数据请求并行处理。外围模块每接收到一个读数据请求后,为该读数据请求分配一个数据缓冲区,并将该读数据请求携带的rid和基地址分别写入该数据缓冲区的rid字段和BaseAddr(基地址)字段。
然后外围模块根据读数据请求携带的基地址,从头文件缓冲区读取该基地址对应的头文件,再根据读取的头文件从内存读取相应的压缩数据,并将读取的压缩数据存储至读数据请求分配的数据缓冲区。
如图1所示,当外围模块确定某一个数据缓冲区已经被新读取的压缩数据填满后,可以通过request接口(中文名称为请求接口)向解压模块发送解压请求,该解压请求携带了数据缓冲区的标识信息(比如数据缓冲区的index)和基地址。解压模块响应于该解压请求,根据该解压请求携带的基地址,并通过memory request接口(中文名称为存储请求接口),从头文件缓冲区读取出相应头文件。并根据该头文件,解析出压缩数据的长度,然后根据压缩数据的长度和解压请求携带的index,并通过memory request接口,从相应数据缓冲区中读取出压缩数据。外围模块再根据读回的头文件对读回的压缩数据进行解压,并通过TileOut接口(中文名称为分片输出接口),将解压后得到的原始数据返回给外围模块,外围模块根据原始数据携带的index,将原始数据返回给目标模块。需要说明的是,本公开中各接口的名称仅作为示例,本领域技术人员在理解本公开的技术方案后,可以在不付出创造性劳动的情况下将接口命名为其他名称。因此上述实施例中的接口名称不应视为对本公开的限定。
上述解压过程中,外围模块与解压模块两者形成流水线作业方式,对于解压模块而言,其不需要执行读内存操作,而是在任一数据缓冲区存满一份压缩数据后,就可以对该份压缩数据进行解压,因此上述解压过程具有较高的数据解压效率。
在一些具体实施方式中,如图2所示,图2是本公开一实施例提出的数据缓冲区的结构示意图。每个数据缓冲区包括rid字段和链式指向字段;rid字段用于填充相应读数据请求携带的rid;链式指向字段用于填充与该数据缓冲区具有顺序关系的下一个数据缓冲区的缓冲区信息。图2中,3个具有顺序关系的数据缓冲区的rid字段填充的内容是相同的,均是x,表示这3个数据缓冲区是为3个携带rid为x的读数据请求分配的。图2中,第一个数据缓冲区(即数据缓冲区A)的链式指向字段填充有第二个数据缓冲区(即数据缓冲区B)的地址信息,第二个数据缓冲区的链式指向字段填充有第三个数据缓冲区(即数据缓冲区C)的地址信息,第三个数据缓冲区(也是最后一个数据缓冲区)的链式指向字段为空。
外围模块在分配和配置数据缓冲区时,外围模块具体被配置为:确定一个可用的数据缓冲区,将读数据请求携带的rid填充至可用的数据缓冲区的rid字段;根据读数据请求携带的rid,判断是否已经存在填充有该rid的数据缓冲区;在已经存在填充有该rid的数据缓冲区的情况下,从填充有该rid的数据缓冲区中查找目标缓冲区,目标缓冲区为链式指向字段中没有填充下一个数据缓冲区的地址信息的数据缓冲区,将可用的数据缓冲区的地址信息填充至目标缓冲区的链式指向字段。
具体地,当外围模块接收到一个读数据请求后,从已经向目标模块返回了原始数据的数据缓冲区和未填充过压缩数据的数据缓冲区中随机(或按照一定规律)选择一个数据缓冲区,作为为该读数据请求分配的一个可用数据缓冲区。外围模块从该读数据请求中提取出rid,并将该rid填充至新分配的数据缓冲区的rid字段。然后检测每个数据缓冲区的rid字段是否填充有相同的rid。如果存在填充有该rid的数据缓冲区,则从填充有该rid的若干数据缓冲区中查找出链式指向字段为空的数据缓冲区(即若干数据缓冲区的最后一个数据缓冲区),并将新分配的数据缓冲区的地址信息填充至该数据缓冲区的链式指向字段。
本公开中,通过上述方式为多个rid相同的读数据请求分配数据缓冲区,分配的多个数据缓冲区可以是地址不连续的多个数据缓冲区,提高了数据缓冲区的分配灵活性和利用率。
在一些具体实施方式中,如图2所示,数据缓冲区还包括头部指定字段,头部指定字段用于填充第一标识,填充有第一标识的数据缓冲区为具有顺序关系的多个数据缓冲区中当前待填充压缩数据的数据缓冲区。外围模块在分配和配置数据缓冲区时,还具体被配置为:在不存在填充有该rid的数据缓冲区的情况下,在可用的数据缓冲区(即新分配的数据缓冲区)的头部指定字段中填充第一标识。
本公开中,对于多个具有顺序关系的数据缓冲区而言,位于填充有第一标识的数据缓冲区之前的数据缓冲区,是已经填充了压缩数据的数据缓冲区,填充有第一标识的数据缓冲区及其之后的数据缓冲区,是还未填充压缩数据的数据缓冲区,而填充有第一标识的数据缓冲区也是当前需要填充压缩数据的数据缓冲区。
在一些具体实施方式中,外围模块在将压缩数据存储至读数据请求对应的数据缓冲区时,具体被配置为:根据压缩数据对应的rid,从填充有该rid的数据缓冲区中查找填充有第一标识的数据缓冲区,并将压缩数据存入该数据缓冲区,并在该数据缓冲区存储完一份完整的压缩数据后(本公开中,压缩数据的大小与数据缓冲区中用于填充压缩数据的空间大小相匹配,数据缓冲区存储完一份完整的压缩数据,也就说明该数据缓冲区被新读取的压缩数据填满了),将该数据缓冲区的第一标识删除或者将第一标识替换为第二标识。此外,外围模块还被配置为,在数据缓冲区存储完一份完整的压缩数据后,且在该数据缓冲区的链式指向字段填充有下一个数据缓冲区的地址信息的情况下,根据该数据缓冲区的链式指向字段填充的地址信息,在相应的数据缓冲区的头部指定字段中填充第一标识。
具体地,外围模块在根据头文件从内存读回一份压缩数据后,根据压缩数据对应的rid,查找填充有该rid的全部数据缓冲区(可能只有一个,也可能有多个),从查找出的全部数据缓冲区中,进一步查找出填充有第一标识的数据缓冲区,外围模块将读回的压缩数据填充至该数据缓冲区。并且,外围模块将该数据缓冲区的第一标识删除,或者将该数据缓冲区的第一标识替换成第二标识。此外,如果该数据缓冲区的链式指向字段非空,则外围模块还从该数据缓冲区的链式指向字段提取出下一个数据缓冲区的地址信息,并根据该地址信息确定出下一个数据缓冲区,接着在下一个数据缓冲区的头部指定字段填充第一标识。
在一些具体实施方式中,外围模块在针对数据缓冲区向解压模块提交解压请求时,具体被配置为:在数据缓冲区存满最新读取的压缩数据后,开始对该数据缓冲区进行计时,周期性地比较各个数据缓冲区的计时数据大小,在该数据缓冲区的计时数据最大的情况下,针对该数据缓冲区向所述解压模块提交解压请求,并清除该数据缓冲区的计时数据。
本公开中,外围模块为了有序地请求解压模块对压缩数据进行解压,一方面针对存满压缩数据的数据缓冲区进行计时,另一方面周期性地比较各个数据缓冲区的计时数据大小,针对计时最长的数据缓冲区,向解压模块提交解压请求,使解压模块对该数据缓冲区中的数据进行解压。
参考图3,图3是本公开一实施例提出的数据缓冲区的结构示意图。以下结合图3,对本公开的一种具体实施方进行说明。如图3所示,每个数据缓冲区包括rid、BaseAddr、WaitCounter、preFechFlag、FirstFlag、okFlag、NextPointer、TileoOffset等字段,数据缓冲区还包括数据存储空间,数据存储空间用于存储压缩数据和原始数据。
其中,rid字段即前述用于填充读数据请求携带的rid的字段。
BaseAddr字段用于填充内存访问操作对应的基地址。
WaitCounter字段用于填充计时数据,在开始计时之前,WaitCounter字段可以为空,或者为预设数值(比如0)。
preFechFlag字段用于表示本次基于AXI协议读内存操作是否是提前预取数据。preFechFlag字段存在多种状态,当preFechFlag字段等于N时,表示本次读内存操作实际不发出去;当preFechFlag字段等于2时,表示提前预取了一部分数据;当preFechFlag字段等于3时,表示全部数据均是提前预取的;当preFechFlag字段等于Y时,表示本次读内存操作是正常的读操作,不存在提前预取的数据。
FirstFlag字段即前述头部指定字段。FirstFlag字段存在多种状态,当FirstFlag字段等于0时,表示该数据缓冲区中的原始数据已经被返回给了目标模块;当FirstFlag字段等于c时,表示该数据缓冲区是多个填充相同rid的数据缓冲区中,当前需要填充压缩数据的一个数据缓冲区;当FirstFlag字段等于1时,表示该数据缓冲区已经填充了压缩数据,并且该数据缓冲区是多个填充相同rid的数据缓冲区中,当前需要最先被解压的一个数据缓冲区;当FirstFlag字段等于2时,表示该数据缓冲区已经填充了压缩数据,但当前不是需要被最先解压的数据缓冲区;当FirstFlag字段等于d时,表示该数据缓冲区中的压缩数据已经被送入解压模块进行解压。
okFlag字段也存在多种状态,当okFlag字段等于1时,表示该数据缓冲区已经填充了压缩数据;当okFlag字段等于d时,表示该数据缓冲区已经存储了解压后的原始数据,并且该数据缓冲区是多个填充相同rid的数据缓冲区中,当前需要最先将原始数据返回给目标模块的一个数据缓冲区;当okFlag字段等于w时,表示该数据缓冲区已经存储了解压后的原始数据,但当前不是需要最先返回原始数据的数据缓冲区;当okFlag字段等于e时,表示该数据缓冲区中的原始数据已经被返回给了目标模块。
NextPointer字段即前述链式指向字段,用于填充下一个数据缓冲区的地址信息。
TileOffset字段用于表示该数据缓冲区是行缓冲区linebuffer中的第几组数据缓冲区。
外围模块在根据读数据请求携带的rid配置新分配的数据缓冲区时,如果当前不存在其他填充有该rid的数据缓冲区,则将新分配的数据缓冲区的FirstFlag字段设置成c;如果当前不只有一个数据缓冲区填充有该rid,则将该新分配的数据缓冲区的FirstFlag字段设置成e,并找到将填充有相同rid且nextPointer字段当前等于0(或者为空)的数据缓冲区,在该数据缓冲区的nextPointer字段中填充新分配的数据缓冲区的地址信息。
外围模块在基于AXI协议从内存读取回压缩数据后,根据读取操作对应的rid,查找出填充有该rid且FirstFlag字段等于c的数据缓冲区(为了避免歧义,本段中将该数据缓冲区称为第一目标缓冲区),接着将压缩数据存储至第一目标缓冲区。在第一目标缓冲区存满压缩数据后,将第一目标缓冲区的okflag字段设置为1。并且如果第一目标缓冲区的nextPointer字段填充有地址信息,则根据该地址信息确定出第一目标缓冲区的下一个数据缓冲区,并将该下一个数据缓冲区的FirstFlag字段设置成c。此外,针对填充有该rid的全部数据缓冲区,如果当前没有FirstFlag字段等于1的数据缓冲区,则将第一目标缓冲区的FirstFlag设置为1,并开始计时,计时数据记录在第一目标缓冲区的WaitCounter字段中;如果当前已经存在FirstFlag字段等于1的数据缓冲区,则将第一目标缓冲区的FirstFlag字段设置为2。
外围模块周期性地从okflag字段等于1且FirstFlag字段等于1的数据缓冲区中选择计时数据最大的数据缓冲区(为了避免歧义,本段中将该数据缓冲区称为第二目标缓冲区),接着针对第二目标缓冲区向解压模块提交解压请求,也就是将第二目标缓冲区中的压缩数据发送给解压模块进行解压,发送时携带第二目标缓冲区的标识信息index,并且清空第二目标缓冲区的WaitCounter字段。发送完成后,如果第二目标缓冲区的nextPointer字段填充有地址信息,则根据该地址信息确定出第二目标缓冲区的下一个数据缓冲区,如果该下一个数据缓冲区的FirstFlag字段当前为2,则将该下一个数据缓冲区的FirstFlag字段设置成1,并开始计时。此外,还将第二目标缓冲区的FirstFlag字段设置成d。
对于解压后得到的原始数据,外围模块根据解压模块返回的标识信息index,确定出用于存储该原始数据的数据缓冲区(为了避免歧义,本段中将该数据缓冲区称为第三目标缓冲区),从而将该原始数据存储至第三目标缓冲区。存储完原始数据后,针对填充有相应rid(即第三目标缓冲区中填充的rid)的全部数据缓冲区,如果当前没有okFlag字段等于d的数据缓冲区,则将第三目标缓冲区的okFlag字段设置成d,并开始计时,计时数据记录在第三目标缓冲区的WaitCounter字段中。如果当前已经存在okFlag字段等于d的数据缓冲区,则将第三目标缓冲区的okFlag字段设置成w。
外围模块还周期性地从okflag字段等于d且preFechFlag字段不等于N的数据缓冲区中选择计时数据最大的数据缓冲区(为了避免歧义,本段中将该数据缓冲区称为第四目标缓冲区),并根据preFechFlag字段,将第四目标缓冲区中的原始数据返回给目标模块。其中,如果preFechFlag字段等于2,则向目标模块返回一部分原始数据,并根据地址将其余原始数据存入linebuffer;如果preFechFlag字段等于3,则暂时不向目标模块返回原始数据,而根据地址将全部原始数据存入linebuffer;如果preFechFlag等于Y,则将全部原始数据返回给目标模块。在根据preFechFlag字段,处理完第四目标缓冲区中的原始数据后,如果第四目标缓冲区的nextPointer字段填充有地址信息,则根据该地址信息确定出第四目标缓冲区的下一个数据缓冲区,如果该下一个数据缓冲区的okflag字段当前为w,则将该下一个数据缓冲区的okflag字段设置成d,并开始计时,计时数据记录在该下一个数据缓冲区的WaitCounter字段中,并且将第四目标缓冲区的okflag字段设置为e,nextPointer字段设置为0,firstFlag字段也设置为0。
对于preFechFlag字段等于N的数据缓冲区(为了避免歧义,本段中将该数据缓冲区称为第五目标缓冲区),外围模块每个周期查询一下linebuffer中是否存储有第五目标缓冲区的地址所对应的原始数据,如果存在的话,则将相应原始数据由linebuffer迁移至第五目标缓冲区,并将第五目标缓冲区的preFechFlag字段更新为Y。接着针对填充有相应rid(即第五目标缓冲区中填充的rid)的全部数据缓冲区,如果当前没有okFlag字段等于d的数据缓冲区,则将第五目标缓冲区的okFlag字段设置成d,并开始计时,计时数据记录在第五目标缓冲区的WaitCounter字段中。如果当前已经存在okFlag字段等于d的数据缓冲区,则将第五目标缓冲区的okFlag字段设置成w。
需要说明的是,本公开中各字段的名称(比如rid、WaitCounter、preFechFlag等等)及各字段的状态取值(比如okFlag字段的状态取值包括1、d、w、e)仅作为示例,本领域技术人员在理解本公开的技术方案后,可以在不付出创造性劳动的情况下将字段命名为其他名称,或者将字段的状态取值定义为其他取值。因此上述实施例中的字段名称和字段状态取值不应视为对本公开的限定。
在一些具体实施方式中,外围模块还被配置为:从内存读取头文件,并将读取的头文件存储至头文件缓冲区;其中,外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。
本公开中,外围模块提前将解压所需的头文件从内存中读回,当接收到目标模块发送的读数据请求后,可以直接根据已经读回的头文件从内存读取压缩数据,解压模块对读回的压缩数据进行解压。上述解压过程中,从接收到读数据请求至相应压缩数据被解压,不需要再临时从内存读取头文件,可以有效缩短解压时间,从而能提升数据解压速率。
在一些具体实施方式中,外围模块包括使能寄存器和基地址寄存器,外围模块还被配置为:在使能寄存器被置位时,从基地址寄存器中读取基地址信息,并根据读取的基地址信息开始从内存读取头文件。
本公开中,外围模块可以与AHB总线连接,设备的其他模块(例如中央处理器CPU)可以通过AHB总线对外围模块的基地址寄存器进行配置,从而将待解压数据的头文件对应的基地址写入基地址寄存器。在配置完基地址寄存器后,CPU可以通过AHB总线对外围模块的使能寄存器进行置位。当外围模块检测到使能寄存器被置位时(例如当使能寄存器被上电时),从基地址寄存器中读取基地址信息,并根据读取的基地址信息开始从内存读取头文件。此外,CPU对外围模块的使能寄存器进行置位后,才使能目标模块,使得目标模块开始向外围模块发送读数据请求。
本公开中,头文件缓冲区的数量可以是两个,当其中一个头文件缓冲区中的头文件已经全部被解压模块解压后,外围模块才继续从内存中读取头文件,并将继续读取的头文件存储至该头文件缓冲区,直至该头文件缓冲区被继续读取的头文件填满,或者内存中的头文件被读完。此外,外围模块在读取头文件时,可以根据另一个头文件缓冲区中剩余的未被读取的头文件数量,以相应优先级继续从内存读取头文件。以下,对外围模块读取头文件的过程做更详细的说明。
在一些具体实施方式中,如图1所示,头文件缓冲区的数量为两个。外围模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件填满或者内存中待读取的头文件被读完。
本公开中,两个头文件缓冲区均用于存储外围模块从内存读回的头文件。当外围模块接收到目标模块发送的读数据请求时,外围模块根据读数据请求携带的基地址,从一个头文件缓冲区读取相应的头文件。外围模块在从该头文件缓冲区读取头文件时,还判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取。若是,则说明另一个头文件缓冲区中的每个头文件对应的压缩数据均已经被解压模块所解压,换言之,另一个头文件缓冲区中的头文件已经全部使用完,因此可以继续从内存读取新的头文件,并将新的头文件存储至该另一个头文件缓冲区,以覆盖已经被使用完的头文件。本公开中,外围模块通过上述方式读取和缓冲头文件,可以使得两个头文件缓冲区中至少有一个头文件缓冲区存储有未被使用的头文件,从而避免在数据解压期间因头文件缓冲区中的头文件被全部使用完而导致需要等待外围模块从内存读取新的头文件,如此,本公开可以进一步提升数据解压效率。
在一些具体实施方式中,外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的优先级越高。
例如,外围模块可以包括第一计数器和第二计数器,第一计数器用于记录外围模块从一个头文件缓冲区中已经读取的头文件数量,第二计数器用于记录解压模块从另一个头文件缓冲区中已经读取的头文件数量。当外围模块从一个头文件缓冲区读取头文件时,首先判断第二计数器的数值是否达到预设阈值,该预设阈值等于另一个头文件缓冲区最多能存储的头文件数量。如果第二计数器的数值已达到预设阈值,则外围模块根据第一计数器的数值,发送携带相应优先级的外部读请求,从而基于该优先级从内存中读取头文件。
本公开中,根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,一方面可以满足外围模块和解压模块对头文件的需求,使得至少有一个头文件缓冲区中存在未被使用的头文件,另一方面可以在剩余头文件较多的情况下以低优先级读取头文件,从而减少对总线带宽的占用,而在剩余头文件较少的情况下以高优先级读取头文件,从而在剩余头文件被全部使用完之前快速读回新的头文件。
或者在一些具体实施方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配。外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件在头文件缓冲区中的位置,以相应优先级从内存读取其余头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,从内存读取其余头文件的优先级越高。
本公开中,预设顺序与目标模块发送读数据请求的顺序匹配是指:头文件在头文件缓冲区中从头至尾的排列顺序与目标模块先后发送的多个读数据请求各自对应的头文件的顺序是一致的。例如,目标模块发送的第一个数据读请求对应的头文件是一个头文件缓冲区中的第一个头文件,目标模块发送的第二个数据读请求对应的头文件是该头文件缓冲区中的第二个头文件,目标模块发送的第n个数据读请求对应的头文件是该头文件缓冲区中的第n个头文件,n小于该头文件缓冲区能存储的最大头文件数量。
具体实现时,外围模块可以按照多个头文件各自对应的基地址从内存读取头文件,并按照多个头文件各自对应的基地址将读回的头文件存储至头文件缓冲区。目标模块可以按照多个头文件各自对应的基地址,依次发送多个头文件各自对应的读数据请求,从而使得每个头文件在头文件缓冲区中的存储顺序与目标模块发送读数据请求的顺序匹配。
参考图4,图4是本公开一实施例提供的外围模块读取头文件的示意图。图4中包括两个头文件缓冲区,分别为header buffer_A和header buffer_B。每个头文件缓冲区中存储了多个头文件。图4中,每个头文件缓冲区中的一个方框表示该头文件存储的一个头文件,其中,白色方框表示已经从内存读取至头文件缓冲区但还没有被外围模块读取的头文件。需要再次说明是,本公开中外围模块需要读取头文件,外围模块从头文件中获取压缩数据的相关信息(比如压缩数据的长度),从而根据压缩数据的相关信息从内存读取压缩数据。浅灰色方框表示已经被外围模块读取过但还没有被解压模块读取过的头文件。需要再次说明的是,本公开中解压模块也需要读取头文件,解压模块从头文件中获取压缩数据的相关信息(比如压缩数据的长度),从而根据压缩数据的相关信息从数据缓冲区读取压缩数据,并对压缩数据进行解压。深灰色方框表示已经被解压模块读取过的头文件,即已经被使用完的头文件,箭头指向的方框是指外围模块当前正在读取的头文件。
本公开中,如前所述,由于每个头文件在头文件缓冲区中的存储顺序与目标模块发送读数据请求的顺序匹配,因此如图4所示,外围模块会按照头文件在头文件缓冲区中的存储顺序,依次从头文件缓冲区中读取头文件。而外围模块在从内存读取压缩数据时,每份压缩数据并不一定按照读数据请求的顺序被依次读回,比如后接收的读数据请求对应的压缩数据反而先被全部读回,而一旦某一份压缩数据被全部读回后,解压模块就需要读取该份压缩数据的头文件,并根据该头文件对该份压缩数据进行解压。因此如图4所示,解压模块并不一定按照头文件在头文件缓冲区中的存储顺序依次读取头文件。
如图4所示,在第一时刻,外围模块正在读取header buffer_B中的一个头文件,而由于header buffer_A中的头文件还没有被解压模块全部读取完,因此此时外围模块不会发起从内存读取头文件的操作。
在第二时刻,外围模块正在读取header buffer_B中的一个头文件,而由于headerbuffer_A中的头文件依然还没有被解压模块全部读取完,因此此时外围模块仍不会发起从内存读取头文件的操作。
在第三时刻,外围模块正在读取header buffer_B中的一个头文件,由于headerbuffer_A中的头文件已经被解压模块全部读取完,因此此时外围模块会发起从内存读取头文件的操作。其中,外围模块在发起从内存读取头文件的操作时,会根据当前读取的头文件在header buffer_B中的位置,以相应优先级从内存读取新的头文件,并将读取的头文件存储至header buffer_A中,直至header buffer_A被新读取的头文件全部覆盖,或者直至内存中待读取的头文件被读完,外围模块才停止从内存读取头文件。由于外围模块当前读取的头文件靠近header buffer_B的尾端,因此外围模块会以较高的优先级从内存读取新的头文件。
在第四时刻,外围模块正在读取header buffer_B中的一个头文件。外围模块从内存新读取的头文件(即新读取的头文件)按预设顺序存储至header buffer_A,但此时新读取的头文件还没有完全覆盖header buffer_A。
在第五时刻,外围模块已经读取完header buffer_B中的全部头文件,外围模块正在读取header buffer_A中的一个头文件,并且外围模块新读取的头文件已经存满了header buffer_A,但是由于header buffer_B中的头文件还没有被解压模块全部读取完,因此此时外围模块不会发起从内存读取头文件的操作。
在第六时刻,外围模块正在读取header buffer_A中的一个头文件,由于headerbuffer_B中的头文件已经被解压模块全部读取完,因此此时外围模块会发起从内存读取头文件的操作。其中,外围模块在发起从内存读取头文件的操作时,会根据当前读取的头文件在header buffer_A中的位置,以相应优先级从内存读取新的头文件,并将读取的头文件存储至header buffer_B中。由于外围模块当前读取的头文件靠近header buffer_A的头端,因此外围模块会以较低的优先级从内存读取新的头文件。
在第七时刻,外围模块正在读取header buffer_A中的一个头文件。外围模块从内存新读取的头文件(即新读取的头文件)按预设顺序存储至header buffer_B,但此时新读取的头文件还没有存满header buffer_B。
具体实现时,可以将外围模块从内存读取头文件的优先级分为N个不同的等级,并将每个头文件缓冲区按照从头至尾的顺序分为N个缓冲段,每个缓冲段分别对应一个优先级等级。其中,越靠近尾端的缓冲段对应的优先级等级越高。为便于理解,示例地,将外围模块从内存读取头文件的优先级分为高、中、低三个等级,并将每个头文件缓冲区按照从头至尾的顺序分为三个缓冲段,头文件缓冲区头端的缓冲段对应高优先级,头文件缓冲区中段的缓冲段对应中优先级,头文件缓冲区尾端的缓冲段对应高优先级。外围模块在以相应优先级从内存读取其余头文件时,根据当前读取的头文件所在的缓冲段,以该缓冲段对应的优先级等级,从内存读取其余头文件。
本公开中,根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,一方面可以满足外围模块和解压模块对头文件的需求,使得至少有一个头文件缓冲区中存在未被使用的头文件,另一方面可以在剩余头文件较多的情况下以低优先级读取头文件,从而减少对总线带宽的占用,而在剩余头文件较少的情况下以高优先级读取头文件,从而在剩余头文件被全部使用完之前快速读回新的头文件。
本公开实施例还提供一种图形处理系统,该图形处理系统包括上述任一实施例中的数据解压系统。在一些使用场景下,该图形处理系统的产品体现为SOC芯片,SOC芯片上集成了图形处理器。
本公开实施例还提供一种电子装置,该电子装置包括上述图形处理系统。在一些使用场景下,该电子装置的产品形式体现为显卡;在另一些使用场景下,该电子装置的产品形式体现为CPU主板。
本公开实施例还提供一种电子设备,该电子设备包括上述的电子装置。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
参考图5,图5是本公开一实施例提供的数据解压方法的流程示意图。由于图5提供的数据解压方法与上述实施例中的数据解压系统基于同一发明构思,因此为了避免重复,以下对数据解压方法仅做简要介绍。对于数据解压方法的具体实施方式,可以参考前述数据解压系统。如图5所示,数据解压方法包括以下步骤:
S510:接收目标模块基于AXI总线协议发送的读数据请求,为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区;其中,携带相同rid的多个读数据请求对应的多个数据缓冲区具有顺序关系,顺序关系与携带相同rid的多个读数据请求的发送顺序对应。
S520:从头文件缓冲区中读取读数据请求对应的头文件,根据头文件从内存读取压缩数据,并将压缩数据存储至读数据请求对应的数据缓冲区,以及针对该数据缓冲区向解压模块提交解压请求,使解压模块从该数据缓冲区读取压缩数据并解压。
S530:将解压获得的原始数据存储至对应的数据缓冲区。
S540:根据数据缓冲区的rid,将数据缓冲区存储的原始数据返回给目标模块;其中,具有顺序关系的多个数据缓冲区存储的多份原始数据在返回时间上具有先后顺序,先后顺序与顺序关系对应。
在一些具体实施方式中,每个数据缓冲区包括rid字段和链式指向字段;rid字段用于填充相应读数据请求携带的rid;链式指向字段用于填充与该数据缓冲区具有顺序关系的下一个数据缓冲区的地址信息。
在一些具体实施方式中,为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区的步骤,包括:确定一个可用的数据缓冲区,将读数据请求携带的rid填充至可用的数据缓冲区的rid字段;根据读数据请求携带的rid,判断是否已经存在填充有该rid的数据缓冲区;在已经存在填充有该rid的数据缓冲区的情况下,从填充有该rid的数据缓冲区中查找目标缓冲区,目标缓冲区为链式指向字段中没有填充下一个数据缓冲区的地址信息的数据缓冲区,将可用的数据缓冲区的地址信息填充至目标缓冲区的链式指向字段。
在一些具体实施方式中,数据缓冲区还包括头部指定字段,头部指定字段至少用于填充第一标识,填充有第一标识的数据缓冲区为具有顺序关系的多个数据缓冲区中当前待填充压缩数据的数据缓冲区;
为读数据请求分配数据缓冲区,并根据读数据请求携带的rid配置数据缓冲区的步骤,还包括:在不存在填充有该rid的数据缓冲区的情况下,在可用的数据缓冲区的头部指定字段中填充第一标识。
在一些具体实施方式中,将压缩数据存储至读数据请求对应的数据缓冲区的步骤,包括:根据压缩数据对应的rid,从填充有该rid的数据缓冲区中查找填充有第一标识的数据缓冲区,并将压缩数据存入该数据缓冲区;在数据缓冲区存储完一份完整的压缩数据后,将该数据缓冲区的第一标识删除或者将第一标识替换为第二标识。
在一些具体实施方式中,方法还包括:在数据缓冲区存储完一份完整的压缩数据后,且在该数据缓冲区的链式指向字段填充有下一个数据缓冲区的地址信息的情况下,根据该数据缓冲区的链式指向字段填充的地址信息,在相应的数据缓冲区的头部指定字段中填充第一标识。
在一些具体实施方式中,针对该数据缓冲区向解压模块提交解压请求的步骤,包括:在数据缓冲区存满最新读取的压缩数据后,开始对该数据缓冲区进行计时,周期性地比较各个数据缓冲区的计时数据大小,在该数据缓冲区的计时数据最大的情况下,针对该数据缓冲区向所述解压模块提交解压请求,并清除该数据缓冲区的计时数据。
在一些具体实施方式中,方法还包括:从内存读取头文件,并将读取的头文件存储至头文件缓冲区;其中,从内存读取头文件的时间早于接收到第一个读数据请求的时间。
在一些具体实施方式中,头文件缓冲区的数量为两个,方法还包括:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被解压模块读取;若是,则继续从内存读取头文件,并将继续读取的头文件存储至另一个头文件缓冲区,直至另一个头文件缓冲区被继续读取的头文件填满或者内存中待读取的头文件被读完。
在一些具体实施方式中,继续从内存读取头文件,包括:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的优先级越高。
在一些具体实施方式中,每个头文件按照预设顺序存储在头文件缓冲区中,预设顺序与目标模块发送读数据请求的顺序匹配;继续从内存读取头文件,包括:根据当前读取的头文件在头文件缓冲区中的位置,以相应优先级从内存读取其余头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,从内存读取其余头文件的优先级越高。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。
Claims (25)
1.一种数据解压系统,包括外围模块和解压模块;
所述外围模块被配置为:接收目标模块基于AXI总线协议发送的读数据请求,为所述读数据请求分配数据缓冲区,并根据所述读数据请求携带的rid配置所述数据缓冲区;其中,携带相同rid的多个读数据请求对应的多个数据缓冲区具有顺序关系,所述顺序关系与所述携带相同rid的多个读数据请求的发送顺序对应;
所述外围模块还被配置为:从头文件缓冲区中读取所述读数据请求对应的头文件,根据所述头文件从内存读取压缩数据,并将所述压缩数据存储至所述读数据请求对应的数据缓冲区,以及针对该数据缓冲区向所述解压模块提交解压请求;
所述解压模块被配置为:响应于所述解压请求,从相应数据缓冲区读取压缩数据并解压;其中,解压获得的原始数据被存储至所述相应数据缓冲区;
所述外围模块还被配置为:根据数据缓冲区的rid,将数据缓冲区存储的原始数据返回给所述目标模块;其中,具有顺序关系的多个数据缓冲区存储的多份原始数据在返回时间上具有先后顺序,所述先后顺序与所述顺序关系对应。
2.根据权利要求1所述的数据解压系统,每个数据缓冲区包括rid字段和链式指向字段;所述rid字段用于填充相应读数据请求携带的rid;所述链式指向字段用于填充与该数据缓冲区具有顺序关系的下一个数据缓冲区的地址信息。
3.根据权利要求2所述的数据解压系统,所述外围模块在为所述读数据请求分配数据缓冲区,并根据所述读数据请求携带的rid配置所述数据缓冲区时,具体被配置为:
确定一个可用的数据缓冲区,将所述读数据请求携带的rid填充至所述可用的数据缓冲区的rid字段;
根据所述读数据请求携带的rid,判断是否已经存在填充有该rid的数据缓冲区;
在已经存在填充有该rid的数据缓冲区的情况下,从填充有该rid的数据缓冲区中查找目标缓冲区,所述目标缓冲区为链式指向字段中没有填充下一个数据缓冲区的地址信息的数据缓冲区,将所述可用的数据缓冲区的地址信息填充至所述目标缓冲区的链式指向字段。
4.根据权利要求3所述的数据解压系统,所述数据缓冲区还包括头部指定字段,所述头部指定字段至少用于填充第一标识,填充有第一标识的数据缓冲区为具有顺序关系的多个数据缓冲区中当前待填充压缩数据的数据缓冲区;
所述外围模块在为所述读数据请求分配数据缓冲区,并根据所述读数据请求携带的rid配置所述数据缓冲区时,还具体被配置为:在不存在填充有该rid的数据缓冲区的情况下,在所述可用的数据缓冲区的头部指定字段中填充第一标识。
5.根据权利要求4所述的数据解压系统,所述外围模块在将所述压缩数据存储至所述读数据请求对应的数据缓冲区时,具体被配置为:
根据压缩数据对应的rid,从填充有该rid的数据缓冲区中查找填充有第一标识的数据缓冲区,并将压缩数据存入该数据缓冲区;
在数据缓冲区存储完一份完整的压缩数据后,将该数据缓冲区的第一标识删除或者将第一标识替换为第二标识。
6.根据权利要求5所述的数据解压系统,所述外围模块还被配置为:在数据缓冲区存储完一份完整的压缩数据后,且在该数据缓冲区的链式指向字段填充有下一个数据缓冲区的地址信息的情况下,根据该数据缓冲区的链式指向字段填充的地址信息,在相应的数据缓冲区的头部指定字段中填充第一标识。
7.根据权利要求1所述的数据解压系统,所述外围模块在针对数据缓冲区向解压模块提交解压请求时,具体被配置为:在数据缓冲区存满最新读取的压缩数据后,开始对该数据缓冲区进行计时,周期性地比较各个数据缓冲区的计时数据大小,在该数据缓冲区的计时数据最大的情况下,针对该数据缓冲区向所述解压模块提交解压请求,并清除该数据缓冲区的计时数据。
8.根据权利要求1至7任一所述的数据解压系统,所述外围模块还被配置为:从内存读取头文件,并将读取的头文件存储至所述头文件缓冲区;
其中,所述外围模块开始从内存读取头文件的时间早于接收到第一个读数据请求的时间。
9.根据权利要求8所述的数据解压系统,所述头文件缓冲区的数量为两个;
所述外围模块还被配置为:在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被所述解压模块读取,若是,则继续从内存读取头文件,并将继续读取的头文件存储至所述另一个头文件缓冲区,直至所述另一个头文件缓冲区被继续读取的头文件填满或者内存中待读取的头文件被读完。
10.根据权利要求9所述的数据解压系统,所述外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的优先级越高。
11.根据权利要求9所述的数据解压系统,每个头文件按照预设顺序存储在头文件缓冲区中,所述预设顺序与目标模块发送读数据请求的顺序对应;
所述外围模块在继续从内存读取头文件时,具体被配置为:根据当前读取的头文件在头文件缓冲区中的位置,以相应优先级从内存读取其余头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,从内存读取其余头文件的优先级越高。
12.一种图形处理系统,包括权利要求1-11任一项所述的数据解压系统。
13.一种电子装置,包括权利要求12所述的图形处理系统。
14.一种电子设备,包括权利要求13所述的电子装置。
15.一种数据解压方法,所述方法包括:
接收目标模块基于AXI总线协议发送的读数据请求,为所述读数据请求分配数据缓冲区,并根据所述读数据请求携带的rid配置所述数据缓冲区;其中,携带相同rid的多个读数据请求对应的多个数据缓冲区具有顺序关系,所述顺序关系与所述携带相同rid的多个读数据请求的发送顺序对应;
从头文件缓冲区中读取所述读数据请求对应的头文件,根据所述头文件从内存读取压缩数据,并将所述压缩数据存储至所述读数据请求对应的数据缓冲区,以及针对该数据缓冲区向解压模块提交解压请求,使所述解压模块从该数据缓冲区读取压缩数据并解压;
将解压获得的原始数据存储至对应的数据缓冲区;
根据数据缓冲区的rid,将数据缓冲区存储的原始数据返回给所述目标模块;其中,具有顺序关系的多个数据缓冲区存储的多份原始数据在返回时间上具有先后顺序,所述先后顺序与所述顺序关系对应。
16.根据权利要求15所述的方法,每个数据缓冲区包括rid字段和链式指向字段;所述rid字段用于填充相应读数据请求携带的rid;所述链式指向字段用于填充与该数据缓冲区具有顺序关系的下一个数据缓冲区的地址信息。
17.根据权利要求16所述的方法,所述为所述读数据请求分配数据缓冲区,并根据所述读数据请求携带的rid配置所述数据缓冲区的步骤,包括:
确定一个可用的数据缓冲区,将所述读数据请求携带的rid填充至所述可用的数据缓冲区的rid字段;
根据所述读数据请求携带的rid,判断是否已经存在填充有该rid的数据缓冲区;
在已经存在填充有该rid的数据缓冲区的情况下,从填充有该rid的数据缓冲区中查找目标缓冲区,所述目标缓冲区为链式指向字段中没有填充下一个数据缓冲区的地址信息的数据缓冲区,将所述可用的数据缓冲区的地址信息填充至所述目标缓冲区的链式指向字段。
18.根据权利要求17所述的方法,所述数据缓冲区还包括头部指定字段,所述头部指定字段至少用于填充第一标识,填充有第一标识的数据缓冲区为具有顺序关系的多个数据缓冲区中当前待填充压缩数据的数据缓冲区;
所述为所述读数据请求分配数据缓冲区,并根据所述读数据请求携带的rid配置所述数据缓冲区的步骤,还包括:
在不存在填充有该rid的数据缓冲区的情况下,在所述可用的数据缓冲区的头部指定字段中填充第一标识。
19.根据权利要求18所述的方法,所述将所述压缩数据存储至所述读数据请求对应的数据缓冲区的步骤,包括:
根据压缩数据对应的rid,从填充有该rid的数据缓冲区中查找填充有第一标识的数据缓冲区,并将压缩数据存入该数据缓冲区;
在数据缓冲区存储完一份完整的压缩数据后,将该数据缓冲区的第一标识删除或者将第一标识替换为第二标识。
20.根据权利要求19所述的方法,所述方法还包括:
在数据缓冲区存储完一份完整的压缩数据后,且在该数据缓冲区的链式指向字段填充有下一个数据缓冲区的地址信息的情况下,根据该数据缓冲区的链式指向字段填充的地址信息,在相应的数据缓冲区的头部指定字段中填充第一标识。
21.根据权利要求15所述的方法,所述针对该数据缓冲区向解压模块提交解压请求的步骤,包括:
在数据缓冲区存满最新读取的压缩数据后,开始对该数据缓冲区进行计时,周期性地比较各个数据缓冲区的计时数据大小,在该数据缓冲区的计时数据最大的情况下,针对该数据缓冲区向所述解压模块提交解压请求,并清除该数据缓冲区的计时数据。
22.根据权利要求15-21任一所述的方法,所述方法还包括:
从内存读取头文件,并将读取的头文件存储至所述头文件缓冲区;其中,从内存读取头文件的时间早于接收到第一个读数据请求的时间。
23.根据权利要求22所述的方法,所述头文件缓冲区的数量为两个,所述方法还包括:
在从一个头文件缓冲区读取读数据请求对应的头文件时,判断另一个头文件缓冲区中的头文件是否已经全部被所述解压模块读取;
若是,则继续从内存读取头文件,并将继续读取的头文件存储至所述另一个头文件缓冲区,直至所述另一个头文件缓冲区被继续读取的头文件填满或者内存中待读取的头文件被读完。
24.根据权利要求23所述的方法,所述继续从内存读取头文件,包括:
根据当前读取的头文件缓冲区中剩余的未被外围模块读取的头文件数量,以相应优先级从内存读取其余头文件,其中,剩余的未被外围模块读取的头文件数量越少,从内存读取其余头文件的优先级越高。
25.根据权利要求23所述的方法,每个头文件按照预设顺序存储在头文件缓冲区中,所述预设顺序与目标模块发送读数据请求的顺序匹配;所述继续从内存读取头文件,包括:
根据当前读取的头文件在头文件缓冲区中的位置,以相应优先级从内存读取其余头文件,其中,当前读取的头文件在头文件缓冲区中的位置越靠近尾端,从内存读取其余头文件的优先级越高。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211587573.XA CN115658625B (zh) | 2022-12-12 | 2022-12-12 | 数据解压系统、图形处理系统、装置、设备及解压方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211587573.XA CN115658625B (zh) | 2022-12-12 | 2022-12-12 | 数据解压系统、图形处理系统、装置、设备及解压方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115658625A true CN115658625A (zh) | 2023-01-31 |
CN115658625B CN115658625B (zh) | 2023-03-14 |
Family
ID=85019797
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211587573.XA Active CN115658625B (zh) | 2022-12-12 | 2022-12-12 | 数据解压系统、图形处理系统、装置、设备及解压方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115658625B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117851312A (zh) * | 2024-03-07 | 2024-04-09 | 北京象帝先计算技术有限公司 | 数据读取系统、电子组件、电子设备及数据读取方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101595461A (zh) * | 2007-01-31 | 2009-12-02 | 微软公司 | 延长闪存驱动器使用寿命 |
CN111656784A (zh) * | 2019-06-27 | 2020-09-11 | 深圳市大疆创新科技有限公司 | 解码方法、解码器和解码系统 |
-
2022
- 2022-12-12 CN CN202211587573.XA patent/CN115658625B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101595461A (zh) * | 2007-01-31 | 2009-12-02 | 微软公司 | 延长闪存驱动器使用寿命 |
CN111656784A (zh) * | 2019-06-27 | 2020-09-11 | 深圳市大疆创新科技有限公司 | 解码方法、解码器和解码系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117851312A (zh) * | 2024-03-07 | 2024-04-09 | 北京象帝先计算技术有限公司 | 数据读取系统、电子组件、电子设备及数据读取方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115658625B (zh) | 2023-03-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8874822B2 (en) | Scheduling access requests for a multi-bank low-latency random read memory device | |
CN109388590B (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
CN114356223B (zh) | 存储器的访问方法及装置、芯片、电子设备 | |
CN111723030B (zh) | 存储器系统及存储器系统的控制方法 | |
CN115658625B (zh) | 数据解压系统、图形处理系统、装置、设备及解压方法 | |
CN113032293A (zh) | 缓存管理器及控制部件 | |
CN115964319A (zh) | 远程直接内存访问的数据处理方法及相关产品 | |
US7865632B2 (en) | Memory allocation and access method and device using the same | |
CN109213423B (zh) | 基于地址屏障无锁处理并发io命令 | |
WO2019174206A1 (zh) | 一种存储设备的数据读取方法、装置、终端设备和存储介质 | |
CN110515872B (zh) | 直接内存存取方法、装置、专用计算芯片及异构计算系统 | |
CN115587076B (zh) | 数据解压系统、图形处理系统、组件、设备及解压方法 | |
CN114036077B (zh) | 数据处理方法及相关装置 | |
CN113485643B (zh) | 用于数据存取的方法及数据写入的控制器 | |
CN110928682B (zh) | 外部设备访问计算机内存的方法 | |
US10832132B2 (en) | Data transmission method and calculation apparatus for neural network, electronic apparatus, computer-readable storage medium and computer program product | |
CN109032965B (zh) | 一种数据读取方法、主机及存储设备 | |
CN109213424B (zh) | 并发io命令的无锁处理方法 | |
CN113031849A (zh) | 直接内存存取单元及控制部件 | |
US20230106923A1 (en) | Storage system | |
CN116661684B (zh) | 一种闪存数据的读取方法、系统、设备及介质 | |
CN115657950B (zh) | 一种基于多信道的数据读写处理方法、装置及相关设备 | |
CN110568991B (zh) | 降低锁引起的io命令冲突的方法与存储设备 | |
US20170364591A1 (en) | Data processing circuit and data processing method | |
WO2022261836A1 (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240111 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. |