一种滤波装置及其方法

文档序号:7969064阅读:162来源:国知局
专利名称:一种滤波装置及其方法
技术领域
本发明涉及一种滤波装置及其方法,尤其涉及单指令多数据型
(SIMD)处理器中加速对称或不对称滤波的自修正装置以及方法。
背景技术
图像显示以及音视频数据(统称为内容数据)的重放渐渐成为目 前计算设备最普遍的应用,并且对微处理器的处理速度提出了越来越 高的要求。
目前指令级并行性体系构架例如单指令多数据型(SIMD),多 指令多数据型(MIMD)、向量或阵列处理等逐渐成为提高微处理器 的处理速度的主要趋势。其中应用SIMD处理器的并行处理结构的向 量机在集体处理大量诸如由像素构成的图像数据等向量数据的同时可 以减小计算时间,因此应用SIMD处理器的向量机适于运行具有繁重 矩阵计算负荷的图像处理以及视频编码/解码应用程序。
在图像及音视频处理领域,转置编码以及矩阵转置操作是图像及 音视频压缩和解压缩的通用技术。转置矩阵涉及将矩阵的列重排为行。
对于向量机,向量转置通常是通过转置寄存器实现的。这些转置寄 存器是方便水平写入和垂直读出的特殊寄存器阵列。如图2所示,保持 在寄存器阵列200中的数据处于先行后列的顺序。当从寄存器阵列读出 这些数据时,利用特殊的数据通路将垂直数据列读出为向量。以图2为 例,最初从转置寄存器的写端口 201a, 201b, 201c, 201d将数据 [A0|A1|A2|A31,B0|B1|B2|B3C0|Cl|C2|C3j,D0ID1ID2ID3写入这个转 置寄存器。然后数据A0,A1,A2,A31存储在阵列单元中被表示为 202a,202b,202c,202d;数据B0,B1,B2,B3存储在阵列单元中被表示为 203a,203b,203c,203d;数据1C0,C1,C2,C31存储在阵列单元中被表示为
204a,204b,204c,204d;数据D0,D1,D2,D3存储在阵列单元中被表示为 205a,205b,205c,205d。
当执行读操作时,从读端口 206a, 206b, 206c, 206d读出向量数据。 以垂直方向排列读出的数据,即通过连接阵列单元202a,203a,204a,205a 中的内容形成读出的第一向量数据,也就是附图中的读出的数据A0,B0,C0,D01 。以类似的方式也可读出向量数据Al,Bl,Cl,Dll,A2,B2,C2,D21, [A3,B3,C3,D3。水平写入转置寄存器阵列然后垂直读出 的结果就是转置的矩阵。这样无论需要以垂直方向还是水平方向进行矩 阵计算,均可以以上上述矩阵转置的方式进行向量计算。
当希望以垂直方向进行矩阵计算时,矩阵转置需包括N次水平写操 作和N次垂直读操作(2xN次循环),以便获得转置的NxN矩阵。具 体地,为获得转置的4x4矩阵,需要4次水平向量写入和4次垂直向量 读出,结果总共需要8次循环。
然而对于H.264标准(即用于视听服务的先进视频编码)中例如6 抽头对称滤波等、性能为关键指标的算法核心(algorithm kernel)而言, 在滤波算法前转置矩阵将对算法效率产生繁重的开销。附图3中示出了 理想的H.264对称滤波,每个框代表所显示图片的一个像素,例如由 301a, 301b, 301c, 301d, 301e, 301f, 301g, 301h, 301i表示的框包含参考像 素p0,pl,p2,p3,p4,p5,p6,p7,p81的阵列。6抽头对称滤波需要以如下等式(l) -(4)从已知像素[p0,pl,p2,p3,p4,p5,p6,p7,p8中通过插值获得包含在框 302a, 302b^02c,302d中的预测的半像素阵列p9,pl0,pll,pl21:
其中p0-p8是用作插值参考的已知像素;
a0, al, a2是滤波系数。在H.264标准中,aO=l, al= -5, a2 - 20; p9-pl2是从上述9个参考像素p0-p8预测得到的半像素.
通常p0-p8都是8位字。这样每个64位向量寄存器可以保持8个
<formula>formula see original document page 10</formula>
像素。假设8个64位向量寄存器v0-V7中的内容是
W = [p0|pl|p2|p3|p4|p5|p6|p7] W = [q0lqllq2lq3lq4lq5lq6lq7〗 W - [r0lrllr2lr3lr4lr5lr6lr7] W = [S0lslls2ls3ls4ls5ls6ls7] W =[. W- [ [
W=[
由于参考像素p0-p8最初以水平方式排列,因此很难以SIMD (单 指令多数据)指令并行处理来获得半像素p9, p10, pll, p12。
为了开发并行性,可以并行处理垂直半像素例如图3所示的p9, p13, p14, p15。但是这就需要转置像素矩阵。通过矩阵转置,8个64位向量 寄存器v0-v7中的内容变为
vtf ,=pO|qO|rO|sO|..|..|..|..|l V/,=[pl|ql|rl|sl|..|..|..|..|] V2,=p2|q2|r2|s2|..|..|..|..|
vJ,=[p3|q3|r3|s3|..|..|..|..|

v4, = [p4|q4|r4|s4|..|..|..|..|

v5,=p5|q5|r5|s5|"|..|..|..|l v6,=p6|q6|r6|s6|..|"|..|..|l v7,=[p7|q7|r7|s7|..|..|..|..|I
将向量数据从其原始的水平排列转置成垂直排列,可以加速SIMD 处理。然后可以以并行方式计算半像素p9, p13, pl4,pl5:
p9|pl3|pl4|pl5|=aO*W , + al*W , + a2*v2, + a2*W, + al*v', + a0*v5,
即仍以图3为例,在转置后的矩阵中以如下方式计算 p9,pl3,pl4,pl5:
p9 = aO*pO + a"pl + a2*p2 + a2*p3 + al*p4 + a0*p5 pl3 = aO*qO + al*ql + a2*q2 + a2*q3 + al*q4 + a0*q5 pl4 = aO*rO + al*rl + a2*r2 + a2*r3 + al*r4 + a0*r5 pl5 = aO*sO + al*sl + a2*s2 + a2*s3 + al*s4 + a0*s5
但是,转置需要相当的额外指令来将矩阵转置成所需格式。例如对
于NxN矩阵需要2xN次循环的开销,这种滤波算法前转置矩阵对算法
效率产生了繁重的开销。因此需要一种对水平对称滤波消除2xN的转置 开销的方法。

发明内容
考虑到现有技术中横向插值操作由于其源操作数的数据组织不适 合传统的SIMD结构进行处理、其处理效率非常低的缺陷,本发明针对 水平滤波算法前转置矩阵产生繁重开销的缺点提出一种对水平对称滤波 减小2xN次转置开销、提高编解码效率的滤波方法、装置以及计算机程 序,用于横向插值时可使其达到与纵向插值相当的效率。
本发明的一个重要的目的在于提供一种可以进行源数据移位自修 正的滤波装置和方法,使得现有的滤波装置或方法适于进行橫向滤波;
本发明的另一个重要的目的在于提供一种可以修正计算次序以适 应横向(水平)滤波的滤波装置和方法。
本发明的 一 个方面涉及 一 种滤波系数对称的滤波装置,该滤波装置 包括
输入装置,用于从存储装置中输入源搮作数;
向量算术逻辑装置,用于对所述源搮作数进行滤波处理,以最终获 得m个插值结果,其中m为不小于l的整数;
多路复用阵列,用于对所述源操作数进行移位自修正;
写回装置,用于将移位自修正后的上述源操作数写回所述存储装置, 以继续下一滤波处理。
优选地,本发明还提供一种滤波系数对称的滤波装置,适于执行 SIMD指令通过预定次数的滤波处理获得m个插值结果,其中m为不小 于l的整数,该滤波装置包括
输入装置,用于分别从第一寄存器和第二寄存器输入用于插值处理 的第一组源操作数和第二组源操作数,其中第一组源操作数和第二组源 操作数的源操作数的个数为大于或等于m的整数;
向量算术逻辑装置,所述向量算术逻辑装置包括
m个向量算术逻辑单元,分别用于对第一组源操作数中的最
左边的m个源操作数和第二组源操作数中的最右边的m个源搮作 数进行逻辑运算;
m个中间向量寄存器,分别用于存储m个向量算术逻辑单元 的运算结果;
m个并行乘法累加器,分别用于将来自上述m个中间向量寄 存器中的运算结果与预定的滤波系数相乘,并将各个乘积分别与 已存储在m个累加寄存器中的结果相加;和
m个累加寄存器,分别用于存储上述的相加结果, 两个多路复用阵列,通过分别对第一组源搮作数和第二组源操作数 向左移位和向右移位并将第一组源操作数的最右边数据填零和将第二组 源操作数的最左边数据填零进行自修正,以使移位自修正后的第一组和 第二组源操作数成为下一滤波处理的源操作数,
写回装置,用于分别将移位后的第一组源操作数和第二组源操作数 写回到第一寄存器和第二寄存器,继续下一滤波处理。
在此"滤波系数对称"是指在偶数抽头时抽头系数相互对称,在 奇数抽头时除中心抽头之外的其它滤波系数相互对称的情况、在执行 偶数抽头对称滤波处理时,滤波处理的预定循环次数等于抽头数的二分 之一。在执行奇数抽头对称滤波处理时,滤波处理的预定循环次数等于 "抽头数+l"的二分之一,并且在最后l次滤波处理前使用所述多路复 用阵列使第二组源操作数全部变为零,将全部为零的第二组源操作数写 回到第二寄存器。例如在m为l、 n为2时,本发明的滤波装置实现3 抽头滤波,在2次循环后获得m即1个插值。只要满足n^:n^1, m和n 的取值不作上限。
理论上,本发明的滤波装置也可应用于2抽头滤波,这种情况下 n甚至可等于m,并且在完成一次循环处理后即获得所需的插值结果, 写回装置无需工作。因此在有效利用本发明的写回装置的情况下,优选 n为大于m的整数。
另一方面,本发明还提供一种滤波方法,该滤波方法包括如下步骤
a) .使用输入装置从存储装置中输入源操作数;
b) .使用向量算术逻辑装置对上述源操作数进行滤波处理;
c) .使用多路复用阵列对上述输入的源操作数进行移位自修正;
d) .使用写回装置将移位自修正后的上述源操作数写回所述存储装 置;
e) .重复步骤a) - d)直至获得m个插值结果,其中m为不小于1的 整数。
更为优选地,本发明还提供一种滤波系数对称的滤波方法,用于执 行SIMD指令通过预定次数的滤波处理获得m个插值结果,其中m为 不小于l的整数,该滤波方法包括如下步骤
a) .分别从第一寄存器和第二寄存器输入用于插值处理的笫一组源 操作数和第二组源操作数,其中第一组源操作数和第二组源操作数的源
操作数的个数为大于或等于m的整数;
b) .使用m个向量算术逻辑单元分别对第一组源操作数中的最左边 的m个源操作数和第二组源操作数中的最右边的m个源^Mt数进行逻辑 运算,将获得的m个运算结果分别存储在m个中间向量寄存器中;
c) .使用m个并行乘法累加器分别将来自上述m个中间向量寄存器 中的运算结果与预定的滤波系数相乘,并将各个乘积分别与已存储在m 个累加寄存器中的结果相加,将上述的相加结果存储在m个累加寄存器 中;
d) .使用多路复用阵列,用于通过分别对第一组源操作数和第二组源 操作数向左移位和向右移位并将第一组源操作数的最右边数据填零和将 第二组源操作数的最左边数据填零进行自修正,以使移位自修正后的笫 一组和第二组源操作数成为下一滤波处理的源操作数,
e) .使用写回通道分别将移位后的第一组源操作数和第二组源操作 数写回到第一寄存器和第二寄存器;
f) .重复步骤a)-e)直至在m个累加寄存器中获得m个插值结果,
本发明提出修正计算次序以适应水平对称滤波,并且在修正SIMD 计算的同时修正源操作数。
1. 修正源操作数以适应水平对称滤波
由于SIMD操作仅有利于对垂直排列的数据执行向量处理,因此在 如图3所示执行水平对称滤波时,不会以SIMD机中的传统方式排列水 平参考像素301a-301i。这样就需要一种机构从水平排列的数据中选择合 适的数据,从而使向量ALU引擎进行计算。本发明提出的自修正W^通 过根据算法需要在与SIMD ALU中的计算流(computational flow)的同 时左移位和右移位对两个源操作数进行自修正。
2. <务正计算次序
如前对背景技术的描述执行6抽头对称滤波的等式(l)、 (2)、 (3)和(4) 不适于直接在SIMD处理器中执行。直接实现水平对称滤波需要转置像 素矩阵这样的繁重开销。为了开发对SIMD向量处理器中向量加法器/乘 法器/累加器等的充分应用,本发明提出重新对上述等式(l)、 (2)、 (3)和(4) 进行格式重排以便更好地使用已有的SIMD ALU (算术逻辑单元)。
例如在H.264标准视频编解码中执行6抽头对称滤波处理,通it^f" 第一组源操作数p0,pl,p2,p3,p4,p5,p6,p7和第二组源搮作数pl,p2, p3,p4,p5,p6,p7p8执行预定滤波系数分别为a0, al, a2的三次滤波处理, 在累加寄存器中获得4个插值结果
acc = a0*(| p0+p5 | pl+p6 | p2+p7 | p3+p8 |) (5) acc = al*(| pl+p4 | p2+p5 | p3+p6 | p4+p7 |) + acc (6) acc = a2*(| p2+p3 | p3+p4 | p4+p5 | p5+p6 |) + acc (7)
新的等式(5)、 (6)和(7)与等式(1)、 (2)、 (3)和(4)的原始形式的区别主 要在于
1) 在等式(5)、 (6)和(7)中的运算操作是先加后乘,而等式(l)、 (2)、 (3)和(4)中的计算顺序是先乘后加;
2) 使用与上述等式(l)、 (2)、 (3)和(4)相同的滤波系数的乘法运算分 别分组在新等式(5)、 (6)和(7)中,以便于在SIMD乘法器中执行。
根据下面示意性实施例的说明(参照附图)本发明的其它特点将 显而易见。


图1示出SIMD向量机体系结构的框图。
图2示出标准的转置寄存器的示意图。
图3示出H.264中理想的6抽头对称滤波的操作示意围。
图4示出根据本发明实施方式1的用于水平对称滤波的自修正 SIMD之数据通路。
图5示出根据本发明实施方式2的在执行偶数抽头对称滤波时的 寄存器va和vb中的内容。
图6示出根据本发明实施方式2的对水平排列数据的偶数抽头对 称滤波的伪代码。
图7示出根据本发明实施方式3的在执行奇数抽头对称滤波时的 寄存器va和vb中的内容。
图8示出根据本发明实施方式3的对水平排列数据的奇数抽头对 称滤波的伪代码。
具体实施例方式
下面,将参照附图等详细描述本发明的具体实施方式
。但是,本 发明可以通过多种不同的方式来实施,本领域人员可以很容易地理解 其方式和详细内容可以被变换为各种各样的形式,而不脱离本发明的 宗旨及其范围。因此,本发明不应该被解释为仅限定在实施方式所记 载的内容中。
具体地,以下参考H.264视频编解码进行描述,但本发明的实施 例并不局限于此,而是可以应用于通用信号处理、图象处理以及音视 频编解码中的滤波,例如与其它类型的视频编码标准操作(例如 MPEG-4, AVS等)一起使用。
处理器概述
图1示出了执行向量计算的并行处理结构的SIMD向量机体系结 构。SIMD是指由单指令流指令对多数据流的操作。
SIMD向量机100适于运行具有繁重矩阵计算负荷的视频编码/解码 应用程序。通常向量机100如图所示由处理器核心逻辑和存储器接口逻 辑组成。
存储器接口模块通常具有两个SRAM模块。 一个指令SRAM模块 IOI用于存储指令,另一个数据SRAM模块102用于存储数据。位于图 1上部的存储器控制逻辑103用于向程序控制逻辑104馈送指令并向向 量寄存器文件105馈送数据。
处理器核心逻辑通常具有
1. 负责产生控制信号并监控处理器中其它部件的功能的程序控制 逻辑104;
2. 用来执行向量加/减/乘等运算的向量算术逻辑单元(Vector ALU, Arithmetic Logic Unit) 106;
3. 用来在SRAM和ALU之间进行接口的向量寄存器文件105;
4. 负责按照预定屏蔽(mask)产生写回控制信号的写回逻辑107, 该写回控制信号允许某些通道被写回而禁止其它的通道被写回。
本发明的改进在于SIMD向量机中的处理器核心逻辑,其中提出一 种新颖的由程序控制逻辑、向量寄存器、向量算术逻辑单元和写回逻辑 构成的自修正SIMD处理器用作插值滤波装置,可以对水平对称滤波减 小2xN次转置开销、提高编解码效率。
实施方式1
图4示出根据本发明实施方式1的用于水平对称滤波的自修正 SIMD之数据通路。
该实施方式以2端口读2端口写的寄存器阵列为例描述本发明的自 修正SIMD处理器。该自修正SIMD核心处理器包括
2端口读2端口写的向量寄存器阵列401,从该寄存器阵列一次读出
两个向量寄存器va和vb的内容数据(笫一组内容数据和笫二组内容数 据),在该实施方式中每个向量寄存器可包含8个像素, 向量算术逻辑装置,所述向量算术逻辑装置包括
4个向量算术逻辑单元(ALU) 404,分别用于对来自向量寄 存器va中的4个有效的内容数据和来自向量寄存器vb中的4个 对应的有效内容数据进行逻辑运算;
4个中间向量寄存器407,分别用于存储ALU404的运算结
果;
4个并行乘法累加器(MAC)408,分别用于将来自上述4个中 间向量寄存器407中的数据内容与预定滤波系数416相乘,并将 各个乘积与4个累加寄存器409中的内^据相加;和 4个累加寄存器409,分别用于存储上述的相加结果, 两个多路复用(MUX)阵列405,406,分别对来自向量寄存器va和 vb的内M据通过移位进行自修正,以使移位后的第一组和第二组内容 数据适于下一次滤波指令的操作,在如图4所示的硬件结构中MUX阵 列405, 406是将向量寄存器va的内容数据向左移位一位并将最右边的内 容数据填零,而向量寄存器va的内容数据中在移位前最靠左端的数据将 在移位后被抛弃(扔掉),将向量寄存器vb的内容数据向右移位一位并 将最左边的内容数据填零,而向量寄存器vb的内容数据中在移位前最靠 右端的数据将在移位后被抛弃(扔掉)。
写回逻辑(写回装置),分别用于将向量寄存器va和vb的自修正 后的内容数据写回到寄存器阵列401,继续下一滤波指令的处理,以及 程序控制逻辑,用于执行上述核心处理器中的各逻辑功能。
应当理解,向量算术逻辑单元、中间向量寄存器、并行乘法累加器 和累加寄存器的个数不限于4个,而是与最M获得的插值个数相适应。
这些向量算术i辑单元、中间向量^^器、'、并行乘法累加器和累加寄存
器的个数应等于要获得的插值个数。
本发明的自修正SIMD处理器可以应用于对偶数抽头和奇数抽头 对称滤波、优选水平对称滤波进行加速。具体的指令描述如下
n_) sj附yift—e OCC,m,v6,/WM7M —— 4禺数抽头对称滤波的指令
W sjw/ /(_0 flcc,va,v6,pawi-— 奇^t抽头对称滤波的指令 在偶数抽头对称滤波中使用symfilt一e指令。在奇数抽头对称滤波中 使用symfilt_o指令。
其中,acc是保持结果的目标累加寄存器;
va和vb是提供滤波源(filtering source)的两个向量寄存器,用于 存放参与插值的源操作数,对于音频滤波时是指不同采样时间的采样值, 对于图像例如视频应用中的图像时是指不同位置的像素数据;
parm是用于指定滤波系数的立即数。在以上所述的H.264 6抽头滤 波实例中,parm字段的值可以是l, -5, 20。
利用本发明的自修正SIMD处理器对以上指令的执行涉及如下操

1. 从向量寄存器阵列401中读出存储在两个源向量寄存器(图4中 由402表示的做和由403表示的)中的数据。在此为清楚起见假设向 量寄存器v" ^€ v14而向量寄存器^€ v15。
2. 根据预定模式从寄存器阵列401的两个读端口 l和2将向量寄存 器v14和v15中的内^lt据分别传送到包括向量ALU0-ALU3在内的向 量ALU404的两个输入端417和418。上述模式为
字436, 448连接到ALUO作为其输入ALU0(436,448)
字437, 449连接到ALU1作为其输入ALU1(437,449)
字438, 450连接到ALU2作为其输入ALU2(438,450)
-字439, 451连接到ALU3作为其输入ALU3(439,451)
以ALUO为例,在输入总线412的最左边的字436被连接到ALUO
作为其输入,而另一条输入总线413的第5个字448同样连接到ALUO 作为其第二输入。
3. 由附困标记404表示的向量ALU0-ALU3对从输入端417和418 输入的内容数据执行算术或逻辑运算,示例地,此处为加法运算,然后 将运算结果暂时存储到中间向量寄存器407,以用于下次操作。
4. 在上述3的同时,通过两个多路复用(MUX)阵列405, 406对 输入总线412和413的内^据进行自修正以将其重新整形为预定格式。 特别的,用于对称滤波的预定格式为
a) 将读端口 1 (输入总线412)上的内容数据向左移位一个像素宽
度;
b) 将读端口 2 (输入总线413)上的内^lt据向右移位一个像素宽
度;
c) 利用硬件线路414在输入总线412上最右边像素443中填充零;
d) 利用硬件线路415在输入总线413上最右边像素443中填充零; 随后通过两个写回通道410, 411将新格式的内容数据写回到寄存器
阵列401。
5. 中间向量寄存器407中的数据(452,453,454,456)然后被分别输入 到由4个并行乘法累加器(MAC: Multiply&Accumulate) (408)组成的专
用数据通路。
6. 中间向量寄存器407中的数据452,453,454,456的内^t据首先与 在指令字的直接插入/w附字教中指定的预定滤波系数416相乘,然后再 与累加寄存器456,457,458,459中的内M据相加,最后其结果被存储在 由累加寄存器456,457,458,459构成的累加寄存器409中,以更新原累加 寄存器409中的内容数据。
实施方式2
在最新的视频编码标准H.264/AVC中,运动预测的精度达到1/4 像素。为了提高运动预测的速度,同样希望实现运动预测过程的SIMD 并行运算,其间遇到的最大问题就是1/4像素精度参考图像的传统存 储方式不适合并行操作。本发明提出的上述自修正SIMD处理器实现 了运动预测过程的SIMD并行运算,通过对偶数抽头和奇数抽头水平
对称滤波进行加速减少了整个运动预测过程消耗的时间。
现在以H.264中的6抽头(水平对称)滤波为例,结合图4所示的 硬件构架和图5所示的寄存器内容描述本发明的自修正机构如何实现对 称滤波的。
假设像素的精度为通常的8位,向量寄存器的宽度为64位,则一 个向量寄存器可包含8个像素。可以设想本发明使用的像素位数和向量 寄存器的尺寸并不限于8位和64位,6位像素显然可以应用于本发明, 而向量寄存器的尺寸可以根据待处理的像素位数和数量作相应调整。
向量寄存器文件^^没计为如图4所示的2端口读2端口写(2读2 写)的寄存器阵列。在对称滤波开始之前,参考像素P0,pl,p2,p3,p4,p5,p6,p71和lpl,p2,p3,p4,p5,p6,p7,p81首先全部被加栽到 如图5所示的寄存器文件(501-518)中。
从读端口 1读出寄存器va中的内 据,如图5的第一循环处理 555中所示为p0-p7,从另一读端口读出寄存器vb中的内容数据,如图5 所示为pl-p8。如图5所示,从寄存器va读出的在位置501-504的最左 边的4个像素p0,pl,p2,p3,以及从寄存器vb读出的位置513-516的最 右边的4个像素[p5,p6,p7,p81首先被选出并分别被传送到4个向量ALU (在图4中的ALU 404),进行加法运算。这样在下一个^示为cl的 循环处理中,可在临时寄存器452-455中分别获得来自p0+p5lpl+p6lp2+p7lp3+p8I的结果。
然后在下一个循环c2,在临时寄存器452-455中的结果将会首先与 parm字段中指定的直接插入参数416相乘,在h.264标准的实例中该第 一parm的值为l。随后将上述乘积添加到累加寄存器456-459,该累加 寄存器456-459已经由早先的指令"clraccO"(图6所示)被初始化到零。 在执行完第一^附/ /(^指令后,则在累加寄存器中获得等式(5)的结果
acc = a0*(| p0+p5 | pl+p6 | p2+p7 | p3+p8 |) (5) 在第一个循环cl中,分别使读端口 l和读端口 2上的内^b据向左
和向右移位一个像素宽度。更具体地,在H.264中的6抽头(水平对称) 滤波的实例中,借助多路复用阵列405,406 ,在va侧像素 [pl,p2,p3,p4,p5,p6,p7,0
(如图中第2循环处理556中显示在位置518到 525)由多路复用阵列405选择,其中像素pO被移位操作所抛弃而不再 被存储,然后被传送到写回端口 1 (经由写回通道410)。在vb侧像素0,pl,p2,p3,p4,p5,p6,p7(如图5中第2循环处理556中显示在位置526 到533 )由多路复用阵列406选择,其中像素p8被移位操作所抛弃而不 再^MC存储,然后被传送到写回端口 2 (经由写回通道411)。
接下来当下一个循环c2的向量寄存器阵列写入搮作被触发时,上述 被移位的值将被写回到vfl和v办。在执行完第一 ^附y^一e指令后,寄存 器va和现在保持着移位后的像素值。如图5的第2循环处理556所 示,第二砂附力/Le指令将分别在读端口 1 (输入总线412)和读端口 2 (输 入总线"S)读出像素pl,p^p^p4(在寄存器v/i的位置518-521上)和像 素p4,p5,p6,p7(在寄存器的位置530-533上)。这样在执行完笫二 矽wy^一e指令后,则在累加寄存器中获得等式(6)的结果
acc = al*(| pl+p4 | p2+p5 | p3+p6 | p4+p7 |) + acc (6)
类似地,当执行完第三矽w/^—e指令后,读端口 l和读端口 2上的
数据分别变为p2,p3,p4,p5(在寄存器w的位置537-540)和p3,p4,p5,p6
(在寄存器的位置549-553)。这样在执行完第三sjw/^一e指令后,则
在累加寄存器中获得等式(7)的结果
acc = a2*(| p2+p3 | p3+p4 | p4+p5 | p5+p6 |) + acc (7)
通过将寄存器v"中的内容数据向左移位一个像素以及通过将寄存 器中的内^t据向右移位一个像素,就获得了适于等式(5)、 (6)和(7) 中的操作运算的源操作数排列。这样可将8个参考像素(以它们在向量 寄存器中存在的原始形式而不经过任何额外数据重组)直接送进SIMD ALU,因此可以减轻水平排列的数据所需的额外数据重組带来的开销。
图6给出了用于对水平源数据的偶数抽头(以6抽头为例)对称滤波 操作的参考代码(6-tap symmetric horizontal filtering pseudo-codes):
首先"弁defme parm0 0x0001"、 "#defme parml 0xfffb,,以及"弁defme
parm2 0x0010"分别用来定义对称滤波的系数,在H.264 6抽头滤波实 例中parm字段的值分别1,-5,20; i^"load vl4,*address_of(pixd_0)r 以及"load vl5,*[address_of(pixel—1)"分别用来将从像素p0开始的8个 连续像素加栽到v14和将从像素pl开始的8个连续像素加栽到vl5;随 后"clr acc0"将累加寄存器全部清零;接着"symfilt—e acc0,vl4,vl5,parm0,, 、 "symfilt一e acc0,vl4,vl5,parml"以及"symfilt一e accO,vl4,vl5,parm2"进行第 一 、第二和第三循环的滤波。
另外,为获得二分之一像素运动向量精度继续执行垂直6抽头滤波 时,由于纵向插值操作其源操作数的数据组织适合传统的SIMD结构, 因此可以方便地以SIMD进行处理。例如预测的像素p18 (图3中框308 所包含的像素)可以由其垂直相邻的像素p9, p13, p14, p15, p16, p17 (302a, 303, 304, 305, 206, 307)产生p18 = a0*p9 + al*pl3 + a2*pl4 + a2*pl5 + al*pl6 + a0*pl7 (在H.264标准中aO-l, al=-5, a2 = 20), 在该实施方式2中是将橫向插值的结果从图4的累加寄存器(ACC) 409 加栽到图4中的向量寄存器阵列401,利用传统的SIMD乘法指令即可 以完成纵向插值,获得图3中的像素p18。以此类推,位于像素p18右 边的同一行上的三个像素均可由垂直方向上相邻的6像素产生。因此本 发明实施方式2将不再对垂直对称滤波进行详述。
使用本发明的实施方式2,可以进一步将全像素和二分之一像素位 置的釆样值进行平均得到四分之一像素位置的预测值,提高运动预测精 度使运动补偿中运动矢量精确到1/4像素级。
应当了解,本发明的实施方式2可以应用于8抽头水平对称滤波。 相对于6抽头滤波,8抽头对称滤波的具体操作只需要再增加一次循环处 理以第4个滤波系数进行插值操作即可。由此可见,本发明的实施方式 2可以针对抽头系数对称的其它任何的偶数抽头滤波处理,只要计算不 超出并行乘法累加器(MAC)的数值范围。
实施方式3
同样本发明的自修正SIMD处理器可实现对奇数抽头对称滤波的加速。
奇数抽头对称滤波操作与偶数抽头对称滤波操作略有区别,如图7 所示,区别仅在于最后一个计算步骤。以5抽头对称滤波为例,本发明 提出按照以下等式(8)、 (9)和(10)进行计算
acc = aO*(| p0+p4 | pl+p5 | p2+p6 | p3+p7 |) (8) acc = al*(| pl+p3 | p2+p4 | p3+p5 | p4+p6 |) + acc (9) acc = a2*(| p2+ 0 | p3+ 0 | p4+ 0 | p5+ 0 |) + acc (10)
因此与6抽头对称滤波操作的等式(5)、 (6)和(7)相比较,主要区别 仅在于最后一个计算步骤中其中一半操作数由零代替(见等式IO),由 此实现5抽头对称滤波。
对于奇数抽头对称滤波操作,硬件同样可以使用如图4所示硬件结构。
考虑到5抽头对称滤波操作数的变化(如等式(8)、(9)和(10)中所示), 5抽头对称滤波操作与图6所示的偶数抽头对称滤波的操作除以下区别 外几乎完全一样1)现在由存储器从p0的地址开始加载寄存器vl5(即 vb)中的值,如图7所示在位置709处,而在图6所示的6抽头滤波操 作中,加载到vl5中的第一像素是pl而不是p0; 2). 5抽头对称滤波操 作的最后操作(即第三次循环处理)是执行由零代替一半操作数的指令。
这种由零代替一半操作数的指令,在本发明中称为^my /o 指令, 该指令与^w,/一e指令的区别在于在矽/ ,/(_"旨令,移位后的值(例 如图5所示第三循环处理557中位置549-552的像素p3至p6 )被传送到 SIMD ALU的输入端,以便在下一个循环执行SIMD加法操作。而在 矽wy^一0指令的情况下,移位后的值(例如图7所示第三循环处理757 中的位置749-752处的值)被零取代(如等式10所示),以便在下一个 循环执行SIMD加法4IMt。这样在矽w/^一o指令的情况下,SIMDALU 在第三循环处理中实际上仅变为 一 串选择线。
图8给出了用于对水平源数据的奇数抽头(以5抽头为例)对称滤波 操作的参考代码(5-tap symmetric horizontal filtering pseudo-codes):
首先"弁define parm0 0x0001"、 "#defme parml 0xfffb,,以及'嗜define parm2 0x0010"分别用来定义对称滤波的系数,在H.264 6抽头滤波实 例中parm字段的值分别1,曙5,20;随后"load vl4,*[address—of(pixel_0)
" 以及"load vl5,*address—of(pixe1—l)l,,分别用来将从像素p0开始的8个 连续像素加载到v14和将从像素p0开始的8个连续像素加栽到vl5;随 后"clr acc0"将累加寄存器全部清零;接着"symfilt—e accO,vl4,vl5,parmO" 、 "symfilt一e acc0,vl4,vl5,parml"以及"symfilt一o acc0,vl4,vl5,parm2,,进行第 一 、第二和第三循环的滤波。
同样应当了解,本发明的实施方式3可以应用于其它抽头系数对称 的奇数抽头滤波处理,只要计算不超出并行乘法累加器(MAC)的数值范 围即可。
以上所述的SIMD处理器中加速对称滤波的自修正机构可以应 用于图像处理、音视频编解码,甚至普通的信号处理,其操作可以由 处理器系统、微控制器、可编程逻辑器件或微处理器实现部分或全部 的操作。另外,其中的一些操作也可以用软件实现。实现这些操作的 互连功能单元或软件模块可以被集成到单一的逻辑器件、程序或操作 中。其中上述装置和方法同样适于不对称的滤波装置或方法,本领域 技术人员无需任何创造性的劳动,就可以根据本发明的装置和方法, 增加相应的选择逻辑以及在指令中扩展一个指令域来存放另外一组的
非对称的系数,就可以将本发明扩展为不对称的滤波装置和方法。
尽管已经结合实施例具体说明了由本发明的发明人所做出的发 明,但是本发明不限于这样的实施例,在不脱离本发明主旨的情况下, 可以进行各种修改。
权利要求
1.一种滤波装置,该滤波装置包括输入装置,用于从存储装置中输入源操作数;向量算术逻辑装置,用于对所述源操作数进行滤波处理,以最终获得m个插值结果,其中m为不小于1的整数;多路复用阵列,用于对所述源操作数进行移位自修正;写回装置,用于将移位自修正后的上述源操作数写回所述存储装置,以继续下一滤波处理。
2. —种如权利要求l所述的滤波装置,其中所述存储装置至少包括 第一寄存器和第二寄存器。
3. —种如权利要求l所述的滤波装置,其中所述源^Mt数至少包括 第一组源操作数和第二组源操作数,第一组源操作数以及第二组源操作 数中的源操作数的个数分别至少大于或者等于插值结果的个数m。
4. 一种如权利要求2所述的滤波装置,其中所述输入装置从所述第 一寄存器和所述第二寄存器分别输入所述第一组源操作数和所述第二组 源操作数,所述第一组源操作数以及所述笫二组源操作数中的源操作数的个数分别至少大于或者等于插值结果的个数m。
5. —种如权利要求l所述的滤波装置,其中所述向量算术逻辑装置 包括向量算术逻辑单元,用于对所述源操作数中的部分源操作数进行逻辑运算;中间向量寄存器,用于存储上述向量算术逻辑单元的运算结果; 并行乘法累加器,用于将来自上述中间向量寄存器中的运算结果与预定的滤波系数相乘,并将所获得的乘积分别与已存储在累加寄存器中的结果相加;和累加寄存器,用于存储上迷的相加结果。
6. —种如权利要求5所述的滤波装置,其中所述向量算术逻辑装置 包括至少m个向量算术逻辑单元、至少m个中间向量寄存器、至少m个并行乘法累加器、至少m个累加寄存器,所述源搮作数至少包括笫一 组源操作数和第二组源搮作数,m个所述向量算术逻辑单元分别用于对 第 一组源操作数中的最左边m个源操作数和第二组源搮作数中的最右边 m个源操作数进行逻辑运算,m个所述中间向量寄存器分别用于存储上 述m个向量算术逻辑单元的运算结果,m个所述并行乘法累加器分别用 于将来自上述m个中间向量寄存器中的运算结果与预定的滤波系数相 乘,并将各个乘积分别与已存储在m个所述累加寄存器中的结果相加和将所获得的相加结果再分别存储在该m个所述累加寄存器中。
7. —种如权利要求3、 4、 5、 6所述的滤波装置,其中所述滤波装置包括至少两个多路复用阵列,该多路复用阵列将第一组源操作数向左移位并将第一组源操作数的最右边数据填零,将第二组源操作数向右移 位和将第二组源操作数的最左边数据填零,以对上述源操作数进行自修正,并使移位后的第一组源操作数和第二组源搮作数成为下一滤波处理 的源操作数。
8. —种如权利要求7所述的滤波装置,其中所述存储装置包括至少 第一寄存器和第二寄存器,所述写回装置将所述移位后的第一组源操作 数和第二组源搮作数分别写回到所述第 一寄存器和所述第二寄存器。
9. 一种如权利要求8所述的滤波装置,其中所述滤波装置包括至少 两个所述写回装置。
10. —种如权利要求1-9中任一项所述的滤波装置,其中所述滤波 装置的所述滤波系数是对称的。
11. 如权利要求5、 6中任一项所述的滤波装置,其中所述向量算术 逻辑单元分别对第一组源操作数中的源操作数和第二组源操作数中对应的源操作数进行加法运算。
12. 根据权利要求1-11中任一项的滤波装置,适于执行SIMD 指令通过对水平排列的所迷源操作数进行预定次数的滤波处理,以获得 m个横向插值结果。
13. 根据权利要求1 - 11中任一项的滤波装置,适于执行偶数抽头 对称滤波处理,其中滤波处理的预定次数等于抽头数的二分之一。
14. 根据权利要求13的滤波装置,适于在H.264标准视频编解码 中执行6抽头对称滤波处理,其中第一组源操作数是表示8个像素点的p0,pl,p2,p3,p4,p5,p6,p7,第二组源操作数是表示8个像素点的pl,p2, p3,p4,p5,p6,p7,p8,通过对第一和第二组源操作数执行预定对称滤波系数分别为a0, al, a2的三次滤波处理,在累加寄存器中获得4个插值结果<formula>formula see original document page 4</formula>其中acc表示累加寄存器的保持结果。
15. 根据权利要求1 - 11中任一项的滤波装置,适于执行奇数抽头 对称滤波处理,其中滤波处理的预定次数等于"抽头数+ l"的二分之一, 并且在最后1次滤波处理前所述两个多路复用阵列使第二组源操作数全 部变为零。
16. 根据权利要求15的滤波装置,适于执行5抽头对称滤波处理, 其中第一组源操作数是表示8个像素点的p0,pl,p2,p3,p4,p5,p6,p7,第二组源操作数是表示相同8个像素点的p0,pl,p2,p3,p4,p5,p6,p7,通过对第一和第二组源操作数执行预定滤波系数分别为a0, al, a2的三次滤波处理,在累加寄存器中获得4个插值结果<formula>formula see original document page 4</formula>其中acc表示累加寄存器的保持结果。
17. —种滤波方法,该滤波方法包括如下步骤a) .使用输入装置从存储装置中输入源操作数;b) .使用向量算术逻辑装置对上述源操作数进行滤波处理;c) .使用多路复用阵列对上述输入的源操作数进行移位自修正;d) .使用写回装置将移位自修正后的上述源操作数写回所述存储装 置;e) .重复步骤a)-d)直至获得m个插值结果,其中m为不小于l的整数。
18. —种如权利要求17所述的滤波方法,其中步骤a)是从至少包括 第 一寄存器和第二寄存器的存储装置中分别输入所述源操作数。
19. 一种如权利要求17所述的滤波方法,其中所述源操作数至少包 括第一组源操作数和第二组源操作数,第一组源操作数以及第二组源操 作数中的源操作数的个数分别大于或等于插值结果的个数m。
20. —种如权利要求18所述的滤波方法,其中所述输入装置从笫一 寄存器和第二寄存器分别输入第一组源操作数和第二组源操作数,第一 组源操作数以及第二组源操作数中的源操作数的个数分别大于或等于插 值结果的个数m。
21. —种如权利要求17所述的滤波方法,其中步骤b)包括下列步骤 使用向量算术逻辑单元对所述源操作数中的部分源操作数进行逻辑运算;使用中间向量寄存器存储上述向量算术逻辑单元的运算结果;使用并行乘法累加器将来自上述中间向量寄存器中的运算结果与预定的滤波系数相乘,并将所获得的乘积分别与已存储在累加寄存器中的结果相加;和使用累加寄存器存储上述的相加结果。
22. —种如权利要求21所述的滤波方法,其中所述向量算术逻辑装 置包括至少m个向量算术逻辑单元、至少m个中间向量寄存器、至少m 个并行乘法累加器、至少m个累加寄存器,所述源搮作数至少包括笫一 组源操作数和第二组源操作数,使用m个所述向量算术逻辑单元分别对 第一组源操作数中的最左边m个源操作数和第二组源操作数中的最右边 m个源操作数进行逻辑运算,使用m个所述中间向量寄存器分别存储上 述m个向量算术逻辑单元的运算结果,使用m个所述并行乘法累加器分 别将来自上述m个中间向量寄存器中的运算结果与预定的滤波系数相 乘,并将各个乘积分别与已存储在m个所述累加寄存器中的结果相加和 将所获得的相加结果再分别存储在该m个所述累加寄存器中。
23. —种如权利要求19、 20、 21、 22所述的滤波方法,其中采用至少两个多路复用阵列,使用该多路复用阵列分別将第 一组源搮作数向左 移位并将第一组源操作数的最右边数据填零,和将第二组源操作数向右 移位并将第二组源搮作数的最左边数据填零,以对上述源搮作数进行自 修正,并使移位自修正后的第 一组源操作数和第二组源操作数成为下一 滤波处理的源操作数。
24. —种如权利要求23所述的滤波方法,其中使用所述写回装置将 移位后的所述第 一组源操作数和所述第二组源操作数分别写回到所述存 储装置的所述第 一寄存器和所述第二寄存器。
25. —种如权利要求24所述的滤波方法,其中所述滤波方法使用至 少两个所述写回装置。
26. —种如权利要求17-25中任一项所述的滤波装置,其中所述滤 波装置的所述滤波系数是对称的。
27. 根据权利要求21、 22中的滤波方法,其中所述向量算术逻辑 单元分别对第一组源操作数中的部分源操作数和第二组源操作数中对应 的源操作数进行加法运算。
28. 根据权利要求17-27中任一项的滤波方法,其中通过对水平 排列的源操作数进行预定次数的滤波处理获得m个橫向插值结果。
29. 根据权利要求17-27中任一项的滤波方法,用于执行偶数抽 头对称滤波处理,其中滤波处理的预定次数等于抽头数的二分之一。
30. 才艮据权利要求29的滤波方法,用于在H.264标准视频编解码 中执行6抽头对称滤波处理,其中第一组源搮作数是表示8个像素点的p0,pl,p2,p3,p4,p5,p6,p7,第二组源操作数是表示8个像素点的pl,p2, p3,p4,p5,p6,p7p8,通过对第一和第二组源操作数执行预定滤波系数分别为a0, al, a2的三次滤波处理,在累加寄存器中获得4个插值结果acc = a0*(| p0+p5 | pl+p6 | p2+p7 | p3+p8 |)acc = al*(| pl+p4 | p2+p5 | p3+p6 | p4+p71) + accacc = a2*(| p2+p3 | p3+p4 | p4+p5 | p5+p6 |) + acc其中acc表示累加寄存器的保持结果。
31. 根据权利要求17-27中任一项的滤波方法,适于执行奇数抽 头对称滤波处理,其中滤波处理的预定次数等于"抽头数+r的二分之一,并且在最后i次滤波处理前使用两个多路复用阵列使第二组源操作数全 部变为零,将全部为零的第二组源操作数写回到第二寄存器。
32. 根据权利要求31的滤波方法,适于执行5抽头对称滤波处理, 其中第一组源操作数是表示8个像素点的p0,pl,p2,p3,p4,p5,p6,p7,第二组源操作数是表示相同8个像素点的p0,pl,p2,p3,p4,p5,p6,p7,通过对第一和第二组源操作数执行预定滤波系数分别为a0, al, a2的三次滤波处理,在累加寄存器中获得4个插值结果acc = a0*(| p0+p4 | pl+p5 | p2+p6 | p3+p7 |)acc = al*(| pl+p3 | p2+p4 | p3+p5 | p4+p6 |) + accacc = a2*(| p2+ 0 | p3+ 0 | p4+ 0 | p5+ 0 |) + acc其中acc表示累加寄存器的保持结果。
33. —种滤波系数对称的滤波装置,适于执行SIMD指令通过预定 次数的滤波处理获得m个插值结果,其中m为不小于1的整数,该滤波 装置包括输入装置,用于分别从第一寄存器和笫二寄存器输入用于插值处理 的笫一组源操作数和第二组源操作数,其中笫一组源操作数和第二组源 操作数的源操作数的个数为大于或等于m的整数; 向量算术逻辑装置,所述向量算术逻辑装置包括m个向量算术逻辑单元,分别用于对第一组源操作数中的最 左边的m个源操作数和笫二组源操作数中的最右边的m个源操作 数进行逻辑运算;m个中间向量寄存器,分别用于存储m个向量算术逻辑单元 的运算结果;m个并行乘法累加器,分别用于将来自上述m个中间向量寄 存器中的运算结果与预定的滤波系数相乘,并将各个乘积分别与 已存储在m个累加寄存器中的结果相加;和m个累加寄存器,分别用于存储上述的相加结果, 两个多路复用阵列,通过分别对第一组源操作数和第二组源操作数 向左移位和向右移位并将第一组源操作数的最右边数据填零和将第二组 源操作数的最左边数据填零进行自修正,以使移位自修正后的第 一组和 第二组源操作数成为下一滤波处理的源搮作数,写回装置,用于分别将移位后的第一组源操作数和第二组源操作数 写回到第一寄存器和第二寄存器,继续下一滤波处理。
34. —种滤波系数对称的滤波方法,用于执行SIMD指令通过预定 次数的滤波处理获得m个插值结果,其中m为不小于1的整数,该滤波 方法包括如下步骤a) .分别从第一寄存器和第二寄存器输入用于插值处理的第一组源 操作数和第二组源操作数,其中第一组源操作数和第二组源操作数的源 操作数的个数为大于或等于m的整数;b) .使用m个向量算术逻辑单元分别对第一组源操作数中的最左边 的m个源操作数和第二组源操作数中的最右边的m个源操作数进行逻辑 运算,将获得的m个运算结果分别存储在m个中间向量寄存器中;c) .使用m个并行乘法累加器分别将来自上述m个中间向量寄存器 中的运算结果与预定的滤波系数相乘,并将各个乘积分别与已存储在m 个累加寄存器中的结果相加,将上述的相加结果存储在m个累加寄存器中;d) .使用多路复用阵列,用于通过分别对第一组源操作数和第二组源 操作数向左移位和向右移位并将第一组源操作数的最右边数据填零和将 第二組源操作数的最左边数据填零进行自修正,以使移位自修正后的第 一组和第二组源操作数成为下一滤波处理的源操作数,e) .使用写回通道分别将移位后的第 一组源操作数和第二组源操作 数写回到第一寄存器和第二寄存器;f) .重复步骤a)-e)直至在m个累加寄存器中获得m个插值结果。
全文摘要
本发明提出修正计算次序以适应水平对称滤波,并且在修正SIMD计算的同时修正源操作数,以免除需要转置像素矩阵这样的繁重开销。具体地,本发明针对6抽头对称滤波提出通过将现有技术中涉及插值滤波的等式重排为等式(5)、(6)和(7),将其时钟循环减少为3次即可获得插值结果acc=a0*(|p0+p5|p1+p6|p2+p7|p3+p8|)(5);acc=a1*(|p1+p4|p2+p5|p3+p6|p4+p7|)+acc(6);acc=a2*(|p2+p3|p3+p4|p4+p5|p5+p6|)+acc(7)。
文档编号H04N7/26GK101163240SQ20061013614
公开日2008年4月16日 申请日期2006年10月13日 优先权日2006年10月13日
发明者律 万, 洋 刘, 敏 朱, 林国辉 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1