掌桥专利:专业的专利平台
掌桥专利
首页

用于视频编码器中的率失真优化和重构的有效变换和转置

文献发布时间:2023-06-19 18:35:48


用于视频编码器中的率失真优化和重构的有效变换和转置

背景技术

硬件视频编码器的关键在于时域与频域之间的有效变换的实现。对于例如AV1和VP9等视频编解码器,正向和逆变换对于率失真优化(RDO)和重构(REC)两者是必不可少的,其中变换运算由存储器密集型转置运算分开。RDO可包括通过测试用于编码超级块的变换类型、形状和/或大小的不同潜在组合来优化率失真以改进质量。REC可包括使用来自RDO的信息来微调选择和执行编码。可由视频编解码器支持的不同变换类型、形状和尺寸可导致用于RDO的大搜索空间。由于搜索空间的大小,可能无法用硬件吞吐量评估所有可能性,所述硬件吞吐量规定对于给定的超级块可以评估多少可能性。然而,在支持许多不同配置的同时实现高吞吐量以及实现面积和功率有效电路是极具挑战性的。

视频编码的常规方法可以采用迭代方法来执行变换,其中,当管线在多遍数据上迭代时,阻止进一步的像素输入进入管线。真正的乘法器用于应用在面积、功率和定时上昂贵的变换,并且因此限制性能。另一常规方法可在若干小函数上迭代计算以组成导致总体变换的较大函数。可能需要相当数量的迭代,且对于较大变换尺寸,所得阻挡可为数百个周期。可使用需要大量资源的物理转置电路执行转置。由于这些和其他原因,常规方法可能需要大且低效的电路,因为它们不能很好地缩放以用于高吞吐量。

发明内容

本公开的实施例涉及用于视频编码器中的率失真优化和重构的有效变换和转置。公开了可用于为高吞吐量视频编码器或解码器提供有效使用面积和功率的系统和方法。

在本发明的其他方面中,所公开的方法可提供具有有效地共享变换硬件资源的能力的非阻挡视频处理管线。在至少一个实施例中,视频处理管线的变换硬件资源可以跨处理参数(例如,像素块尺寸、变换类型、视频流位深度和/或多种编码格式)共享,并且用于帧间和帧内编码。视频处理管线可分成多个相位,每个相位具有多个半蝶形(HB)电路、加法器和/或减法器,其可操作以执行变换的计算的相应部分。相位可选择和可配置以执行多个不同像素块尺寸、变换类型、视频流位深度和/或多个编码格式的变换,以及用于帧间和帧内编码,从而允许变换硬件资源的高重复使用。在每一配置中,相位可能能够通过顺序穿过至少一些相位来执行变换,从而产生高吞吐量。

附图说明

以下参考附图详细描述用于在视频编码器中进行率失真优化和重构的有效变换和转置的本系统和方法,其中:

图1示出了根据本公开的一些实施例的适用于视频的率失真优化和重构的量化和变换单元的示例数据流;

图2示出了根据本公开的一些实施例用于共享变换硬件资源的电路的示例;

图3示出了根据本公开的一些实施例的表的示例,所述表反映变换硬件资源可以如何映射至变换的相位;

图4A示出了根据本公开的一些实施例可以用于实现数据流的半蝶形电路的示例;

图4B示出了根据本公开的一些实施例的用于绕过入口管线阶段的示例电路;

图4C示出了根据本公开的一些实施例的用于绕过出口管线阶段的示例电路;

图5描绘了根据本发明的一些实施例的8x8像素块的转置运算的方面的示例;

图6示出了根据本公开的至少一些实施例的用于转置像素块的螺旋存储器存取模式的示例;

图7是根据本公开的至少一些实施例的可以用于实现图6的螺旋存储器存取模式的过程的示例的流程图;

图8A包括根据本公开的至少一些实施例的可以用于实现图6的螺旋存储器存取模式的过程的示例的流程图;

图8B包括根据本公开的至少一些实施例的可以用于实现图6的螺旋存储器存取模式的过程的示例的流程图;

图9包括根据本公开的至少一些实施例的表,所述表示出了可以如何使用偏移将像素块存储在同一缓冲器中的示例;

图10示出了根据本公开的至少一些实施例的地址空间可以如何被划分为写入范围、读取范围和空闲范围的示例;

图11是示出了根据本公开的一些实施例的用于使用共享硬件资源来操作视频处理管线的方法的流程图;

图12是适合用于实现本公开的一些实施例的一个或更多个示例计算设备的框图;以及

图13是适合用于实现本公开的一些实施例的示例数据中心的框图。

具体实施方式

本公开的实施例涉及用于视频编码器中的率失真优化和重构的有效变换和转置。公开了可用于为高吞吐量视频编码器或解码器提供有效使用面积和功率的系统和方法。

与常规方法相比,本公开提供了变换管线,所述变换管线能够将变换应用于像素块(所述像素块还可被称为图块、块分区或子块)而不使用像素上的迭代遍次也不使用计算资源上的迭代来进行阻挡。吞吐量PPC可以等于输入PPC。可针对多种不同处理参数(例如,像素块尺寸、变换类型、视频流位深度和/或多个编码格式)以及针对帧间和帧内编码而存在这些性质。提供非阻挡设计可导致高吞吐量并大大简化调度,从而允许诸如帧间和帧内编码单元之类的实体更容易地共享同一数据流100。

在本发明的其他方面中,所公开的方法可提供具有有效地共享变换硬件资源的能力的非阻挡视频处理管线。在至少一个实施例中,视频处理管线的变换硬件资源可以跨处理参数(例如,像素块尺寸、变换类型、视频流位深度和/或多种编码格式)共享,并且用于帧间和帧内编码。视频处理管线可分成多个相位,每个相位具有多个半蝶形(HB)电路、加法器和/或减法器,其可操作以执行变换的计算的相应部分。相位可选择和可配置以执行多个不同像素块尺寸、变换类型、视频流位深度和/或多个编码格式的变换,以及用于帧间和帧内编码,从而允许变换硬件资源的高重复使用。在每一配置中,相位可能能够通过顺序穿过至少一些相位来执行变换,从而产生高吞吐量。

所公开的管线可以使用半蝶形网络(包括多个HB和多个加法器)、接着是转置以及另一个半蝶形网络(包括多个HB)来实现变换单元(例如,正变换电路、逆变换电路等)。如本文中所使用,半蝶形网络可指代包括用以对系数执行变换组成的至少一部分的一个或更多个半蝶形电路的电路。半蝶形或半蝶形电路可指代经配置以通过三角函数值将输入(例如,两个输入)的线性组合缩放成单个输出(例如,使用如图4A中的两倍数及相加)的电路。如本文中所描述,半蝶形电路可在可联网以产生较大变换的输入对上形成较小运算。

在至少一个实施例中,半蝶形可对应于蝶形处理流程(例如,源自快速傅里叶变换(FFT))中的相关对的输出中的一者,其中输入对被线性组合以产生两个输出。例如,考虑AV1中的FDCT16变换的阶段5的提取,其中cospi[8]和cospi[40]值是已知的三角常数:

如上所示,输出4至7是输入4至7的线性组合。

这些术语可以重新排列如下,

其中,in[4]和in[7]线性组合以独立于所有其他输入产生输出out[4]和out[7]。类似地,in[5]和in[6]被组合以产生out[5]和out[6]。相关对的输出中的一者例如,来自out[5]和out[6]对的out[5]可指代蝶形处理流程的一半,且可实施为半蝶形电路。FFT的其中输入对互相混合以产生输出对可以被认为是基数-2类型。基数-2可以表示较大的FFT被划分和征服成较小的FFT的算法因子。本公开还涉及基数格式,诸如基数-4,相反,基数格式表示数字表示中的每个数位的范围。

在一个或更多个实施例中,四个高效率变换单元可以以跨64每时钟像素(pixels-per-clock)(PPC)、32PPC和16PPC的不同吞吐量缩放下操作。例如,REC可以以32PPC操作,而RDO以针对正变换的64PPC操作和针对逆变换的16PPC操作。可以针对每个单元的性能需要来定制跨变换单元的变化的PPC,以换取电路面积和效率。

正变换与逆变换之间的RDO吞吐量失配可以由计算针对RDO的变换在频域中而非空间域中的相对成本引起。因此,逆变换可仅需要处理在正向域中执行的变换的一小部分,且平均试验等待时间可大大减少,而正变换电路产生较高性能。与统一吞吐量相比,PPC失配可以允许相当大的面积和功率减小,因为逆变换可以支持更少的像素块类型,例如仅一种变换类型和大小。

所有变换三角系数可按顺序基数-4格式(或另一数字格式)被预编码。预编码可以允许在没有任何乘法器的情况下实现变换电路。例如,变换电路可以仅依赖于最小宽度的多相加(或多加法器)运算,其中每半蝶形使用多相加。(例如,AV1的)矩形缩放运算也是无乘法器的,使得整个变换电路可为无乘法器的。

变换的管线可以跨所支持的所有变换类型和大小共享算术逻辑。ADST4和IDT变换可被映射到HB运算,同时可证明地保持位精度。HB网络可跨管线相位聚集,以最小化执行特定变换所需的HB运算的总数。可以针对跨所有变换类型和大小的相同最大吞吐量共享资源。例如,可以在管线的64PPC实现的相同时钟周期(4x4/64=1/4)中处理四个4x4变换,而32x32变换可以使用每维度16个周期(32x32/64=16)。

针对不同编码格式(如AV1和VP9)的舍入和截断运算可以合并到高速多加法电路中,而无需单独的处理电路,即使在编解码器之间存在分数精度差异的情况下。照此,可提供均匀管线,其中可使用共享HB、加法器和减法器支持多个编解码器以用于其相应位精度。本发明的方面还允许在VP9全精度ADST算术与对应的AV1截断算术之间共享资源。多加法电路还可包括可用以减小某些变换运算的输出位宽度的可变舍入位置能力。例如,恒等变换HB运算可超过在其他变换中发现的HB运算的位宽度而不相应地舍入。

在至少一个实施例中,针对每个支持的编码格式变换精度(例如,对于AV1和VP9两者),REC的逆变换电路可以是位准确的。其他变换电路(例如,针对RDO或针对REC的正变换电路)可近似编码格式而不保留位准确性,从而允许节省面积、功率和复杂性。还可通过在共享资源的所有编解码器、变换类型和/或大小上传播位宽的波前来最小化在每个相位所需的总位精度,从而在所有计算中导致最小位宽的硬件——导致面积和功率节省。

可以使用每钳位实例共享各种可能范围的可配置电路来高效地执行范围钳位,从而适应不同的位深度和/或编解码器。为了减少等待时间,可跳过一个或更多个管线阶段。一个或更多个配置电路可以配置和选择阶段,以允许使用具有每个多路复用器(mux)的低数量的选择源的低功率独热mux的资源共享。可针对多个编码格式(例如,VP9和AV1两者)、所有位深度、所有变换类型和/或所有变换大小跨越统一管线执行共享。照此,可使用所公开的方法来容易地缩放到可在未来编解码器(128x128、256x256及以上)中出现的较大变换尺寸。

不正确的变换尺寸序列可能导致输入阻挡,尽管使用所公开的方法较小。在至少一个实施例中,可通过调谐置于足够吞吐量的管线内的转置缓冲器的深度同时以主要增加的尺寸的次序处理变换来避免阻挡。在至少一个实施例中,可使用允许变换之间转置缓冲器尺寸的细粒度调节的基于FIFO的方法来执行转置运算。转置缓冲器尺寸可调整,例如,根据所支持的最大变换尺寸的因素。变化的螺旋存储器读取和写入模式可用于使用变换数据的交错、解交错和桶移位的混合来转置所有大小的变换。所有变换大小可以最大吞吐量来处理,从而确保与变换的计算部分匹配的效率。

所公开的方法进一步允许使用少于N个独立存储单元(如逻辑RAM)来实施NxN变换。此减小可例如使用时间多路复用、写入启用以及相对于变换尺寸的过量带宽来实现。照此,所公开的方法可缩放到具有较大变换尺寸的未来编解码器。在一个或更多个实施例中,读/写模式的交替方案可以用于节省缓冲器空间。

一些编解码器(如VP9)不具有针对重量化流的故障安全,这可导致变换算术在解码期间溢出。所公开的方法可以通过钳制和减少由超出范围的流引起的任何漂移误差来提供保护。在至少一个实施例中,可以提供基于硬件的错误报告机制,其允许固件以较不积极的参数快速重试编码。溢出检测可在变换单元中实施,而不进一步将检测问题传播到下游单元。

所公开的实施例可以被包括在多种不同系统中,如汽车系统(例如,用于自主或半自主机器的控制系统、用于自主或半自主机器的感知系统),使用机器人实现的系统、空中系统、中间系统、划船系统、智能区域监视系统、用于执行深度学习操作的系统、用于执行模拟操作的系统、使用边缘设备实现的系统,结合一个或更多个虚拟机(VM)的系统、至少部分地在数据中心中实现的系统、至少部分地使用云计算资源实现的系统、和/或其他类型的系统。虽然提供了具体示例,但是这些示例可以被概括为超出实现细节。例如,虽然所公开的方法可与VP9和AV1兼容,但可实施其他编码格式。另外,虽然主要描述视频编码,但本发明的方面可集成到其他类型的管线中,例如视频解码器和/或采用变换和/或转置的其他管线。

参考图1,图1示出了根据本公开的一些实施例的适用于视频的率失真优化和重构的量化和变换单元的示例数据流100。应当理解,本文所述的这种和其他布置仅作为示例进行阐述。除了或代替所示的布置和元件,可使用其他布置和元件(例如,机器、接口、功能、次序、电路、功能分组等),且可完全省略一些元件。进一步,本文描述的一些元件是可以被实现为分立或分布式组件或与其他组件结合、和以任何合适的组合和位置实现的功能实体或单元。本文描述为由实体或单元执行的各个功能可以由硬件、固件和/或软件执行。例如,各个功能可以通过执行存储在存储器和/或一个或更多个电路中的指令的处理器来实现。

数据流100包括正变换102、量化104、逆量化106和逆变换108。使用RDO的示例示出了数据流100,但是如本文所描述的,类似的数据流可以用于重构。如图1所示,正变换102可以以残差像素或残差的形式对块序列或像素块(例如,超级块的分区)进行运算,随后进行量化104,然后进行逆量化106,并且最后进行逆变换108以产生像素块的残差像素。如本文所描述的,不是每个像素块可以穿过数据流100的所有阶段(例如,对于RDO)。然而,当数据流100用于RDO中的帧内预测时,来自逆变换108的残余像素可以用作某些像素块的反馈。同样如所示出的,对于RDO,来自量化104和逆量化106的输出可以用于计算用于计算RDO度量的像素块的位率和失真。类似输出也可用于促进重构。

如图所示,正变换102包括正向列变换102A、正向转置102B以及正向行变换102C。逆变换108包含逆行变换108A、逆转置108B和逆列变换108C。当数据流100用于重构时,可以包括类似的分量。然而,那些组件可以以与图1中所示的PPC不同PPC操作(例如,以较低的最大PPC,例如,贯穿数据流100的恒定32PPC)。另外,图1示出逆变换漏斗114,其可以不用于被提供用于重构的量化和变换单元中。

数据流100可以在不使用像素上的迭代回合也不使用计算资源上的迭代进行阻挡的情况下实现。因此,吞吐量PPC可以等效于输入PPC。提供非阻挡设计可大大简化调度,从而允许帧间和帧内编码单元更容易地共享同一数据流100,以及其他益处。然而,提供此非阻挡设计有能力有效地共享用于多种不同处理参数(例如,像素块尺寸、变换类型、视频流位深度和/或多个编码格式)以及用于帧间和帧内编码的变换硬件资源,这是极具挑战性的。

根据一个或更多个实施例,调度器116可以向数据流100提供具有多种不同潜在尺寸的像素块,从而产生不同形状和大小的残差像素块(例如,正方形和非正方形,如不同大小的矩形)。示例包括64x64、64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8、8x4、4x8或4x4,其中任一者可由数据流100处理。在至少一个实施例中,调度器116可以表示实现调度策略的电路的任何组合,所述调度策略诸如通常向数据流100提供从较小变换尺寸转变到较大变换尺寸的像素块。如本文中所描述,调度策略的一些例外可包含将16x16变换(对于管线的不同实现方式,其尺寸可不同)略插入到RDO中,使得反馈变换使数据准时就绪以防止调度中的未来间隙。作为进一步的示例,调度器116可以使用线性整数程序来实现。

数据流100还可以支持多种变换类型,如通过示例而非限制的方式,离散余弦变换(DCT)、恒等变换(IDT)、非对称离散正弦变换(ADST)、和/或翻转AST。进一步地,数据流100可支持不同的潜在视频流位深度,例如,作为示例而非限制,8、10和/或12。数据流100还可支持多种编码格式,诸如,作为示例而非限制,AO媒体视频1(AV1)和/或视频预测器9(VP9)。

在至少一个实施例中,数据流100中的每个进程可以对应于相应的时钟周期。因此,对于RDO正向列变换,数据流100可为九个时钟周期深,对于行变换,数据流100可为九个时钟周期深(不包括可根据变换尺寸而变化的转置单元的等待时间),对于重构,数据流100可为九个时钟周期深。如图所示,数据流110用于以同一PPC执行正向列变换102A、正向转置102B、正向行变换102C、量化104和逆量化106。在本示例中,PPC是64PPC,这对于每个步骤而言可能不足够快以在单个周期中完全处理某些像素块,但是允许更小和更高效的硬件设计。例如,4x4像素块可能仅需要在每个步骤一个周期内一起处理16PPC,但是32x32像素块可能需要在每个步骤一个周期内处理1024PPC。因此,像素块(例如,与比数据流100的PPC更多的像素相对应的像素块)的处理可能在多个周期内分解。

正变换102的正向列变换102A可以对像素块的一列或更多列执行正向列变换。可以对像素块的一列或更多列执行处理。例如,对于正向列变换102A,可以在周期中对4x4像素块的所有四列进行运算。对于32x32像素块,正向列变换102A可以在周期中一定数量的列上运算,从而使得总元素数量小于或等于PPC。例如,32x32像素块的两列可以适合64PPC示例。在一个或更多个实施例中,数据流100被配置为在将符合PPC配置的周期中对像素块的多达列和/或元素进行运算。进一步,可以通过数据流100的步骤串行地处理像素块的部分(可以在步骤内使用并行处理)。例如,在32×32像素块的前两列之后,正向列变换102A可对32x32像素块接下来的两列进行运算,而正向转置102B对32x32像素块的前两列进行运算,其中在64PPC处理全像素块的步骤使用16个周期。

正变换102的正向转置102B可以对来自正向列变换102A的一个或更多个列执行正向转置。例如,正向转置102B可使用矩阵转置运算来将一个或更多个列移位到一个或更多个行中。正向行变换102C可接着对所述一个或更多个行执行正变换。逆变换108可以类似于正变换102来运算,但是可能利用不同的PPC(例如,针对如本文中所描述的RDO)。

如在此所描述的,数据流100可以支持多种不同的处理参数,如像素块尺寸、变换类型、视频流位深度、和/或多种编码格式。在至少一个实施例中,可以为像素块提供一个或更多个信号以便配置用于处理像素块的数据流100。特定来说,数据流100可使用共享硬件来支持参数的这些不同组合中的任一者,且可提供信号来配置硬件,例如以指定一个或更多个像素块维度、变换类型、位深度、输入格式(例如,输入是行还是列)、像素块形状和编码格式。例如,相同的变换网络可用于根据这些不同配置的任何组合来处理像素块。

现在参见图2,图2示出了根据本公开的一些实施例的用于共享变换硬件资源204的电路200的示例。电路200包括一个或更多个配置电路202,其可运算以根据一个或更多个处理参数206配置变换硬件资源204。如所示,变换硬件资源204包括多个相位,如相位208A、相位208B、相位208C、相位208D、相位208E、相位208F、相位208G、相位208H和相位208I(可以统称为“相位208”或单独称为“相位208”)。在至少一个实施例中,可以为每个变换提供相应的变换硬件资源204。例如,虽然仅示出了一组相位208,但是可以为RDO和重构(其中的每一个可以由配置电路202配置)二者的正变换102和逆变换108提供变换硬件资源204。

用于依据波函数的和表达数据点的有限序列的变换可以表示为阶段的序列。例如,DCT的规范使用十个计算阶段来表达。在至少一个实施例中,每个阶段可以被实现为一个或更多个半蝶形运算和两个(或更多个)操作数加法或减法运算,即使在变换的规范不提供诸如表示的情况下。明确地说,每半蝶形运算可包括蝶形DCT(a*b+c*d)中发现的两个乘法及相加。在至少一个实施例中,如本文描述,可通过对三角乘数进行预编码而在多加法运算(包含两个乘法器和加法器)中实施半蝶形。

在至少一个实施例中,配置电路202可以根据处理参数206配置哪个一个或更多个相位208处理哪个一个或更多个阶段和/或阶段的部分。对于不需要每一相位208的变换,配置电路202可配置变换硬件资源204以穿过和/或绕过相位208中的一个或更多个。通过基于处理参数206将变换阶段映射到变换硬件资源204的一个或更多个对应相位,配置电路202可确定变换硬件资源204的哪些部分对像素块执行对应计算序列,从而允许资源的有效共享。

在至少一个实施例中,每个相位可以包括并行运算并且被配置成用于对像素块的系数执行变换组成的至少一部分的半蝶形网络(例如,使用函数的组成实现等效于矩阵乘法的结果)。相位可以使用一个或更多个多加法电路并且不使用乘法器来实现阶段的一个或更多个半蝶形运算的至少一部分。多加法电路可包括在半蝶形末尾的二进制加法器,其在将一对数相加以产生多加法运算的输出时将位从最低有效位传播到最高有效位。可以使用任何合适的加法器,诸如纹波加法器或前瞻进位加法器。如本文所述,每个多加法运算(在使用多加法器的实施例中)可仅需要单个二进制加法器,这可在多个项被重组合为两个操作数之后发生。进一步,相位208的半蝶形可能不知道它们被放置在数据流100中的何处,从而允许配置电路202在处理变换时指派给特定相位208的次序和/或序列上的极大灵活性。

在至少一个实施例中,可以针对跨所有支持的变换类型和大小、所有位深度和所有编码格式的相同最大吞吐量共享资源。例如,可以在64PPC管线的相同时钟周期(4x4/64=1/4)中处理四个4x4变换,而32x32变换可能需要每个维度16个周期(32x32/64=16)。在一个变换实例中,经实例化的半蝶形的数目可为264,其中在64PPC处针对完整2D DCT3232x32执行(例如,使用当每一列或行经过管线时重新访问的264个多添加电路)4224个多添加。这对于64PPC吞吐量是最小的,因为存在至少一种可能需要许多半蝶形的变换类型,即DCT32x32。

配置电路202通常可以指能够配置数据流100和/或相位208的电路的任何组合(例如,包括整个系统的集中式和/或分布式电路,其可以或可以不与其他电路集成)。在至少一个实施例中,用于实现配置的一个或更多个方面的数据可连同来自管线顶部的数据一起行进(例如,作为带内分组)。例如,可以在相位208的上游发布该配置并且在每个相位208重新注册该配置。该方法可以简化在不同的变换类型上运行两个不同相位208。具有针对每个相位208的配置的本地副本还可以减少一个或更多个配置电路202必须驱动的负载,这进而使得定时目标更容易满足。例如,变换大小和类型可与系数数据一起沿着管线发射。这可允许两个或两个以上不同变换类型同时流经管线。在至少一个实施例中,可以从中央配置单元广播一个或更多个配置方面。例如,编解码器或编码格式选择(例如,AV1或VP9的编解码器或编码格式选择)可直接发送到转置电路,而无需通过管线跟踪数据。该方法可用于避免将配置数据跨转置中发现的缓冲器(例如,FIFO缓冲器)传递。

现在参见图3,图3示出了根据本公开的一些实施例的表300的示例,所述表反映变换硬件资源可以如何映射至变换的相位。在至少一个实施例中,配置电路202可以被配置为根据表300将变换硬件资源204映射到相位208。作为示例而非限制,表300用于1-D DCT变换。然而,可为其他变换提供类似映射。

在图3中,N可以指代有待使用变换硬件资源204进行处理的像素块的一个或更多个维度。由此,列302可反映64x64像素块的映射信息。列304提供针对不同像素块维度提供的相位分解信息的不同方面。例如,相位和像素块尺寸的相位击穿信息包括被映射到相位的级。由此,1-D DCT的阶段2被映射到64x64像素块的相位208A。对于其他像素块尺寸,相位208A可以用作通路,如图3所示。进一步,对于一些相位,相位可被划分为多个相位208。例如,如列306所示,可在1-D DCT 16x16的相位208F和208G上提供阶段4。

相位和像素块尺寸的相位击穿信息还包括所计算的r/c,其指示由相位208所计算的行或列的数量。例如,64x64像素块的所有相位208在列302中被指示为处理一行或一列。在每个r/c的相位击穿信息(±,hb)中,±表示每个相位的加法器的数量,并且hb表示每行或每列的每个相位的半蝶形实现的乘法器的数量。由此,64x64像素块的相位208D可包括44个加法器/减法器(例如,两个变元的)和10个半蝶形(例如,每两个乘法器和加法器或多加法器),如列302中所指示。类似地,在全部r/c的相位击穿信息(±,hb)中,±表示每个相位的加法器/减法器的总数,并且hb表示所有行或列的每个相位的半蝶形实现的乘法器的总数。半蝶形内的所有加法可为加法,其中通过负常数系数处置任何负。在至少一个实施例中,加法与减法的结合不是动态地执行的。加法运算可仅与其他加法运算共享以及与其他减法运算共享减法运算,而无需动态选择资源的加法对比减法。因为加法器和减法器专用于一种类型的运算,所以该方法可以导致更小、更快和更功率高效的硬件。由于给定相位208上的可能的失配,这也可在不需要附加加法器或减法器资源的情况下实现。

列308指示每个相所需的加法器和乘法器的最大数量,并且列310指示相对于DCT64的N=64的最大值之间的增量。如所指示的,相位208F可能需要有限数量的附加乘数,从而指示资源的高效共享。虽然针对不同维度示出了映射,但并非所有变换大小都需要在数据流100中实现。例如,在至少一个实施例中,可以不使用N=64,其中最大变换尺寸是N=32。在这样的示例中,相对于N=32的最大值之间的增量将为0。

在至少一个实施例中,配置电路202可以配置相位208的输入和输出,用于使用半蝶形的输入和输出之间的多路复用器来处理特定变换。相位击穿信息还包括指示配置电路202实现相位所需的多路复用器输入的数量的列312。如所指示的,多路复用输入计数是最小的,其指示HB在最坏情况情形中执行的变换的数量。然而,其他半蝶形可归因于具有较少变换而需要较少多路复用。对于不同相位,不需要多路复用器,有利地为加法器提供未多路复用的加法项。

在至少一个实施例中,配置电路202用于配置变换硬件资源204的多路复用器可以使用热选择来实现,从而提供低功率设计。可以使用直接AND-OR(与-或)表达式来实现所有多路复用以用于具有单热选择的高速多路复用。除了快速之外,当不满足情况时,此多路复用器可产生0作为默认值,且0可为用于乘法的消减器运算及用于加法的恒等运算符,使得其为用于此实施例的理想默认值。此多路复用结构还可对总计二的自然功率(2x1、4x1等)的选择具有低相依性,且甚至当选择不对二的自然功率编号时也可为有效的。

AV1和VP9编解码器标准没有在半蝶形方面规定ADST4和IDT,从而使得它们的硬件不可与其他变换共享。所公开的方法提供ADST4和IDT到半蝶形或两个操作数加/减运算的映射,同时保持位准确性,从而允许那些变换与其他变换直接共享硬件,从而避免仅用于那些变换的单独电路路径。

映射ADST时出现不同挑战,其示例参照ADST4来描述。一个问题是ADST4在某些计算阶段上具有四个以上的输出。大小为N的其他变换DCT-N和ADST-N恰好具有N个输出。这使得触发器管理复杂并且硬件共享更加困难。另一问题是所有半蝶形运算可舍入和截断以保持检查中的结果的位宽。然而,ADST4变换保持其倍增结果的全宽度,直到最后输出阶段(类似于其他大小的VP9 ADST变换,对于AV1不是这种情况)。此外,在ADST4中,加法和减法运算可以具有三个操作数。所有其他变换可具有两个操作数加法和减法,且由于先前问题,加法器的位宽宽得多。此外,正变换与逆变换之间的差异通常是阶段的反转。对于ADST4来说,ADST4并不成立,并且在早期阶段对于ADST4来说都是倍重的,需要针对ADST4的不同设计。而且,由于不能与用于其他变换的硬件共享的高乘法器成本,因此难以实现线路速率。

为了避免与ADST相关联的各个问题,ADST的常规概念可以被重新制定和重构,从而使得其可以以类似于其他变换的方式来表达,因此允许资源共享。例如,正向ADST4(FADST4)可用半蝶形和两个操作数加法器/减法器来表示。

下表1突出显示了重构FADST4中涉及的步骤:

上表以半蝶形和两个操作数加法器的形式表达FADST4。原始VP9/AV1代码在整个计算过程中携带全精度,并且在最终添加之后仅舍入和截断。然而,通过携带舍入、截断半蝶形且在末尾钳位加法器,紧密近似可足够,因为精度差可能较小。

下表2突出显示了具有半蝶形和两个操作数加法器的FADST实现方式:

在至少一个实施例中,所有八个半蝶形可处于一个阶段中,而不是两个半蝶形处于两个阶段中,以尽可能快地减少额外输出的数目,假定第二级具有八个输出而非四个。这还可减少整个过程所需的附加加法器的数量。

以半蝶形和两个操作数加法器/减法器表示逆ADST4可能更复杂以便匹配重构中的位精度。

下表3突出显示了涉及重构IADST4的步骤:

下表4突出显示了具有半蝶形和两个操作数加法器的IADST实现方式:

可使全精度半蝶形与也舍入和截断的半蝶形操作共享。在截断和舍入之前,可计算全精度输出。可实现截短和舍入半蝶形的特殊版本,使得产生全精度输出作为第二输出。此外,也可以少量成本提供单个输入舍入模式选择位。利用这些增加的特征,如果IADST4可以与其他变换的那些共享,则半蝶形。

使用乘法器实现乘法通常是硬件密集的。所公开的方法允许数据流100的无乘法器实现。例如,可能不需要乘法器来执行矩形缩放和半蝶形两者的变换。对于矩形缩放,操作可以被减少到多次加法。半蝶形还可实施为多加法操作(例如,每半蝶形一个),且可在不使用乘法器的情况下模拟两个乘法和加法。对于半蝶形,常规地,为了应用特定变换,需要实乘器以便以基数-4、基数-8或其他数字格式编码被乘数的三角系数以将变换的加法系数制表。在其他问题中,此过程需要缓慢且大的XOR门。

如图1中所指示,且根据本发明的方面,可例如以基数-4格式提供变换的经预编码的三角系数120。虽然描述基数-4格式,但其他变换格式可为合适的,例如基数-8或Booth格式。例如,带符号基数-4格式可将数字{0,1,2,3}表示为{-2,-1,0,1,2}。不是在半蝶形内执行全尺度乘法运算,而是为了产生半蝶形运算的乘法项,可使用经预编码的三角系数120(例如,经预编码的带符号基数-4三角系数120),使得仅需要高速加法来完成运算(例如,在单个周期中)。照此,半蝶形操作可仅需要末端处的单个二进制加法器来产生输出。此外,与并行编码相反,可以使用串行基数四编码以在操作中节省1位宽度。特别地,由于余弦/正弦在AV1/VP9中具有偶数个位,所以可能丢失1位宽度。在其他情况下,反而可能丢失一个附加项(例如,同时仍使用串行编码)。

在至少一个实施例中,可以使用任何合适的方法(在芯片上或外部计算)将预编码的三角系数120存储在芯片上,并且可以由配置电路202根据处理参数206选择用于变换的适当的系数组。作为示例而非限制,对于AV1和VP9实现,12位AV1和14位VP9余弦和正弦表可预先转换成基数-4。当一维变换支持AV1和VP9两者时,可使用AV1的14位表示而非12位表示,使得AV1和VP9可取决于使用中的编解码器共享同一半蝶形逻辑。

排除常数,使用12位精度三角法转换为7位基数-4的20位(6个3位(-2,-1,0,+1,+2)和1个2位领先数(-1,0,+1),而14位精度需要8位基数-4的23位(6个3位和1个2位领先数)。下表5提供了以基数-4表示的余弦的一些示例:

若干变换类型可以共享同一半蝶形电路。这可例如通过配置电路202对当时正在使用系数中的哪些系数进行多路复用来实现,因为仅一种类型的变换可在特定时钟周期上执行。

忽略常数和舍入项,AV1 12位三角中的每个半蝶形(X*cos A+Y*cos B)需要多达14个加法项:对于左操作数(X*cos A)为7,对于右操作数(Y*cos B)为7。对于14位VP9三角法,加法项的数量是16(也不包括常数和舍入项)。每个基数-4位数表示加法项,但是可以进行以下观察:为0的每个基数-4系数项表示要加法的一个更少的项。因此,在至少一个实施例中,为了在改进时序的同时减小面积和功率,可在半蝶形中使零基数-4系数的数目最大化。在跨若干变换类型共享半蝶形操作的实施例中,加法项可通过配置电路202多路复用在相似位置处均具有0个系数的三角系数来消除。

表6示出了具有匹配零的附加项的示例:

在表6的示例中,4^5个系数具有4017、3996和3973的匹配0。因此,所有这三个输入可在共享半蝶形中多路复用在一起,从而在共享乘法器中产生少一个加法项。

常规地,在量化和逆量化之后,量化和变换单元可以将数据从频域转换回空间或时域。然后,可以使用转换到空间域的数据来执行RDO计算,其还可以用作帧内预测的反馈。由此,可以对数据执行逆变换以计算RDO。为了维护管线的PPC并且简化设计,可以使用相同的硬件设计在与正变换以相同的PPC执行逆变换。

所公开的方法可以使用仍处于频域中的数据来执行RDO计算(例如,计算像素块的一个或更多个RDO成本)。由此,不需要对数据执行逆变换以计算RDO。另外,只有正变换102被配置成用于操作的像素块的子集可以用于为帧内预测提供反馈(例如,用于计算近似邻居)。而且,用于为帧内预测提供反馈的像素块可以小于正变换102被配置为对其进行操作的最大像素块。例如,逆变换漏斗114可滤除不用于提供反馈的像素块。因此,逆变换108可以比正变换102、量化104和逆量化106更低的PPC操作,而其他数据可以被馈送至数据流100中。由此,逆变换108可以使用具有减少的平均等待时间的较小和较低功率设计来实现。

在至少一个实施例中,调度器116可以被配置成用于向数据流100提供将不会被逆变换108的较慢电路阻挡或停滞的像素块。这可以包括调度器116选择不需要使用逆变换108进行操作(例如,不用于反馈)的像素块,和/或将需要使用逆变换108进行操作的像素块间隔至少需要考虑作为逆变换漏斗114的PPC的差异的多个周期(例如,具有与数据流100的部分之间的处理速度比相对应的间隙,在本示例中,该间隙可以大约为1/4)。

逆变换漏斗114可以使用各个可能的标准来选择像素块的子集。在至少一个实施例中,选择标准可以至少基于像素块的一个或更多个维度。例如,逆变换漏斗114可以被配置成用于选择小于正变换102被配置成用于操作的最大像素块的像素块。在至少一个实施例中,逆变换漏斗114可以仅允许使用逆变换108对特定大小和/或尺寸的像素块进行操作。作为示例而非限制,逆变换漏斗114可仅准许使用逆变换108对16x16像素块进行操作(例如,仅支持一个变换类型和大小)。使用16x16像素块的示例,像素块的边界像素可具有足够的质量以提供帧内预测的反馈以用于后续变换(其可针对不同变换大小)而不需要对最大大小的像素块执行逆变换108。

进一步地,调度器116可以仅需要将有待使用逆变换108进行操作的16×16像素块间隔至少阈值数量的时钟周期以避免停止,同时保持调度剩余像素块的灵活性。例如,只要帧内编码单元的调度器116确保使用逆变换108进行操作的像素块(例如,对应于用于确定另一像素块的上边界和左边界的子集)被充分间隔开以避免阻挡,则帧间编码单元的调度器116可在可用时将像素块提供给数据流100而无需考虑阻挡。在至少一个实施例中,用于每个单元的调度器116可以至少基于小到大像素块大小顺序(例如,所有4x4后跟所有8x4、4x8、8x8等)将块提供给管线,其中16x16s中的一些乱序用于逆变换108的应用。由此,这些单元可共享管线而不需要每个单元的单独管线。

可以使用将大的PPC输入转换成更小的PPC输出的电路来实现逆变换漏斗114。在至少一个实施例中,使用先进先出(FIFO)缓冲器来实现逆变换漏斗114。在图1的示例中,FIFO缓冲器可以包括各自具有四行的三个64PPC条目以及用于单个16PPC行的输出触发器。在电路的输出被翻转的情况下,可能存在从先进到先出的周期等待时间。在逆行变换108A在第一周期上使用半蝶形来实施的情况下,经翻转输出可为合意的。

可以使用连续网络(如半蝶形网络)的进展来实现变换。由于包含加法和乘法运算,每个连续的网络可能导致位(bit)增益。例如,每次数字被加时,可以获得位,并且相乘可以产生甚至更多的位增益。虽然出于实际目的(诸如,为了限制电路设计的大小),期望以无限精度推动数据流100的步骤,但是可减少用于表示计算的输入和输出的位的数量。因此,钳位和舍入可以用于限制精度和减少位增长。

为了使数据流100产生符合的视频流,应当在任何目的地对视频流进行相同解码。为了实现这一点,逆变换设计必须对所采用的编解码器规范在计算上位准确。可能希望支持8、10或12的位深度,其每一者需要跨计算的不同钳位范围。这些范围在不同编码格式(例如AV1和VP9)之间可能不同,因此在特定操作上允许多达六个钳位情况。钳位范围本身也可在处理的不同位置变化。编码格式之间的精度要求也可以不同。例如,一些VP9计算要求高达37位的全精度。进一步,对于ADST变换,需要跨多个步骤携带全VP9精度。

为了适应不同的位深度和编码格式,常规方法可以在贯穿变换管线的所有变换上对最大大小的表达的硬件进行算术运算。使用需要额外计算步骤以及补充二进制加法的单独移位和舍入操作,可低效地解释在VP9与AV1之间使用的不同部分精度。位深度钳位到不同范围可以以直接逐个情况的方式执行。照此,所得设计可能不利于缩放、高速计时、区域友好,也不利于短暂等待时间。

与常规方法相比,所公开的方法提供了贯穿数据流100的可变位宽度、精度和舍入,这可以显著减小电路大小和功耗。虽然常规方法在整个管线中使用最大可能操作者大小,但所公开的方法可随着位针对每一变换生长和传播,仅需要具有在管线中的位置处共享的特定变换的最大大小(即,所支持变换所需的最小位宽度)。编码格式通常用整数数学来指定。根据本发明的方面,可在对整数输入使用定点精度数学来执行乘法之后使用钳位,从而允许降低至少一些分数精度。钳位可伴随截断以丢弃位,以及宽度舍入,以便在丢弃位时维持可能的精度。

可以使用可配置钳位电路(例如,遍地限界)来有效地执行范围钳位,所述可配置钳位电路每个钳位实例共享多个可能的范围(例如,所有需要的范围,如使用AV1和VP9针对3位深度为6),从而适应不同的位深度和编解码器。使用所公开的方法,可通过跨共享资源的所有编解码器、变换类型和大小传播位宽度的波前来最小化每一阶段处所需的总位精度,借此在每一计算中导致最小位宽度的硬件。

另外,对所支持的编码格式的舍入和截断可被合并成半蝶形的高速多添加操作,而无需单独的步骤,同时考虑到编解码器之间的分数精度差异。由此,可提供均匀管线,其中可使用共享半蝶形、加法器和减法器针对其相应位精度支持每一编解码器。资源可以在VP9全精度ADST算术与对应的AV1截断算术之间共享。多加法电路可包含可变舍入位置,其可用以减小单位变换操作的输出位宽度。否则,单位变换半蝶形操作可超过在其他变换中发现的半蝶形操作的位宽度。在至少一个实施例中,四个变换单元中的仅一个对于AV1和VP9变换精度(重构的逆变换108)是位准确的。三个其他变换中的任一者可近似VP9与AV1,从而允许节省面积、功率和复杂性。

在变换期间,可以在加法器的输出端处应用钳位以在变换进行时保持位增长进行检查。这些钳位可以被称为“加法器钳位”,所述加法器钳位除了钳位之外还可以舍入和截断。此外,在每一ID变换的尾端处,可存在通过舍入、移位且接着钳位来移除精度的电路。这些电路上的钳位可以称为“舍入移位钳位”。

矩形和同位变换涉及与√2相关的类似的缩放操作,并且编解码器将它们指定为单独的缩放操作,每个缩放操作具有其自身的舍入和截断步骤。由于舍入和截断的性质,每个操作可以单独地实现以便位准确,这将相当于非常大量的缩放倍数并且支持这些特征所招致的面积成本将是高的。所公开的方法可以重用现有资源,即使仅针对不需要位准确的情况。

在需要位精度的情况下,缩放可以在多个显式步骤中完成。使用所公开的方法,对于其中不需要位准确性的情况,可将步骤合并到单一乘法操作中,从而减少硬件。在逆变换的输入侧上,在穿过(1)与正变换的输出侧上的常数

在64PPC吞吐量处,矩形缩放所需的附加乘法器的数量可以在64的数量级上。所有其他倍增资源(半蝶形)可在使用中。考虑在32x16矩形变换期间两个1-D变换均为DCT的情况。大多数现有半蝶形可被占用用于DCT计算,且因此可留下很少乘法资源来执行矩形缩放,且任何此类资源将非常难以共享。因此,在其他公开的方法中,管线阶段可以添加有用于64PPC的64个乘法器或者用于32PPC的32个乘法器中的一个。可替代地,如果时钟定时具有足够的松弛,则这些标量可以被合并到现有的管线阶段中。为了改善面积和定时,这些额外的乘法器可以具有常数

对于IDT,使用可变舍入位置允许在电路的分数部分中标识要执行的变换以限制输出上的整数位的数量。例如,可使用四分之一舍入位置,以便减少对半蝶形较宽的多加法电路的需要。在至少一个实施例中,与在二进制点之后的第一点处舍入相反,第八点可以用于节省IDT的末端中的乘法器宽度上的2位。这将足以避免甚至对于IDT64的整数位增长,IDT64可以是最大的这种乘数,意味着IDT64可以足以处理所有情况。

现在参见图4A,图4A示出了根据本公开的一些实施例的可以用于实现数据流100的半蝶形电路400A和400B的示例。半蝶形电路400A可在不需要位精度的情况下使用。作为示例而非限制,半蝶形电路400A可以用于为RDO实现正变换102和逆变换108,以及为重构实现正变换102。半蝶形电路400B可以在需要位精度的情况下使用。作为示例而非限制,半蝶形电路400B可用于实现用于重构的逆变换108。如图4A中所示,IADST4的位精度可以暗示半蝶形电路的全精度必须从半蝶形电路执行,以用于保持乘法加法(多加法)操作的所有分数位的额外输出。全精度还可暗示输出上没有舍入。IDCT16的位精度可暗示半蝶形电路必须使用与常规半蝶形电路不同的输出位子集以及不同的舍入位置。

一些编解码器(如VP9)不具有针对重量化流的故障安全,并且这可能导致变换算术在解码期间溢出(违反位宽规则)并且导致高度可见的图像损坏。如果没有做任何事情,则一些硬件溢出由于从正值到负值的环绕而造成大的错误,反之亦然。常规地,可通过设计电路以在最终输出信号上产生大错误来检测一些溢出,此时此情形归因于破坏对应像素而出现。所公开的方法可通过钳制和减少由超出范围的流引起的任何漂移误差,借此使信号上的误差最小化,从而产生更清洁的图像来提供防止溢出的防护。高效的硬件错误报告机制可以使用中断来实现,使得固件可以用较不积极的参数来快速重试该编解码器的编码。另外,可以实施公式以在不将检测问题进一步传播到下游单元的情况下将溢出检测限制到变换单元,否则这将发生。

在至少一个实施例中,当变换单元的任何加法器钳位应用钳位时,可能存在报告的加法器钳位溢出信号。此外,在每一ID变换的尾端处,可存在通过舍入、移位且接着钳位来移除精度的电路。这些电路上的钳位可以称为“舍入移位钳位”。当应用舍入移位钳位时,可报告舍入移位钳位溢出信号。每一ID变换可贡献加法器钳位及舍入移位钳位溢出信号两者。例如,RDO可包括四个1D变换,且因此可产生4个加法器钳位溢出和4个舍入移位钳位溢出信号,用于跨RDO的总共8个溢出信号。溢出信号中的一些可为预期的,且因此这些信号可仅用于报告可忽略或掩蔽的状态。然而,存在从不期望溢出发生在合法视频位流上的情况,并且在这种情况下,电路可被配置为生成中断。

在每个1D变换中,可能存在与存在具有钳位的加法器一样多的加法器钳位溢出源,所以当PPC较大时,其可以是几百个。对于舍入移位钳位溢出信号,可存在与PPC一样多的PPC(例如,64、32或16,取决于变换)。在至少一个实施例中,中断可仅在硬件的行为意外且因此未定义的情况下被宣布。对于AV1,钳位在协议中直接指定,且因此发生的钳位可能不会导致中断。对于VP9,在协议中没有直接指定的钳位,仅检查标记设计中的意外行为。除了IDCT重构之外,可用AV1计算近似所有VP9 1D变换。照此,仅逆行变换108A和逆列变换108C用于重构可实施真实VP91D变换。照此,这些单元可在VP9正被处理时在加法器钳位电路和舍入移位钳位电路上产生中断。其他溢出可被滤除。

VP9编解码器指定:对于位深为8的像素流,逆变换(重构IDCT)的添加阶段不应超过16位,对于位深为10的像素流,都不应超过18位,并且对于位深为12的像素流,都不应超过20位。这同样适用于逆量化输出(IQ)。逆变换单元可以检测这样的位宽越界并且经由中断报告它们。在至少一个实施例中,溢出检测可基于检测预定义情况来实施。例如,在每个1D变换管线的末端,存在舍入移位操作,用于VP9和AV1两者,以将精度降低到更可管理的位数目。在重构的逆变换的结尾处的舍入移位可用以触发中断。在至少一个实施例中,可以检测溢出并且针对溢出校验位宽度C、对其应用舍入移位的位数量S和/或舍入移位之前的输入像素值的特定组合触发中断。在至少一个实施例中,特定C、S组合可分别用将触发中断(如果存在的话)的传入像素值的一个或更多个范围界定。状态位可以用于确定哪个ID变换电路是意外中断的源并且应用适当的补救动作。对C、S的相同检查可将溢出检查限于变换块本身,而不对下游块施加VP9可能另外需要的额外溢出检查的负担。

变换和量化单元的等待时间可以在重构性能中起重要作用。在至少一个实施例中,为了改善变换的性能,可以通过在数据流100处理较小的变换时跳过变换相位来改善等待时间。例如,可以绕过或通过一个或更多个入口管线相位。在至少一个实施例中,调度器116和/或根据数据流指示各个就绪信号和有效信号的电路配置可以使得电路进行等待,直到一个或更多个初始相位为空,然后将像素块直接提供给容纳像素块的处理而不阻挡所需的剩余的一个或更多个相位(例如,最小数量的相位)。此外,在至少一个实施例中,可以绕过或通过一个或更多个出口管线阶段。在至少一个实施例中,在完全处理像素块之后,调度器116和/或电路配置可以使电路系统等待直到一个或更多个剩余相位为空,然后绕过任何剩余相位将当前相位清空。

图4B示出了根据本公开的一些实施例的用于绕过入口管线阶段的示例电路410。图4C示出了根据本公开的一些实施例的用于绕过出口管线阶段的示例性电路412。在图4B和4C中,多路复用器414、416和418可各自在数据路径中且为多位。在至少一个实施例中,绕过可以用于节省功率(例如,降低触发器能量消耗)。

如图4B所示,如果传入的1D DAT大小为4,电路410可以等待直到相位A至D是空的,然后转到相位E同时绕过相位A至D。如果到来的1D DAT的大小为8、16或32,电路410可以等待直到相位A和B是空的,然后转到相位C,同时绕过相位A和B。如果输入的1D DAT大小为64,电路410可以将数据推入相位A而不绕过任何相位。

如图4C所示,如果输入的1D DAT在相位G为大小4,电路410可以等待直到相位H和J为空,然后绕过它们。否则,电路410可以使数据依次通过相位G、H和J。

可提供实施数据流100的转置运算的转置单元以考虑关于变换大小的可变等待时间。例如,不适当的变换大小序列可导致输入阻挡。然而,在放置在管线内的转置缓冲器的深度具有足够吞吐量的情况下可避免阻挡。而且,调度器116以通常增加的大小的次序提供用于处理的变换可减轻阻挡。

正变换转置可以采取一组列输入并且产生行输出(并且对于反向转置反之亦然),从而允许从一个1d操作恢复到下一个操作。图5描绘根据本发明的一些实施例的8x8像素块的转置运算500的方面的示例。这些列被示出为在8个周期内到达:时间t0、t1、t2、…、t7,其中,像素P00至P07表示在时间t0到达的第一列。然后在八个周期上读取它们:时间u0、u1、…、u7,其中在u0处读取从P00至P70的第一行。为了简单起见,在讨论中可以使用列和行坐标(Pxy)而不是来自0、1、…、63的线性排序的像素数。

当每个周期发送列时,可能仅在最后一列已经到达之后处理第一行。假设NxN的矩阵Q跟随P(NxN像素块从列转置到行)到转置运算单元中。假定不存在存储复制,仅存在N

补救此类停止的一种方法可以是复制乒乓(ping-pong)缓冲器中的存储。在传统的乒乓缓冲器中,有一半的缓冲器被写入,而另一半可被读取,并且在下一遍次中反之亦然。当管理像素块大小的排序时,乒乓缓冲器可减轻停止。然而,对于NxN块(N写入N列,然后N读取行),等待时间可以保持2N,这可以是足够的但可以被改进,如本文所描述的。

指示转置缓冲器的大小的主要因素可以是管线中容忍的最大像素块大小。当给出实例时,64x64将被论述为最大像素块大小,因为其为AV1的最硬情况。然而,可使用任何合适的最大大小,例如32x32,其可从本文所描述的64x64情况推断。

目标可以是按照每个时钟周期一列的顺序处理64x64的像素块的转置,并且随后每周期一行的输出给出吞吐量1。这可以通过触发器和多路复用的大阵列来实现。然而,RAM(例如,基于锁存器和触发器)也可用于转置运算。例如,如果每一像素为20位,那么乒乓缓冲器将暗示2x64x64x20=163840位。这将代表显著的触发器计数,并且因此在一些实施例中可以使用RAM。在至少一个实施例中,至少N个RAM可以用于NxN像素块。虽然在下面的实例中使用RAM,但是它们可以推广到存储器或存储器单元。

现在参见图6,图6示出了根据本公开的至少一些实施例的用于转置像素块的螺旋存储器存取模式的示例。该实例针对8x8转置提供,并且可适用于具有8个RAM的RAM存取模式,但是可推广到不同的像素块大小和存储类型。示出了8个RAM的阵列,总共8x8=64个条目,每个RAM具有相同的地址深度或空间。进一步,该实例尝试组织写入数据,使得在时间u0读取地址0处的所有RAM提供行0,在时间u1读取地址1处的所有RAM提供行1,以此类推,直到时间u7读取地址7处的所有RAM提供行7。该属性可以用于弹性存储办法,如本文中所描述的。

图600示出了从时间t0到时间t7的像素列p00-p77到达存储器的到达时间,这可以对应于使用图602-604示出的存储器存取模式。图602示出了针对像素p00-p07时间t0的写入模式。图602-604示出了存储地址A0-A7和存储单元或RAM、RAM0-RAM7。在时间t0处,将P00写入RAM0的地址A0中,因为其在行0上。由于P01在第1行,因此将其写入地址A1,但RAM1用作写入端口,RAM0可能已经在地址A0处繁忙,以此类推,直到P07因为其在第7行而在RAM7的地址A7中写入。图604示出像素p10-p17时间t1的写入模式。这里,像素P10存储在地址A0中,因为其在行0上,但是存储在RAM1中,因为RAM0在地址A0处可能不可用(因为其可存储P00)。在此写入模式之后,使用相同像素和地址次序,但RAM针对每一列写入递增,可导致示出时间t7之后的全存储器的图604。图602-604还示出了时间u0-u7。在地址A0读取所有RAM可以给出行0,在时间u0,在地址A1读取所有RAM可以给出行1,在时间u1,但是周期移位是1,以此类推,直到地址A7为止。

在至少一个实施例中,可以使用桶移位器来实现图6的存储器招牌杆或螺旋填充模式以便针对圆形移位进行调整。现在参见图7,图7是根据本公开的至少一些实施例的可以用于实现图6的螺旋存储器存取模式的过程700的示例的流程图。过程700可以在时间t接收列COL,并且可以在该列上执行桶移位702。在8x8像素块实例中,可执行桶移位8。可以在时间t执行写数据WD,为RAM704(例如,在本示例中为八个双端口RAM)提供级联数据。WA(m,t)表示在时间t提供给RAM 704的RAM m写入地址,并且RA(m,u)表示在时间u提供给RAM 704的RAM m读取地址。可以在时间u执行读数据RD,为RAM 704提供级联数据。过程700可以使用桶移位706(例如,桶移位8)在时间u提供行ROW。

在此,这八个RAM都具有地址深度8来转置8x8。在至少一个实施例中,为了补救用于乒乓缓冲的停止,缓冲器可以至少加倍。然而,替代方法是使地址空间至少加倍(在本示例中从8至16)。对于双端口RAM,可以在同一周期上发出读和写操作。使用常规乒乓,地址空间的底部(0到7)可接着用于写入,而地址空间的顶部部分可用于读取(8到15),且在下8x8像素块到来时反之亦然。这可以确保不会存在对相同地址的读-写冲突,并且写地址和读地址的最高有效位总是彼此相反。这样,即使在添加重复缓冲之后,RAM的数量也可以保持相同。虽然在本示例中,地址空间的上半部和下半部之间的冲突可以通过使用用于读取地址的第一MSB和用于写入地址的第二MSB来避免,但是这不旨在是限制性的,并且可以使用许多其他方法和配置来避免地址空间的部分之间的这样的冲突。

使用8x8像素块的示例所讨论的方法,64x64像素块可能需要至少64个单独的RAM。为了减少RAM的数量,可以放宽该方法的操作约束/假设。首先,通过在输入列上使用深度为S的移位寄存器来检查利用附加存储的潜在解决方案。现在参见图8A,图8A包括根据本公开的至少一些实施例的可以用于实现图6的螺旋存储器存取模式的过程800的示例的流程图。过程800包括移位寄存器802,该移位寄存器802在每个周期中按列接收64项。移位寄存器802可以包括64项(部分行)上的S-1阶段,其中S是2的幂,其允许累积几列,使得当写到RAM时,来自同一行的多个条目总是可用的。交错器804可对64*S项执行交错器置换,所述64*S项可取决于像素块大小。特别地,交错置换可以用于不同块大小的不同处理,其中每个不同的像素块大小可以具有不同的交错模式。桶移位器806可接收交错器804的输出,且在S的群组中的64*S个项目上具有64/S的大小。RAM 808(可包括64/S RAM)可每S个周期接收64*S项。RAM 808的地址深度可以是具有乒乓的128/S,或者不具有乒乓的64/S,每个地址具有1个字并且字位宽度为项目宽度*S

可以每S个周期执行64*S个项的读取并且将其提供给多路复用器810,多路复用器810可以是具有64个项的输出的64*S个输入项的Sx1多路复用器。可以提供时分复用:0、1、…、S-1的选择。多路复用器810可以每周期向桶移位器812提供64个项。桶移位器812可以具有64/S的大小,超过S组中的64个项。解交错器814可以接收来自桶移位器812的输出并且对64个项执行解交错器置换,这64个项可以是像素块大小相关的。具体地,解交错置换可以用于不同块大小的不同处理,其中每个不同的像素块大小可以具有不同的解交错模式。

使用图8A的方法,RAM的数量可以减少S倍。每个RAM可以每S个周期写入一次并且每S个周期读取。作为益处,可将移位寄存器改变用途以在绕过RAM 808的同时进行较小像素块(例如,16x8或8x16)的转置。图8A的处理800可以用于不具有写入启用的RAM。然而,写入启用可用于将写多路复用的负担转移到RAM中。使用这种方法,RAM 808可以被写入每个周期,而RAM 800之前的交错器804和桶移位器806不被放大S倍。此外,写入启用的使用可消除对移位寄存器的需要,相对于图8B描述了移位寄存器的示例。如果具有写入启用的RAM可用,则与使用移位寄存器相比,使用写入启用优于减少RAM计数。

除了使用移位寄存器或具有写入启用的RAM之外或代替使用移位寄存器或具有写入启用的RAM,另一种保存在RAM 808上的方式是当最大1D维度更小(例如,DTC32(32<64))时具有更高的PPC管线(例如,64PPC)。此配置可经建构以使得其等效于具有移位寄存器,但经移位数据在周期内全部可直接从管线获得。在此可每个周期执行写入且可每个周期执行读取以用数据的多个列和行完全占据管线。在至少一个实施例中,该方法可以用于进一步减少存储器计数。

如在此所描述的,写入启用的使用可以消除对移位寄存器的需要。例如,可以移除移位寄存器802,因为RAM 808的RAM单元的一部分可以在每个周期写入,RAM 808用作物理移位寄存器,诸如图8B所示。现在参见图8B,图8B包括根据本公开的至少一些实施例的可以用于实现图6的螺旋存储器存取模式的过程820的示例的流程图。过程820可以使用缓冲器或超弹性缓冲器来实现,并且可以跨所有像素块类型重复使用相同的桶移位器。过程820可使用写入模式,其中写入到存储器的每4个字中的2个总是另外两个的重复。然而,RMA 808的写入启用输入上的奇数和偶数周期交替模式可确保仅数据字的必要子集被写入到被寻址存储器条目。过程820可使用允许RAM 808输出数据位对常规像素块在奇数和偶数周期上简单多路复用的读取模式。为了使缓冲器具有超弹性,可以跨所有RAM共享相同的读取地址,并且在像素块占据多于一个周期时,每秒钟递增相同的读取地址。

图8B的示例针对S=2,其中,交错器804可以对64个项执行交错器置换,这可以是取决于像素块大小的。64个交错项目可以被提供给桶移位器806,其在成对分组的64个项目上可以具有尺寸32(在读和写侧上)。使用64的地址深度、写入启用的每个地址4个字、以及20的字位宽度(其可以是占位符宽度),可以每周期对RAM 808执行64个项的写入。可以执行从RAM 808每2个周期读取128项,以向复用器810提供128个输入。复用器810可以包括用于32个输出的2x1复用器和用于32个输出的3x1复用器,每周期提供64项。桶移位器812可以在成对分组的64个项目上具有尺寸32(在读取和写入侧上)并且提供64个项目来解交错。解交错器814可对64个项执行解交错置换,这64个项可与像素块大小相关,且每个周期在行中提供64个项。

在至少一个实施例中,单个像素块可以足够小,从而使得像素块的像素元件不填充RAM中的单个地址,从而导致RAM单元被稀疏地填充。使用上文的实例,当S=2时,8x8像素块可为稀疏像素块,且当S=4时,8x8、8x16和16x8像素块可为稀疏像素块。为了解决这个问题,读取侧多路复用器810可以包括稍微的开销以解决这些情况。例如,对于S=2,可以使用3x1复用器。3x1复用器可以分解成2x1复用器阶段,随后是另2x1。第一2x1复用器阶段可以在用于非稀疏块的奇数RAM条目与偶数RAM条目之间进行选择并且创建输出N。第二2x1复用器可以绕过第一复用器奇数周期。例如,当不需要使用两个周期来发送所读取的数据时(因为它适合一个周期),绕过可以被使用(例如,用于稀疏像素块)。在其他实施例中,写入侧多路复用器可以添加在RAM输入数据上。可以不需要桶式移位稀疏像素块,因为它们可以足够小以完全适合跨所有RAM的单个地址。作为另一实例,在至少一个实施例中,转置缓冲器可用稀疏块绕过。由于数据在一个周期中全部可用,所以转置可通过在一个周期中调混数据来实现(尽管调度可变得更加困难)。

当缓冲器仍具有来自先前发送的像素块的高占用率时,通过避免在转置输入处停止当前像素块,可针对不同像素块大小被混合到管线中的情况来改进转置单元缓冲器。在至少一个实施例中,可使用实施基于FIFO的方法的弹性乒乓缓冲器来执行转置运算,从而允许在1D变换之间对缓冲器大小进行细粒度调谐。在至少一个实施例中,缓冲器大小可在所支持的最大变换大小(例如,1.375)的细粒度因子中是可调整的。作为示例而非限制,1.0(对于16PPC/32PPC管线)和2.0(对于64PPC管线)的缓冲器大小因子可被用于匹配32x32变换的计算管线所需的吞吐量和占用。

使用弹性乒乓缓冲器,RAM可以被划分成用于读取已经被完全写入但没有被完全读取的所存储的像素块的地址范围、由正被写入的当前像素块的部分所存储的数据组成的写入地址范围、以及可用于即将到来的像素块的空存储。当像素块被完全读取时,像素块可以被返回到空存储的空闲地址范围。使用互斥范围可以防止对相同地址的同时读取和写入冲突。如本文所描述的,这样的方法可以利用用于存储最大大小的单个像素块的双地址空间来保持RAM计数较低。

在至少一个实施例中,可使用类似于同步FIFO方法的读和写指针使转置缓冲器具有弹性,其可称为超弹性缓冲器或存储。转置缓冲器的等待时间可根据像素块大小而变化。在常规乒乓缓冲器中,当改变像素块序列中的像素块大小时,可存在损失。较小的块在它们可以进行之前必须等待较大的块清除,并且在乒乓缓冲器的每一侧中仅可以存储一个块。为了减少较小尺寸与较大尺寸之间的振荡效应,所公开的方法可利用本文所述的写入及读取地址组织,所述组织可将待写入的所有像素块限制为从0开始的受限地址空间。在至少一个实施例中,只要同一缓冲器中的先前像素块数据未被覆写,如果剩余足够的空间,则直到写入侧缓冲器被完全填充,用于附加像素块的数据可被写入。这可以通过保持要转移到读取侧的写入的像素块的表来实现。写入缓冲器中的第一像素块可在偏移0处开始。第二像素块可在等于第一像素块的地址深度(AD)的偏移处开始。任何进一步的像素块可在等于先前像素块的地址深度之和的偏移处开始。

现在参见图9,图9包括表900,所述表示出了可以如何使用偏移将像素块存储在同一缓冲器中的示例。该偏移可以使用由硬件维护的计数来实现。所述计数可对应于先前像素块的地址深度的运行和。每当像素块被完全写入时,可执行检查以查看读取侧缓冲器是否仍然忙碌。如果检查指示读取侧不忙,则可以关闭缓冲器用于写入并传输至读取侧。如在该实例中可见,可在单个转置单元上保存约30个周期。一旦IDCT被处理,相同量可被再次保存。在读取侧,可以完全清除表的每个条目以报告不忙碌。如果在缓冲器中没有足够的空间留下用于输入像素块的地址深度,则缓冲器仍可能停止写入侧上的输入。

当使用偏移时,缓冲器像FIFO一样起作用,因为4x4、4x8、8x4和8x8块可以经过乒乓缓冲器,而不是绕过它。否则,这些块可能停止,直到乒乓释放为止。

表7提供可以采用的广义偏移公式:

可以提供的是AD(C1xR1)+AD(C2xR2)+…+AD(C(n-1)xR(n-1))+AD(CnxRn)<=AD(ExE)。

读取和写入偏移的概念可以扩展到读取和写入指针。根据至少一个实施例,代替在每个像素块处将地址重置为0,可以使用环绕缓冲器的地址空间AS的指针寻址方案。这样做可以消除对RAM的两侧之间的硬划分的需要。与先前实例一样,转置缓冲器仍可被视为乒乓,因为像素块在以转置格式(pong)读取之前被完全写入(ping)。缓冲器中的可用空间可被称为弹性的,因为缓冲器可能不被划分成读取或写入必须发生的固定大小的部分。由于在像素块被读出的过程期间,存在渐进地释放用于写入访问的空间,所以可能导致超弹性。在使像素块存储空闲之前,不需要完全读出像素块。

在至少一个实施例中,指针将地址空间划分成写入范围(其中,像素块被写入)、空或空闲范围(其中,存在可用于填充的条目)、以及读取范围(其中,存在待读取和发送的填充条目)。现在参照图10,图10示出了根据本公开的至少一些实施例的地址空间可如何分成写入范围、读取范围和自由范围的实例。在图10中,“%”是模运算符并且AS表示RAM的地址空间。当A

图10还示出了指针的示例,其可以包括写入范围指针wr_ptr、读取范围指针rd_ptr、以及自由范围指针wr_ptr_nxt。当写入像素块的最后像素/系数时,写入指针wr_ptr可以前进到自由范围指针wr_ptr_nxt。每次读取物理RAM时,读取指针rd_ptr可以被提前。超级弹性存储可以随时间变满,尤其是如果存在停止读取操作的背压。相反,如果没有数据呈现给转置缓冲器,那么数据变为空。满和空状况可以用于控制使用缓冲器的读和写,并且可以在RAM操作期间使用位或标志跟踪以控制写和读启用。在至少一个实施例中,如果传入像素块的写入范围与读取范围重叠且存储不为空,那么弹性乒乓缓冲器或存储可报告满,这意味着读取指针地址落入写入范围内且暗示不存在足够的空闲空间用于待写入的整个像素块。在至少一个实施例中,等于写入指针wr_ptr的读取指针rd_ptr可以指示缓冲器是满的或空的。如果这个状态是由对读取指针rd_ptr的改变引起的,则这可以指示缓冲器是满的,因为写入被赶上来读取。否则,如果此状态是由写入指针wr_ptr的改变引起的,则这可以指示缓冲器是空的,因为写入是折叠读取。

虽然在图6的示例中,针对8x8像素块的写入操作遵循具有螺旋图案的地址并且读取地址跨所有八个RAM是一致的,但是对于被写入存储器的每个8x8而言,这不需要是真实的。例如,假定8x8像素块的序列进入缓冲器。对于序列中的甚至8x8像素块,可使用螺旋形地址模式来执行写入,并且可使用统一地址模式来执行读取,诸如关于图6所描述的。然而,对于进入缓冲器的奇数8x8像素块,可使用统一地址模式来执行写入,并且可使用螺旋地址模式来执行读取。由此,读取和写入模式可针对进入缓冲器的每隔一个像素块翻转。此方案可仅需要1x缓冲区大小,同时避免阻挡。一旦读出一列或一行数据,下一次写入就可以通过使用刚刚用于读取的相同寻址方案填充刚刚读取的条目而无需等待。

如本文所描述的,可以通过在相位208上适当地分布半蝶形来实现数据流100来减少半蝶形的数量。相位208内的附加项的数量还可使用本文描述的方法来减少。相位208的参数可包含H,H指代相位208中使用的半蝶形的数目,T,相位208内使用半蝶形的变换的数目(相同类型的AV1和VP9变换可在实施两者的情况下单独计数),以及h

给定相位208的参数,可估计加法项最小化的空间的大小。每个共享的半蝶形电路可以包括两个多路复用器。一个复用器可选择(X*cos A+Y*cos B)的左侧cos A,另一侧可选择右侧cos B。因为添加是可互换的,所以可以交换这些左和右项,从而产生许多可能的安排。如果变换需要h

给定H个半蝶形,对于特定变换类型索引t,可选择h

半蝴蝶的所选择的子集i可以置换为h

为了减小此空间的大小,可任意地选择变换中的一者,且按照其半蝶形及其自变量的左-右分布的次序来选择待固定的其半蝶形。例如,可选择使用半蝶形H的最大数目的变换,允许上述组合除以:2

给定这些组合,可以通过跨组合执行搜索来最小化非零加法项的数量。在至少一个实施例中,用于电路设计的计算机辅助设计(CAD)工具因此可以实施前述方法或启发式以确定和/或减少加法器的数量。

现在参见图11,方法1100的每个框以及在此描述的其他方法包括可以使用硬件、固件和/或软件的任何组合执行的计算过程。例如,不同功能可以通过执行存储在存储器和/或一个或更多个电路中的指令的处理器来实现。所述方法还可至少部分地体现为存储在计算机存储介质上的计算机可用指令。仅举几例,所述方法可由独立应用、服务或托管服务(独立或与其他托管服务组合)或到另一产品的插件提供。这些方法可以另外地或可替代地由任何一个系统或系统的任何组合来执行,这些系统包括但不限于在此描述的那些系统。

图11是示出了根据本公开的一些实施例的用于使用共享硬件资源操作阶段的视频处理管线的方法1100的流程图。在框B1102处,方法1100包括向视频处理管线提供像素块。例如,调度器116可以将像素块提供至实现图1的数据流100的量化和变换单元的输入。在框B1104,方法1100包括选择和配置一组相位,以基于一个或更多个处理参数对像素块执行变换。例如,配置电路202可基于处理参数206中的一个或更多个选择和配置相位208组以对像素块执行变换。在框B1106,方法1100包括使用该组相位来执行变换。例如,量化和变换单元可以使用使用一个或更多个配置电路202选择和配置的一组相位208来执行变换。

示例计算设备

图12是适合用于实现本公开的一些实施例的示例计算设备1200的框图。计算设备1200可以包括直接或间接耦合以下设备的互连系统1202:存储器1204、一个或更多个中央处理单元(CPU)1206、一个或更多个图形处理单元(GPU)1208、通信接口1210、输入/输出(I/O)端口1212、输入/输出组件1214、电源1216,一个或更多个呈现组件1218(例如,一个或更多个显示器)和一个或更多个逻辑单元1220。在至少一个实施例中,一个或更多个计算设备1200可以包括一个或更多个虚拟机(VM),和/或其任何组件可以包括虚拟组件(例如,虚拟硬件组件)。对于非限制性示例,GPU 1208中的一个或更多个可以包括一个或更多个vGPU,CPU 1206中的一个或更多个可以包括一个或更多个vCPU,和/或逻辑单元1220中的一个或更多个可以包括一个或更多个虚拟逻辑单元。这样,一个或更多个计算设备1200可以包括分立组件(例如,专用于计算设备1200的全GPU)、虚拟组件(例如,专用于计算设备1200的GPU的一部分)、或其组合。

尽管图12的各个方框被示出为利用线路经由互连系统1202连接,但这并不旨在是限制性的并且仅是为了清楚起见。例如,在一些实施例中,呈现组件1218(诸如显示设备)可被认为是I/O组件1214(例如,如果显示器是触摸屏)。作为另一个示例,CPU 1206和/或GPU1208可以包括存储器(例如,存储器1204可以表示除了GPU 1208的存储器、CPU 1206和/或其他组件之外的存储设备)。换言之,图12的计算设备仅是说明性的。在如“工作站”、“服务器”、“膝上型计算机”、“桌面型计算机”、“平板计算机”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ECU)”、“虚拟现实系统”和/或其他设备或系统类型的此类类别之间不做区分,因为所有都被考虑在图12的计算设备的范围内。

互连系统1202可表示一个或更多个链路或总线,诸如地址总线、数据总线、控制总线或其组合。互连系统1202可以包括一个或更多个总线或链路类型,诸如工业标准架构(ISA)总线、扩展工业标准架构(EISA)总线、视频电子标准协会(VESA)总线、外围组件互连(PCI)总线、快速外围组件互连(PCIe)总线和/或另一类型的总线或链路。在一些实施例中,组件之间存在直接连接。作为示例,CPU 1206可直接连接到存储器1204。进一步,CPU 1206可直接连接到GPU 1208。在组件之间存在直接或点对点连接的情况下,互连系统1202可包括PCIe链路以执行连接。在这些示例中,PCI总线不需要被包括在计算设备1200中。

存储器1204可以包括各种计算机可读介质中的任何计算机可读介质。计算机可读介质可以是可由计算设备1200访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质,以及可移除和不可移除介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。

计算机存储介质可以包括以用于存储诸如计算机可读指令、数据结构、程序模块和/或其他数据类型的信息的任何方法或技术实现的易失性和非易失性介质和/或可移动和不可移动介质。例如,存储器1204可以存储计算机可读指令(例如,表示一个或更多个程序和/或一个或更多个程序元件,诸如操作系统)。计算机存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术,CD-ROM、数字通用盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储装置或其他磁性存储装置,或可用于存储所要信息且可由计算设备1200存取的任何其他介质。如本文所使用的,计算机存储介质不包括信号本身。

计算机存储介质可将计算机可读指令、数据结构、程序模块和/或其他数据类型体现在诸如载波或其他传输机制之类的已调制数据信号中,并且包括任何信息传递介质。术语“调制数据信号”可以指代以编码信号中的信息的方式设置或改变其一个或更多个特性的信号。作为示例而非限制,计算机存储介质可包括有线介质(诸如有线网络或直接有线连接)和无线介质(诸如声学、RF、红外和其他无线介质)。以上任何内容的组合也应包含在计算机可读介质的范围内。

CPU 1206可经配置以执行计算机可读指令中的至少一些以控制计算设备1200的一个或更多个组件执行本文中所描述的方法和/或过程中的一个或更多个。CPU 1206可各自包含能够同时处置众多软件线程的一个或更多个核心(例如,一个、两个、四个、八个、二十八个、七十二个等)。CPU 1206可包含任何类型的处理器,且可取决于所实施的计算设备1200的类型而包含不同类型的处理器(例如,针对移动装置具有较少核心的处理器和针对服务器具有较多核心的处理器)。例如,取决于计算设备1200的类型,处理器可以是使用精简指令集计算(RISC)实现的高级RISC机器(ARM)处理器或使用复杂指令集计算(CISC)实现的x86处理器。除了一个或更多个微处理器或补充协处理器(诸如数学协处理器)之外,计算设备1200还可包括一个或更多个CPU 1206。

除一个或更多个CPU 1206以外或替代一个或更多个CPU 1206,一个或更多个GPU1208可被配置成执行计算机可读指令中的至少一些以控制计算设备1200的一个或更多个组件执行本文所描述的方法和/或过程中的一个或更多个。GPU 1208中的一个或更多个可为集成GPU(例如,有CPU 1206中的一个或更多个)和/或GPU 1208中的一个或更多个可为离散GPU。在实施例中,GPU 1208中的一个或更多个可以是CPU 1206中的一个或更多个的协处理器。GPU 1208可由计算设备1200使用以渲染图形(例如,3D图形)或执行通用计算。例如,GPU 1208可用于GPU上的通用计算(GPGPU)。GPU 1208可包含能够同时处置数百或数千软件线程的数百或数千核心。GPU 1208可响应于渲染命令(例如,经由主机接口从CPU 1206接收的渲染命令)而产生输出图像的像素数据。GPU 1208可包含用于存储像素数据或任何其他合适数据(例如,GPGPU数据)的图形存储器(例如,显示存储器)。显示存储器可作为存储器1204的一部分被包括。GPU 1208可包含并行操作(例如,经由链路)的两个或两个以上GPU。链路可以直接连接GPU(例如,使用NVLINK)或可以通过交换机(例如,使用NVSwitch)连接GPU。当组合在一起时,每一GPU 1208可产生用于输出的不同部分或用于不同输出的像素数据或GPGPU数据(例如,用于第一图像的第一GPU和用于第二图像的第二GPU)。每一GPU可包含其自己的存储器,或可与其他GPU共享存储器。

除CPU 1206和/或GPU 1208之外或替代CPU 1206和/或GPU 1208,逻辑单元1220可经配置以执行计算机可读指令中的至少一些以控制计算设备1200的一个或更多个组件执行本文中所描述的方法和/或过程中的一个或更多个。在实施例中,一个或更多个CPU1206、一个或更多个GPU 1208、和/或一个或更多个逻辑单元1220可以离散地或联合地执行方法、过程和/或其部分的任何组合。逻辑单元1220中的一个或更多个可为CPU 1206和/或GPU 1208中的一个或更多个中的一部分和/或集成于CPU 1206和/或GPU 1208中的一个或更多个和/或逻辑单元1220中的一个或更多个可为离散组件或以其他方式在CPU 1206和/或GPU 1208外部。在实施例中,逻辑单元1220中的一个或更多个可以是CPU 1206中的一个或更多个和/或GPU 1208中的一个或更多个的协处理器。

逻辑单元1220的示例包括一个或更多个处理核心和/或其组件,诸如数据处理单元(DPU)、张量核心(TC)、张量处理单元(TPU)、像素视觉核心(PVC)、视觉处理单元(VPU)、图形处理群集(GPC)、纹理处理群集(TPC)、流多处理器(SM)、树横向单元(TTU)、人工智能加速器(AIA)、深度学习加速器(DLA)、算术逻辑单元(ALU)、专用集成电路(ASIC)、浮点单元(FPU)、输入/输出(I/O)元件、外围组件互连(PCI)或快速外围组件互连(PCIe)元件等。

通信接口1210可以包括使计算设备1200能够经由电子通信网络(包括有线和/或无线通信)与其他计算设备通信的一个或更多个接收机、发射机和/或收发机。通信接口1210可包括实现通过多个不同网络中的任一个进行通信的组件和功能,诸如无线网络(例如,Wi-Fi、Z-Wave、蓝牙、蓝牙LE、ZigBee等)、有线网络(例如,通过以太网或无限带通信)、低功率广域网(例如,LoRaWAN、SigFox等)和/或互联网。在一个或更多个实施例中,一个或更多个逻辑单元1220和/或通信接口1210可以包括一个或更多个数据处理单元(DPU),以便将通过网络和/或通过互连系统1202接收的数据直接传输到一个或更多个GPU 1208(例如,其存储器)。

I/O端口1212可以使得计算设备1200能够逻辑地耦合到包括I/O组件1214、一个或更多个呈现组件1218和/或其他组件的其他设备,其中一些可以被内置到(例如,集成在)计算设备1200中。说明性I/O组件1214包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等。I/O组件1214可以提供处理空中姿势、语音或由用户生成的其他生理输入的自然用户界面(NUI)。在一些情况下,可将输入发射到适当的网络元件以供进一步处理。NUI可实现与计算设备1200的显示器相关联的语音识别、指示笔识别、面部识别、生物特征识别、屏幕上和屏幕附近的姿势识别、空中姿势、头部和眼睛跟踪、以及触摸识别(如以下更详细地描述的)的任何组合。计算设备1200可以包括用于手势检测和识别的深度相机,诸如立体相机系统、红外相机系统、RGB相机系统、触摸屏技术和这些的组合。另外,计算设备1200可包含使得能够检测运动的加速度计或陀螺仪(例如,作为惯性测量单元(IMU)的部分)。在一些示例中,计算设备1200可以使用加速度计或陀螺仪的输出来渲染沉浸式增强现实或虚拟现实。

电源1216可包括硬连线电源、电池电源或其组合。电源1216可向计算设备1200提供电力以使得计算设备1200的组件能够操作。

呈现组件1218可包括显示器(例如,监视器、触摸屏、电视屏幕、平视显示器(HUD)、其他显示器类型或其组合)、扬声器和/或其他呈现组件。呈现组件1218可从其他组件(例如,GPU 1208、CPU 1206、DPU等)接收数据,且输出所述数据(例如,作为图像、视频、声音等)。

示例数据中心

图13示出了可在本公开的至少一个实施例中使用的示例数据中心1300。数据中心1300可包括数据中心基础设施层1310、框架层1320、软件层1330和/或应用层1340。

如图13所示,数据中心基础设施层1310可以包括资源协调器1312、分组的计算资源1314和节点计算资源(“节点C.R.”)1316(1)-1316(N),其中“N”表示任何完整的正整数。在至少一个实施例中,节点C.R.s 1316(1)-1316(N)可包括,但不限于任何数量的中央处理单元(“CPU”)或其他处理器(包括DPU、加速器、现场可编程门阵列(FPGA)、图形处理器或图形处理单元(GPU)等),存储器设备(例如,动态只读存储器),存储设备(例如,固态或磁盘驱动器),网络输入/输出(NW I/O)装置、网络交换机、虚拟机(VM)、功率模块和/或冷却模块,等等。在一些实施例中,来自节点C.R.1316(1)-1316(N)中的一个或更多个节点C.R.可对应于具有上述计算资源中的一个或更多个的服务器。此外,在一些实施例中,节点C.R.1316(1)-13161(N)可包括一个或更多个虚拟组件,诸如vGPU、vCPU等,和/或节点C.R.1316(1)-1316(N)中的一个或更多个可对应于虚拟机(VM)。

在至少一个实施例中,分组的计算资源1314可包括容纳在一个或更多个机架(未示出)内的节点C.R.1316的单独分组,或容纳在不同地理位置(也未示出)处的数据中心内的许多机架。分组的计算资源1314内的节点C.R.1316的单独分组可包括可被配置或分配来支持一个或更多个工作负荷的分组计算、网络、存储器或存储资源。在至少一个实施例中,包括CPU、GPU和/或其他处理器的若干节点C.R.1316可以分组在一个或更多个机架内以提供计算资源来支持一个或更多个工作负荷。一个或更多个机架还可包括任意组合的任意数量的功率模块、冷却模块和/或网络交换机。

资源协调器1312可配置或以其他方式控制一个或更多个节点C.R.1316(1)-1316(N)和/或分组的计算资源1314。在至少一个实施例中,资源协调器1312可以包括用于数据中心1300的软件设计基础设施(SDI)管理实体。资源协调器1312可以包括硬件、软件或其某种组合。

在至少一个实施例中,如图13所示,框架层1320可以包括作业调度器1344、配置管理器1334、资源管理器1336和/或分布式文件系统1338。框架层1320可以包括支持软件层1330的软件1332和/或应用层1340的一个或更多个应用1342的框架。软件1332或应用1342可分别包含基于网络的服务软件或应用,例如由Amazon(亚马逊)网络服务、Google Cloud(谷歌云)和Microsoft Azure提供的那些。框架层1320可以是但不限于可以利用分布式文件系统1338进行大规模数据处理(例如,“大数据”)的免费和开源的软件网络应用框架(如Apache Spark

在至少一个实施例中,在软件层1330中包括的软件1332可包括由节点C.R.1316(1)-1316(N)、分组的计算资源1314和/或框架层1320的分布式文件系统1338中的至少部分使用的软件。一种或更多种类型的软件可以包括但不限于互联网网页搜索软件、电子邮件病毒扫描软件、数据库软件和流式视频内容软件。

在至少一个实施例中,在应用层1340中包括的应用1342可包括由节点C.R.1316(1)-1316(N)、分组的计算资源1314和/或框架层1320的分布式文件系统1338中的至少部分使用的一个或更多个类型的应用。一种或更多种类型的应用可以包括但不限于任何数量的基因组应用、认知计算和机器学习应用,包括训练或推断软件、机器学习框架软件(例如,PyTorch、TensorFlow、Caffe等)和/或结合一个或更多个实施例使用的其他机器学习应用。

在至少一个实施例中,配置管理器1334、资源管理器1336和资源协调器1312中的任一个可基于在任何技术上可行的方式中获取的任何量和类型的数据来实现任何数量和类型的自修改动作。自修改动作可使数据中心1300的数据中心操作者免于做出可能较差的配置决策和可能避免数据中心的未充分利用和/或较差执行部分。

根据本文描述的一个或更多个实施例,数据中心1300可包括工具、服务、软件或其他资源来训练一个或更多个机器学习模型或使用一个或更多个机器学习模型来预测或推断信息。例如,可以通过使用以上相对于数据中心1300描述的软件和/或计算资源根据神经网络架构来计算权重参数来训练一个或更多个机器学习模型。在至少一个实施例中,对应于一个或更多个神经网络的经训练或部署的机器学习模型可用于通过使用通过一种或多种训练技术(诸如但不限于本文中描述的那些训练技术)计算的权重参数,使用上文相对于数据中心1300描述的资源来推断或预测信息。

在至少一个实施例中,数据中心1300可使用CPU、专用集成电路(ASIC)、GPU、FPGA和/或其他硬件(或与其对应的虚拟计算资源)来使用上述资源执行训练和/或推断。此外,上文所描述的一或更多个软件和/或硬件资源可被配置为允许用户训练或执行对信息的推断的服务,例如图像识别、语音识别或其他人工智能服务。

示例网络环境

适合用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(NAS)、其他后端设备和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图12的一个或更多个计算设备1200的一个或更多个实例上实现——例如,每个设备可以包括一个或更多个计算设备1200的类似部件、特征和/或功能。此外,在实现后端设备(例如,服务器、NAS等)的情况下,后端设备可被包括作为数据中心1300的一部分,数据中心1300的示例在本文中关于图13更详细地描述。

网络环境的组件可经由网络彼此通信,所述网络可为有线的、无线的或为两者。网络可以包括多个网络或多个网络中的一个网络。例如,网络可包括一个或更多个广域网(WAN)、一个或更多个局域网(LAN)、一个或更多个公共网络(诸如互联网和/或公共交换电话网(PSTN))和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或者甚至接入点(以及其他组件)的组件可以提供无线连接。

兼容的网络环境可以包括一个或更多个对等网络环境(在这种情况下,服务器可以不被包括在网络环境中)和一个或更多个客户端-服务器网络环境(在这种情况下,一个或更多个服务器可以被包括在网络环境中)。在对等网络环境中,本文针对服务器所描述的功能可在任何数量的客户端设备上实现。

在至少一个实施例中,网络环境可包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可包括框架层、作业调度器、资源管理器和在一个或更多个服务器上实现的分布式文件系统,所述服务器可包括一个或更多个核心网服务器和/或边缘服务器。框架层可包括支持软件层的软件和/或应用层的一个或更多个应用的框架。软件或应用可分别包含基于网络的服务软件或应用。在实施例中,一个或更多个客户端设备可以使用基于网络的服务软件或应用(例如,通过经由一个或更多个应用编程接口(API)访问服务软件和/或应用)。框架层可以是但不限于如可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)的一种免费和开源软件网络应用框架。

基于云的网络环境可提供执行本文描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合的云计算和/或云存储。这些不同功能中的任何功能可以分布在来自(例如,可以分布在州、地区、国家、全球等的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环境)。

一个或更多个客户端设备可以包括本文关于图12所描述的一个或更多个示例计算设备1200的组件、特征和功能中的至少一些。作为示例而非限制,客户端设备可被实现为个人计算机(PC),膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机、个人数字助理(PDA)、MP3播放器、虚拟现实耳机、全球定位系统(GPS)或设备、视频播放器、摄像机、监视设备或系统、车辆、船、飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备、游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器、遥控器、电器、消费电子设备、工作站、边缘设备、这些描绘的设备的任何组合或任何其他合适的设备。

本公开可以在由计算机或者诸如个人数字助理或其他手持式设备之类的其他机器执行的、包括诸如程序模块之类的计算机可执行指令的机器可使用指令或者计算机代码的一般背景下进行描述。通常,包括例程、程序、对象、组件、数据结构等等的程序模块指的是执行特定任务或者实现特定提取数据类型的代码。本公开可以在各种各样的系统配置中实践,这些配置包括手持式设备、消费电子器件、通用计算机、更专业的计算设备等等。本公开也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实践。

如在本文中使用的,“和/或”关于两个或更多元件的叙述应当解释为仅指一个元件或者元件组合。例如,“元件A、元件B和/或元件C”可以包括仅仅元件A,仅仅元件B,仅仅元件C,元件A和元件B,元件A和元件C,元件B和元件C,或者元件A、B和C。此外,“元件A或元件B中的至少一个”可以包括元件A中的至少一个,元件B中的至少一个,或者元件A中的至少一个和元件B中的至少一个。进一步,“元件A和元件B中的至少一个”可以包括元件A中的至少一个,元件B中的至少一个,或者元件A中的至少一个和元件B中的至少一个。

这里详细地描述了本公开的主题以满足法定要求。然而,描述本身并非意在限制本公开的范围。相反地,本公开人已经设想到,要求保护的主题也可以以其他的方式具体化,以包括与本文中结合其他当前或未来技术描述的步骤不同的步骤或者相似的步骤的组合。而且,尽管术语“步骤”和/或“块”在本文中可以用来隐含采用的方法的不同元件,但是这些术语不应当被解释为暗示本文公开的各个步骤之中或之间的任何特定顺序,除非明确描述了各步骤的顺序。

相关技术
  • 用于在基于块的视频编码器中控制编码器输出比特率的方法和对应的视频编码器设备
  • 用于在基于块的视频编码器中控制编码器输出比特率的方法和对应的视频编码器设备
技术分类

06120115625259