支持simd指令的可编程数据处理电路的制作方法

文档序号:6552953阅读:239来源:国知局
专利名称:支持simd指令的可编程数据处理电路的制作方法
技术领域
本发明涉及具有包含SIMD(单指令多数据)指令的指令集的可编程数据处理电路。本发明还涉及完成图像数据内插的方法。
背景技术
在James Abel,Kumar Balasubramanian,Mike Bargeron,TomCraver和Mike Philpot发表在Intel Technology Journal Q2,1999上的″Applications Tuning for Streaming SIMD Extensions″中说明了Intel Pentium(R)III处理器的指令集中对SIMD指令的使用,该篇文章可以从www.intel.com/technology/itj/q21999/articles/art_5.htm获得。这篇文章将被引用为Abel等人。响应SIMD指令,处理器将操作数和结果寄存器的内容看作一系列的多个数(例如32位寄存器中的四个8位数)。处理器并行地多次执行SIMD指令所规定的操作,每次使用来自相应输入寄存器的不同的一对数作为操作数。处理器将包含由这些并行执行的操作产生的相应数的组合结果写入指令规定的结果寄存器。
处理器指令集中这种类型的SIMD指令的存在减少了完成必须对大量数据应用相同的函数的任务(例如图像处理任务,诸如计算机图形处理、图像压缩或解压缩)所必须执行的指令的总数量。指令总数的减少提高了完成这种任务的速度并且降低了这种任务的执行中所占用的功耗。
当用SIMD指令执行任务时,对齐可能会引发问题。对齐问题是能够从存储器将操作数数据装入用于向SIMD指令提供操作数的寄存器的方式的结果。通常操作数数据只能从基本地址间距的某个整数倍的地址开始装入。大多数情况下这不是问题,因为必须要处理的数据(例如连续像素的数据)是从对齐的地址开始连续地存储,因此所有数据都可以用连续的装入指令装入。Abel等人提到高速缓冲存储器行分割环境中的对齐问题。对于特殊情况,Abel等人说明了支持从未对齐的地址装入的″moveups″指令的使用。另外,Abel等人说明了″shuffling″指令,它可以用来重新整理来自寄存器的数。使用这种类型的指令的需要增加了必须要执行的指令的数量。
对齐问题的一个例子发生在图像数据的内插期间,图像数据的内插涉及对相邻像素的信息组合。Abel等人说明了一种内插方法,其中使用了SIMD指令的并行性将相同像素的不同色彩分量内插在一起。在这种情况下,连续像素的色彩分量集被连续存储在存储器中。
或者,可以将相邻相素的一个色彩分量的像素数据存储在连续相邻的存储位置中。优选地,可以使用SIMD指令并行地为多个像素位置产生内插数据。在这种情况下,通常SIMD指令的第一操作数应该包含第一多个相邻像素的像素数据,第二操作数应该包含第二多个相邻像素的像素数据,第二多个像素的像素位置相对于第一多个像素的像素位置有固定偏移量的偏移(通常是一个像素位置)。但是,在这种情况下不得不从非对齐位置装入至少一个操作数,这增加了所需指令的数量。
其中,本发明的一个目标是为可编程处理器提供一指令集,该指令集支持使用以相距不是对齐间距整数倍的地址间距存储在存储器中的操作数来完成SIMD操作所需指令数量的减少。
其中,本发明的一个目标是为可编程处理器提供一个指令集,该指令集支持使用以可选择的非对齐地址间距存储在存储器中的操作数来完成SIMD操作所需指令的数量的减少。

发明内容
本发明提供了依照权利要求1的数据处理电路。根据本发明,该数据处理电路的指令集包含一种新型的SIMD指令。响应这个SIMD指令,N(例如N=4或N=8)个算术电路并行完成N个相应的相同操作。该SIMD指令从该SIMD指令选择的第一和第二寄存器定义该SIMD指令的第一系列N个相应的SIMD指令操作数和第二系列N个相应的SIMD指令操作数。在执行该SIMD指令时,每个算术电路被安排分别接收来自第一和第二系列的相应的第一操作数和相应的第二操作数。指令执行单元被设计为使得第一和第二系列可能有部分重叠。也就是说,来自第一和第二寄存器的操作数中至少一个但又不是所有操作数由两个算术单元使用。通常,第一和第二系列中至少有一个所包含的N个操作数中有一部分是取自第一寄存器,并且一部分取自第二寄存器。
在一个实施例中,该SIMD指令被应用于信号样本的内插或过滤,其中连续的输出样本位置的内插值是从输入样本位置的相应的操作数对计算出的N个SIMD结果。在这个实施例中,各个连续对的一个操作数与前一对的另一操作数重叠。
优选地,第一和第二寄存器中的第一系列的位置是可编程可选择的。因而,在内插或过滤应用中,即使已经用对齐的装入操作装入操作数寄存器的内容,但仍然可以通过编程将为其计算起始SIMD结果的起始输入样本位置调节到各个样本位置。这在必须为从任意位置(例如从任意定位的窗口开始)开始存储的一个数组进行过滤或内插时尤其有用。第二系列优选地相对第一系列有一个预定的相对位置,例如偏移操作数寄存器中的一个操作数位置。
在一个实施例中,对位置的选择由SIMD指令的操作代码控制。在另一实施例中,位置由来自SIMD指令选择的额外寄存器的操作数控制。这样只需要最少的不同指令类型。优选地,该额外寄存器还对过滤或内插供应系数,它们被共同提供给所有算术电路。
在另一实施例中,该数据处理电路包含耦合在一组寄存器(通常是寄存器文件)和算术电路之间的操作数分配电路。在这个实施例中,由指令数据和/或操作数数据控制该操作数分配电路用于选择至少第一系列操作数的位置。
在另一实施例中,该SIMD指令还有从额外的操作数寄存器的预定位置提供的更多操作数,该位置与第一和第二操作数的所选位置无关。例如,在过滤或内插应用中,该SIMD指令优选地计算N个积和。在这种情况下可以从该额外的操作数寄存器提供N个先前的和。或者可以从算术电路中包括的累加器寄存器提供这些和,但这限制了使用SIMD指令的灵活性。
采用这种类型的SIMD指令,能够从多个位置的操作数值a[]的数组并行计算象r[i]=s[i]+w1*a[i+offset]+w2*a[i+offset+1]这样的结果数组r[i]。通过使用结果r作为这种类型的指令的另一次执行的输入值s(其中使用了其它操作数或偏移),可以用最少数量的指令在处理电路的程序中实现有更大的支持范围(影响结果的位置的范围)的内插或过滤操作。
另外,该指令集优选地还可以包含传统的SIMD指令,响应这些传统的SIMD指令算术电路并行完成N个相同的操作,每个算术电路使用相应的第一操作数(来自寄存器中该额外的SIMD指令选择的第一寄存器)和相应的第二操作数(来自寄存器中该额外的SIMD指令选择的第二寄存器)。


将使用下面附图中所示非限制性示例更详细地说明本发明的这些和其它目标和有利方面。
图1示出了一个数据处理电路;图2示出了一个功能单元的一部分;图3示出了传统SIMD指令的数据流;图4a-c示出了新型SIMD指令的数据流;图5示出了具有简化数据流的功能单元;图6示了具有另一操作数输入的功能单元;图7示出了具有公共操作数的操作数输入的功能单元;图8示出了具有被加数输入的功能单元;图9示出了一个算术电路。
具体实施例方式
图1示出了其中能够实现本发明的数据处理电路的示例。该数据处理电路包含指令发出电路10、多个功能单元12a,b、寄存器文件14和数据存储器16。指令发出电路10具有与功能单元12a,b以及寄存器文件14的地址端口耦合的发出槽输出11a、11b。功能单元12a,b具有与寄存器文件耦合的操作数/结果通信线路13a,b。第一功能单元12a具有与数据存储器16耦合的地址/数据接口15。
在操作中,指令发出电路10通过发出槽11a,b发出指令。每个指令包含一操作代码(提供给功能单元12a,b)、至少一个操作数寄存器地址(提供给寄存器文件14)和至少一个结果寄存器地址(提供给寄存器文件14)。响应该(一个或多个)操作数寄存器地址,寄存器文件14从寻址到的(一个或多个)寄存器读取操作数数据并将该操作数数据提供给功能单元12a,b,功能单元12a,b执行该指令。响应操作代码,功能单元12a,b用该操作数数据作为输入完成所选择的操作。功能单元12a,b将该操作的(一个或多个)结果作为结果数据写入寄存器文件14,寄存器文件14将该结果数据写入由(一个或多个)结果寄存器地址所寻址的(一个或多个)寄存器。
应该强调该图中的数据处理电路的结构只是一个示例,可以使用很多其它结构。尽管已经使用了特定结构的处理电路来阐述本发明,但应该理解该处理电路仅是可以用来实现本发明的处理电路的一个示例,并且在任何情况下都只示出了最少量的细节。例如,尽管示出了具有两个发出槽11a,b和两个功能单元12a,b的处理电路,但应该理解可以使用更多或更少的发出槽和/或功能单元。作为另一个例子,尽管为简单起见没有提及流水线技术,但应该理解通常可以使用流水线技术以使不同指令的处理的不同部分可以重叠并且可以在不同时间发出一条指令的不同部分。此外,尽管示出了与分离的发出槽耦合的分离的功能单元,但应该理解这些功能单元的功能可以被合并到单个功能单元中,或者不同的功能单元可以与相同的发出槽相耦合,以便这些功能单元中的一个或多个在它们接收到适当的指令时开始活动。此外,尽管为简单起见只示出了单个寄存器文件14,但应该理解在实践中该寄存器文件可以代表任意寄存器组,例如包含多个寄存器文件,可能还有相互不同的位宽度的寄存器。发出槽中的不同字段可以寻址这些寄存器文件中的不同寄存器文件。此外,尽管只示出了单条线以表示不同部分之间的连接,但将会理解每条线一般象征多个用于并行提供多个比特的导线。
第一功能单元12a是通过执行对数据存储器16的存取操作来响应操作代码的存储器存取单元。例如,响应读操作代码,功能单元12a可以将地址和读控制信号提供给存储器,接收存储器已经从该地址读取的返回数据并将该数据写入寄存器文件14。另一例子是响应写操作代码,功能单元12a可以提供地址、写数据和写控制信号给存储器,该写数据即是从寄存器文件14接收到的操作数数据。结果,数据存储器16将把该写数据存储在该地址所寻址的位置。通常,存储器存取单元支持快速装入和/或存储指令,该指令能够只从所选择的地址(称为对齐地址)开始将数据装入寄存器,以使连续的对齐地址之间的间距对应于能够一起装入单个寄存器的存储器位置的数量。
第二功能单元12b包括能够执行各种不同的SIMD(单指令多数据)指令的算术处理器。
图2示出了这种算术处理器的一个实施例的例子。在这个示例中功能单元12b有两个操作数输入20a,b、输入连接22a,b、操作数分配电路24、多个算术电路26a-d、以及输出连接28和结果输出29。通常,输入20a,b各自包含在功能上并行耦合到寄存器文件14(未示出)的多个导线。例如,可以为每个输入20a,b并行使用32位或64位导线。输入连接22a,b不需要对应于实际的电路,而是仅仅示出输入20a,b可以被看作是被再分成了多个操作数。例如,32位输入20a,b可以被再分成四个8位操作数,64位输入20a,b可以被再分成四个16位操作数或八个8位操作数。通常,每个输入20a,b代表并行的多个导线,可以为提供给操作数分配电路24的输入的各个操作数而将它们分成组。
操作数分配电路24的输出与算术电路26a-d相应的输入相耦合。算术电路26a-d的输出与输出连接28相耦合,而输出连接28的输出与结果输出29相耦合。示出输出连接28也只是为了表示输出29可以被看作再分成了多个结果。通常,每个算术电路26a-d的输出代表多个并行的导线,它们可被合成为输出29。例如,可以为输出29并行使用32或64位导线。例如,32位输出29可以被再分成来自相应的算术电路26a-d的4个8位结果,64位输出29可以被再分成来自相应的算术电路26a-d的4个16位结果,或者来自相应的算术电路26a-d的8个8位操作数(未示出)。
用于从指令发出电路10(未示出)接收操作代码的输入27与算术电路26a-d中的每一个以及操作数分配电路24耦合。对于一SIMD操作,每个算术电路26a-d通过在它的输入操作数上完成相同的操作来响应。对于传统SIMD指令的执行,操作数分配电路24被安排通过将来自第一输入20a中相应位置的操作数提供给算术电路26a-d的第一输入并将来自第二输入20b中的相应位置的对应操作数提供给算术电路26a-d的第一输入,而响应选择这种传统SIMD指令的操作代码。
图3示出了这种传统SIMD指令的数据流。这里来自相应寄存器的输入30a,b被示为分成了对应于相应操作数的字段。圆环32表示操作,字段和操作之间的箭头象征数据流。例如,这个SIMD指令可以是向量ADD指令,其汇编语言表示类似ADDVECTOR R1,R2,R3这里,″ADDVECTOR″代表操作代码,它标识了必须执行的操作,R1和R2代表寄存器的地址,它们各自的内容将被看作多个操作数,该指令被通过进行多个加法操作而执行,第一加法操作将来自R1和R2所寻址的寄存器中的第一位置的操作数相加,第二加法操作将来自R1和R2所寻址的寄存器中的第二位置的操作数相加,等等。R3表示响应该指令存储多个由此得到的和的寄存器的地址。当然,对于其它操作,象减法操作、乘法操作等,也有类似的传统SIMD指令。
SUBVECTOR R1,R2,R3MULVECTOR R1,R2,R3图4a示出了依照本发明的SIMD指令的一个示例的数据流。在这个例子中使用来自第一输入30a的第一和第二字段的操作数进行操作,使用来自第一输入30a的第二和第三字段的操作数完成相同操作,使用来自第一输入30a的第三和第四字段的操作数完成相同操作,使用来自第一输入30a的第四字段的操作数和来自第二输入30b的第一字段的操作数完成相同操作。该SIMD指令可以是加法指令,例如ADDADJACENT R1,R2,R3这里来自R1所寻址的寄存器中的成对的相邻位置的操作数被加在一起,而R2所寻址的寄存器被看作是R1所寻址的寄存器的延伸。加法操作的结果被存储在R3所寻址的寄存器中。当然,对于来自寄存器中成对的相邻位置的操作数,可以有用于其它操作的其它指令,例如减法、乘法、乘累加(MAC,multiply accumulate)操作等SUBADJACENT R1,R2,R3MULADJACENT R1,R2,R3MACADJACENT R1,R2,R3操作数分配电路24实现了操作数的分配。响应来自输入27的选择了传统类型的SIMD指令的操作代码,操作数分配电路24依照图3的数据流将操作数传输到算术电路26a-d。响应来自输入27的选择了新型SIMD指令的操作代码,操作数分配电路24依照图4a的数据流将操作数传输到算术电路26a-d。
应该理解本发明并不限于图4a所示类型的数据流。响应其它指令,操作数分配电路24可以提供图4b或4c中所示数据流。图4b示出了对一SIMD指令的操作代码的响应,其中,算术电路26a,b分别从第一输入的第一、第二、第三和第四字段接收它们的第一操作数,分别从第一输入的第四字段、第二输入的第一、第二和第三字段接收第二操作数。这种指令的汇编语言表示如ADD14 R1,R2,R3或MAC14 R1,R2,R3等这里操作代码ADD14或MAC14表示操作和R1所寻址的寄存器中的第一操作数的位置。
图4c示出了对一SIMD指令的操作代码的响应,其中算术电路26a,b分别从第一输入的第二、第三和第四字段以及从第二输入的第一字段接收它们的第一操作数,分别从第一输入的第三和第四段以及第二输入的第一和第二字段接收第二操作数。
这种指令的汇编语言表示如ADD23 R1,R2,R3或MAC23 R1,R2,R3等。
当然,不需要对位置的所有组合进行相同操作的操作代码只提供程序中频繁需要的特定组合足矣。
在迄今所给的例子中,操作数分配电路24在来自指令发出电路10的操作代码的控制下从字段对操作数进行选择。或者,可以在从寄存器文件14接收到的另一操作数的控制下或在这种操作数和来自指令发出电路的操作代码的组合的控制下进行该选择。
图5示出了功能电路12b的一个实施例,它具有与寄存器文件14(未示出)耦合的额外操作数输入50。在这个实施例中,由指令发出电路10发出的指令包含额外操作数寄存器选择地址,指令发出电路10将它提供给寄存器文件14。这种指令的例子的汇编语言表示如ADDSUCCESSIVE Rp,R1,R2,R3这里寄存器地址Rp指定提供该额外操作数的寄存器的地址。
在这个实施例中,操作数分配电路24在来自该额外操作数输入50的额外操作数和来自指令发出电路10的操作代码的组合的控制下完成对操作数的选择。在这个实施例中,操作代码可以用来表示是否需要常规流(如图3中所示),以及来自额外操作数输入50的该额外操作数是否控制使用哪种操作数选择。
在一个例子中,该额外操作数从第一输入30a选择第一字段用于操作数,操作数分配电路24从第一输入30a中的那个字段和后续字段开始、并从第二输入30b的第一字段继续,为相应算术电路26a-d选择四个第一操作数。在这种情况下,可以安排操作数分配电路24从第一输入30a中该所选择的字段之后的下一字段以及第一输入30a中的后续字段(如果有的话)开始、并从第二输入30b的第一字段继续,为相应算术电路26a-d选择四个第二输入。这样,例如可以选择图4c的数据流。在这种情况下,该额外操作数可以是四个值如0、1、2、3之一,每个值表示不同的位置。在这种情况下,为此目的,该额外操作数有两位就足够了。
在另一例子中,可以安排操作数分配电路24在该额外操作数或另外两个操作数的控制下独立地选择两个起始操作数的位置。因而,该额外操作数可以包含两个字段,第一字段用于在第一或第二输入中选择第一字段,第二字段用于在第一或第二输入中选择第二字段。在这种情况下,可以安排操作数分配电路24从第一输入30a中的第一字段开始(如果有的话)并从第二输入30b的第一字段继续,为相应算术电路26a-d选择四个第一操作数。同样,可以安排操作数分配电路24从第一输入30a的第二字段(如果有的话)开始并从第二输入30b的第一字段继续,为相应算术电路26a-d选择四个第二操作数。这样,如果该额外操作数的第一字段选择了第一输入的第一字段并且该额外操作数的第二字段选择了第一输入的第四字段,就可以实现图4b的数据流。在这种情况下,为此目的该额外的操作数对相应的字段有两个两位就足够了。
在又一实施例中,该额外操作数包含用于各个操作数的独立选择的选择字段。因而,如果每个寄存器被看作包含N个操作数,该额外寄存器可以包含2N个2logN位的字段以选择操作数。但是,已经发现对于实际的程序,更少的选择就足够了,例如只为第一操作的第一操作数选择一个偏移(从连续的位置中选择其余的操作数),或者为第一操作的第一和第二操作数选择两个偏移(从连续的位置中选择其余的操作数)。
图6示出了在仅仅使用受限操作数选择时可以使用的简化功能单元的部分,其中每个算术电路而不是最后一个算术电路26d的第二操作数充当下一算术电路的第一操作数。这样,操作数分配电路24可以显著简化。操作数分配电路24可以实现为一组多路复用器,例如每个多路复用器用于将可选输入可选地耦合到算术电路26d的相应操作数输入。但是,本发明的其它实现也是可能的。例如,可以提供多个算术电路26a-d用于只执行一种类型的指令,该类型的指令使用来自这个类型的指令中所寻址的寄存器的预定字段的操作数数据。在这种情况下,可以硬布线算术电路的输入以接收所寻址的寄存器的内容的预定部分,响应表示这种类型的指令的操作代码,算术电路被激活以将结果写入结果寄存器。在这种情况下,操作数分配电路24只需要包含相关的布线连接。
图7示出了又一实施例,其中提供了额外输入60,该输入上可以提供被共同馈送给所有算术电路26a-d的额外操作数数据。在这种情况下,该功能单元的指令的汇编语言表示如OPCODE Rp,Rc,R1,R2,R3其中Rc表示具有算术电路26a-d公共的(一个或多个)额外操作数的寄存器的地址。例如,该额外操作数数据可以代表过滤器系数。在一个实施例中,可以用这样的指令实现下列计算b
=w0*a[offset+0]+w1*a[offset+1]b[1]=w0*a[offset+1]+w1*a[offset+2]b[2]=w0*a[offset+2]+w1*a[offset+3]b[3]=w0*a[offset+3]+w1*a[offset+4]这里a
,a[1],a[2],a[3],a[4]等表示R1和R2寻址的寄存器(R2所寻址的寄存器被看作R1所寻址的寄存器的延伸)中相应字段中存储的操作数数据。操作数″offset″是从Rp所寻址的寄存器获得的,并且表示R1和R2所寻址的寄存器中的起始字段位置。每个算术电路26a-d计算b
、b[1]、b[2]和b[3]中相应的一个,这些结果被写到R3所寻址的寄存器的相应字段(部分)。
在这个实施例中,Rc所寻址的寄存器包含系数w0、w1,它们被提供给各个算术电路26a-d。在另一实施例中,控制操作数分配电路24的操作数和共同提供给算术电路26a-d的操作数可以取自单个额外操作数。例如,对32位的寄存器来说,可以从单个操作数中的相应字段提供两个8位系数和一个2位偏移选择OPCODE Rs,Rpc,R1,R2,R3这里,假定在来自Rpc所寻址的寄存器的一个操作数中组合提供位置和系数信息。这些字段由Rs的内容选择。
图8示出了该功能单元的又一实施例,其中已经添加了附加的操作数连接70,其与输入72耦合,输入72从该附加操作数连接向算术电路26a-d中的相应算术电路馈送相应操作数。此外,已经向输出连接28添加了附加的结果连接74。这个功能单元可以用来例如响应一指令完成下列计算b
=s
+w0*a[offset+0]+w1*a[offset+1]b[1]=s[1]+w0*a[offset+1]+w1*a[offset+2]b[2]=s[2]+w0*a[offset+2]+w1*a[offset+3]
b[3]=s[3]+w0*a[offset+3]+w1*a[offset+4]这是使用来自寄存器中连续的相邻字段的操作数的乘加指令。
图9示出了可以用于这个目的的算术电路26,包含用于计算乘积w0*a[..]和w1*a[..]的乘法器90a,b以及加法电路92。
在这个例子中,该功能单元输出被加数s[..]和乘积w0*a[..]及w1*a[..]的相应和。相应算术电路26a-d的被加数s[..]是从Rs所寻址的寄存器的预定字段获取的,公共系数是从Rpc所寻址的寄存器获取的,操作数a[]是从R1和R2所寻址的寄存器的相应字段获取的。得到这些操作数的位置由来自Rpc所寻址的寄存器的偏移信息控制。来自不同算术电路26a-d的结果被合并在一起并写入由R3所寻址的寄存器。
优选地,存储结果的寄存器(R3)的宽度(位数)至少两倍于用来提供操作数a[..]的寄存器(R1,R2)的宽度。这是用来解决不丢失精度的情况下需要2M位表示两个M位的数的乘积的事实。如果使用了累加(将一个数加上乘积),需要的位数甚至更多,如2M+2位。可以根据结果的相关宽度选择该宽度。因而,例如,如果从32位输入寄存器(R1,R2)提供了四个8位操作数a[..](M=8),那么优选地使用64位输出寄存器(R3)存储4个16位结果(M=16)。另外,响应该指令,结果优选地还被以截短的精度存储在另一结果寄存器R4中,R4与输入寄存器(R1,R2)具有相同的宽度。在这个另一结果寄存器中,只存储了各个结果b[..]的一部分,例如只有最有效的一半位,或者只有最有效相关的一半位,例如来自各个结果的多个预定位置的位,如4-12位。优选地,用于提供和s[..]的寄存器(Rs)的宽度也两倍于用来提供操作数a[..]的寄存器(R1,R2)的宽度。这可以用于使用下列指令的多维内插(如2维图像内插)的实现MAC Rs,Rpc1,R1,R2,R3,R4MAC R3,Rpc2,R1′,R2′,R3,R4这里假定R1所寻址的寄存器包含沿着图像线的相邻像素位置的N(如N=4)个像素值(如像素值p[i,j],p[i+1,j],p[i+2,j],p[i+3,j],整数j指行,而i指起始像素位置),R2所寻址的寄存器包含跟随在R1的那些值之后的位置的像素值(如像素值p[i+4,j],p[i+5,j],p[i+6,j],p[i+7,j])。Rpc1所寻址的寄存器包含两个系数w00、w01。同样,假定R1′和R2′各自包含沿着与R1和R2的图像线相邻的下一条图像线的相邻像素位置的N个(如N=4)像素值(如,分别是像素值p[i,j+1],p[i+1,j+1],p[i+2,j+1],p[i+3,j+1]和p[i+4,j+1],p[i+5,j+1],p[i+6,j+1],p[i+7,j+1])。Rpc2所寻址的寄存器包含两个系数w10和w11。Rs所寻址的寄存器包含零值。在这种情况下,在两个操作之后,R3所寻址的寄存器中的结果将包含b
=w00p[i+0,j]+w01p[i+1,j]+w10p[i+0,j+1]+w11p[i+1,j+1]b[1]=w00p[i+1,j]+w01p[i+2,j]+w10p[i+1,j+1]+w11p[i+2,j+1]b[2]=w00p[i+2,j]+w01p[i+3,j]+w10p[i+2,j+1]+w11p[i+3,j+1]b[3]=w00p[i+3,j]+w01p[i+4,j]+w10p[i+3,j+1]+w11p[i+4,j+1]因而,通过执行两条指令已经完成了四个4-像素内插。为了内插整个图像,可以结合装入连续的像素组重复该操作。
优选地,另外该功能单元支持至少一个指定偏移的操作数,例如作为Rpc1和Rpc2寻址的寄存器中的操作数的一部分。这样,在该程序的控制下可以选择R1、R2和R1′、R2′所寻址的寄存器上的起始像素值p[i+0,j]和p[i+0,j+1]的位置。这使得能够为从数据存储器中的任意地址开始存储的像素值产生结果,而不需要结合使用对齐地址的装入操作的额外重新排列。因而,可以用下列指令处理沿着一条线的一系列像素
LOAD A,R1INC4 ALOAD A,R2LOAD A′,R1′INC4 A′LOAD A′,R2′repeatMACRs,Rpc1,R1,R2,R3,R4INC4 ALOAD A,R1MAC R3,Rpc2,R1′,R2′,R3,R4STORE A″,R4INC4 A″INC4 A′LOAD A′,R1′MACRs,Rpc1,R2,R1,R3,R4INC4 ALOAD A,R2MAC R3,Rpc2,R2′,R1′,R3,R4STORE A″,R4INC4 A″INC4 A′LOAD A′,R2′这里来自成组的相邻存储器位置的像素值被装入由R1和R2以及R1′和R2′寻址的寄存器并用来产生(MAC指令中)成组的四个内插结果。这里使用的来自用来产生第一内插结果的寄存器R1、R2的第一像素的偏移由Rpc1寻址的寄存器控制。来自下一组相邻存储位置的后续像素值被装入R1(和R1′),R1和R2的角色在内插指令(MAC)中互换。这之后循环继续。
应该理解这个程序中的存储器存取指令(LOAD和STORE)都使用了对齐地址。因而,帮助实现了从未对齐的起始地址开始存储的像素数据的内插。如果在图像中任意可选择的位置上开始的相对较小的窗口中需要内插,这尤其能提高速度。
尽管已经对二维图像处理阐述了本发明的应用,但应该理解本发明并不限于这个应用。本发明还可应用于一维数组处理或三维和更高维度的数组处理。此外,尽管已经阐述了涉及对像素和系数的乘积求和的SIMD指令,但应该理解还可使用其它指令。
根据本发明,处理电路被安排在它的指令集中包括特定的新型指令。众所周知,处理器的指令集规范一般足以告知技术人员能够选择什么实现方式来实现处理器。指令集定义了处理器的机器程序中可以包括的各个不同类型的指令(指令,在这里使用时,指机器程序的“原子”,是在不以不是指令自身的片断结束的情况下程序能够分割成的最小单位)。依照本发明的处理电路的指令集包含使处理电路执行SIMD操作的指令,意义在于通过使用来自各自包含多个潜在操作数的寄存器的操作数并行执行相同类型的操作产生多个结果。该并行执行的操作数使用重叠的操作数系列。优选地,该指令有一额外的操作数,该操作书指示寄存器中必须从那里获取操作数的位置;或者,不同的操作代码指示不同的位置。
权利要求
1.一种数据处理电路,包括-一组寄存器(14),包括指令可选择的寄存器,每个寄存器包含适合存储相应的SIMD指令操作数和/或结果的多个N个部分;-指令执行电路(12b),具有包含SIMD指令的指令集,该指令执行电路包含多个算术电路(26a-d),用于响应该SIMD指令并行完成N个相应的相同的操作,该SIMD指令定义来自该SIMD指定选择的寄存器中的第一寄存器和第二寄存器的该SIMD指令的第一系列N个相应的SIMD指令操作数和第二系列N个相应的SIMD指令操作数,当执行该SIMD指令时,各个算术电路(26a,b)被安排分别从该第一和第二系列接收相应的第一操作数和相应的第二操作数,其中该指令执行电路(12b)被安排用于选择该第一和第二系列以使它们部分重叠。
2.根据权利要求1的数据处理电路,其中该指令执行电路(12b)被安排从寄存器中的第一和第二寄存器的相应部分至少提取出第二系列的操作数。
3.根据权利要求1的数据处理电路,其中该指令执行电路(12b)被安排在程序的控制下选择寄存器的第一和第二寄存器中所述第一系列的至少一个位置。
4.根据权利要求3的数据处理电路,包括-指令发出电路(10),与指令执行电路(12b)和寄存器组(14)耦合,用于提供指令数据以选择SIMD指令并分别选择寄存器中的第一和第二寄存器;-操作数分配电路(24),耦合在所述寄存器组和算术电路之间,并由指令数据和/或操作数数据控制,用于选择第一系列的一位置,第一系列的可选位置包括其中第一系列跨越寄存器中的第一和第二寄存器的一些部分延伸的的至少一个位置。
5.根据权利要求3的数据处理电路,其中该SIMD指令选择一额外的寄存器,并且该指令执行电路(12b)被安排在来自所选择的额外寄存器的信息的控制下控制第一系列的位置。
6.根据权利要求3的数据处理电路,其中该指令执行电路(12b)被安排从关于第一系列的预定相对位置选择第二系列。
7.根据权利要求1的数据处理电路,其中该SIMD指令选择包含用于存储相应的SIMD指令操作数的多个部分的额外寄存器,该指令执行电路(12b)将来自该额外寄存器中的预定位置的部分耦合到算术电路(26a-d)中的相应预定电路以提供额外的操作数。
8.根据权利要求7的数据处理电路,其中该指令执行电路(12b)被安排在程序的控制下在寄存器的第一和第二寄存器中至少选择第一系列的一位置,以使所述预定位置不受对第一系列的位置的编程选择的影响。
9.根据权利要求7的数据处理电路,其中各个算术电路(26a-d)被安排计算来自该额外寄存器的操作数和来自第一和第二系列的操作数与对所有算术电路(26a-d)公共的系数的乘积之和。
10.根据权利要求9的数据处理电路,其中该指令选择一附加的寄存器,所述系数被从该附加的寄存器提供给算术电路(26a-d)。
11.根据权利要求10的数据处理电路,其中该指令执行电路(12b)被安排在来自该指令选择的附加寄存器的数据的控制下在寄存器的第一和第二寄存器中选择第一系列的至少一个位置。
12.根据权利要求9的数据处理电路,被用包含所述SIMD指令的程序编程以并行完成对成组的像素的像素内插。
13.根据权利要求1的数据处理电路,其中所述指令集包含一额外的SIMD指令,所述指令执行电路被安排使算术电路响应该额外的SIMD指令并行完成N个相同的额外操作,每个算术电路使用来自该额外的SIMD指令所选择的寄存器中的第一寄存器的相应的第一操作数以及来自该额外的SIMD指令所选择的寄存器中的第二寄存器的相应的第二操作数。
14.在可编程的指令处理电路上执行计算机程序的一种方法,该可编程指令处理电路具有包含SIMD指令的指令集,该计算机程序包含该SIMD指令的至少一个实例,该方法包括-响应SIMD指令取回由该SIMD指令所选择的第一和第二寄存器的内容,每个寄存器存储多个N个相应的SIMD操作数,该SIMD指令在来自第一和第二寄存器的操作数之间定义第一系列N个操作数和第二系列N个操作数,该第一和第二系列有重叠;-响应该SIMD指令并行完成N个相应的相同的操作,每个操作分别使用来自第一系列和第二系列的相应的第一操作数和相应的第二操作数。
15.根据权利要求14的方法,包括-接收图像数据值的二维数组;-使用SIMD指令计算内插的图像数据值。
16.一种包含机器可读指令的计算机程序产品,当被执行时使可编程指令处理电路执行权利要求14的方法,所述指令包括所述SIMD指令。
全文摘要
一种包含指令执行电路(12b)的数据处理电路,该指令执行电路的指令集包含SIMD指令。该指令执行电路包含多个算术电路(26a-d),这些算术电路被安排响应SIMD指令并行完成N个相应的相同的操作。SIMD指令定义并选择寄存器中的第一和第二寄存器。SIMD指令定义SIMD指令的来自所寻址的寄存器的第一系列N个相应的SIMD指令操作数以及第二系列N个相应的SIMD指令操作数。每个算术电路(26a,b)在执行SIMD指令时分别从该第一和第二系列接收相应的第一和相应的第二操作数。指令执行电路(12b)用于选择第一和第二系列以使它们部分重叠。优选地,至少一个系列的操作数的位置在程序控制下,优选地是在操作数数据的控制下。优选地程序控制相对于第一寄存器的起始处选择一个系列的开始,如果该系列没有从第一寄存器的起始处开始该系列就继续到第二寄存器中。
文档编号G06F9/318GK101052947SQ200580037957
公开日2007年10月10日 申请日期2005年11月2日 优先权日2004年11月3日
发明者A·A·M·范维尔 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1