首页 / 专利库 / 电脑零配件 / 硬件 / 用于当取回像素核时降低存储器延迟的方法、系统和设备

用于当取回像素核时降低存储器延迟的方法、系统和设备

阅读:344发布:2020-05-08

专利汇可以提供用于当取回像素核时降低存储器延迟的方法、系统和设备专利检索,专利查询,专利分析的服务。并且公开了用于在取回 像素 核时减少 存储器 延迟的方法、系统、装置和制造品。示例装置包括:预取核索回器,用于基于来自 硬件 加速 器的第一 请求 来生成 块 标签,该第一请求包括设置在第一图像块中的第一像素的第一坐标;以及存储器 接口 引擎,用于基于块标签将该第一图像块存储在高速缓冲存储中,该第一图像块包括多个像素,该多个像素包括该像素,以及核索回器,用于当接收到包括设置在第一图像块中的第二像素的第二坐标的第二请求时,并行地 访问 包括在高速缓冲存储中的两个或更多个存储器设备,以传输包括第一图像块的多个图像块。,下面是用于当取回像素核时降低存储器延迟的方法、系统和设备专利的具体信息内容。

1.一种用于减少像素传输延迟的装置,所述装置包括:
预取核索回器,其用于基于来自硬件加速器的第一请求来生成标签,所述第一请求包括设置在第一图像块中的第一像素的第一坐标;
存储器接口引擎,其用于基于所述块标签将所述第一图像块存储在高速缓冲存储中,所述第一图像块包括多个像素,所述多个像素包括所述像素;以及
核索回器,其用于当接收到包括设置在所述第一图像块中的第二像素的第二坐标的第二请求时,并行地访问包括在所述高速缓冲存储中的两个或更多个存储器设备以传输包括所述第一图像块的多个图像块。
2.根据权利要求1所述的装置,其中,所述预取核索回器通过将所述第一坐标的第一个坐标的第一数量的位和所述第一坐标的第二个坐标的第二数量的位串接来生成所述块标签。
3.根据权利要求1所述的装置,其中,所述预取核索回器用于:
搜索标签存储,以在单个时钟周期内识别所述块标签是否与存储在所述标签存储中的多个块标签中的一个块标签匹配;以及
当所述块标签与所述多个块标签中的一个块标签不匹配时,生成推测构建请求以从存储器中索回所述第一图像块;以及
所述存储器接口引擎用于当所述第一图像块被存储时,更新所述标签存储中的条目。
4.根据权利要求3所述的装置,其中,所述存储器接口引擎用于通过以下中的至少一项来更新所述条目:将所述块标签存储在标签字段中,将第一值存储在待决字段中,或者将第二值存储在验证字段中,所述第一值不同于所述第二值。
5.根据权利要求1所述的装置,其中,所述多个像素是第一多个像素,并且还包括:
所述存储器接口引擎用于:
索回包括第二多个像素的第二图像块,所述第一多个像素邻近图像中的所述第二多个像素,所述第二图像块不包括在所述请求中;以及
基于所述块标签将所述第二图像块存储在所述高速缓冲存储中;以及
所述核索回器用于将包括所述第一图像块和所述第二图像块的多个块传输到所述硬件加速器。
6.根据权利要求1所述的装置,其中,存储所述第一块是基于莫顿顺序、列优先顺序或行优先顺序的。
7.根据权利要求1所述的装置,其中,所述块标签是第一块标签,并且所述预取核索回器用于:
确定标签存储中的第一条目是否包括具有非零值的第一计数字段;
当所述第一计数字段具有非零值时确定所述标签存储中的第二条目是否包括具有非零值的第二计数字段;以及
当所述第二计数字段不具有非零值时,将所述第二条目的第二块标签替换为所述第一块标签。
8.根据权利要求7所述的装置,其中,当所述第二条目的待决字段具有零值时,所述预取核索回器替换所述第二块标签。
9.根据权利要求1所述的装置,其中,所述硬件加速器是图像处理硬件加速器、三维(3-D)硬件加速器或密码硬件加速器。
10.一种包括指令的非暂时性计算机可读存储介质,所述指令在被执行时,使机器至少用于:
基于来自硬件加速器的第一请求来生成块标签,所述第一请求包括设置在第一图像块中的第一像素的第一坐标;
基于所述块标签将所述第一图像块存储在高速缓冲存储中,所述第一图像块包括多个像素,所述多个像素包括所述像素;以及
当接收到包括设置在所述第一图像块中的第二像素的第二坐标的第二请求时,并行地访问包括在所述高速缓冲存储中的两个或更多个存储设备以传输包括所述第一图像块的多个图像块。
11.根据权利要求10所述的非暂时性计算机可读存储介质,还包括指令,所述指令在被执行时使所述机器至少用于将所述第一坐标的第一个坐标的第一数量的位和所述第一坐标的第二个坐标的第二数量的位串接。
12.根据权利要求10所述的非暂时性计算机可读存储介质,还包括指令,所述指令在被执行时使所述机器至少用于:
搜索标签存储,以在单个时钟周期内识别所述块标签是否与存储在所述标签存储中的多个块标签中的一个块标签匹配;
当所述块标签不与所述多个块标签中的一个块标签匹配时,生成推测构建请求以从存储器中索回所述第一图像块;以及
当所述第一图像块被存储时更新所述标签存储中的条目。
13.根据权利要求12所述的非暂时性计算机可读存储介质,还包括指令,所述指令在被执行时使所述机器至少用于通过以下中的至少一项更新所述条目:将所述块标签存储在标签字段中,将第一值存储在待决字段中,或将第二值存储在验证字段中的,所述第一值不同于所述第二值。
14.根据权利要求10所述的非暂时性计算机可读存储介质,其中,所述多个像素是第一多个像素,并且还包括指令,所述指令在被执行时使所述机器至少用于:
索回包括第二多个像素的第二图像块,所述第一多个像素邻近图像中的所述第二多个像素,所述第二图像块未包括在所述请求中;
基于所述块标签将所述第二图像块存储在所述高速缓冲存储中;以及
将包括所述第一图像块和所述第二图像块的所述多个图像块传输到所述硬件加速器。
15.根据权利要求10所述的非暂时性计算机可读存储介质,其中,存储所述第一块是基于莫顿顺序、列优先顺序或行优先顺序的。
16.根据权利要求10所述的非暂时性计算机可读存储介质,其中,所述块标签是第一块标签,并且还包括指令,所述指令在被执行时使所述机器至少用于:
确定标签存储中的第一条目是否包括具有非零值的第一计数字段;
当所述第一计数字段具有非零值时,确定所述标签存储中的第二条目是否包括具有非零值的第二计数字段;以及
当所述第二计数字段不具有非零值时,将所述第二条目的第二块标签替换为所述第一块标签。
17.根据权利要求16所述的非暂时性计算机可读存储介质,还包括指令,所述指令在被执行时使所述机器至少用于:
确定包括在所述第二条目中的待决字段是否具有非零值;以及
当所述第二条目的待决字段具有零值时,将所述第二条目的第二块标签替换为所述第一块标签。
18.一种用于减少像素传输延迟的方法,所述方法包括:
基于来自硬件加速器的第一请求生成块标签,所述第一请求包括设置在第一图像块中的第一像素的第一坐标;
基于所述块标签将所述第一图像块存储在高速缓冲存储中,所述第一图像块包括多个像素,所述多个像素包括所述像素;以及
当接收到包括设置在所述第一图像块中的第二像素的第二坐标的第二请求时,并行地访问包括在所述高速缓冲存储中的两个或更多个存储器设备以传输包括所述第一图像块的多个图像块。
19.根据权利要求18所述的方法,其中,生成所述块标签包括将所述第一坐标的第一个坐标的第一数量的位和所述第一坐标的第二个坐标的第二数量的位串接。
20.根据权利要求18所述的方法,还包括:
搜索标签存储,以在单个时钟周期内识别所述块标签是否与存储在所述标签存储中的多个块标签中的一个块标签匹配;
当所述块标签与所述多个块标签中的一个块标签不匹配时,生成推测构建请求以从存储器中索回所述第一图像块;以及
当所述第一图像块被存储时,更新所述标签存储中的条目。
21.根据权利要求20所述的方法,其中,更新所述条目包括以下中的至少一项:将所述块标签存储在标签字段中,将第一值存储在待决字段中或将第二值存储在验证字段中,所述第一值不同于所述第二值。
22.根据权利要求18所述的方法,其中,所述多个像素是第一多个像素,并且还包括:
索回包括第二多个像素的第二图像块,所述第一多个像素邻近图像中的所述第二多个像素,所述第二图像块不包括在所述请求中;
基于所述块标签将所述第二图像块存储在所述高速缓冲存储中;以及
传输包括所述第一图像块和所述第二图像块的多个块。
23.根据权利要求18所述的方法,其中,存储所述第一图像块是基于莫顿顺序、列优先顺序或行优先顺序的。
24.根据权利要求18所述的方法,其中,所述块标签是第一块标签,并且存储第一图像块包括:
确定标签存储中的第一条目是否包括具有非零值的第一计数字段;
响应于确定所述第一计数字段具有非零值,确定所述标签存储中的第二条目是否包括具有非零值的第二计数字段;以及
响应于确定所述第二计数字段不具有非零值,将所述第二条目的第二块标签替换为所述第一块标签。
25.根据权利要求24所述的方法,其中,替换所述第二块标签包括:
确定包括在所述第二条目中的待决字段是否具有非零值;以及
响应于所述待决字段具有零值,将所述第二条目的第二块标签替换为所述第一块标签。
26.一种用于减少像素传输延迟的装置,所述装置包括:
用于基于来自硬件加速器的第一请求来生成块标签的第一单元,所述第一请求包括设置在第一图像块中的第一像素的第一坐标;
用于基于所述块标签将所述第一图像块存储在高速缓冲存储中的第二单元,所述第一图像块包括多个像素,所述多个像素包括所述像素;以及
用于当接收到包括设置在所述第一图像块中的第二像素的第二坐标的第二请求时并行地访问包括在所述高速缓冲存储中的两个或更多个存储器设备以传输包括所述第一图像块的多个图像块的第三单元。
27.根据权利要求26所述的装置,其中,所述第一单元包括将所述第一坐标的第一个坐标的第一数量的位和所述第一坐标的第二个坐标的第二数量的位串接。
28.根据权利要求26所述的装置,还包括:
用于搜索标签存储以在单个时钟周期内识别所述块标签是否与存储在所述标签存储中的多个块标签中的一个块标签匹配的第四单元;
用于当所述块标签与所述多个块标签中的一个块标签不匹配时,生成推测构建请求以从存储器中索回所述第一图像块的第五单元;以及
用于当所述第一图像块被存储时,更新所述标签存储中的条目的第六单元。
29.根据权利要求28所述的装置,其中,所述第六单元包括以下中的至少一项:将所述块标签存储在标签字段中,将第一值存储在待决字段中或将第二值存储在验证字段中,所述第一值不同于所述第二值。
30.根据权利要求26所述的装置,其中,所述多个像素是第一多个像素,并且还包括:
用于索回包括第二多个像素的第二图像块的第四单元,所述第一多个像素邻近图像中的所述第二多个像素,所述第二图像块未包括在所述请求中;
用于基于所述块标签将所述第二图像块存储在所述高速缓冲存储中的第五单元;以及用于传输包括所述第一图像块和所述第二图像块的多个块的第六单元。
31.根据权利要求26所述的装置,其中,所述第二单元是基于莫顿顺序、列优先顺序或行优先顺序的。
32.根据权利要求26所述的装置,其中,所述块标签是第一块标签,并且所述第二单元包括:
用于确定标签存储中的第一条目是否包括具有非零值的第一计数字段的第四单元;
用于当所述第一计数字段具有非零值时,确定所述标签存储中的第二条目是否包括具有非零值的第二计数字段的第五单元;以及
用于当所述第二计数字段不具有非零值时,将所述第二条目的第二块标签替换为所述第一块标签的第六单元。
33.根据权利要求32所述的装置,其中,所述第六单元包括:
用于确定包括在所述第二条目中的待决字段是否具有非零值的第七单元;以及用于当所述第二条目的待决字段具有零值时将所述第二条目的第二块标签替换为所述第一块标签的第八单元。

说明书全文

用于当取回像素核时降低存储器延迟的方法、系统和设备

[0001] 相关申请
[0002] 该专利源自于要求2017年5月19日提交的美国临时专利申请序列号62/508,886的权益的申请,美国临时专利申请序列号62/508,886在此通过引用将其全部条款并入本文。特此要求美国临时专利申请序列号62/508,886的优先权。

技术领域

[0003] 本公开总体上涉及图像处理,并且更具体地涉及在取回像素核时减少存储器延迟的方法、系统和装置。

背景技术

[0004] 近年来,针对图像处理能的需求已经超出了大功率专用台式机硬件的范围,并且已经成为针对个人和/或另外移动设备的期望。移动设备通常包括受尺寸约束、温度管理约束和/或电源约束限制的处理能力。附图说明
[0005] 图1是用于实现本文描述的示例的示例预取高速缓存(PFBC)的示意示出。
[0006] 图2是用于实现图1的示例PFBC的示例取回引擎的示例实现的框图
[0007] 图3描绘了基于莫顿顺序映射到高速缓冲存储器的示例输入图像。
[0008] 图4描绘了基于列优先顺序映射到高速缓冲存储器的图3的输入图像。
[0009] 图5描绘了由图3的示例PFBC和/或图2的示例取回引擎使用以从高速缓冲存储器中读数据的示例块组织的示意示出。
[0010] 图6描绘了描述与图1的PFBC相关联的示例信号的示例表。
[0011] 图7描绘了对应于操作中的图1的PFBC的示例时序图。
[0012] 图8描绘了另一示例表,其描述了与图1的PFBC相关联的示例信号。
[0013] 图9描绘了对应于操作中的图1的PFBC的另一示例时序图。
[0014] 图10描绘了示例标签,该标签用于基于莫顿顺序集组织和2字节(2B)的像素大小将像素坐标映射到高速缓存的数据。
[0015] 图11描绘了示例标签,该标签用于基于莫顿顺序集组织和1字节(1B)的像素大小将像素坐标映射到高速缓存的数据。
[0016] 图12描绘了示例标签,该标签用于基于列优先顺序集组织和2字节(2B)的像素大小将像素坐标映射到高速缓存的数据。
[0017] 图13描绘了示例标签,该标签用于基于列优先顺序集组织和1字节(1B)的像素大小将像素坐标映射到高速缓存的数据。
[0018] 图14描绘了用于示例4路高速缓存的示例标签存储器条目。
[0019] 图15描绘了从示例存储器索回(retrieve)数据的示例推测构建请求
[0020] 图16示出了包括图1的PFBC的示例翘曲滤波器的示例实现方式的框图。
[0021] 图17是由图16的示例翘曲滤波器处理以消除失真的示例鱼眼变换。
[0022] 图18是示例扩展网格点的示意示出。
[0023] 图19示出了由图16的示例翘曲滤波器分隔成相等的瓦片的示例图像。
[0024] 图20描绘了FP32格式的网格点的示例存储器组织。
[0025] 图21描绘了16位格式的网格点的示例存储器组织。
[0026] 图22描绘了预扩展的网格点的示例存储组织。
[0027] 图23描绘了在图16的示例中的示例PFBC中使用的块和超块的示例。
[0028] 图24是表示示例机器可读指令的流程图,所述示例机器可读指令可以被执行以实现图1的示例PFBC和/或图2的示例取回引擎以处理在示例预取接口处接收的示例请求。
[0029] 图25是表示示例机器可读指令的流程图,所述示例机器可读指令可以被执行以实现图1的示例PFBC和/或图2的示例取回引擎以将示例标签存储在示例标签存储装置中。
[0030] 图26是表示示例机器可读指令的流程图,所述示例机器可读指令可以被执行以实现图1的示例PFBC和/或图2的示例取回引擎以处理在示例请求接口处接收到的示例请求。
[0031] 图27是表示示例机器可读指令的流程图,所述示例机器可读指令可以被执行以实现图1的示例PFBC和/或图2的示例取回引擎以构造示例推测阻止请求。
[0032] 图28是示例处理器平台的框图,该示例处理器平台被构造为执行至少图24-图27的示例机器可读指令以实现图1的示例PFBC。
[0033] 图29是示例处理器平台的框图,该示例处理器平台被构造为执行至少图24-图27的示例机器可读指令以实现图2的示例取回引擎。
[0034] 附图未按比例绘制。通常,在整个附图和随附的书面描述中将使用相同的附图标记来指代相同或相似的部分。

具体实施方式

[0035] 典型的计算系统(包括个人和/或其他移动设备)采用高级图像处理或计算机视觉算法来使人类视觉系统可以执行的任务自动化。计算机视觉任务包括获得、处理、分析和理解数字图像,这部分地有助于从数字图像中提取尺寸数据以产生数字和/或符号信息。计算机视觉算法可以使用数字和/或符号信息来进行判定和/或以其他方式执行与三维(3-D)姿态估计、事件检测、对象识别、视频跟踪等相关联的操作。
[0036] 为了处理数字图像,计算硬件取回与数字图像中的像素相关联的图像数据以填充像素核。像素可以代表数字图像的最小分量或显示器(例如,液晶显示器(LCD)、有机发光二极管(OLED)显示器等)的最小可控元件。如本文所使用的,术语“像素核”是指两个或更多个像素(例如,像素矩阵)的组成,包括输入图像(例如,摄像机图像、视频等)中给定坐标处的像素以及处理像素所需的像素周围的像素数量。像素核可以代表像素矩阵(例如1x1像素核、2x2像素核、1x4像素核等)。像素核的宽像素数量和高像素数量被称为核支持。在某些情况下,图像数据包括与包括像素坐标的一个或多个像素相关联的像素数据。像素坐标可以识别图像(例如,光栅图像)或显示器的组件中的像素的物理点或位置
[0037] 在先前的实施方式中,计算硬件将具有空间局部性的图像的一些相邻像素存储在存储器中,同时存储不具有空间局部性的其他相邻像素。空间局部性是指这样的概念,其中存储在一起的数据元素最有可能一起访问。在存储具有空间局部性的图像中相邻像素的实例中,计算硬件可以从单个存储器读中重构像素核。在不存储具有空间局部性的图像中的相邻像素的实例中(例如,第一像素位于存储器的第一地址行、而第二像素位于存储器的第二地址行),计算硬件需要执行多个存储器读以重构像素核以进行处理,这导致计算硬件的存储器延迟增加。
[0038] 本文公开的示例减少了存储器延迟并且改善了存储器设备与像素处理硬件(例如,图像处理硬件、计算机视觉硬件等)之间的像素数据传输。本文公开的示例从主存储器(例如,动态RAM(DRAM)、连接矩阵(CMX)存储器等)预取数据,根据空间局部性将数据处理为图像数据的块,并将图像数据块或数据块存储到高速缓冲存储器中。本文公开的示例在像素或像素核的块上操作,作为用于从高速缓冲存储器取回的基本单元。
[0039] 在一些公开的示例中,预取块高速缓存(PFBC)(例如,装置)从计算系统的主存储器中预取由计算系统请求的数据。在一些公开的示例中,所请求的数据是在与由计算系统处理的输入图像的像素相对应的所请求的像素坐标处的图像数据(例如,像素数据)。在一些公开的示例中,PFBC将所请求的像素坐标映射到图像块,并将图像块存储在包括在PFBC中的高速缓冲存储器中。在一些公开的示例中,PFBC通过基于像素坐标生成标签并将标签存储在包括在PFBC中的标签存储器中,来将像素坐标映射到图像块。在一些公开的示例中,PFBC被配置为推测性地请求在所请求的图像块的左侧和/或右侧的一定数量的其他图像块。可替代地,示例PFBC可以被配置为推测性地请求在所请求的图像块之上和/或之下的一定数量的其他图像块。
[0040] 当示例PFBC确定所请求的图像块被高速缓存在高速缓冲存储器中时,PFBC将与包括所请求的图像块的所请求的数据相关联的图像块组织成突发传输(例如,单拍突发传输)并将请求的图像块发送传输到外部硬件以进行处理。在一些公开的示例中,传输的图像块包括与由计算系统所请求的数据相关联的图像数据和/或与推测性请求的块相关联的图像数据。
[0041] 在一些公开的示例中,PFBC可以用于消除源图像、源视频帧等中的失真类型。例如,源图像和/或源视频帧有时可能包括不期望的失真。现有的失真消除方法通常以包括大量延迟的方式利用动态随机存取存储器(DRAM)。为了消除诸如鱼眼失真之类的失真类型,本文公开的示例包括变换算法、指令和/或包括示例PFBC的硬件,以减少在现有方法中观察到的延迟。
[0042] 图1是示例预取块高速缓存(PFBC)100的示意示出,其用于减少和/或消除在图像处理操作、计算机视觉操作等期间的像素传输延迟。图1的示例PFBC 100包括示例存储器接口102,用于促进PFBC 100和计算系统硬件(例如,存储器控制器、中央处理单元(CPU)、硬件加速器等)之间的数据传输。在图1的所示示例中,存储器接口102是128位存储器(总线)接口。例如,PFBC 100的存储器接口102可以是128位AXI主接口、128位AMC读I/F接口等。可替代地,示例PFBC 100可以具有与任意数量的位相关联的接口。(例如64位存储器接口、256位存储器接口等)。
[0043] 在图1的所示示例中,存储器接口102包括示例预取接口104、示例请求接口106和示例数据接口108。在图1的所示示例中,存储器接口102包括预取接口104,用于从计算系统的示例主存储器110发出读请求(例如,突发读请求)。在图1的所示示例中,主存储器110是DRAM。替代地,主存储器110可以是CMX存储器或任何其他类型的非易失性或易失性存储器。图1的示例预取接口104从主存储器110查询、接收和/或以其他方式索回数据(例如,图像数据、像素数据、像素坐标等),并将所索回的数据传输到示例预取器112。在图1的所示示例中,预取接口104从主存储器110获得像素坐标。可替代地,示例预取接口104可以从主存储器110获得与输入图像相关联的其他信息。
[0044] 在图1的所示示例中,预取接口104基于来自示例硬件加速器114的命令或指令,确定要从主存储器110获得的包括像素坐标的图像数据。例如,硬件加速器114的控制器或控制块指示预取接口104从主存储器110获得数据。在图1的所示示例中,硬件加速器114是图像处理硬件加速器。替代地,示例硬件加速器114可以是3-D加速器、密码加速器等。替代地,示例硬件加速器114可以被包括为通用中央处理单元(CPU)的一部分或被包括在诸如图形处理单元(GPU)的单独的单元中。
[0045] 在图1的所示示例中,硬件加速器114识别和/或以其他方式确定与要由预取接口104取回的输入图像相关联的一个或多个像素的像素坐标。例如,硬件加速器114可以在硬件加速器114将像素坐标发送到数据接口108以指示数据接口108获得由预取接口104索回的图像块之前,将像素坐标发送到预取接口104以指示预取接口104索回与像素坐标相关联的图像块。预取接口104指示预取接口104索回与像素坐标相关联的图像块。例如,硬件加速器114可以识别像素的像素坐标,并且引导或指示预取接口104针对像素坐标查询主存储器
110。响应于主存储器110接收到查询,主存储器110将像素坐标发送到预取接口104以初始化索回与像素坐标相关联的图像块。
[0046] 在一些示例中,图1的硬件加速器114确保在预取接口104做出请求之前不会发生在请求接口106上针对像素坐标的请求。例如,请求接口106上的像素坐标的顺序应该与在预取接口104上的顺序匹配。在一些示例中,请求接口106包括FIFO缓冲区,用于缓冲在请求接口106处接收到的像素坐标。在此类示例中,像素坐标在与相同的像素坐标由预取接口104接受几乎相同的时间被推入FIFO缓冲区中。在此类示例中,请求接口106可以调整FIFO缓冲区的大小,以匹配或超过典型的或在一些情况下最坏的情况在存储器接口102上看到的延迟或来自包括在PFBC 100中的存储器(例如,DRAM)的延迟。
[0047] 在一些示例中,图1的硬件加速器114生成输入图像之外的像素坐标。例如,硬件加速器114可以指示预取接口104和/或请求接口106提供对负像素坐标的访问。在这样的示例中,预取接口104和/或请求接口106将不支持的请求钳位为零和/或以其他方式丢弃该请求。例如,PFBC 100可以仅支持正(无符号)输入像素坐标。替代地,PFBC 100可以支持其他类型的像素坐标。
[0048] 在图1的所示示例中,预取接口104将获得的像素坐标发送到示例像素数据先进先出(FIFO)缓冲区116,以(临时)存储由预取接口104获得的像素坐标。图1的像素数据FIFO缓冲区116是硬件移位寄存器。例如,像素数据FIFO缓冲区116可以实现帧缓冲区。替代地,像素数据FIFO缓冲区116可以是循环缓冲区或利用硬件或机器可读指令实现的其他类型的队列结构。图1的像素数据FIFO缓冲区116以先进先出的方式将像素坐标发送(例如,异步发送)到预取器112。
[0049] 在图1的所示示例中,预取器112基于由预取接口104获得的像素坐标,生成示例标签120并将其存储在示例标签存储装置122中和/或推测性地取回图像块。在图1的所示示例中,标签120包括块标签字段,该块标签字段用于将请求的像素坐标映射到PFBC 100中的存储的图像块数据。例如,标签120可以对应于图10-图13中描绘的示例标签1000、1100、1200、1300。例如,块标签字段可以对应于图10-图13中描绘的示例块标签字段1002、1102、1202、
1302。示例预取器112包括示例标签映射器124和示例推测块请求(SBR)构建器126。示例预取器112包括示例标签映射器124,用于将像素坐标转换和/或以其他方式转换为示例标签
120,并将标签120存储在示例标签存储装置122中。在一些示例中,标签120包括一个或多个块标签位和/或一个或多个索引字段(例如,设置索引字段、像素索引字段等),其中每一索引字段包含一个或更多个索引位(例如,一个或更多个组索引位、一个或更多个像素索引位等)。
[0050] 在图1的所示示例中,标签存储装置122包括四个示例标签存储器128。在图1中描绘了四个标签存储器128,可以使用少于或多于四个标签存储器128。在图1中,示例标签存储装置122被实现为寄存器,以促进多个、基本并行地访问的容易性。替代地,标签存储装置122可以是CMX、DRAM等,或者任何其他类型的非易失性存储器或易失性存储器。示例预取接口104和/或示例请求接口106可以同时和/或以其他方式基本上同时并行地访问四个标签存储器128中的每个。示例预取接口104和/或示例请求接口106可以基于包括在基于请求的像素坐标而生成的标签中的组索引的两个最低有效位,来选择示例标签存储器128中的一个。例如,标签映射器124可以将像素坐标转换为包括块组索引的标签。示例标签映射器124可以将块组索引的两个最低有效位映射到包括在标签存储器128中的第一标签存储器128中的标签120中的第一标签120。
[0051] 在图1的所示示例中,每个标签存储器128包括八个示例条目130,其中每个条目包括对应于不同方式的四个示例部分132。每个示例部分132包括相应的标签120、示例计数字段134和示例待决字段135。例如,计数字段134可以对应于图14中描绘的示例计数字段1412。例如,待决字段135可以对应于图14中描绘的示例待决字段1414。例如,待决字段135可以是值为零或一的1位字段(例如,二进制交换字段)。当待决字段135为零时,待决字段
135被禁用,并且当待决字段135为一时,待决字段135被启用。另外地或可替代地,示例部分
132可以包括更少或更多的标签、字段等。例如,部分132可以包括与图14中所描绘的示例验证字段1416相对应的示例验证字段。示例标签存储装置122包括条目130中的32个,其中每个相应条目130包括四个标签120。可替代地,每个标签存储器128可包括少于或多于八个条目130。可替代地,每个条目130可包括少于或多于四个部分132。
[0052] 如本文所使用的,一种方式(如在N方式中)是可以高速缓存给定块的不同方式的数量(例如,存储器方向、存储器配置、映射顺序等)。例如,多个块(例如,来自主存储器110的块)将映射到集合内的相同块位置,如果高速缓存是N路集合关联的,则最多可以高速缓存映射到集合内的相同块位置的N个块。如本文所使用的,块(例如,图像块)是像素的二维阵列。如本文所使用的,集合是块的二维阵列。如本文所使用的,像素索引是像素坐标集的X和Y的最低有效位,它们一起产生对该像素在块内的位置的索引。如本文所使用的,块位置索引或组索引是来自像素坐标集的某些位的特定映射,该特定映射产生到包含驻留在集合中的像素的图像块的位置的索引。如本文所使用的,块标签或标签是像素坐标集的X和Y的最高有效位,其相对于可能在集合内的相同块位置处可高速缓存的其他块唯一地识别块。
[0053] 在图1的所示示例中,响应于预取接口104接收像素坐标,标签映射器124并行地搜索每个标签存储器128以产生针对多达N个块的初始的单个时钟周期判定(例如,单个时钟周期命中判定、单个时钟周期未命中判定)以生成N个块的像素核(例如,其中N为4、8、16等),可能需要该N个块的像素核以处理像素坐标处的像素。在一些示例中,命中判定对应于与已经由PFBC 100高速缓存的像素坐标相关联的图像数据。在一些示例中,未命中判定对应于与尚未由PFBC 100高速缓存的像素坐标相关联的图像数据。
[0054] 在一些示例中,PFBC 100实施安全机制以确保与在预取接口104或请求接口106上进行的请求相对应的一个或多个图像块将在PFBC 100的后续时钟周期期间被高速缓存,并且不会被替换直到在数据接口108上满足相对应的请求。在这样的示例中,标签映射器124和/或示例读标签映射器152使用计数字段134来实现安全机制。例如,每当在预取接口104处请求与标签120相关联的图像数据时,标签映射器124递增针对相对应的标签120的计数字段134。在其他示例中,每当在请求接口106上请求与标签120相关联的图像数据时,读标签映射器152递减针对相对应的标签120的计数字段134。因此,当且仅当针对存储的图像数据的相对应的计数字段134为零并且针对所存储的图像数据的“待决”字段135为零(例如,所存储的图像数据不是待决处理)时,才可以替换存储在示例高速缓冲存储器148中的一个中的图像数据。。
[0055] 在某些示例中,当计数字段134不为零时,则数据接口108尚未满足在预取接口104上已接受的某些请求,因此存储在示例高速缓存存储装置146中的相对应的图像块数据必须被维护。例如,相对应的图像块不能被丢弃、覆盖、替换等,直到计数字段134变为零。在一些示例中,当计数字段134为零但是待决字段135被设置(例如,设置为1)时,则图像块数据已经由SBR构建器126推测性地取回。在这些示例中,图像块数据可能永远不会被请求,而是推测性地取回,以提高满足需要推测性地取回的图像块数据的未来请求的效率。
[0056] 在一些示例中,如果设置包括在条目130中的一个中的待决字段135并且对应的计数字段134为零,则对应的条目130被推测性地取回,但是其当前正被高速缓存在高速缓存存储装置146中。因此,推测性地取回的条目130不是替换的候选者,直到与条目130相关联的图像块数据被高速缓存。响应于图像块数据被高速缓存在高速缓存存储装置146中,示例高速缓存填充器144清除待决字段135,并设置包括在条目130中的验证字段(例如,设置为1)。响应于清除待决字段135和设置验证字段之后,条目130成为替换的候选者。
[0057] 图1的示例SBR构建器126在做出未命中判定后会生成一个或多个SBR。示例SBR构建器126生成一个或多个SBR,以允许在存储器接口102上进行更长的突发事务和/或开始进行对图像块的访问,这些图像块将被计算系统预先处理。示例SBR构建器126生成SBR并将其发送到示例SBR FIFO 136。图1的示例块获得器136以先进先出的方式将来自SBR构建器126的SBR请求发送到示例块取回器138。图1的示例块取回器138基于预取接口104所接收的像素坐标,经由包括在存储器接口102中的示例块取回器接口140从主存储器110索回和/或以其他方式获得图像数据的块。在一些示例中,块取回器138获得与经由块取回器接口140由预取接口104接收的像素坐标相对应的图像块。在一些示例中,块取回器138经由块取回器接口140获得对应于像素坐标的图像块的左侧或右侧的图像块(例如,相邻图像块)。可替代地,示例块取回器138可被配置为经由块取回器接口140获得与像素坐标对应的图像块之上或之下的图像块。
[0058] 在图1的所示示例中,块取回器138包括示例地址生成器142,用于生成与在主存储器110中感兴趣的图像块的位置相对应的主存储器110的地址(例如,地址行)。例如,地址生成器142可以确定与由预取接口104接收的所请求像素的像素坐标相对应的图像块位于主存储器110的地址处。在这样的示例中,地址生成器142可以生成该地址并指示该块取回器接口140从主存储器110索回生成的地址处的图像块。
[0059] 在图1的所示示例中,块取回器138包括示例高速缓存填充器144,用于在由地址生成器142所生成的地址处从块取回器接口140所请求的主存储器110中索回和/或以其他方式获得图像块。响应于接收到所清奇的图像块,示例高速缓存填充器144将图像块存储在示例高速缓存存储装置146中。例如,高速缓存填充器144可以将图像块存储在包括在高速缓冲存储146中的高速缓冲存储器(例如,RAM[0]、RAM[1]、RAM[2]、RAM[3])148中的一个中。可替代地,高速缓存存储装置146可以包括少于或多于四个的高速缓冲存储器148。
[0060] 在一些示例中,高速缓存填充器144以与SBR构建器126请求图像块相同的顺序从主存储器110接收块。例如,每个块的第一和最后一行数据可以是以与请求图像块相同的顺序接收。在一些示例中,高速缓存填充器144基于请求的第一块的像素坐标和读数据的节拍(beat)将索回到的数据存储在高速缓存存储装置146中。例如,高速缓存填充器144可以在每个突发的每个节拍将图像块的X坐标增加一。在每个突发的开始时,图像块的X坐标重置为请求的第一块的X坐标,因为请求的所有块的Y坐标都相同。
[0061] 在一些示例中,高速缓存填充器144基于由SBR构建器126生成的SBR将图像块数据写入高速缓存存储装置146中。例如,突发节拍计数可用于索引SBR并读将与当前节拍相对应的块写入其中的方式。在一些示例中,高速缓存填充器144基于包括在对应标签120中的组索引的最低有效位,将从主存储器110索回的图像块数据写入高速缓冲存储146。例如,对于给定的突发的节拍,通过组索引的最低有效位选择向其写入图像块数据的正确的高速缓冲存储器148,其中地址的其余部分基于组索引的其余位和方式。
[0062] 在一些示例中,高速缓存填充器144针对突发的每个节拍仅写入块的像素的一行。例如,突发编号用于驱动针对每个节拍的字节/位写使能掩码,其中总共可以使用八个突发来完成SBR。在一些示例中,使能掩码仅在突发之间改变,因为使能掩码在突发内的节拍之间是恒定的。在一些示例中,高速缓存填充器144在最后的突发上更新标签存储122中的对应标签120。例如,当接收到针对每个块的最后一行数据并将其写入高速缓冲存储146时,高速缓存填充器144清除待决字段135并设置标签120的验证字段。
[0063] 在一些示例中,高速缓存填充器144更新和/或以其他方式通知示例块数据读器150:图像块已经被存储在与请求接口106所接收的像素坐标相对应的高速缓冲存储146中。
在一些示例中,高速缓存填充器144更新包括在与图像块相对应的标签存储122中的标签
120中的一个。例如,高速缓存填充器144可以更新标签120以将标签120映射到图像块在高速缓冲存储146中的位置。
[0064] 在图1的所示示例中,块取回器138基于从示例像素核配置器147接收的配置信息从主存储器110获得图像块数据。示例像素核配置器147将配置信息发送到包括基地址的块取回器138,以使块取回器接口140与存储器接口102的数据宽度(以字节为单位),行跨度(以字节为单位)对齐,其是存储器接口102数据宽度、帧宽度、帧高度和每像素字节数的倍数。在一些示例中,当块取回器接口140以循环缓冲区模式操作时,配置信息包括要索回的地址行的数量和指示循环缓冲区的哪一行当前是头一行的当前地址行。在一些示例中,要索回的地址行的数量基于2的幂。响应于接收到配置信息,块取回器138可以配置块取回器接口140以基于该配置信息从主存储器索回图像块数据。
[0065] 在图1的所示示例中,像素核配置器147在核(例如,硬件加速器114的核)的支持下配置块取回器138。例如,像素核配置器147可以将包括核支持的配置信息发送到块取回器138。响应于接收到核的支持,块取回器138可以配置地址生成器142或高速缓存填充器144中的至少一个,以将支持添加到在预取接口104处接收到的所请求像素的Y坐标。在一些示例中,当具有像素坐标(X,Y+support(支持))的像素映射到不同的块时,然后是具有像素坐标(X,Y)的块,则除了包括该像素的图像块之外,块取回器138还索回不同的块。。例如,支持可以对应于像素核的像素宽的像素数量和像素核高的像素数量。例如,与具有第二像素坐标(X,Y)的第二像素(其映射到第二像素核的第二块)相比,具有第一像素坐标(X,Y+support(支持))的第一像素可以映射到第一像素核的第一块。
[0066] 在图1的所示示例中,高速缓冲存储146包括四个高速缓冲存储器148。替代地,示例高速缓冲存储146可以包括少于或多于四个高速缓冲存储器148。示例高速缓冲存储器148是静态RAM(SRAM)。替代地,示例高速缓冲存储器148可以是任何其他类型的非易失性或易失性存储器。图1的示例高速缓冲存储器148存储8×8像素块,其中每个像素是2字节,因此,高速缓冲存储器148的条目(或字)的大小是128字节或1024位(例如,128字节=8块×8像素/块×2字节/像素)。替代地,示例高速缓冲存储器148可以存储16×8像素的条目大小(其中每个像素是1字节),或者在4×8像素的块(其中在存储器大小中,每个像素是4字节)。
[0067] 在图1的所示示例中,每个高速缓冲存储器148可以存储针对与请求的像素相关联的每个集合的图像块的四分之一。可以基于包括在标签120中的组索引的至少两个有效位来选择每个高速缓冲存储器148。每个示例高速缓冲存储器148具有两个端口,该两个端口允许块取回器138和块数据读器150访问(例如,同时访问,基本上同时访问等)。例如,块取回器138可以使用端口中的第一端口将图像块或图像块数据写入高速缓冲存储器148中的一个。在这样的示例中,块取回器138可以一次仅写入高速缓冲存储器148中的一个(例如,假设高速缓冲存储器148的总线宽度等于图像块的宽度,即16字节)和/或仅一次写入所选的图形块中的一行。在一些示例中,如果图像块的宽度大于高速缓冲存储器148的宽度,则可以一次写入两个高速缓冲存储器148。在其他示例中,块数据读器150可以使用端口中的第二端口来从高速缓冲存储器148中的一个索回图像块或图像块数据。在这样的示例中,块数据读器150可以并行和/或以其他方式同时从一个到四个高速缓冲存储器148读。
[0068] 在图1的所示示例中,块数据读器150基于将像素坐标映射到包括在标签存储装置122中的标签120中的一个,来确定是否将与由请求接口106接收的请求像素的像素坐标相对应的图像块数据存储在高速缓冲存储146中。响应于确定图像块数据被存储在高速缓冲存储146中,块数据读器150将图像块数据从高速缓冲存储146发送到数据接口108。
[0069] 在图1的所示示例中,请求接口106由硬件加速器114驱动。在一些示例中,硬件加速器114的算术数据路径驱动请求接口106。例如,硬件加速器114的控制块或控制器从主存储器110生成或读像素坐标序列以被硬件加速器114的算术数据路径访问以进行处理或变换。
[0070] 图1的示例块数据读器150包括示例读标签映射器152,用于映射由请求接口106接收的像素坐标并将像素坐标映射至包括在标签存储122中的标签120。在一些示例中,读标签映射器152确定与接收到的像素坐标相对应的图像块数据不基于标签120中包含的信息存储在高速缓冲存储146中。在这样的示例中,读标签映射器152等待,直到块取回器138索回图像块数据并将其存储在高速缓冲存储146中为止。在一些示例中,读标签映射器152不连续读标签存储122直到索回图像块数据。例如,当高速缓存填充器144高速缓存新块时,读标签映射器152可以暂停操作或停止直到高速缓存填充器144指示读标签映射器152唤醒和/或以其他方式恢复读标签存储122。
[0071] 图1的示例块数据读器150包括示例高速缓存访问器154,用于在读标签映射器152确定图像块数据存储在高速缓冲存储146中时从高速缓冲存储146索回和/或以其他方式获得图像块数据。在一些示例中,读标签映射器152将像素坐标映射到标签120中的一个,并且确定与像素坐标相关联的图像块数据被存储在高速缓冲存储146中,并且确定图像块数据在高速缓冲存储器148中的一个中的位置。响应于确定图像块数据的位置,高速缓存访问器154从高速缓冲存储146索回图像块数据,并将图像块数据发送到数据接口108。
[0072] 在操作中,预取接口104接收与输入图像关联的像素的像素坐标。预取接口104经由像素数据FIFO缓冲区116将像素坐标发送到标签映射器124。标签映射器124基于像素坐标生成块标签,并且搜索每个标签存储器128,并行确定生成的块标签是否与标签120中的一个匹配。在一些示例中,一个或多个标签存储器128包括一个或多个标签120,这些标签120先前由标签映射器124响应于预取接口104的先前操作而生成和存储。
[0073] 响应于标签120中的一个与所生成的块标签匹配,标签映射器124读存储在标签存储122中的标签120的对应计数字段134中的值,将该值递增,并将递增的值写回到计数字段134。响应于没有标签120与所生成的块标签匹配,标签映射器124识别部分132中第一部分,其是空闲的和/或以其他方式可用并且执行以下操作:1)读相对应的计数字段134的值,将该值递增,并将递增的值写回到计数字段134(例如,将计数字段值从0递增至1);2)将标签
120的值设置为块标签;3)将包括在部分132中的验证字段设置为零和/或以其他方式清除验证字段;4)将包括在部分132中的待决字段135设置为1和/或以其他方式启用待决字段。
[0074] 在图1的所示示例中,响应于标签映射器124将包括在标签存储122中的标签120设置为块标签,SBR构建器126生成一个或多个SBR并将其经由SBR FIFO 136发送到块取回器138。响应于接收到一个或多个SBR,地址生成器142生成针对高速缓存填充器144的一条或多条地址行,以便从主存储器110中索回。响应于经由块取回器接口140在一条或多条地址行处索回图像块数据,然后,高速缓存填充器144执行以下操作:1)读与块标签相对应的部分132的待决字段的值,清除该值,并将清除的值写回到待决字段;2)读与块标签相对应的部分132的验证字段的值,将该值递增和/或以其他方式设置验证字段的位值,并将该值写回到验证字段;以及3)将图像块数据存储在映射到块标签的高速缓冲存储器148中的一个中。
[0075] 在操作中,当请求接口106接收到用于索回与输入图像的一个或多个像素相关联的图像数据的请求时,块数据读器150启动对标签存储122的搜索。在图1中,请求接口106接收与感兴趣的像素相关联的像素坐标。响应于接收到所请求的像素坐标,读标签映射器152基于像素坐标生成块标签,并且针对与该块标签的匹配来搜索标签存储122。例如,由于基于所请求的像素坐标可能需要1-4个图像块,所以读标签映射器152可以并行读1-4个标签存储器128。
[0076] 响应于标签120中的一个与由读标签映射器152生成的块标签匹配,读标签映射器152执行以下操作:1)读与标签120中的一个匹配的计数字段134的值,然后,递减该值,并将递减的值写回到计数字段134;以及2)指示高速缓存访问器154并行读1-4个高速缓冲存储器148,以索回映射到与标签120中的匹配的一个标签120的图像块数据。响应于高速缓存访问器154从高速缓冲存储器148中的一个索回图像块数据,高速缓存访问器154将图像块数据发送到数据接口108以进行进一步处理。响应于标签120中的一个与由读标签映射器152生成的块标签不匹配,请求接口106停止或不接受附加请求,直到所请求的图像块数据被存储在高速缓冲存储146中并且包括在标签存储122中的一个或多个标签120被更新为图像块数据在高速缓冲存储146中的位置。
[0077] 尽管在图1中图示了实现PFBC 100的示例方式,但是在图1中示出的元件、过程和/或设备中的一个或多个可以以任何其他方式组合、划分、重新布置、省略、消除和/或实现。此外,示例存储器接口102、示例预取接口104、示例请求接口106、示例数据接口108、示例预取器112、示例像素数据FIFO缓冲区116、示例标签存储122、示例标签映射器124、示例SBR构建器126、示例SBR FIFO 136、示例块取回器138、示例块取回器接口140、示例地址生成器
142、示例高速缓存填充器144、示例高速缓冲存储146、示例块数据读器150、示例读标签映射器152、示例高速缓存访问器154和/或更一般而言,图1的示例PFBC 100可以通过硬件、软件固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例存储器接口102、示例预取接口104、示例请求接口106、示例数据接口108、示例预取器112、示例像素数据FIFO缓冲区116,示例标签存储122、示例标签映射器124、示例SBR构建器126、示例SBR FIFO 
136、示例块取回器138、示例块取回器接口140、示例地址生成器142、示例高速缓存填充器
144、示例高速缓冲存储146、示例块数据读器150、示例读标签映射器152、示例高速缓存访问器154和/或更一般而言,示例PFBC 100可以由一个或多个模拟或数字电路逻辑电路、可编程处理器、可编程控制器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC、可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)实现。当阅读本专利的任何装置或系统权利要求以涵盖纯软件和/或固件实现时,示例存储器接口102、示例预取接口
104、示例请求接口106、示例数据接口108、示例预取器112、示例像素数据FIFO缓冲区116、示例标签存储122、示例标签映射器124、示例SBR构建器126、示例SBR FIFO 136、示例块取回器138、示例块取回器接口140、示例地址生成器142、示例高速缓存填充器144、示例高速缓冲存储146、示例块数据读器150、示例读标签映射器152、示例高速缓存访问器154中的至少一个由此明确定义为包括非暂时性计算机可读存储器设备或存储磁盘,例如存储器、数字多功能磁盘(DVD)、光盘(CD)、蓝光盘等,包括软件和/或固件。更进一步地,除了图1所示的那些之外元件或者替代图1所示的元件,图1的示例PFBC 100可以包括一个或多个元件、过程和/或设备,和/或任何一个或全部所示的元件、过程和设备中的更多个。
[0078] 图2是用于实现图1的PFBC 100的示例取回引擎200的示例实现的框图。图2的取回引擎200可以在被请求用于诸如图像处理、计算机视觉等的计算任务之前,获得、处理、组织和存储与输入图像的一个或多个像素的像素坐标相对应的图像数据。图2的取回引擎200包括示例预取核索回器202、示例存储器接口引擎204和示例核索回器206。
[0079] 在图2的所示示例中,取回引擎200包括预取核索回器202,用于在核索回器206请求图像数据之前获得与像素坐标相对应的图像数据。在图2的所示示例中,预取核索回器202实现用于基于像素坐标生成块标签的单元,并且实现用于基于块标签来索回图像块的单元。预取核索回器202可以对应于图1的预取器112。例如,预取核索回器202可以实现一个或多个功能,多达至少结合图1的预取器112所描述的功能的全部的。在一些示例中,预取核索回器202确定取回引擎200是否已经接受了用于获得图像数据的请求。如果否,则预取核索回器202继续监视一个或多个请求。响应于检测到请求,预取核索回器202确定与该请求相关联的对应的信息。对应的信息包括但不限于像素坐标、平支持、垂直支持和/或莫顿顺序状态信息。如本文所使用的,莫顿顺序是指N维空间到数字的线性列表上的映射。例如,当应用于坐标时,莫顿顺序定义为空间填充曲线,其实Z形的以将多维数据映射到一维,同时保留数据点的局部性。
[0080] 在一些示例中,预取核索回器202基于像素核的支持将像素坐标映射到块映射。例如,接收到的像素坐标可以对应于像素核的左上,如下面结合图3和/或图4所描述的。在这样的示例中,预取核索回器202可以基于输入像素坐标(X,Y)、W像素的水平支持、H像素的垂直支持、莫顿集组织,以及使取回引擎200能够高速缓存8x8像素块的配置中的至少一个对像素坐标进行映射。
[0081] 在一些示例中,如下所述,预取核索回器202基于使用公式(1)-(4)的一个或多个示例的计算,执行针对像素核的所有顶点的映射:
[0082] 块0=(X>>3,Y>>3)
[0083] 公式(1)
[0084] 块1=((X+W)>>3,Y>>3)
[0085] 公式(2)
[0086] 块2=(X>>3,(Y+H)>>3)
[0087] 公式(3)
[0088] 块3=((X+W)>>3,(Y+H)>>3)
[0089] 公式(4)
[0090] 在上面的公式(1)-(4)的所示示例中,“>>”是指右移操作。这样,“X>>3”表示将像素的X坐标向右移动3位。在一些示例中,预取核索回器202搜索一个或多个标签存储器(例如,图1的示例标签存储器128)以产生单个时钟周期命中/未命中判定。图2的预取核索回器202确定与同请求相关联的像素坐标相对应的图像数据是否已经被存储在高速缓存中(例如,图1的高速缓冲存储146)。响应于确定图像数据已经被高速缓存,示例核索回器206从高速缓存索回图像数据。响应于确定尚未高速缓存图像数据,示例预取核索回器202生成与图像数据在高速缓存中的存储位置相对应的标签(例如,图1的标签120中的一个),并引导该示例存储器接口引擎204索回图像数据并将其存储在高速缓存中的该存储位置处。
[0091] 在图2的所示示例中,取回引擎200包括存储器接口引擎204,用于基于标签的莫顿顺序来访问分离的RAM,这以更有效的方式促进了并行存储器事务并且减少了与块访问机制相关联的功耗。在图2的所示示例中,存储器接口引擎204实现用于从存储器索回图像块并将所索回的图像块存储在高速缓冲存储中的单元。存储器接口引擎204可以对应于图1的块取回器138。例如,存储器接口引擎204可以实现一个或多个功能,多达至少结合图1的块取回器138所描述的全部功能。
[0092] 在一些示例中,存储器接口引擎204获得与由预取核索回器202处理的请求相关联的图像数据,并将图像数据存储在高速缓存(例如,图1的高速缓冲存储146)中。在这样的示例中,存储器接口引擎204警告预取核索回器202和/或核索回器206:图像数据已经被存储在高速缓存中。例如,存储器接口引擎204更新由预取核索回器202生成的标签120中的一个,以指示与标签120相关联的图像数据被存储在高速缓存中。在其他示例中,存储器接口引擎204更新和/或以其他方式警告核索回器206:要由核索回器206索回的图像数据在高速缓存中可用。
[0093] 在图2的所示示例中,取回引擎200包括核索回器206,用于接收用于获得与包括在输入图像中的一个或多个像素的像素坐标相关联的图像数据的请求。在图2的所示示例中,核索回器206实现用于基于像素坐标生成块标签,基于所生成的块标签搜索标签存储,和/或基于标签存储的搜索来索回图像块的单元。核索回器206可以对应于图1的块数据读器150。例如,核索回器206可以实现实现一个或多个功能,多达至少结合图1的块数据读器150所描述的全部功能。
[0094] 在一些示例中,核索回器206确定图像数据是否在高速缓存中。例如,核索回器206可以将像素坐标映射到图1的标签120中的一个。响应于核索回器206确定图像数据不在高速缓存中,核索回器206等待直到图像数据被存储在高速缓存中。响应于核索回器206确定图像数据在高速缓存中,核索回器206从高速缓存索回图像数据。
[0095] 示例预取核索回器单元,示例存储器接口引擎单元和/或图1的所示示例的核索回器单元包括是由在硬件处理器上执行的软件实现的。另外地或替代地,示例预取核索回器单元、示例存储器接口引擎单元和/或核索回器单元可以替代地由被构造为执行逻辑操作以实现期望功能的逻辑电路来实现,例如ASIC、FPGA等和/或这种电路与软件和/或固件的组合。
[0096] 尽管在图2中图示了实现取回引擎200的示例方式,但是图2所示的元件、过程和/或设备中的一个或多个可以以任何其他方式来组合、划分、重新布置、省略、消除和/或实施。此外,示例预取核索回器202、示例存储器接口引擎204、示例核索回器206和/或更一般地,图2的示例取回引擎200可以通过硬件、软件、固件和/或硬件、软件和/或固件的任何组合来实现。因此,例如,示例预取核索回器202、示例存储器接口引擎204、示例核索回器206和/或更一般而言,示例取回引擎200中的任何一个都可以由一个或多个模拟或数字电路、逻辑电路、可编程处理器、可编程控制器、图形处理单元(GPU)、数字信号处理器(DSP)、专用集成电路(ASIC)、可编程逻辑器件(PLD)和/或现场可编程逻辑器件(FPLD)来实现。当阅读该专利的任何装置或系统权利要求以涵盖纯软件和/或固件实现时,示例预取核索回器202、示例存储器接口引擎204和/或示例核索回器206中的至少一个是特此明确定义/包括非暂时性计算机可读存储器设备或存储盘,例如存储器、数字多功能盘(DVD)、光盘(CD)、蓝光光盘等,包括软件和/或固件。更进一步,图2的示例取回引擎200除了或代替图1中所示的那些包括一个或多个元件、过程和/或设备和/或可以包括所图示的元件、过程和设备中的任何一个或全部中的多于一个。如本文所使用的,短语“在通信中”,包括其变体,包括通过一个或多个中间组件的直接通信和/或间接通信,并且不需要直接的物理(例如,有线)通信和/或恒定的通信,而是此外,它还包括定期间隔、计划间隔、非周期性间隔和/或一次性事件的选择性通信。
[0097] 图3描绘了基于莫顿顺序映射到图1的高速缓冲存储146的示例输入图像300。输入图像300可以对应于相机图像、视频帧等。输入图像300被组织成示例集合302。集合302是示例块(例如,像素块)304的二维阵列。图3的所示示例,每个块304代表示例像素306的二维阵列。示例块304是图像块(例如,图像数据块)。在图3中,示例输入图像300包括2048个像素(例如2048个像素=64个像素宽×32个像素高)。替代地,输入图像300可以具有少于或多于2048个像素。
[0098] 在图3的所示示例中,像素306的坐标分别对应于相对应的硬件加速器(例如,图1的硬件加速器114)的像素核的左上角。例如,每个像素306具有代表输入图像300中的像素306的位置的X坐标和Y坐标。在图3中,像素306可以具有在0到64的范围内的X图像坐标,其对应于64像素的输入图像300的宽度。在图3中,X图像坐标由2字节或16位表示,以给出最大图像宽度为65536位。在图3中,像素306可以具有在0到32的范围内的Y图像坐标,其对应于
32像素的输入图像300的高度。在图3中,Y图像坐标由2字节或16位表示,以给出最大图像高度为65536位。在图3中,图像坐标的示例原点(例如,图像坐标(X,Y)为(0,0)的位置)308在输入图像300的左上角。
[0099] 在图3的所示示例中,基于2×2块组织,将输入图像300的像素306布置在图像块304中。例如,包括在图像块0、1、2和3中的像素306中的一个布置在第一2x2块中,包括在图像块4、5、6和7中的像素306中的一个布置在第二2x2块中。例如,图像坐标为X=8且Y=8的第一像素310位于图像块0中。在图3中,第一像素310可以被映射到示例像素核312,其包括图像块0以及相对于图像块0的图像块1、2和3。
[0100] 在图3中,集合302是8×4阵列,其具有八个图像块宽和四个图像块高。例如,第一块314包括八个示例行316和八个示例列318,其中行316和列318中的每一个包括八个像素306。每个示例像素306具有两个字节或十六位的存储器大小,导致第一块314具有128字节或1024位的存储器大小(例如128字节=(8像素/行×8行)×(2字节/像素))。可替代地,每个像素306可以具有任何其他存储器大小,例如一个字节、四个字节等。
[0101] 在图3的所示示例中,输入图像300被组织成32个图像块304,其中每个图像块304是8×8像素块(例如,包括每个八个像素306的八个行316和八个列318的图像块)导致输入图像300在存储在存储器中时具有4千字节(kB)或4,096位(例如4kB=(8个图像块x 4个图像块)x(64像素/图像块)x(2字节/像素))的大小。
[0102] 在图3的示出的示例中,图1的PFBC 100和/或图2的取回引擎200基于包括在输入图像300中的像素306的位置来生成像素索引、块位置索引和块标签。例如,图1中的标签120可以包括像素索引、块位置索引和块标签。基于{Y[15:5],X[15:6]}生成示例块标签,其中Y坐标的前11位(例如11位=(15-5)+1)和X坐标的前十位(例如10位=(15-6)+1)用于生成块标签。例如,图1的标签映射器124可以使用Y坐标的位的第一部分和X坐标的位的第二部分(其中第一部分和第二部分可以不同)来生成唯一标识符并将其分配给一组像素坐标(例如,X和Y坐标对)。在这样的示例中,标签映射器124可以确定唯一标识符是否包括在标签存储122中。可替代地,可以基于不同数量的X坐标位和/或不同数量的Y坐标位来生成块标签。
[0103] 在示例操作中,图1的标签映射器124可以获得像素306中的一个在坐标Y=257(十进制)和X=1020(十进制)处的位置。标签映射器124可以将Y坐标和X坐标转换为二进制,其中Y=b0000_0001_0000_0001和X=b0000_0011_1111_1100。示例标签映射器124采用Y坐标的高位十一位来产生第一二进制值b00000001000,并采用X坐标的高十位来产生第二二进制值b0000001111。示例标签映射器124将第一和第二二进制值串接以生成第三二进制值b000000010000000001111或十六进制值h200F。示例标签映射器124将块标签h200F存储在存储器中(例如,图1的标签存储122)。示例标签映射器124和/或示例读标签映射器152使用块标签h200F来确定在高速缓存中是否存在包括坐标Y=257和X=1020的像素的块304中的一个。
[0104] 在图3的所示示例中,基于{X[5],Y[4],X[4],Y[3],X[3]}基于莫顿顺序生成块位置索引,其中将X坐标的第五位(X[5])、Y坐标的第四位(Y[4])、X坐标的第四位(X[4])、Y坐标的第三位(Y[3]),以及X坐标的第三位(X[3])串接以构造块位置索引。替代地,可以使用X和/或Y坐标的任何其他数量的位和/或位位置来构造块位置索引。在上面的示例操作中,Y坐标257(十进制)的二进制值是b0000_0001_0000_0001,而X坐标1020的二进制值(十进制)是b0000_0011_1111_1100,图1的标签映射器124生成相对应的块位置索引为b10101。块位置索引识别包括感兴趣的像素坐标的集合302(例如,8×4集合)中的块304中的一个。例如,b10101的块位置索引对应于包括在坐标X=1020(十进制)和Y=257(十进制)的像素306的块304中的一个。
[0105] 在图3的所示示例中,基于{Y[2:0],X[2:0]}生成像素索引,其中Y坐标的底部三位(例如,3位=(2-0)+1)和X坐标的底部三个位(例如,3个位=(2-0)+1)被串接以构造像素索引。替代地,可以使用X和/或Y坐标的任何其他数量的位和/或位位置来构造像素索引。在上面的示例操作中,Y坐标257(十进制)的二进制值为b0000_0001_0000_0001,X坐标1020(十进制)的二进制值为b0000_0011_1111_1100,标签映射器124可以将对应的像素索引生成为b001100。
[0106] 在图3的所示示例中,图1的PFBC 100和/或图2的取回引擎200基于像素坐标生成RAM选择索引和RAM地址。例如,标签映射器124可以使用块位置索引来构造RAM选择索引(RAM SELECT)和RAM地址。示例RAM选择索引基于索引[1:0],其中块位置索引的后两位用于选择图1的块数据存储器148中的一个。替代地,可以使用块位置索引的任何其他数量的位和/或位位置来构造像素索引。在上面生成块位置索引b10101的示例操作中,相对应的RAM选择索引为b01。示例RAM选择索引b01对应于RAM[1]的选择,其中b00对应于RAM[0]的选择,b10对应于RAM[2]的选择,而b11对应于RAM[3]的选择。
[0107] 在图3的所示示例中,PFBC 100和/或取回引擎200基于块位置索引和索引的可用性以第一示例通道(通道0)320或第二示例通道(通道1)322生成RAM地址。示例RAM地址基于索引[5:2],其中(1)RAM地址的最高有效位对应于图3的通道320、322中的一个,而(2)RAM地址的最低有效位是块位置索引的高三位。可替代地,可以使用块位置索引的任何其他数量的位和/或位位置来构造RAM地址。在图3中,RAM地址的最高有效位是基于块位置索引的前三位所描述的索引的可用性来确定的。
[0108] 在以上生成b10101的块位置索引的示例操作中,标签映射器148使用块位置索引的后两位(例如,b01)来选择标签存储器148的RAM[1]和块位置索引的前三位(例如b101)以选择对应于b0101的RAM[1]的索引5(十进制)或对应于b1010的RAM[1]的索引13(十进制)。例如,标签映射器148确定RAM[1]的第一通道320的索引5是否可用。如果可用,则标签映射器148将RAM地址生成为b0101。如果不可用,则标签映射器148确定第二路径322的索引5(例如,RAM[1]的索引13)是否可用。如果可用,则标签映射器148将RAM地址生成为b1101。如果不可用,则标签映射器148识别将被逐出和/或以其他方式从RAM[1]移除的第一通道320的索引5或第二通道322的索引5中的图像块数据。例如,响应于从第一通道320的索引5中删除图像块数据,标签映射器148生成RAM地址为b0101,以将与257(十进制)的Y坐标和1020(十进制)的X坐标相关联的图像数据存储在RAM[1]的第一路径320的索引5中。
[0109] 在图3的所示示例中,PFBC 100和/或取回引擎200基于莫顿顺序将集合302的块304中的一个或多个映射到图1的高速缓冲存储146。例如,块0、1、2和3在集合302中彼此相邻,但是在不同的块存储器148中。例如,块0中的第一多个像素邻近块1中的第二多个像素、块2中的第三多个像素和块3中的第四多个像素。通过将每个图像块0、1、2和3存储在不同的块数据存储器148中,PFBC 100和/或取回中引擎200可以并行地索回它们中的每一个,以更有效的方式改善和/或促进并行存储器事务并减少与块访问机制相关联的功耗。
[0110] 图4描绘了图3的示例输入图像300。映射到图1的高速缓冲存储146的图3的示例输入图像300。示例输入图像300被组织成示例集合402。图4的示例集合402是图3的图像块304的二维阵列。在图4中,二维阵列是8×4阵列,其具有八个图像块宽和四个图像块高,其中每个图像块304包括64个像素。
[0111] 在图4的所示示例中,基于列优先组织来布置图像块304。例如,图像块0、1、2和3布置在第一1x4块中,图像块4、5、6和7布置在第二1x4块中,等等。例如,具有图像坐标X=4和Y=9的第一像素404驻留在图像块1中。示例第一像素404可以基于列优先组织映射到包括图像块1以及相对于图像块1的图像块0、2和3的示例像素核406。
[0112] 在图4的所示示例中,图1的PFBC 100和/或图2的取回引擎200基于列的优先顺序将集合402映射到图1的高速缓冲存储146。例如,图像块0、1、2和3在集合302中彼此相邻,但是在不同的块存储器148中。通过将每个图像块0、1、2和3存储在不同的块数据存储器148中,PFBC 100和/或取回引擎200可以并行索回每个图像块0、1、2和3,以改善在诸如图像处理、计算机视觉等计算任务中的像素数据传输。替代地,PFBC 100和/或取回引擎200可以基于行优先顺序将输入图像300映射到高速缓冲存储146。
[0113] 图5描绘了由图1的PFBC 100和/或取回引擎200使用以从图1的高速缓冲存储146读数据的示例块组织的示意示出。在图5的示出示例中,第一示例块组织502是2×2块组织。第一示例块组织502对应于PFBC 100和/或取回引擎200,如上面结合图3所述,基于莫顿顺序将图像块映射到高速缓冲存储146。第二示例块组织504是1×4块组织。第二示例块组织
504对应于PFBC 100和/或取回引擎200,如上面结合图4所述,基于列的优先顺序将图像块映射到高速缓冲存储146。第三示例块组织506对应于PFBC 100和/或取回引擎200,基于行优先顺序将图像块映射到高速缓冲存储146。替代地,可以使用其他块组织(例如,4×4块组织、2×8块组织、8×2块组织等)。例如,可以使用基于2x2、1x4或4x1块组织的任何其他块组织。
[0114] 在一些示例中,图1的请求接口106和/或图2的核索回器206接收像素坐标,并且指示读标签映射器152和/或预取核索回器202将像素坐标映射到包括在图1的标签存储122中的一个或多个标签120。例如,读标签映射器152可基于相对于图像块0相对于图像块1、2和3的位置相关性,基于图5的块组织502、504、506中的一个将像素坐标映射到图像块0,然后映射到图像块1、2和3。
[0115] 图6描绘了示例表600,其描述了与图1的预取接口104相关联的示例信号。在表600中,预取接口104可以接收示例请求信号602、示例像素X坐标信号604和示例像素Y坐标信号606。例如,预取接口104可以从图1的硬件加速器114接收请求信号602、像素X坐标信号604和/或像素Y坐标信号606。在图6的示例表600中,示例许可信号608可以由预取接口104生成。替代地,预取接口104可以接收和/或生成比表600中所描绘的更少或更多的信号。
[0116] 图6的请求信号602是具有输入方向的4位信号(例如,预取接口104从硬件加速器114接收请求信号602)。请求信号602表示块请求向量,其中位0对应于块0,位1对应于块1,等等。在图6中,请求信号602为高电平有效。在图6的请求信号602中,每个请求有X个位,指示针对所请求的块递增包括在图1的标签120中的计数条目多少。图6的像素X坐标信号604(COORDS.X)是具有输入方向的16位信号,其表示所请求像素的X坐标。图6的像素Y坐标信号
606是具有输入方向的16位信号,其表示所请求像素的Y坐标。图6的许可信号608是具有输出方向的1位信号(例如,预取接口104生成授权信号608)。在图6中,当图1的预取器112已接受要处理的请求的像素坐标时,授权信号608被设置为高电平有效。
[0117] 图7描绘了对应于操作中的图1的预取接口104的示例时序图700。在第一示例时间(T1)702,图6的请求信号(REQ)602被断言为高,指示正在请求全整数像素坐标(例如,硬件加速器114指示预取接口104索回与所请求的像素坐标相关联的图像块)。在第一示例时间702,图6的许可信号(GNT)608被断言为高,指示图1的预取器112可以接受请求。在第二示例时间(T2)704,在示例时钟信号(CLK)706的三个上升沿之后,预取接口104正在接收与像素X坐标信号604和像素Y坐标信号606相关联的数据。例如,在第二时间704,预取接口104正在接收与将由图1的预取器112处理的像素坐标相关联的数据。
[0118] 在图7的时序图700中,在第三示例时间(T3)708,许可信号608被断言为低,指示应当保持当前请求。如时序图700所描绘的,预取接口104被流水线化,使得默认情况下,许可信号608最初被断言为高(例如,许可信号608在第一时间702为高),并且在预取器112处理该请求的同时,在初始请求之后,对于时钟信号706的一个或多个周期被断言为低。
[0119] 图8描绘了示例表800,其描述了与图1的请求接口106相关联的示例信号。在图8的示例表800中,示例请求信号802、示例像素X坐标信号804和示例像素Y坐标信号806可以由请求接口106接收。例如,请求接口106可以从图1的硬件加速器114接收请求信号802、像素X坐标信号804和/或像素Y坐标信号806包括像素X坐标信号804。在图8的示例表800中,示例许可信号808、第一示例数据块信号810、第二示例数据块信号812、第三示例数据块信号814、第四示例数据块信号816和示例有效信号818可以由请求接口106生成。替代地,请求接口106可以接收和/或生成比表800中所描绘的更少或更多的信号。
[0120] 图8的请求信号802是具有输入方向的4位信号(例如,请求接口106接收请求信号802)。请求信号802表示块请求向量,其中位0对应于块0,位1对应于块1,等等。在图8中,请求信号802为高电平有效。在图8的请求信号802中,每个请求有两个位,它们指示将包括在图1的标签120中的针对所请求的块的计数条目递减多少。图8的像素X坐标信号804(COORDS.X)是具有输入方向的16位信号,其表示所请求像素的X坐标。图8的像素Y坐标信号
806(COORDS.Y)是具有输入方向的16位信号,其表示所请求像素的Y坐标。
[0121] 在图8的表800中,许可信号808是具有输出方向的1位信号(例如,请求接口106生成许可信号808)。在图8中,当图1的块数据读器150已接受要处理的请求的像素坐标时,许可信号808被设置为高电平有效。在图8中,数据块信号810、812、814、816是具有输出方向的256位信号。第一数据块信号810对应于包括所请求的像素的块0。例如,块0可以对应于图5的第一块组织502、第二块组织504或第三块组织506的块0。类似地,第二数据块信号812对应于块1,第三数据块信号814对应于块2,而第四数据块信号816对应于块3。例如,块1-3可以对应于图5的第一块组织502、第二块组织504或第三块组织506的块103。在图8中,有效信号818是具有输出方向的1位信号,其中,当已确定针对先前许可的请求的数据有效时,有效信号818是高电平有效的。
[0122] 图9描绘了对应于操作中的图1的请求接口106的示例时序图900。在第一示例时间(T1)902,图8的请求信号(REQ)802被断言为高电平,指示正在请求完整的整数像素坐标。在第一时间902,图8的许可信号(GNT)808被断言为高电平,指示图1的块数据读器15可以接受请求。
[0123] 在第二示例时间(T2)904,在示例时钟信号(CLK)906的三个上升沿之后,请求接口106正在接收与像素X坐标信号804和像素Y坐标相关联的数据。例如,在第二时间904,请求接口106正在接收与将由图1的块数据读器150处理的像素坐标相关联的数据。在第二时间
904,请求接口106将由像素X坐标信号804和像素Y坐标信号806表示的像素坐标解释为被映射到块0和相对于块0的块1-3,如图5的块组织502、504、506所描绘的。
[0124] 在图9的时序图900中,在第三示例时间(T3)908,许可信号808被断言为低,指示应当保持当前请求。如时序图900所描绘的,请求接口106被流水线化,使得默认情况下,许可信号808最初被断言为高(例如,在第一时间902和/或当请求接口106空闲时,许可信号808为高),并且在块数据读器150正在处理请求时,在初始请求之后,许可信号808针对时钟信号906的一个或多个周期被断言为低。
[0125] 在第三时间908,块数据读器150可以将与像素X坐标信号804和像素Y坐标信号806相关联的像素坐标转换为图1的标签120中的一个。块数据读器150读图1的标签存储器128,以确定是否高速缓存了请求的块。响应于确定所请求的块被高速缓存,块数据读器150确定所请求的块被存储在哪个块数据存储器148中。响应于确定未高速缓存一个或多个所请求的块,块数据读器150等待和/或以其他方式停顿,直到所请求的块处理并由图1的预取器112存储在高速缓存中。响应于块数据读器150等待所请求的块被存储在高速缓存中,许可信号808被断言为低,直到块数据读器150可用于从请求接口106接收请求。
[0126] 在一些示例中,命中的最小延迟是三个时钟周期。例如,在第三时间908,当在像素X坐标信号804和像素Y坐标信号806上接收到第一坐标时,块数据读器150在标签存储122中发起标签存储器查找。如果请求的块被高速缓存,然后在随后的周期中,在第四示例时间(T4)910,块数据读器150发起读块数据存储器148。在随后的周期中,在第五示例时间(T5)912,因此,块数据读器150使高速缓存的数据在数据接口108上可用。例如,块数据读器150可以指示高速缓冲存储146将高速缓存的数据复用到数据接口108的输出寄存器上。
[0127] 在一些示例中,所请求的块数据被呈现在寄存器上,使得读数据接口108的逻辑(例如,硬件、计算机可读指令等)可以直接在逻辑的数据路径上使用所请求的块数据或者将请求的块数据传递到进一步的复用逻辑,而不会出现时序困难或问题。在一些示例中,数据接口108上的被请求的块数据被从在请求接口106上接收的一个请求保持到下一个请求,从而使得例如如果处理下一个像素坐标(或多个)所需的所有数据先前在较早的请求期间已达到,则不需要进一步读(从块数据存储器148)。
[0128] 图10描绘了示例标签1000,该示例标签1000基于莫顿顺序集组织和2字节(2B)的像素大小将与包括在输入图像中的像素相关联的像素坐标映射到高速缓冲存储器中的高速缓存数据。例如,图10的标签1000可以基于莫顿顺序集组织,其中可以在请求接口106上读2×2的块阵列,其中每个块是8×8像素,并且每个像素是2字节的存储器大小。
[0129] 图10的标签1000可以包括示例块标签1002、示例组索引1004和示例像素索引1006。图10的块标签1002是基于所请求像素的Y坐标的11个最高有效位和X坐标的10个最高有效位的21位存储器大小。图10的设置索引1004是5位存储器大小,并且基于X坐标的第五位、Y坐标和X坐标的第四位以及Y坐标和X坐标的第三位的串接。图10的像素索引1006包括是6位存储器大小,并且基于Y坐标和X坐标的三个最低有效位。
[0130] 图11描绘了示例标签1100,该示例标签1100基于莫顿顺序集组织和1字节(1B)的像素大小将与包括在输入图像中的像素相关联的像素坐标映射到高速缓冲存储器中的高速缓存数据。例如,图11的标签1100可以基于莫顿顺序集组织,其中可以在请求接口106上读2×2的块阵列,其中每个块为16×8像素,并且每个像素为1字节的存储器大小。
[0131] 图11的标签1100包括示例块标签1102、示例组索引1104和示例像素索引1106。图11的块标签1102基于请求像素的Y坐标的11个最高有效位和X坐标的9个最高有效位是20位的存储器大小。图11的设置索引1104是5位存储器大小,并且基于X坐标的第六位、Y坐标的第四位、X坐标的第五位以及Y坐标的第三位和X坐标的第四位的串接。图11的像素索引1106包括是7位存储器大小,并且基于Y坐标的三个最低有效位和X坐标的四个最低有效位。
[0132] 图12描绘了示例标签1200,其基于列优先顺序集组织和2字节(2B)的像素大小将与包括在输入图像中的像素相关联的像素坐标映射到高速缓冲存储器中的高速缓存数据。例如,图12的标签1200可以基于列优先顺序集组织,其中可以在请求接口106上读1×4的块阵列,其中每个块是8×8像素,并且每个像素是2字节的存储器大小。
[0133] 图12的标签1200包括示例块标签1202、示例组索引1204和示例像素索引1206。图12的块标签1202基于请求像素的Y坐标的11个最高有效位和X坐标的10个最高有效位是21位的存储器大小。图12的设置索引1204是5位存储器大小,并且基于X坐标的第五位、第四位、第三位,以及Y坐标的第四位以及第三位的串接。图12的像素索引1206包括是6位存储器大小,并且基于Y坐标和X坐标的三个最低有效位。
[0134] 图13描绘了示例标签1300,其基于列优先顺序集组织和1字节(1B)的像素大小将与包括在输入图像中的像素相关联的像素坐标映射到高速缓冲存储器中的高速缓存数据。例如,图13的标签1300可以基于列优先顺序集组织,其中可以在请求接口106上读1×4的块阵列,其中每个块是16×8像素,并且每个像素是1字节的存储器大小。
[0135] 图13的标签1300包括示例块标签1302、示例组索引1304和示例像素索引1306。图13的块标签1302基于请求像素的Y坐标的11个最高有效位和X坐标的9个最高有效位是20位的存储器大小。图13的设置索引1304是5位存储器大小,并且基于X坐标的第六位、第五位、第四位,以及Y坐标的第四位以及第三位的串接。图13的像素索引1306包括是7位存储器大小,并且基于Y坐标的三个最低有效位和X坐标的四个最低有效位。
[0136] 图14描绘了用于4通道高速缓存的示例标签存储器条目1400。例如,标签存储器条目1400可以对应于图1的标签存储器条目120。图14的标签存储器条目1400包括第一示例通道索引(通道0)1402、第二示例通道索引(通道1)1404、第三示例通道索引(通道2)1406和第四示例通道索引(通道3)1408。每个通道索引1402、1404、1406、1408包括示例标签字段1410、示例计数字段1412、示例待决字段(P)1414和示例验证字段(V)1416。
[0137] 在图14的所示示例中,标签字段1410是以相对应通道高速缓存的图像块的标签。当像素存储器大小为两个字节时,图14的标签字段1410为19位;而当像素存储器大小为一个字节时,图14的标签字段1410为20位。计数字段1412是7位字段,其是对块的未完成的取回请求的数量的计数。例如,每当在图1的预取接口104上请求块时,计数字段1412递增。如果计数字段1412为最大值(例如,对于7位字段为b1111111),则预取接口104停止直到计数字段1412递减。在其他示例中,每当在请求接口106上满足针对图像块的请求时,计数字段
1412就递减。
[0138] 待决字段1414是1位字段,其用信号通知与包括在标签字段1410中的标签相对应的图像块当前正在被提取(例如,待决),并将在随后的时钟周期中以高速缓冲存储器的对应通道被高速缓存。验证字段1416是1位字段,其用信号通知与标签字段1410中的标签相对应的图像块以数据块存储器148中的一个的相对应通道被高速缓存。在一些示例中,包括在标签存储122的标签120中的所有验证字段1416可以被清除以使高速缓存无效和/或以其他方式刷新高速缓存。替代地,标签存储器条目1400可以具有比图14中描绘的字段更少或更多的字段。替代地,标签字段1410、计数字段1412、待决字段1414和/或验证字段1416可以具有任何其他数量的位。替代地,可以使用单独的寄存器阵列来实现标签存储器条目1400。
[0139] 图15描绘了示例SBR 1500,用于从主存储器110索回块。在一些示例中,图2的预取器112和/或预取核索回器202生成SBR 1500以索回与当前不在高速缓存中的所请求像素坐标相关联的图像块数据。在一些示例中,图2的预取器112和/或预取核索回器202生成SBR 1500以推测性地索回与当前不在高速缓存中的非请求像素坐标相关联的图像块数据。
[0140] 图15的SBR 1500包括示例坐标字段(BLK_COORD)1502、示例块数量字段1504和示例通道字段1506。图15的坐标字段1502对应于要从主存储器110取回的第一块的像素坐标。图15的块数量字段1504对应于要要取回到第一块左侧的其他块的总数。可替代地,块数量字段1504可以对应于要在第一块的上方、下方或右边取回的附加块的总数。块数量字段
1504是3位存储器大小,以考虑选择少一的块数量(例如,块数量=N-1)。可替代地,块数量字段1504可以用于表示要取回到第一块的右边的附加块的总数。在其中SBR 1500用于搜索第一块的右侧的示例中,由图1的标签映射器124在图1的高速缓冲存储146中高速缓存的找到的最后块成为请求的第一块,使得跨越多个块的存储器访问始终递增,因此可组成一个突发。
[0141] 在图15中,通道字段1506表示包括SBR 1500所请求的每个块将被高速缓存在高速缓冲存储146的高速缓冲存储器148中的通道的列表。在操作中,预取器112和/或预取核索回器202确定基于图1的标签存储122的搜索来生成一个或多个SBR 1500。例如,如果图1的标签映射器124确定请求的像素坐标所需的所有块均被命中,则SBR构建器126不生成SBR1500。例如,当由标签映射器124基于像素坐标生成的每个块标签图1的标签存储器128中找到并且相对应条目130的待决字段135或验证字段被设置时,SBR构建器126可以不生成SBR 1500。在其中一个或多个块未命中(例如,块标签不在标签存储器128中并且图像块不在高速缓冲存储146中)的其他示例中,SBR构建器126生成SBR 1500并推送SBR 1500进入图1的SBR FIFO 136以由图1的块取回器138进行处理。
[0142] 在某些示例中,SBR构建器126生成一个或多个SBR 1500,而不发出任何推测性请求。例如,SBR构建器126可以针对要索回并存储在高速缓冲存储146中的每个块构造SBR 1500中的一个。在这样的示例中,对于每个块,SBR构建器126通过将感兴趣的图像块的像素坐标包括在坐标字段1502中,将块数量字段1504设置为零,以及将通道字段(W0)1506中的第一个设置为图像块将被高速缓存在高速缓冲存储器148中的一个中的通道的编号,来构造图15的SBR 1500中的一个。
[0143] 在一些示例中,SBR构建器126生成SBR 1500中的一个或多个以做出推测请求。在一些示例中,当进行推测请求时,SBR构建器126生成最多两个SBR 1500,而在每个SBR中请求的最小数量为两个块。在这样的示例中,SBR 1500中的第一个包括针对块0和块1的信息。例如,SBR构建器126可以将针对块0的坐标分配给坐标字段1502,将块数量字段1504设置为对应于两个块中的一个以少取回一个,并将通道字段中的第一和第二字段(W0、W1)设置为将在高速缓冲存储器148中高速缓存块0和块1的通道的编号。SBR 1500的第二个可以包括针对块2和块3的信息。例如,SBR构建器126可以将针对块2的坐标分配给坐标字段1502、将块数量字段1504设置为与两个块相对应的一个,以少取回一个,以及将通道字段中的第一和第二字段(W0,W1)设置为将块2和块3高速缓存在高速缓冲存储器148中的方式的编号。
[0144] 图16示出了包括图1的PFBC 100的示例翘曲滤波器1600的示例实现方式的框图。图16的示例翘曲滤波器1600使用双三次采样对图像执行几何运算。基本上,翘曲滤波器
1600获得输入图像,并使用网格对其进行“翘曲”以产生输出图像。在图16中,翘曲滤波器
1600是存储器到存储器块,并且包括三个示例存储器接口1602、1604、1606。图16的第一存储器接口1602是用于网格存储器的读存储器接口或网格读接口。图16的第二存储器接口
1604是用于像素存储器的读存储器接口或块高速缓存像素读接口。图16的第三存储器接口
1606是用于像素存储器的写入存储器接口(例如128位存储器回写接口)或像素写入接口。
[0145] 图17是由图16的翘曲滤波器1600处理以消除失真的示例鱼眼变换1700。翘曲滤波器1600使用示例网格1704从示例输入图像1702消除鱼眼失真,以生成示例输出图像1706。翘曲动作可以被认为是基于每个像素修改输出图像的动作。示例“网格”是一组坐标,这些坐标将输出像素映射到输入图像中的位置。示例网格可以是稀疏网格或预扩展网格。在稀疏网格的情况下–图16的翘曲滤波器1600将在内部扩展网格以针对输出图像中的每个像素产生扩展的网格点。对于预扩展的网格,该网格已经完全扩展。扩展的网格点基本上是输入图像中的(X,Y)位置。
[0146] 示例网格被用于定义变换。网格中的每个点都包含采样坐标的(X,Y)对。在运行时使用双线性重采样对网格进行上采样,从而以输出图像分辨率产生每个像素的X和Y采样坐标。然后,使用双三次采样在这些坐标上采样输入图像,以产生输出图像像素。双三次翘曲滤波器的示例应用包括鱼眼失真校正以及枕形和桶形失真校正。
[0147] 图18是示例扩展网格点的示意示出。在图18的示例中,左侧的每个大点是示例稀疏网格点1802。在图18的示出示例中,存在4个稀疏的网格点1802,其被扩展到右侧的88个示例网格点1804(显示为较小的点)。右边的每个较小的点都可以视为输出图像中的像素点,并且对输入图像中的位置具有(X,Y)向量。右侧的每个较小的点都可以映射到输入图像中的任意位置。
[0148] 当图16的示例翘曲滤波器1600计算特定的输出像素时,翘曲滤波器1600获得该像素和扩展的网格点所指向的输入帧内所需的周围核像素。然后,翘曲滤波器1600对像素核执行双三次或双线性滤波以产生实际的输出像素。翘曲滤波器1600继续通过定义的输出图像进行,定义的输出图像通过对由扩展的网格指向的核进行滤波来产生输出像素。以这种方式,可以从输入帧和网格生成整个输出帧。
[0149] 图19示出了由图16的翘曲滤波器1600分成相等的瓦片1902的示例图像1900。图19的图像1900包括32像素×16行,其被分成4个相等的瓦片1902。图16翘曲滤波器1600一次在一个处理瓦片1902上操作。瓦片1902与输出图像有关,并且可以被认为是输出图像内的瓦片。换句话说,翘曲滤波器1600被配置为产生由多个瓦片(例如,瓦片1902)组成的输出图像。当前的处理瓦片将在移至下一个处理瓦片之前完成。瓦片尺寸是主机可配置的,并且高度和宽度可以是以下中的一个:8、16、32、64、128。在某些示例中,从硬件角度来看,瓦片高度和瓦片宽度之间没有依赖性。
[0150] 现在转回到图16,经由主机可访问寄存器来控制和/或配置存储器接口1602、1604、1606。例如,翘曲滤波器1600可以由主机可配置寄存器以某种方式驱动,例如,以保持可配置性,但是减少对中断和主机干预的要求。在一些示例中,在主机指示翘曲滤波器1600开始操作之前进行完整配置。例如,主机必须确保在启动翘曲滤波器1600之前,输入图片缓冲区中有足够数量的输入线,以服务于输入网格中的各种网格点(预扩展或稀疏)。指向输入图片缓冲区外部的网格点可能导致最近的边缘像素与填充一起使用,以构造完整的4x4双三次核。
[0151] 在一些示例中,主机配置翘曲滤波器1600在生成中断之前操作的瓦片大小和瓦片数量。通常,运行中的瓦片数量将是整个瓦片行,但不一定如此。主机还可以指示输出图像中瓦片的开始位置。开始位置可以采用相对于假定为位置(0,0)的图像中左上像素位置偏移(X[15:0],Y[15:0])的形式。
[0152] 在一些示例中,循环缓冲区被用作用于翘曲滤波器1600的输入图像缓冲区。在这样的示例中,主机可以对存储器偏移和循环缓冲区中的行数进行编程。如上所述,如果网格点指向循环缓冲区之外,则可以不定义翘曲滤波器1600的行为。硬件可以跟踪循环缓冲区内的位置,并且可以从绝对存储器地址请求。
[0153] 在图16的所示示例中,翘曲滤波器1600包括示例网格扩展器1608,用于采取稀疏网格并扩展稀疏网格以映射到输出图像上,如上文结合图18所述。本文公开的示例网格扩展包括具有FP32的稀疏网格点或混合点16位混合点(可编程小数点位置)的输入数据格式,其中该值相对于(0,0)原点,具有1/粒度,并且20位小数,U(0,20)。此外,示例输出数据格式具有FP32的扩展的网格点。
[0154] 图16的示例网格扩展器1608访问主存储器以获得稀疏网格点,使得可以将其扩展用于下游逻辑。网格点通常以PF32格式保存,但可以支持其他格式,例如16位混合点。对于以除FP32以外的任何其他格式存储的网格点,网格扩展器1608可以在任何插值之前将这些格式转换为FP32。在图16中,输入网格点是绝对位置(例如,输入网格点不相对于当前输出坐标位置)。
[0155] 示例网格扩展器1608中的插值是双线性的。示例网格扩展器1608的粒度被编程为20位小数1/粒度,以避免硬件中的昂贵除法器。可以在固定点U(16,20)中执行Alpha和Beta分量的计算(例如,双线性滤波器的小数位),从而使Alpha和Beta都表示为20位小数。在图
16中,Alpha和Beta从20位小数到FP32的转换发生在网格点的双线性插值之前。网格点双线性插值在FP32中发生。插值的顺序是垂直,然后是水平。将网格点封装为存储字将取决于网格点的格式。网格点格式的两个示例选项是FP32或混合点16位。这些示例选项如下所述。
[0156] 对于与FP32有关的示例,每个字都包含两个稀疏网格点,每个网格点由FP32 X和FP32 Y分量组成。存储字的高32位保持X分量,而低32位包含Y分量。在图20中示出了FP32格式2000的网格点的示例存储器组织。
[0157] 例如与具有可编程小数点位置的16位固定点有关,每个返回的存储字都包含4个稀疏网格点,这些稀疏网格点代表位置A和直接在右侧的位置–位置A+1,位置A+2和位置A+3的网格点。低32位将包含位置A的X和Y分量,接下来的32位将包含位置A+1的X和Y分量,依此类推,直到位置A+3。在图21中示出了16位格式2100的网格点的示例存储器组织。对于不具有宽度为4的倍数的网格,将不定义未使用位置中包含的值。
[0158] 示例预扩展网格模式是网格扩展的替代路径。在翘曲内采用一条路径或另一条路径。通过将WARP_MESH寄存器中的PREEXPANDED_MODE位设置为1,可以选择通过网格扩展来选择预扩展模式。预扩展网格模式包括输入数据格式,作为混合点16位的扩展网格,相对于输出像素位置的可编程小数位,以及输出数据格式,FP32的扩展网格点,绝对值。
[0159] 在预扩展网格模式中,从存储器中取回预扩展网格。在这样的示例中,绕过网格扩展器1608,并且在FP32中将预扩展的网格点输出到示例网格变换器1610。输入模式将是网格点的混合点16位,并且这些网格点将相对于当前像素位置。例如,将16位输入网格点矢量添加到当前像素位置以给出最终的绝对网格点矢量。输入的16位小数位是可编程的,因此可以满足各种精度和图像大小的要求。
[0160] 扩展的网格点被封装成128位,每个字包括四个网格点。每个网格点由X和Y分量表示。这些X和Y分量封装有表示FP16 X分量的最高16位,而包含FP16 Y分量的最低16位。在图22中示出了预扩展的网格点2200的示例存储组织。来自预扩展子块的输出是FP32。
[0161] 在一些示例中,可以将预扩展的子模块配置为输出旁路网格。旁路网格是示例网格,其中网格点值都等于输出图像中的(X,Y)位置。要配置翘曲以生成旁路网格,示例应用将1'b1写入WARP_MESH寄存器的MESH_BYPASS字段,同时还设置字段PREEXPANDED_MODE=1'b1,RELATIVE=1'b1和DEC_POSN=4'b0(也在WARP_MESH中)。
[0162] 在图16的所示示例中,翘曲滤波器1600包括网格变换器1610,用于将FP32扩展的网格点作为输入,并产生S(16,8)变换的网格点作为网格变换器1610的输出。在网格变换器1610内部,数据路径完全是FP32,除了从FP32到S(16,8)的最终转换。网格变换器1610的示例输入数据格式可以是具有FP32的扩展网格,并且输出格式可以是具有S(16,8)的变换网格。在一些示例中,网格变换器1610包括旁路模式,其中除了从FP32到S(16,8)的最终变换之外,网格点不受影响地通过。不要将旁路模式与旁路网格混淆。在一些示例中,如果主机仅需要除以1,则网格变换器1610包括除法器旁路模式以关闭除法器(以节省功率)。除法器旁路(XFORM_DIV_BYPASS)和整个变换旁路(XFORM_BYPASS)可以从翘曲滤波器1600的寄存器(例如WARP_MODE寄存器)中进行配置。
[0163] 图16的示例网格变换器1610可以执行至少三个主要操作。第一示例操作包括示例3x3矩阵变换,其中FP32输入网格点通过3x3矩阵,为此,网格变换器1610执行与公式(4)-(6)的示例所表示的伪代码相对应的指令(例如,机器可读指令,硬件逻辑等):
[0164] x=(m(0,0)*mx)+(m(0,1)*my)+m(0,2)
[0165] 公式(4)
[0166] y=(m(1,0)*mx)+(m(1,1)*my)+m(1,2)
[0167] 公式(5)
[0168] z=(m(2,0)*mx)+(m(2,1)*my)+m(2,2)
[0169] 公式(6)
[0170] 在以上公式(4)-(6)的示例中,m表示3x3矩阵,mx表示网格点的FP32 x分量,而my表示网格点的FP32 y分量。输出是x,y和z。乘法和加法运算以FP32执行。矩阵系数经由一个或多个寄存器(例如WARP_MAT0(m(0,0))到WARP_MAT8(m(2,2))寄存器)进行配置。
[0171] 可以由图16的网格变换器1610执行的第二示例操作可以除以z的除法运算。例如,x和y可以除以z,其中x,y和z是上述公式(4)-(6)的示例的矩阵变换的输出。例如,网格变换器1610可以执行与如下所述的由公式(7)-(8)的示例表示的伪代码相对应的指令:
[0172] x'=x/z
[0173] 公式(7)
[0174] y'=y/z
[0175] 公式(8)
[0176] 网格变换器1610可以将结果x′和y′从FP32转换为具有8位小数(S(16,8))的16位有符号整数。
[0177] 在图16的所示示例中,翘曲滤波器1600包括图1的PFBC 100,用于执行从主存储器取回像素。翘曲滤波器1600使用PFBC 100来有效地消除存储器延迟,这在DRAM的情况下可能是显著的延迟。在一些示例中,仅输入网格点的整数部分用于从AMC存储系统取回所需的4x4像素核。8位小数部分将传递到流水线中的下一个子块:双三次重采样器子块。在某些示例中,PFBC 100的输入数据格式被扩展,转换的网格点–S(16,8),以及来自U8、U16中的一个中的主存储器的输入像素。在某些示例中,PFBC 100的输出数据格式是U16的4x4像素核。
[0178] 图1的PFBC 100可以包括4通道预取块高速缓存。在一些示例中,每个块是128位×8行。在某些示例中,每个集合是8块x 4块行。包括在翘曲滤波器1600中的PFBC 100在像素块上操作,作为其基本单元以从DRAM或CMX取回。在一些示例中,图像块的大小在16位像素模式的情况下为8×8像素,在8位像素模式的情况下为16×8像素。图23描绘了在图16的示例中的PFBC 100中使用的块和超级块2300的示例。根据定义,至少一个核像素将始终位于超级块0的Blk0内的某个位置。
[0179] 在某些示例中,可以通过调整一个或多个寄存器(例如,WARP_PFBC寄存器的SPEC_REQUEST_MODE字段)来调整PFBC 100,以随时更改PFBC 100推测性取回的最大数量。例如,将诸如SPEC_REQUEST_MODE字段之类的寄存器设置为:
[0180] (A)3'd0表示不发生推测性的取回,并且PFBC 100将仅取回满足当前请求的核所需的图像块(最多4个)。在图23所示的核位置的情况下,PFBC 100将获得超级块0 2302的所有4个块,以填满所请求的核。
[0181] (B)3'd1意味着即使核没有溢出,也将取回包含所请求核的一个超级块(如果满足某些条件,请参见下面的注释)。也就是说,将存在针对4个块的推测性取回,在图23中被称为超级块0 2302。
[0182] (C)3'd2表示将取回两个超级块(如果满足某些条件,请参见下面的注释)。也就是说,将存在针对8个块的推测性取回,在图23中被称为超级块0 2302和超级块1 2304。
[0183] (D)3'd3表示将取回三个超级块(如果满足某些条件,请参见下面的注释)。也就是说,将存在针对8个块的推测性取回,在图23中被称为超级块0 2302、超级块1 2304和超级块2 2306。
[0184] (E)3'd4表示将取回四个超级块(如果满足某些条件,请参见下面的注释)。也就是说,将存在针对8个块的推测性取回,在图23中被称为超级块0 2302、超级块1 2304、超级块2 2306和超级块3 2308。
[0185] 在一些示例中,翘曲滤波器1600的寄存器(例如,WARP_MODE寄存器的PID_DEDUPE字段)可以用于去除输入到PFBC 100的核的重复。例如,该寄存器可以用于减少PFBC 100内的存储器访问,目的是降低功率。
[0186] 示例双三次重采样器包括U16的4x4像素核和8位小数的输入数据格式,以及U16输出像素的输出数据格式。针对重采样器子块操作两种示例操作模式-双三次和双线性。双三次模式使用U16格式的4x4像素核;双线性模式使用U16格式的2x2像素核。如果输入核恰好邻近并且挂在图片的边缘(例如,并非核中所有像素都在输入图片边界内),那么那些不存在的像素将被填充为与它们最近的像素相同的值或具有主机定义的颜色。这种边缘操作模式是主机可配置的。例如,可以先执行水平操作,然后再进行垂直操作。
[0187] 在一些示例中,双三次系数是从8位小数输入生成的,并且可以如下计算:
[0188] A:(-1/2*t+t2-1/2*t3);
[0189] B:(1-5/2*t2+3/2*t3);
[0190] C:(1/2*t+2*t2-3/2*t3);以及
[0191] D:(-1/2*t2+1/2*t3),
[0192] 其中t是8位小数输入,t2是t*t,t3是t*t*t。在一些示例中,如果计算针对水平操作的系数,则t来自X;如果计算针对垂直操作的系数,则t来自Y。扩展的网格中的坐标等于下面的核中的K11。示例输入像素核可以表示为:
[0193] K00 K10 K20 K30
[0194] K01 K11 K21 K31
[0195] K02 K12 K22 K32
[0196] K03 K13 K23 K33
[0197] 示例双三次伪代码可以表示为:
[0198] H0=A*K00+B*K10+C*K20+D*K30;
[0199] H1=A*K01+B*K11+C*K21+D*K31;
[0200] H2=A*K02+B*K12+C*K22+D*K32;
[0201] H3=A*K03+B*K13+C*K23+D*K33;
[0202] 并且示例输出可以表示为:
[0203] A*H0+
[0204] B*H1+
[0205] C*H2+
[0206] D*H3;
[0207] 在某些示例中,可以通过设置翘曲滤波器1600的寄存器(例如WARP_MODE寄存器的BICUBIC_MODE字段)来启用Bicubic模式。在某些示例中,双线性系数是由8位小数输入生成的并且可以计算如下:
[0208] A:(1-t);
[0209] B:t,
[0210] 其中,如果计算针对水平操作的系数,则“t”来自X或者如果计算针对垂直操作的系数,则“t”来自Y。扩展的网格中的坐标等于下面的核中的K11。
[0211] 示例输入像素核:
[0212] K00 K10 K20 K30
[0213] K01 K11 K21 K31
[0214] K02 K12 K22 K32
[0215] K03 K13 K23 K33
[0216] 在双线性重采样模式下仅使用左上4个像素(K00,K01,K10,K11)。
[0217] H1=(A*K11)+(B*K21);
[0218] H2=(A*K12)+(B*K22);
[0219] 输出=(A*H1)+(B*H2);
[0220] 在一些示例中,通过设置翘曲滤波器1600的WARP_MODE寄存器的BILINEAR_MODE字段来启用双线性模式。
[0221] 在一些示例中,图16的翘曲滤波器1600获得以下基本配置信息:3个存储器端口的帧BASE地址,3个存储器端口的STRIDE,3个存储器端口的循环缓冲区/帧缓冲区模式,X、Y瓦片在帧中的起始点(例如(0,0)可以用于大多数应用)和/或要处理的瓦片数量(例如,图像中的全部或从瓦片起点开始的子集,或设置为0以处理整个帧)。附加地或可替代地,翘曲滤波器1600可以获得基本配置信息,诸如瓦片X、Y尺寸,输入帧尺寸(INFRAMELIMIT)、输出帧尺寸(TILE_START和OUTFRAMELIM)和/或U(0,20)中的X粒度倒数和Y粒度倒数。X和Y粒度倒数是定点(0,20)格式的1/Gx,而粒度是(像素输出/像素输入)。在某些示例中,寄存器值可以计算为(1/G*2^20)。在某些示例中,可能会限制G与瓦片宽度或高度之间的关系。示例限制可能是G必须大于或等于(tile_size)/2,其中tile_size是瓦片宽度或瓦片高度。
[0222] 附加地或可替代地,翘曲滤波器1600可以获得包括整数和分数值的网格开始位置的基本配置(例如,对于大多数应用可以使用(0.0,0.0)),用于网格转换器1610中的3x3矩阵运算(9x FP32)的可编程系数,选择双线性或双三次重采样,选择边缘模式(例如,当滤波器核悬在图片边缘时会发生什么情况(例如,通过边缘像素的填充或使用恒定的颜色进行解析))和/或边缘模式的颜色(如果使用恒定颜色模式)。
[0223] 在图16的所示示例中,翘曲滤波器1600包括三个接口1602、1604、1606。例如,三个接口1602、1604、1606可以是AMC主接口。网格读接口1602是带宽相对较低的端口,并且每个输出瓦片可以取回多达九个64位(X,Y)网格点(以FP32,FP32格式)。此示例接口的带宽将取决于设置的粒度和瓦片大小。粒度不得低于瓦片大小,以将网格取回的数量限制在合理的水平。对于32x32的粒度和瓦片大小,则网点取回器将每1024个周期取回9个64位字。这些网格点将保存在连续的存储器位置中。此存储器端口还将从存储器系统读高带宽预扩展的网格点。
[0224] 图16的块高速缓冲存储器接口1604支持最多8个字的读突发。在一些示例中,突发的大小受单个推测性块请求(SBR)字(最多8个)中可以请求的块数限制。像素写接口1606获得全部为128位的整个字的像素写回,并且在一些示例中,不支持字节掩码。图16的像素写入接口1606支持多达16个写突发。
[0225] 在图24-图27中示出了流程图,其表示用于实现图1的PFBC 100和/或图2的取回引擎200的示例硬件逻辑、机器可读指令、硬件实现的状态机和/或其任何组合。机器可读指令可以是可执行程序或可执行程序的一部分,以由计算机处理器执行,所述计算机处理器诸如下文结合图28讨论的示例处理器平台2800中所示的图28的处理器2812,和/或在下面结合图29讨论的示例处理器平台2900中示出的图29的处理器2912。程序可以体现在存储在非暂时性计算机可读存储介质中的软件中,例如CD-ROM、软盘硬盘驱动器、DVD、蓝光磁盘或与处理器2812、2912关联的存储器(一个或多个),但是整个程序和/或其部分可以替代地由除(一个或多个)处理器2812、2912之外的设备执行和/或体现在固件或专用硬件中。此外,尽管参照图24至图27所示的流程图描述了示例程序,但是可以替代地使用实现示例PFBC 100和/或取回引擎200的许多其他方法。例如,可以改变框的执行顺序,和/或可以改变、消除或组合所描述的一些框。附加地或替代地,任何或所有框可以由一个或多个硬件电路(例如,离散和/或集成的模拟和/或数字电路、FPGA、ASIC、比较器、运算放大器(op-amp)、逻辑电路等)实现,所述硬件电路被构造为执行相对应的操作而不执行软件或固件。
[0226] 如上所述,图24至图27的示例过程可以使用存储在非暂时性计算机和/或机器可读介质(例如,硬盘驱动器、闪存、只读存储器、光盘、数字多功能磁盘、高速缓存、随机存取存储器和/或任何其他存储器设备或存储磁盘,其中,存储了任意持续时间(例如,对于延长的时间段、永久地、对于短暂地缓存,和/或对于信息的高速缓存))上的可执行指令(例如,计算机和/或机器可读指令)来实现。如本文所使用的,术语“非暂时性计算机可读介质”被明确定义为包括任何类型的计算机可读存储器设备和/或存储盘,并且排除传播信号并排除传输介质。
[0227] “包括”和“包含”(及其所有形式和时态)在本文中用作开放式术语。因此,每当权利要求采用任何形式的“包括”或“包含”(例如,包括、包括了、含有、包含了、具有等)作为序言或在任何种类的权利要求叙述中时,应理解为在不超出相对应权利要求或陈述的范围的情况下,可以存在其他要素、术语等。如本文所使用的,当例如在权利要求的序言中使用短语“至少”作为过渡术语时,其以与术语“包括”和“包含”是开放式的相同的方式是开放式的。术语“和/或”例如以诸如A、B和/或C的形式使用时,是指A、B、C的任何组合或子集,例如(1)仅A、(2)仅B、(3)仅C、(4)A与B、(5)A与C、(6)B与C,以及(7)A与B和C。
[0228] 图24是表示示例机器可读指令2400的流程图,该示例机器可读指令2400可以被执行以实现图1的PFBC 100和/或图2的取回引擎200以处理在预取接口处接收的请求。例如,机器可读指令2400可以实现图1的预取接口104和/或图2的预取核索回器202从硬件加速器(例如,图1的硬件加速器114)接收请求以处理与输入图像的像素相关联的像素坐标。
[0229] 图24的示例机器可读指令2400开始于框2402,在框2402,PFBC 100确定在预取接口处是否已经接受了请求(例如,来自硬件加速器114的请求)。例如,图1的预取接口104可以确定是否已经接受了来自硬件加速器114的包括像素坐标的请求。如果否,则PFBC 100继续等待这样的事件。响应于PFBC 100检测到请求接受,然后,在框2404,PFBC 100在预取接口处获得像素坐标。例如,预取接口104可以接收包括在输入图像中的像素的像素坐标。附加地或可替代地,硬件加速器114可以包括与预取接口104所接收的请求中的像素坐标相关联的水平支持、垂直支持和/或莫顿顺序信息。
[0230] 在框2406,PFBC 100基于像素坐标生成标签。例如,标签映射器124可以基于由预取接口104接收的像素坐标来生成包括块标签的标签。在框2408,响应于生成标签,PFBC 100基于标签搜索标签存储。例如,标签映射器124可以并行搜索包括在图1的标签存储122中的每个标签存储器128,以确定所生成的块标签是否已经存储在标签存储122中。
[0231] 在框2410,PFBC 100确定标签是否在标签存储器中。例如,标签映射器124可以确定块标签不在任何标签120中,指示与像素坐标相关联的图像块数据不在图1的高速缓冲存储146中。例如,标签映射器124可以确定与像素坐标相关联的图像块尚未存储在高速缓冲存储146中,并且至少响应于该确定,指示图1的SBR构建器126生成一个或多个SBR以从图1的主存储器110索回图像块。在其他示例中,标签映射器124可以确定块标签已经被存储在标签120中的一个中,指示与像素坐标相关联的图像块数据已经被高速缓存在高速缓冲存储146中。
[0232] 在框2410中,如果PFBC 100确定标签不在标签存储中,则在框2412中PFBC 100将标签存储在标签存储中。下面结合图5描述可以用于实现框2412的示例过程。在框2416,响应于将标签存储在标签存储中,PFBC 100从存储器中索回丢失的块。例如,图1的块取回器138可以从图1的主存储器110索回与尚未存储在高速缓冲存储146中的像素坐标相关联的图像数据块。
[0233] 在框2410,如果PFBC 100确定标签在标签存储中,则在框2414中PFBC 100确定是否将与像素坐标相关联的所有块存储在高速缓存中。例如,标签映射器124可以确定构造与像素坐标相关联的像素核所需的所有图像数据块都存储在高速缓冲存储146中。在其他示例中,标签映射器124可以确定构造与像素坐标相关联的像素核所需的所有图像数据块不是都存储在高速缓冲存储146。
[0234] 在框2414,如果PFBC 100确定与像素坐标相关联的所有块都存储在高速缓存中,则控制进行到框2420以访问与像素坐标相关联的高速缓存中的块。在框2414,如果PFBC 100确定与像素坐标相关联的所有块不是都存储在高速缓存中,则在框2416,PFBC 100从存储器中索回丢失的块。例如,块取回器138可以从主存储器110中索回与像素坐标相关联的一个或多个图像数据块。在这样的示例中,块取回器138可以将一个或多个索回到的图像数据块存储到包括在图1的高速缓冲存储装置146中的一个或多个高速缓冲存储器148。
[0235] 在框2418,响应于从存储器中索回丢失的块,PFBC 100更新标签存储中的标签。例如,块取回器138可以用索回到的图像数据块的存储位置来更新包括标签120的对应条目130。
[0236] 响应于更新标签存储中的标签,PFBC 100访问高速缓存中与像素坐标相关联的块。例如,请求接口106可以接收针对在预取接口104处接收的像素坐标的请求。读标签映射器152可以基于像素坐标生成块标签,并基于块标签与存储在标签存储122中的标签120中的一个匹配,确定与像素相关联的图像数据块存储在高速缓冲存储146中。至少响应于该确定,读标签映射器152可以指示高速缓存访问器154执行以下操作:从高速缓冲存储146中索回图像数据块,并将图像数据块输出到图1的数据接口108上以进行进一步处理。例如,与从主存储器110索回图像数据的行相比,从高速缓冲存储装置146索回图像数据块的高速缓存访问器154实质上是更快且更有效的操作,因为执行较少的读操作。
[0237] 在框2422,响应于访问与像素坐标相关联的高速缓存中的块,PFBC 100更新标签存储中的标签。例如,读标签映射器152可以使对应条目130的计数字段134减1,指示与条目130相关联的图像块数据已从高速缓冲存储146中索回。
[0238] 在框2424,PFBC 100确定是否继续监视请求。如果PFBC 100确定继续监视请求,则控制返回到框2402以确定是否已经接收到请求,否则,图24的机器可读指令2400结束。
[0239] 图25是表示可以被执行以实现图1的PFBC 100和/或图2的取回引擎200以将标签存储在标签存储中的示例机器可读指令2412的流程图。图25的机器可读指令2412开始于框2502,在框2502,PFBC 100选择标签存储中的感兴趣条目进行处理。例如,标签映射器124可以在标签存储122的第一标签存储器128的第一个中选择条目130中的第一条目来进行处理。
[0240] 在框2504,PFBC 100选择标签存储中感兴趣的通道进行处理。例如,标签映射器124可以选择包括在条目130中的第一个中的通道中的第一个来进行处理。
[0241] 在框2506,PFBC 100确定计数字段是否为零。例如,标签映射器124可以确定以所选通道包括的计数字段134是否为零。在这样的示例中,当计数字段134为零时,标签映射器124可以确定与选择的通道相关联的图像块已经被推测性地取回,并且当计数字段134为非零时可以确定该图像块与预取接口104所接收的请求相关联。(例如,预取接口104先前接收到的请求)。
[0242] 在框2506,如果PFBC 100确定计数字段不为零,则控制进行到框2514,以确定是否在标签存储中选择另一种感兴趣的通道进行处理。在框2506,如果PFBC 100确定计数字段为零,则在框2508,PFBC 100确定待决字段是否为零。例如,标签映射器124可以确定所选择的通道中包含的图1的待决字段135是否为零。在这样的示例中,标签映射器124可以确定与所选择的通道相关联的图像块已经被推测地取回,但是当前正在被取回,并且当计数字段134为零并且待决字段135为1和/或以其他方式被使能时,不能被替换或覆盖。例如,PFBC 
100不能在存储在高速缓存器146中之前替换推测地取回的图像块。在其他示例中,当计数字段134为零,而待决字段135为零时,标签映射器124可以确定与所选通道相关联的图像块已经被推测地取回,并且可以被替换,因为图像块不是待决索回。
[0243] 在框2508,如果PFBC 100确定待决字段不为零,则控制进行到框2514,以确定是否选择标签存储中的另一种感兴趣的通道进行处理。在框2508,如果PFBC 100确定待决字段为零,则在框2510,PFBC 100将与所选择的通道相关联的块识别为推测块。例如,标签映射器124可以确定与条目130中的第一条目的通道中的第一通道相关联的图像数据块是推测取回的块,并且先前未被请求存储在高速缓冲存储146中。
[0244] 响应于将与所选择的通道相关联的块识别为推测性块,然后在框2512,PFBC 100将所选择的通道的标签替换为生成的标签。例如,标签映射器124可以以选择的通道将基于由预取接口104接收的像素坐标生成的块标签存储在标签120的块标签字段中。在这样的示例中,标签映射器124可以基于接收到的像素坐标用生成的标签覆盖和/或以其他方式替换现有标签120。
[0245] 在框2514,PFBC 100确定是否在标签存储中选择另一种感兴趣的通道进行处理。在框2514,如果PFBC 100确定在标签存储中选择另一种感兴趣的通道进行处理,则控制返回到框2504以在标签存储中选择另一种感兴趣的通道进行处理。在框2514,如果PFBC 100确定不在标签存储中选择另一种感兴趣的通道进行处理,则在框2516,PFBC 100确定是否在标签存储中选择另一感兴趣的条目进行处理。在框2514,如果PFBC 100确定不在标签存储中选择另一个感兴趣的条目进行处理,则控制返回到框2502以在标签存储中选择另一个感兴趣的条目进行处理。响应于不在标签存储中选择另一个感兴趣的条目进行处理,图25的机器可读指令2412返回到图24的机器可读指令2400的框2416以从存储器中索回丢失的块。
[0246] 图26是表示可以被执行以实现图1的PFBC 100和/或图2的取回引擎200以处理在请求接口接收到的请求的示例机器可读指令2600的流程图。图26的机器可读指令2600开始于框2602,在框2602,PFBC 100确定是否已经在请求接口处接受了请求。例如,图1的请求接口106可以确定请求是否已被接受。如果否,则PFBC 100继续等待这样的事件。响应于PFBC 100在请求接口106处检测到请求接受,然后,在框2604,PFBC 100在请求接口106处获得像素坐标。例如,请求接口106可以接收包括在输入图像中的像素的像素坐标。。
[0247] 在框2606,PFBC 100基于像素坐标生成标签。例如,读标签映射器152可以基于由请求接口106接收的像素坐标来生成包括块标签的标签。响应于生成标签,在框2608PFBC 100基于标签来搜索标签存储。例如,读标签映射器152可以并行地搜索包括在图1的标签存储122中的每个标签存储器128,以确定与像素坐标相关联的图像块数据是否被存储在高速缓冲存储146中。
[0248] 在框2610,PFBC 100确定标签是否在标签存储中。例如,读标签映射器152可以确定块标签不在任何标签120中,指示与像素坐标相关联的图像块数据不在图1的高速缓冲存储146中。在其他示例中,读标签映射器152可以确定块标签已经被存储在标签120中的一个中,指示与像素坐标相关联的图像块数据已经被高速缓存在高速缓冲存储146中。在这样的示例中,高速缓存访问器154可以容易地从与所请求的像素坐标相关联的高速缓存146中索回一个或多个图像块。例如,通过减少与图像数据相关联的读操作的数量来处理请求的像素坐标,与从主存储器110索回图像数据的一行或更多行相比,高速缓存访问器154可以实现索回一个或多个图像块的性能提高。
[0249] 在框2610,如果PFBC 100确定标签不在标签存储中,则控制进行到框2618以继续监视请求。例如,读标签映射器152可以等待直到与接收到的像素坐标相关联的图像块数据被存储在高速缓冲存储146中。在这样的示例中,读标签映射器152等待直到图像块数据被存储以与在主存储器110上执行增加数量的读操作以与索回图像数据块相比索回多行图像数据的现有技术相比,实现性能提高。
[0250] 在框2610,如果PFBC 100确定标签在标签存储中,则在框2612,PFBC 100确定与像素坐标相关联的所有块是否存储在高速缓存中。例如,读标签映射器152可以确定构造与像素坐标相关联的像素核所需的所有图像数据块都存储在高速缓冲存储146中。在其他示例中,读标签映射器152可以确定构造与像素坐标相关联的像素核所需的所有图像数据块不是都存储在高速缓冲存储146中。
[0251] 在框2612,如果PFBC 100确定与像素坐标相关联的所有图像块不是都存储在高速缓存中,则PFBC 100继续等待将图像块存储在高速缓存中。
[0252] 在框2612,如果PFBC 100确定与像素坐标相关联的所有块都存储在高速缓存中,则在框2614,PFBC 100访问与像素坐标相关联的高速缓存中的图像块。例如,高速缓存访问器154可以从包括在高速缓冲存储146中的高速缓冲存储器148中索回图像数据块,并将图像数据块输出到数据接口108上。
[0253] 在框2616,响应于访问高速缓存中的图像块,PFBC 100更新标签存储中的标签。例如,读标签映射器152可以使对应条目130的对应方式的计数字段134递减。
[0254] 在框2618,PFBC 100确定是否继续监视请求。如果PFBC 100确定继续监视请求,则控制返回到框2602,以确定是否已经接收到请求,否则,图6的机器可读指令2600结束。
[0255] 图27是表示可以由图1的PFBC 100和/或图2的取回引擎200执行以构造示例推测阻止请求的示例机器可读指令2700的流程图。机器可读指令2700开始于框2702,在框2702,PFBC 100在标签存储器中查找图像块(X+N,Y),其中,X和Y是像素坐标,而N是图15的块数量字段1504,表示包括要取回的X和Y像素坐标的图像块的左侧或右侧的图像块的数量。例如,标签映射器124可以基于将像素坐标映射到包括在标签存储122中的标签120中的一个而确定图像数据块被存储在图1的高速缓冲存储146中。
[0256] 在框2704,PFBC 100确定图像块是否待决。例如,待决图像块对应于正从主存储器110索回并存储在高速缓存146中的图像块。响应于确定图像块待决,PFBC 100初始化从主存储器110中对图像块的索回操作。响应于确定图像块未待决,PFBC 100初始化建立一个或多个SBR以初始化索回操作。例如,图1的标签映射器124可以将像素坐标映射到标签120中的一个。标签映射器124可以确定使能了相对应的待决字段,指示与像素坐标相关联的图像数据块正在从图1的主存储器110中获得。
[0257] 在框2704,如果PFBC 100确定图像块是待决的,则PFBC 100在框2706调度针对来自块(X,Y)的N个图像块的请求。例如,SBR构建器126可以生成一个或多个SBR,并指示块取回器138从主存储器110索回包括X坐标和Y坐标的图像数据块的左侧或右侧的N个图像数据块。响应于调度请求,机器可读指令2700结束。例如,PFBC 100已经接收到请求的像素坐标,将像素坐标映射到主存储器110中的一个或多个图像块,并且已经初始化了从主存储器110中对一个或多个图像块的索回,并将一个或多个图像块存储在高速缓存器146,以用于由硬件加速器114和/或任何其他硬件或机器可读指令加速处理。例如,与图像数据的一行或多行相比,硬件加速器114可以处理一个或多个图像块。
[0258] 在框2704,如果PFBC 100确定该框未待决(例如,待决字段的值为零和/或以其他方式被禁用),则控制进行到框2708,以确定与在方框2702处识别的标签120相关联的通道是空闲的。例如,空闲通道对应于图1的高速缓冲存储器148中的相对应的一个的一个或多个索引,所述图1的高速缓冲存储器148中的相对应的一个可用于图像块存储或包含可针对新图像块替换的图像块。例如,标签映射器124可以基于计数字段134的非零值来确定该通道不是空闲的。
[0259] 在框2708,如果PFBC 100确定该通道不是空闲的,则在框2710,PFBC 100确定是否将N设置为零。例如,SBR构建器126可以将N设置为零以指示将不取回在X和Y坐标的左侧或右侧的块(例如,没有图像数据块被推测性地取回)。
[0260] 在框2710,如果PFBC 100确定将N设置为零,则控制前进到框2706,以调度针对0块的请求,从而使机器可读指令2700结束。在框2710,如果PFBC 100确定不将N设置为零,则控制返回到框2708,以确定该通路是否空闲。例如,SBR构建器126可以停止直到所请求的时隙变得可用。例如,SBR构建器126可以暂停处理针对第一图像数据块的请求,直到标签映射器124在标签存储122中提供相对应的方式。
[0261] 在框2708,如果PFBC 100确定该通路是空闲的,则控制进行到框2712以递增N。例如,SBR构建器126可确定以推测地取回与像素坐标相关联的图像数据块以填补通道中的空闲的一个。响应于递增N,在框2714,PFBC 100确定是否N=M。例如,N可以初始为零并且M可以是1至8范围内的可编程值。在框2714,如果PFBC 100确定要推测性取回的块数量(N)不等于推测性取回阈值(M),则控制进行到块2702以在标签存储器中查找该块(X+N,Y)。在框2714处,如果PFBC 100确定要推测性地取回的块的数量(N)等于推测取回阈值(M),则控制进行到框2706,以将请求调度为推测性地取回与像素坐标关联的图像数据块的左侧或右侧的N个块。可替代地,该请求可以包括推测性地取回与像素坐标相关联的图像数据块之上或之下的N个块。
[0262] 图28是示例处理器平台2800的框图,该示例处理器平台2800被构造为执行图24-图27的指令以实现图1的PFBC 100。处理器平台2800可以是例如服务器、个人计算机、工作站、自学习机(例如,神经网络)、移动设备(例如,电话、智能电话、平板电脑(例如iPadTM))、个人数字助理(PDA)、互联网设备、DVD播放器、CD播放器、数字录像机、蓝光播放器、游戏机、个人录像机、机顶盒盒、机或其他可穿戴设备,或任何其他类型的计算设备。
[0263] 所示示例的处理器平台2800包括处理器2812。所示示例的处理器2812是硬件。例如,处理器2812可以由任何期望的系列或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器来实现。硬件处理器可以是基于半导体(例如,基于)的设备。在该示例中,处理器2812实现示例预取器112、示例像素数据FIFO缓冲区116、示例标签映射器124、示例SBR构建器126、示例SBR FIFO 136、示例块取回器138、示例地址生成器142、示例高速缓存填充器144、示例块数据读器150、示例读标签映射器152和示例高速缓存访问器154。
[0264] 所示示例的处理器2812包括本地存储器2813(例如,高速缓存)。所示示例的处理器2812经由总线2818与包括易失性存储器2814和非易失性存储器2816的主存储器通信。易失性存储器2814可以由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、动态随机存取存储器 和/或任何其他类型的随机存取存储器设备实现。非易失性存储器2816可以由闪存和/或任何其他期望类型的存储器设备来实现。对主存储器2814、2816的访问由存储器控制器控制。在该示例中,易失性存储器2814实现示例标签存储122和示例高速缓冲存储146。替代地,非易失性存储器2816可以实现示例标签存储122和/或示例高速缓冲存储146。
[0265] 所示示例的处理器平台2800还包括接口电路2820。接口电路2820可以通过任何类型的接口标准来实现,例如以太网接口、通用串行总线(USB)、 接口、近场通信(NFC)接口和/或快速PCI接口。
[0266] 在示出的示例中,一个或多个输入设备2822连接到接口电路2820。输入设备2822准许用户向处理器2812输入数据和/或命令。输入设备(一个或多个)2822可以由例如音频传感器、麦克照相机(静止或视频)、键盘、按钮、鼠标触摸屏、触控板、轨迹球、isopoint设备和/或语音识别系统来实现。
[0267] 一个或多个输出设备2824也连接到所示示例的接口电路2820。输出设备2824可以例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT))、就地开关(IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器实现。因此,所示示例的接口电路2820通常包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
[0268] 所示示例的接口电路2820还包括通信设备,例如发射机、接收机、收发机、调制解调器、住宅网关、无线接入点和/或网络接口,以促进经由网络2826与外部机器(例如,任何种类的计算设备)的数据交换。通信可以经由例如以太网连接、数字用户线(DSL)连接、电话线连接、同轴电缆系统、卫星系统、现场线无线系统、蜂窝电话系统等。在此示例中,接口电路1020实现示例存储器接口102、示例预取接口104、示例请求接口106、示例数据接口108和示例块取回器接口140。
[0269] 所示示例的处理器平台2800还包括用于存储软件和/或数据的一个或多个大容量存储器设备2828。此类大容量存储器设备2828的示例包括软盘驱动器、硬盘驱动器、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字多功能磁盘(DVD)驱动器。
[0270] 图24至图27的机器可执行指令2832可以存储在大容量存储器设备2828中、在易失性存储器2814中、在非易失性存储器2816中和/或在诸如CD或DVD的可移动非暂时性计算机可读存储介质上。
[0271] 图29是示例处理器平台2900的框图,该示例处理器平台2900被构造为执行图24-图27的指令来实现图2的示例取回引擎200。处理器平台2900可以是例如服务器、个人计算机、工作站、自学习机(例如,神经网络)、移动设备(例如,电话、智能电话、平板电脑(例如iPadTM))、个人数字助理(PDA)、互联网设备、DVD播放器、CD播放器、数字录像机、蓝光播放器、游戏机、个人录像机、机顶盒盒、耳机或其他可穿戴设备,或任何其他类型的计算设备。
[0272] 所示示例的处理器平台2900包括处理器2912。所示示例的处理器2912是硬件。例如,处理器2912可以由任何期望的系列或制造商的一个或多个集成电路、逻辑电路、微处理器、GPU、DSP或控制器来实现。硬件处理器可以是基于半导体(例如,基于硅)的设备。在该示例中,处理器2912实现示例预取核索回器202、示例存储器接口引擎204和示例核索回器206。
[0273] 所示示例的处理器2912包括本地存储器2913(例如,高速缓存)。所示示例的处理器2912经由总线2918与包括易失性存储器2914和非易失性存储器2916的主存储器通信。易失性存储器2914可以由同步动态随机存取存储器(SDRAM)、动态随机存取存储器(DRAM)、动态随机存取存储器 和/或任何其他类型的随机存取存储器设备来实现。非易失性存储器2916可以由闪存和/或任何其他期望类型的存储器设备来实现。对主存储器2914、2916的访问由存储器控制器控制。
[0274] 所示示例的处理器平台2900还包括接口电路2920。接口电路2920可以通过任何类型的接口标准来实现,例如以太网接口、通用串行总线(USB)、 接口、近场通信(NFC)接口和/或快速PCI接口。
[0275] 在所示的示例中,一个或多个输入设备2922连接到接口电路2920。输入设备2922准许用户将数据和/或命令输入到处理器2912中。输入设备2922可以通过,例如,音频传感器、麦克风、摄像机(静止或视频)、键盘、按钮、鼠标、触摸屏、触控板、轨迹球、isopoint设备来实现和/或语音识别系统来实现。
[0276] 一个或多个输出设备2924也连接到所示示例的接口电路2920。输出设备2924可以例如由显示设备(例如,发光二极管(LED)、有机发光二极管(OLED)、液晶显示器(LCD)、阴极射线管显示器(CRT))、就地开关(IPS)显示器、触摸屏等)、触觉输出设备、打印机和/或扬声器实现。因此,所示示例的接口电路2920通常包括图形驱动器卡、图形驱动器芯片和/或图形驱动器处理器。
[0277] 所示示例的接口电路2920还包括通信设备,诸如发射机、接收机、收发机、调制解调器、住宅网关、无线接入点和/或网络接口,以促进经由网络2926与外部机器(例如,任何种类的计算设备)的数据交换。通信可以经由例如以太网连接、数字用户线(DSL)连接、电话线连接、同轴电缆系统、卫星系统、现场线无线系统、蜂窝电话系统等。
[0278] 所示示例的处理器平台2900还包括用于存储软件和/或数据的一个或多个大容量存储器设备2928。此类大容量存储器设备2928的示例包括软盘驱动器、硬盘驱动器、光盘驱动器、蓝光盘驱动器、独立磁盘冗余阵列(RAID)系统和数字多功能磁盘(DVD)驱动器。
[0279] 图24至图27的机器可执行指令2932可以存储在大容量存储器设备2928中、在易失性存储器2914中、在非易失性存储器2916中和/或在诸如CD或DVD的可移动非暂时性计算机可读存储介质上。
[0280] 根据前述内容,将认识到,已经公开了减少存储器延迟并改善像素数据传输的示例方法、装置和制品。本文公开的示例预取块高速缓存装置优化对图像数据的块而不是存储器行的访问。本文公开的示例针对图像处理或计算机视觉算法的硬件加速提供了对图像数据的缓冲区的基于高存储器带宽块的访问。本文公开的示例提供了适用于算法的加速器的图像数据的改进接口,其中访问模式显示空间局部性,但是它们不是从一个图像(或其瓦片或切片)或像素到下一个图像(或其瓦片或切片)或像素的预定或固定的。本文公开的示例从存储器推测地取回图像数据块并将其存储在未使用的高速缓冲存储器中,以提高针对推测地取回的图像数据块的未来请求的效率。本文公开的示例通过实现本文公开的预取块高速缓存装置来提高翘曲变换的效率。
[0281] 示例1包括一种用于减少像素传输延迟的装置,该装置包括预取核索回器,用于基于来自硬件加速器的第一请求来生成块标签,该第一请求包括设置在第一图像块中的第一像素的第一坐标;存储器接口引擎,用于基于块标签将包括了包括该像素的多个像素的第一图像块存储在高速缓冲存储器中;以及核索回器,用于并行地访问包含在高速缓冲存储器中的两个或更多个存储器设备,以当接收到包括设置在第一图像块中的第二像素的第二坐标的第二请求时,传输包括第一图像块的多个图像块。
[0282] 示例2包括示例1的装置,其中预取核索回器通过将第一坐标的第一个坐标的第一数量的位和第一坐标的第二个坐标的第二数量的位串接来生成块标签。
[0283] 示例3包括示例1的装置,其中预取核索回器搜索标签存储,以在单个时钟周期内识别块标签是否与存储在标签存储中的多个块标签中的一个匹配,并当所述块标签与所述多个块标签中的一个不匹配时,生成推测构建请求以从存储器中索回所述第一图像块,以及当存储所述第一图像块时,所述存储器接口引擎更新所述标签存储中的条目。
[0284] 示例4包括示例3的装置,其中存储器接口引擎通过以下中的至少一项来更新条目:将块标签存储在标签字段中,将第一值存储在待决字段中或将第二值存储在验证字段中,第一值不同于第二值。
[0285] 示例5包括示例1的装置,其中多个像素是第一多个像素,并且还包括存储器接口引擎,用于索回包括第二多个像素的第二图像块,第一多个像素邻近图像中的第二多个像素,第二图像块不包括在请求中,并基于块标签将第二图像块存储在高速缓冲存储中,并且核索回器将包含第一图像块和第二图像块的多个块传输到硬件加速器。
[0286] 示例6包括示例1的装置,其中存储第一块是基于莫顿顺序、列优先顺序或行优先顺序的。
[0287] 示例7包括示例1的装置,其中,块标签是第一块标签,并且预取核索回器将确定标签存储中的第一条目是否包括具有非零值的第一计数字段,当所述第一计数字段具有非零值时确定所述标签存储中的第二条目是否包括具有非零值的第二计数字段,并且当所述第二计数字段不具有非零值时,将所述第二条目的第二块标签替换为所述第一块标签。
[0288] 示例8包括示例7的装置,其中当第二条目的待决字段具有零值时,预取核索回器替换第二块标签。
[0289] 示例9包括示例1的装置,其中硬件加速器是图像处理硬件加速器、三维(3-d)硬件加速器或密码硬件加速器。
[0290] 示例10包括一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质包括指令,所述指令在被执行时使机器至少基于来自硬件加速器的第一请求来生成块标签,该第一请求包括设置在第一图像块中的第一像素的第一坐标,基于块标签将第一图像块存储在高速缓冲存储中,所述第一图像块包括多个像素,所述多个像素包括该像素,并且当接收到包括设置在第一图像块中的第二像素的第二坐标的第二请求时并行地访问包括在高速缓冲存储中的两个或更多个存储器设备以传输包括第一图像块的多个图像块。
[0291] 示例11包括示例10的非暂时性计算机可读存储介质,还包括指令,所述指令在被执行时使机器至少将第一坐标的第一个坐标的第一数量的位和第一坐标的第二个坐标的第二数量的位串接。
[0292] 示例12包括示例10的非暂时性计算机可读存储介质,还包括指令,所述指令在被执行时使机器至少搜索标签存储,以在单个时钟周期内识别块标签是否与存储在标签存储中的多个块标签中的一个匹配,当块标签不与多个块标签中的一个匹配时,生成推测构建请求以从存储器中索回第一图像块,并当第一图像块被存储时更新标签存储中的条目。
[0293] 示例13包括示例12的非暂时性计算机可读存储介质,还包括指令,该指令在被执行时使机器至少通过以下中的至少一项更新条目:将块标签存储在标签字段中;将第一值存储在待决字段中,或将第二值存储在验证字段中,该第一值与第二值不同。
[0294] 示例14包括示例10的非暂时性计算机可读存储介质,其中,多个像素是第一多个像素,并且还包括指令,所述指令在被执行时使机器至少索回包括第二多个像素的第二图像块,第一多个像素邻近图像中的第二多个像素,第二图像块未包括在请求中,基于块标签将第二图像块存储在高速缓冲存储中,并将包括第一图像块和第二图像块的多个图像块传输到硬件加速器。
[0295] 示例15包括示例10的非暂时性计算机可读存储介质,其中存储第一块是基于莫顿顺序、列优先顺序或行优先顺序的。
[0296] 示例16包括示例10的非暂时性计算机可读存储介质,其中,块标签是第一块标签,并且还包括指令,所述指令当被执行时使机器至少确定标签存储中的第一条目是否包括具有非零值的第一计数字段,当第一计数字段具有非零值时,确定标签存储中的第二条目是否包括具有非零值的第二计数字段,并且当第二计数字段不具有非零值时,将第二条目的第二块标签替换为第一块标签。
[0297] 示例17包括示例16的非暂时性计算机可读存储介质,还包括指令,这些指令在被执行时使机器至少确定包括在第二条目中的待决字段是否具有非零值,以及当第二条目的待决字段具有零值时,将第二条目的第二块标签替换为第一块标签。
[0298] 示例18包括一种用于减少像素传输延迟的方法,该方法包括基于来自硬件加速器的第一请求生成块标签,该第一请求包括设置在第一图像块中的第一像素的第一坐标,并基于块标签将第一图像块存储在高速缓冲存储中,所述第一图像块包括多个像素,所述多个像素包括该像素,并且当接收到包括设置在第一图像块中的第二像素的第二坐标的第二请求时,并行地访问包括在高速缓冲存储中的两个或更多个存储器设备以传输包括第一图像块的多个图像块。
[0299] 示例19包括示例18的方法,其中,生成块标签包括将第一坐标的第一个坐标的第一数量的位和第一坐标的第二个坐标的第二数量的位串接。
[0300] 示例20包括示例18的方法,还包括搜索标签存储,以在单个时钟周期内识别块标签是否与存储在标签存储中的多个块标签中的一个匹配,当所述块标签与所述多个块标签中的一个不匹配时,生成推测构建请求以从存储器中索回所述第一图像块,并且当存储所述第一图像块时更新所述标签存储中的条目。
[0301] 示例21包括示例20的方法,其中更新条目包括以下中的至少一项:将块标签存储在标签字段中,将第一值存储在待决字段中或将第二值存储在验证字段中,第一值不同于第二值。
[0302] 示例22包括示例18的方法,其中,多个像素是第一多个像素,并且还包括:索回包括第二多个像素的第二图像块,第一多个像素邻近图像中的第二多个像素,第二图像块不包括在请求中,基于块标签将第二图像块存储在高速缓冲存储中,并传输包括第一图像块和第二图像块的多个块。
[0303] 示例23包括示例18的方法,其中存储第一图像块是基于莫顿顺序、列优先顺序或行优先顺序的。
[0304] 示例24包括示例18的方法,其中,块标签是第一块标签,并且存储第一图像块包括确定标签存储中的第一条目是否包括具有非零值的第一计数字段,响应于确定第一计数字段具有非零值,确定标签存储中的第二条目是否包括具有非零值的第二计数字段,并响应于确定第二计数字段不具有非零值,将第二条目的第二块标签替换为第一块标签。
[0305] 示例25包括示例24的方法,其中替换第二块标签包括确定包括在第二条目中的待决字段是否具有非零值,并且响应于待决字段具有零值,将第二条目的第二块标签替换为第一块标签。
[0306] 示例26包括一种用于减少像素传输延迟的装置,该装置包括用于基于来自硬件加速器的第一请求来生成块标签的第一单元,该第一请求包括设置在第一图像块中的第一像素的第一坐标;用于基于块标签将第一图像块存储在高速缓冲存储中的第二单元,所述第一图像块包括多个像素,所述多个像素包括该像素;以及用于当接收到包括设置在第一图像块中的第二像素的第二坐标的第二请求时并行地访问包括在高速缓冲存储中的两个或更多个存储器设备以传输包括第一图像块的多个图像块的第三单元。
[0307] 示例27包括示例26的装置,其中第一单元包括将第一坐标的第一个坐标的第一数量的位和第一坐标的第二个坐标的第二数量的位串接。
[0308] 示例28包括示例26的设备,还包括用于搜索标签存储以在单个时钟周期内识别块标签是否与存储在标签存储中的多个块标签中的一个匹配的第四单元,用于当所述块标签与所述多个块标签中的一个不匹配时,生成推测构建请求以从存储器中索回所述第一图像块的第五单元,以及用于当存储所述第一图像块时,更新所述标签存储中的条目的第六单元。
[0309] 示例29包括示例28的装置,其中第六单元包括以下中的至少一项:将块标签存储在标签字段中,将第一值存储在待决字段中或将第二值存储在验证字段中,第一值不同于第二值。
[0310] 示例30包括示例26的装置,其中多个像素是第一多个像素,并且还包括用于索回包括第二多个像素的第二图像块的第四单元,第一多个像素邻近图像中的第二多个像素,第二图像块未包括在请求中,用于基于块标签将第二图像块存储在高速缓冲存储中的第五单元,以及用于传输包括第一图像块和第二图像块的多个块的第六单元。
[0311] 示例31包括示例26的装置,其中第二单元是基于莫顿顺序、列优先顺序或行优先顺序的。
[0312] 示例32包括示例26的装置,其中,块标签是第一块标签,并且第二单元包括用于确定标签存储中的第一条目是否包括具有非零值的第一计数字段的第四单元,用于当第一计数字段具有非零值时,确定标签存储中的第二条目是否包括具有非零值的第二计数字段的第五单元;以及用于当第二计数字段不具有非零值时,将第二条目的第二块标签替换为第一块标签。
[0313] 示例33包括示例32的装置,其中第六单元包括用于确定包括在第二条目中的待决字段是否具有非零值的第七单元,用于当第二条目的待决字段具有零值时将第二条目的第二块标签替换为第一块标签的第八单元。
[0314] 本文公开的示例可以应用于通过链接耦合到相应网关的物联网(IoT)网络。物联网(IoT)是一个概念,其中大量计算设备彼此互连并互连到互联网,以提供非常低的级别的功能和数据采集。因此,如本文中所使用的,IoT设备可以包括半自治设备,其与其他IoT设备和更广泛的网络(例如,互联网)通信来执行诸如感测或控制等功能。
[0315] 通常,物联网设备在存储器、大小或功能上受到限制,从而允许以与较小数量的较大设备相似的成本部署较大数量的IoT设备。但是,IoT设备可以是智能电话、笔记本电脑、平板电脑或PC,或其他更大的设备。此外,IoT设备可以是虚拟设备,例如智能电话或其他计算设备上的应用。IoT设备可以包括IoT网关,用于将IoT设备耦合到其他IoT设备和应用,以进行数据存储、过程控制等。
[0316] IoT设备的网络可以包括商业和家庭自动化设备,例如水分配系统、电力分配系统、管道控制系统、工厂控制系统、电灯开关、恒温器、、摄像机、警报器、运动传感器等等。可以通过远程计算机、服务器和其他系统访问IoT设备,例如,以控制系统或访问数据。
[0317] 互联网和类似网络的未来发展可能涉及非常大量的IoT设备。因此,在本文讨论的技术的上下文中,这种未来联网的许多创新将解决所有这些层不受阻碍地增长、发现并制造可访问的连接资源以及支持隐藏和分隔连接资源的能力的需求。可以使用任何数量的网络协议和通信标准,其中每种协议和标准被设计为解决特定目标。此外,协议是支持人类可访问服务的结构的一部分,人类可访问服务无论位置、时间或空间如何都可以运行。创新包括服务交付和相关联的基础设施,例如硬件和软件;以及安全增强;以及基于服务级别和服务交付协议中指定的服务质量(QoS)条款提供服务。
[0318] 骨干链路可以包括任何数量的有线或无线技术,包括光网络,并且可以是局域网(LAN)、广域网(WAN)或互联网的一部分。此外,此类通信链路可促进IoT设备和网关之间的光信号路径,包括使用有助于各种设备互连的MUXing/deMUXing组件。
[0319] 网络拓扑可以包括任何类型的IoT网络,例如使用蓝牙低功耗(BLE)链路随网络提供的网格网络。可能存在的其他类型的IoT网络包括用于通过IEEE 802.11 链路与IoT设备进行通信的无线局域网(WLAN)网络、用于通过LTE/LTE-A(4G)或5G蜂窝网络与IoT设备进行通信的蜂窝网络,以及低功率广域(LPWA)网络,例如,与LoRa联盟发布的LoRaWan规范兼容的LPWA网络,或与Internet工程任务组(IETF)颁布的规范兼容的低功耗广域网(LPWAN)网络上的IPv6。此外,各个IoT网络可以使用任何数量的通信链路(例如LTE蜂窝链路、LPWA链路或基于IEEE 802.15的链路,例如 )与外部网络提供商(例如,第2层或第3层提供商)进行通信。各个IoT网络还可以使用诸如约束应用协议(CoAP)之类的各种网络和互联网应用协议来操作。各个IoT网络也可以与协调器设备集成在一起,该协调器设备提供形成链接设备和网络的群集树的链接链。
[0320] 这些IoT网络中的每一个都可以提供针对新技术特征(诸如,本文所述的那些)的机会。改进的技术和网络可以实现设备和网络的指数增长,包括将IoT网络用作雾设备或系统。随着此类改进技术的使用不断增长,可以开发IoT网络以进行自我管理、功能演进和协作,而无需直接的人工干预。改进的技术甚至可以使IoT网络在没有集中控制系统的情况下起作用。因此,本文所描述的改进技术可以被用于自动化和增强远远超出当前实现的网络管理和操作功能。
[0321] 在示例中,可以通过用于认证、授权和计费(AAA)的分散系统来保护IoT设备之间的通信,例如通过骨干链路。在分散的AAA系统中,可以在互连的异构网络基础设施上实现分布式支付、信用、审计、授权和认证系统。这使系统和网络能够朝着自主操作的方向发展。在这些类型的自治操作中,机器甚至可能会签约人力资源并与其他机器网络协商伙伴关系。这样可以实现共同的目标,并根据概述的计划的服务水平协议实现均衡的服务交付,并实现提供计量、测量、可追溯性和可追踪性的解决方案。新的供应链结构和方法的创建可以使大量服务被创建、挖掘价值并停止而无需人工干预。
[0322] 通过将诸如声音、光、电子交通、面部和模式识别、气味、振动之类的感测技术集成到IoT设备之间的自治组织中,可以进一步增强这种IoT网络。感测系统的集成可以允许针对合同服务目标、业务流程和基于服务质量(QoS)的群集和资源融合来进行服务交付的系统的、自主的通信和协调。
[0323] IoT设备的集群可以被配备成与其他IoT设备以及云网络通信。这可以允许IoT设备在设备之间形成自组织网络,从而使它们可以充当单个设备,可以称为雾设备。
[0324] 与IoT设备的网格网络通信的云计算网络可以在云计算网络的边缘作为雾设备运行。物联网设备的网格网络可以称为雾,在云的边缘运行。
[0325] 雾可以被认为是大规模互连的网络,其中许多IoT设备例如通过无线电链路彼此通信。作为示例,可以使用由开放连接基金会TM(OCF)发布的互连规范来促进该互连网络。该标准允许设备发现彼此并建立互连的通信。也可以使用其他互连协议,包括例如,优化的链路状态路由(OLSR)协议、更好的移动自组织网络(BATMAN)路由协议或OMA轻量级M2M(LWM2M)协议等。
[0326] 尽管可以使用IoT设备和功能的任何组合,但是三种类型的IoT设备包括网关、数据聚合器和传感器。网关可以是边缘设备,其提供云和雾之间的通信,并且还可以提供从传感器获得的数据的后端处理功能,所述数据例如运动数据、流量数据、温度数据等。数据聚合器可以从任何数量的传感器收集数据,并执行后端处理功能以进行分析。结果,原始数据或两者都可以通过网关传递到云中。传感器可以是完整的IoT设备,例如,既可以收集数据并且处理数据。在某些情况下,传感器的功能可能会受到更多限制,例如,收集数据并允许数据聚合器或网关处理数据。
[0327] 来自任何IoT设备的通信可以沿着任何IoT设备之间的便利路径(例如,最便利的路径)传递以到达网关。在这些网络中,互连的数量提供了大量的冗余,即使丢失了许多IoT设备,也可以保持通信。此外,由于连接到另一个IoT设备的范围可能比连接到网关的范围小得多,因此使用网格网络可以允许使用功率非常低或与要使用的基础设施一定距离的IoT设备。
[0328] 从这些IoT设备提供的雾可以表现为云中的设备,例如服务器,作为位于云边缘的单个设备(例如雾设备)。在该示例中,来自雾设备的警报可以被发送而没有被识别为来自雾内的特定IoT设备。以这种方式,雾可以被认为是分布式平台,其提供计算和存储资源以执行处理或数据密集型任务,例如数据分析、数据聚集和机器学习等。
[0329] 在一些示例中,可以使用命令式编程样式来配置IoT设备,例如,每个IoT设备具有特定功能和通信伙伴。但是,可以以声明性编程样式配置构成雾设备的IoT设备,从而允许IoT设备重新配置其操作和通信,例如响应于条件、查询和设备故障来确定所需的资源。作为示例,来自位于服务器处的用户的关于由IoT设备监视的设备的子集的操作的查询可以导致雾设备选择回答该查询所需的IoT设备,例如特定传感器。来自这些传感器的数据然后可以由传感器、数据聚合器或网关的任意组合进行聚合和分析,然后再由雾化设备发送到服务器以回答查询。在此示例中,雾中的IoT设备可以基于查询选择使用的传感器,例如添加来自流量传感器或温度传感器的数据。此外,如果某些IoT设备无法运行,则雾设备中的其他IoT设备(如果可用)可能会提供类似数据。
[0330] 尽管本文已经公开了某些示例方法、装置和制品,但是该专利的覆盖范围不限于此。相反,该专利涵盖了完全落入本专利权利要求范围内的所有方法,设备和制造物品。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈