用于simd阵列处理机的位串行处理元件的制作方法

文档序号:6656285阅读:224来源:国知局
专利名称:用于simd阵列处理机的位串行处理元件的制作方法
技术领域
本发明涉及SIMD并行处理,尤其涉及位串行处理元件。
背景技术
采用最高并行化程度的并行处理体系结构是遵循单指令多数据(SIMD)方法并采用最简单可行的处理元件(PE)结构的那些体系结构,其中最简单可行的处理元件是单位运算处理机。尽管每个PE具有非常低的吞吐量,但PE逻辑的简化支持非常大量PE的处理机阵列的构造。非常高的吞吐量是通过将这种大量的PE组合到SIMD处理机阵列中实现的。
位串行SIMD体系结构的变体是其PE作为2-D网格连接的体系结构,其中每个PE与其阵列中紧挨着向北、向南、向东和向西的4个邻居通信。这种2-D结构很好地适于但并不限于处理具有2-d结构的数据,例如图象象素数据。

发明内容
本发明在一方面提供了包括多个处理元件的处理阵列,其中●响应提供给所有处理元件的指令,每个处理元件同时执行相同的操作;●每个处理元件配置成对m位的数据值执行算术运算,传递来自每个运算的进位与借位结果中的一个,并接受包括输入到运算中的进位与借位中的一个的信号;●要传递的进位与借位值的选择是通过在处理元件本地的掩码值对每个处理元件单独执行的。
另一方面,本发明提供了包括多个处理元件的处理阵列,其中
●响应提供给所有处理元件的指令,每个处理元件同时执行相同的操作;●处理元件互连,以形成2维网格,其中每个处理元件都耦合到其向北、向南、向东和向西的4个最近的邻居;●每个处理元件都提供配置成保留数据并且响应指定北偏移的指令而在从南邻居接收到数据时将所述数据传送到北邻居及响应指定南偏移的指令而在从北邻居接收到数据时将所述数据传送到南邻居的NS寄存器;●每个处理元件都提供配置成保留数据并且响应指定东偏移的指令而在从西邻居接收到数据时将所述数据传送到东邻居及响应指定西偏移的指令而在从东邻居接收到数据时将所述数据传送到西邻居的EW寄存器;●沿东-西和北-南轴中的一个在相反方向上数据的同时偏移是通过分别使用NS和EW寄存器在相反方向上传送并接收数据来执行的。
在另一方面,本发明提供了包括多个处理元件的处理阵列,其中●每个处理元件都包括适于在单趟中执行m位乘数与n位被乘数相乘的部件,所述趟包括n个循环,每个循环包括将被乘数位加载到被乘数寄存器、将累加器位加载到累加器寄存器、生成部分乘积值及存储计算出的累加器位到存储器;●所述部分乘积包括m+1位,其最低的一位作为计算出的累加器位传送,而由剩余m位表示的值存储在m位的部分乘积寄存器中;●所述部分乘积通过将累加器位、注册的部分乘积及被乘数位与m位乘数的m位乘积求和来计算。
本发明实施方式的不同方面和优点的更多细节将在以下描述与附图中一起显示。


附图中图1是说明示例处理元件(PE)的示意图。
图2是处理元件阵列的图形表示。
图3是说明由处理元件组(PEG)组成的PE阵列的示意图。
图4是PEG的示意图。
图5是SIMD阵列处理机的示意图。
图6是显示PE指令字的组成(命令字段)的表。
图7是当配置为正常运行时处理元件的具体示意图。
图8是显示PE ALU的正常运行的真值表。
图9是显示PE命令定义的表。
图10是显示PE ALU命令定义的表。
图11是显示Bw_cy(借位/进位)信号定义的表。
图12是显示当选择双向偏移时NS和EW命令定义的表。
图13是显示用于双向偏移的信号定义的表。
图14是显示乘法运算过程中操作数数据移动模式的图形说明。
图15是当配置为乘法运算时处理元件的具体示意图。
图16是显示乘法运算过程中AL、BL和D命令定义的表。
图17是显示乘法运算过程中所使用信号定义的表。
图18是使用所公开乘法技术的乘法运算的图形表示。
图19是显示示例乘法运算所需命令序列的表。
具体实施例方式
本发明的实施方式可以是主要用于处理象素数据的并行处理机的一部分。处理机包括处理元件的阵列、顺序控制逻辑及象素输入/输出逻辑。该体系结构可以包括单指令多数据(SIMD),其中单个指令流控制所有PE的执行,而且所有PE同时执行每个指令。PE的阵列将称为PE阵列,而整个并行处理机称为PE阵列处理机。尽管在示例实施方式中给出了SIMD阵列的特定维度,但对本领域的技术人员来说,很显然本发明的范围不限于这些数字而是可以应用到任意的MxN PE阵列。
PE阵列是网格连接的PE阵列。每个PE 100都包括用于处理1位数据的存储器、寄存器和计算逻辑。在本发明的示例实施方式中,阵列包括48行64列的PE。PE阵列构成SIMD阵列处理机逻辑的大部分并执行几乎所有的象素数据计算。
图1的示例PE 100包括用于处理1位数据的RAM 110、ALU101、逻辑块A 120、B 130及寄存器C 140、D 150、NS 160、EW 170、AL 180、BL 190和CM 105。ALU 101可以象全加法电路一样简单,或者在更复杂的例子中可以包括更高级的算术能力。寄存器组从PERAM 110加载象素数据并保留它,由ALU 101进行处理。CM寄存器提供象素数据的输入与输出。
PE RAM 110有效地对每个PE 100是1位宽,并存储由PE 100进行处理的象素数据。多位象素值由存储在PE RAM 110中的多个位表示。对多位操作数的操作是通过轮流处理操作数象素的对应位执行的。在示例实施方式中,PE RAM 110每个循环提供2次读和1次写。其它实施方式可以采用其它的多访问方法或者可以每个循环提供单次读或写访问。
如图2所示,示例PE阵列1000包括48行64列的PE。象素编号从阵列西北角的0,0到东南角的47,63。
如图2所示,示例SIMD阵列处理机2000的PE排列在2-d格中。每个PE与其4个最近的邻居通信,具体而言是阵列中其紧挨着向北、向南、向东和向西的PE。示例实施方式中PE到PE的通信路径是1位宽而且是双向的。
在处理过程中,阵列的所有PE同时执行每个运算步骤。操作数位的每次读或写、PE寄存器间位的每次移动、每次ALU输出都是同时由阵列的每个PE执行的。在这种操作模式的描述中,统一想对应的象素位是有用的。对应象素位的阵列大小的集合称为“位平面”。从(串行)指令流的观点看,SIMD阵列运算建模为位平面运算。
这种示例实施方式中的每个指令都包括指示位平面流或处理的命令。单个指令可以包含多个命令字段,其中包括用于每个寄存器资源的1个字段、用于PE RAM写端口的1个字段和控制ALU 101处理的附加字段。这种方法是用于提供单个处理循环的阵列控制的阵列指令的传统微指令实现。
示例PE阵列1000在实现中是分层的,其中PE分成PE组(PEG)。在本发明的这种特定例子中,每个PEG 200包括表示8×8阵列段的64个PE。因此,48×64的PE阵列1000由6行PEG实现,每行有8个PEG。每个PEG 200耦合到其邻居PEG,使得跨PEG边界提供PE到PE的通信。这种耦合是无缝的,因此从位平面运算的观点看,PEG分区是不明显的。
示例PEG 200包括64位宽的多址PE RAM 210、PEG控制逻辑230及组成PE阵列202中64个PE的寄存器与计算逻辑。PE RAM 210的每个位片断(slice)耦合到64个PE中的一个,从而为PE阵列202中的每个PE提供有效的1位宽PE RAM。
除了与北、南、东和西的邻居通信,每一个示例PEG都包括用于将象素数据移入移出PE阵列202的8位输入与输出路径。CM寄存器平面提供输入与输出过程中位平面数据的处理。数据以位平面的形式移入移出PE阵列202。
上述PE阵列提供了用于对象素数据执行运算的计算逻辑。为了执行这些运算,PE阵列需要指令源并支持将象素数据移入移出阵列。
示例SIMD阵列处理机2000在图5中示出。SIMD阵列处理机2000包括向PE阵列1000提供指令流的程序定序器300。还为控制象素数据移入移出PE阵列1000提供了象素I/O单元400。总地来说,这些单元包括SIMD阵列处理机2000。
可以采用SIMD阵列处理机2000对阵列大小的图象段执行算法。这种处理机可以在集成电路设备上或者作为单个设备上更大的系统的一部分实现。在任何一种实现中,SIMD阵列处理机2000都隶属于在此称为“CPU”的系统控制处理机。SIMD阵列处理机2000与CPU之间的接口提供CPU对示例SIMD阵列处理机2000的初始化与控制。
象素I/O单元400提供在PE阵列1000和外部存储器之间通过Img总线移动象素数据的控制。象素数据的移动是与PE阵列计算同时执行的,由此提供处理象素数据的更大吞吐量。象素I/O单元400执行象素数据在象素形式与位平面形式之间的转换。Img总线数据是象素形式,而PE阵列数据是位平面形式,因此这些形式之间数据的转换是由象素I/O单元400作为I/O处理的一部分执行的。
SIMD阵列处理机2000在称为“子帧”的阵列大小的段中处理象素数据。在典型的情形中,要处理的象素帧比PE阵列1000的尺寸大得多。图象帧的处理是通过轮流处理子帧图象段实现的,直到图象帧完全处理完。
在此提供示例的改进PE实现的具体描述。描述如前面介绍的基线PE体系结构。具体描述对这种体系结构的改进,其包括●可以基于PE选择的进位-借位信号,●双向偏移能力,及●增强的乘法能力。
PE 100包括7个寄存器、相关的信号选择逻辑、计算逻辑和3个存储器数据端口。输入存储器数据端口指定为aram、bram,而输出存储器端口是wram端口。每个PE通过NI/NO、SI/SO、EI/EO和WI/WO偏移平面输入和输出与其4个邻居通信。
每个寄存器输入由多路复用器(即C mux 144、D mux 154、NSmux 164、EW mux 174、AL mux 184、BL mux 194)选择。Wram输出由RAM mux 114选择。
如图6所示,PE 100的运算由PE指令字在时钟到时钟的基础上控制。指令字包括命令字段,每个命令字段(除Alu_cmd以外)向寄存器(或wram)多路复用器中的一个提供选择值。通过定义产生一些PE信号的方式,ALU 101命令字段(Alu_cmd)控制计算逻辑的运算。
PE 100的运算可以关于两种运算模式描述正常运算和乘法。正常运算由0XXX或1001的Alu_cmd指示。乘法由1XX0的Alu_cmd指示。
在正常模式中运行的PE 100的图在图7中示出。由于在计算中不涉及CM 105,因此CM 105寄存器未示出。
在正常的PE操作中,第一个源操作数的每一位都分别加载到NS160和AL 180中。从AL 180寄存器,数据通过‘a’输入提供给ALU 101。依赖于Alu_cmd,数据可以也可以不通过A 120掩码逻辑与D 150寄存器值组合以产生‘a’值。
类似地,第二个源操作数的每一位分别加载到ES 170和BL 190中并通过‘b’输入提供给ALU 101。独立的Alu_cmd信号决定是否由B130掩码逻辑应用掩码。
对于正常运算,C 140寄存器可以初始化为期望的起始值。在运算的过程中,ALU 101进位或借位结果可以通过CO(ALU输出)信号传递到C 140寄存器。以这种方式,可以执行多位加减运算。
每个目的地操作数位都通过wram输出信号写到PE RAM 110中。依赖于要执行的运算,这种信号可以是所选的ALU输出,例如“Plus”或“Co”(图7)。对于正常运算,ALU 101定义为全加法电路。Plus和Co信号表示全加法器的求和与进位(或借位)输出(见图8)。
D 150寄存器可以在期望操作数掩码的时候加载有掩码值。掩码允许运算有条件地执行。有条件的ADD、SUBTRACT与FORK(有条件赋值)通过操作数掩码支持。
Wram和PE寄存器命令字段定义在图9中示出。这些命令字段中的每一个都提供用于多路复用器的选择码。多路复用器又从用于寄存器(或Wram端口)的多个输入值中选择。
NS 160和EW 170寄存器分别加载有第一和第二源操作数数据。当操作数是标量时,0或1可以直接加载到任一寄存器。在操作数是子帧图象的时候,加载Aram或Bram值。
NS 160和EW 170还可以用于位平面偏移。例如,如果NS 160加载NI值,则发生从北(即,向南)的偏移。如果NS 160加载SI,则发生从南的偏移。同样,EW 170可以通过加载EI从东偏移或者通过加载WI从西偏移。
操作数位分别从NS 160和EW 170传递到AL 180和BL 190(例如,AL=NS、BL=EW)。AL 180和BL 190还可以加载偏移的NS和EW值(例如,AL=NI、BL=WI)。
C 140寄存器可以以标量0或1初始化或者通过Aram或Bram从PE RAM 110加载。可选地,C 140寄存器可以通过加载Co传递进位或借位ALU输出。D 150寄存器可以通过选择C mux 144信号加载新值。C mux 144值从C多路复用器的输出加载D 150寄存器,即,D 150和C 140寄存器在那个循环中加载相同的值。
在Alu_cmd是0XXX的正常运算中,Alu_cmd的最低3位分别提供Co、a和b值的独立控制(见图10)。Alu_cmd
确定Co是定义为进位还是借位值。活动的Alu_cmd[1]值使AL值与D值OR掩码,以便产生ALU‘a’输入信号。活动的Alu_cmd[2]值使BL值与D值AND掩码,以便产生ALU‘b’输入信号。
当Alu_cmd是1001时,Bw_cy信号被选为Co值。Bw_cy信号当D 150寄存器是0时为借位而当D 150寄存器是1时为进位。Bw_cy的使用允许每个PE确定是否基于本地D值执行加或减。将示出用于Bw_cy特征的三种使用。第一种是提供绝对值运算,第二种是提供快速绝对差值求和(SAD)的步骤,而第三种是用于执行快速除法的方法。这些应用中的每一种都使用借位/进位Bw_cy来执行Addsub函数。Addsub(A,B,M)可以描述为If(M)Return(A-B)ElseReturn(A+B)绝对值(ABS)当前是由NEGATE和FORK运算的序列执行的。但是,运算的组合需要单趟运算两倍的时间并且产生必须为其分配空间的临时图象。Bw_cy信号启用简单的单趟ABS函数。
改进的ABS函数是通过将用于源操作数的符号位加载到D 150寄存器执行的。然后,以0作为第一源操作数并以ABS源操作数(Src)作为第二源操作数执行ADD。Bw_cy信号是由Alu_cmd选择的并通过用于运算的每一位的Co信号传递到C 140寄存器。结果产生的运算有效地表示为如下Dest=Addsub(0,Src,Src的符号)可以看到,当源象素为负时,Dest操作数是该象素的负数,否则Dest操作数是与该象素相同的值。
Bw_cy信号的第二种使用是执行快速SAD步骤。对于SAD的每一步骤,比较两个模板的对应象素(P1,P2)。两个象素差值的数量值添加到运行的(running)total(Sum)。这种SAD步骤包括如下所示的3个运算Tmp=P1-P2Tmp=ABS(Tmp)Sum=Sum+TmpBw_cy信号可以用于将运算的个数从3减少到2。P1和P2的相减是利用传递到D寄存器的差值的符号执行的。接下来,执行差值与Sum的Addsub。因此,当差值为负时,值从Sum减去,而当差值为正时,值加到Sum。这示为Tmp=P1-P2D=Tmp的符号Sum=Addsub(Sum,Tmp,Tmp的符号)Tmp的符号加载到D 150可以结合到减运算中,因此它不会增加执行时间。
Bw_cy信号的第三种使用是执行快速除法运算。对于位串行PE,除法需要产生等于商位数量的多趟。每一趟生成单个商位。对于典型的PE,每一趟都需要比较和有条件减法Quotient[i]=Denominator<=Remainder[rmsb:i]If(Quotient[i]==1)Remainder[rmsb:i]=Remainder[rmsb:i]-Denominator
(其中rmsb是余数操作数大小-1)在以上方法中,(由“i”索引的)商位以相反的次序生成,即,首先生成最高的位,最后生成最低的位。每一趟都需要对分母操作数的2次运算。因此,这种运算所需的总时间大约是2*Q*D循环(其中Q是商的大小,而D是分母的大小)。
Bw_cy信号提供了利用单个Addsub运算执行一趟无符号除法的方式。在该改进的方法中,作为每一趟中所执行的Addsub运算的结果,余数值允许是正或负。对于每一趟,余数的符号决定Addsub将作为加还是减。当余数为负时,执行加;当余数为正时,执行减。尽管作为Addsub的结果,余数可以改变符号,但其数值随每次后续趟趋于接近0。对于这种除方法,每一趟包括Quotient[i]=not Remainder的符号Remainder[rmsb:i]=Addsub(Remainder[rmsb:i],Denominator,Quotient[i])在这种除方法中,(由“i”索引的)商位以相反的次序生成。每一趟都需要对分母进行1次(Addsub)运算。因此,用于这种运算的总时间大约是Q*D循环。
上述除技术还可以用于执行快速模运算。测试除结束时的余数值,当其小于0时,分母加到其上面,以便为除运算提供正确的余数值。(如果对于除运算只需要商结果,则不需要这种校正步骤。)为了偏移位平面数据,SIMD阵列的每个PE都耦合到其4个最近的邻居。例如,PE的NO(北输出)信号连接到向北的PE的SI(南输入)信号。以这种方式,每个PE的NO、SO、EO和WO输出连接到4个最近邻居PE的SI、NI、WI和EI输入。
在执行正常偏移时,PE阵列的NS寄存器平面可以向北或南偏移(不能同时向两边偏移)。EW寄存器平面可以向东或西偏移(不能同时向两边偏移)。NS和EW寄存器平面是独立的,使得独立位平面的同时的北-南和东-西偏移可以容易地执行。
对于正常偏移,用于PE的NO和SO信号设置成NS 160寄存器值,而EO和WO信号设置成EW寄存器值。由于SI信号耦合到在每个PE南边的PE的NO输出,因此向北偏移是通过将SI PE输入加载到NS 160寄存器执行的。剩余的偏移方向是通过将对应的PE输入加载到NS 160和EW 170寄存器提供的。正常偏移命令在图9中示出。
对于有些运算,在相反(而不是正交)方向上同时的位平面偏移是有利的。这种运算的一个例子是在FFT过程中执行的蝶形重排(butterfly shuttle)运算。蝶形重排的一个步骤可能涉及两组4个象素值的位置交换,如下所示p0 p1 p2 p3 p4 p5 p6 p7 //交换前p4 p5 p6 p7 p0 p1 p2 p3 //交换后这个例子中的象素可以沿行或列排列。对于行数据,东-西方向的双向偏移将以双倍速度加速交换。这种交换所需的双向偏移是改进的PE的能力。
对PE的改进提供了相反方向的偏移,因此可以实现如上例子中的交换模式。两个配置信号(Rx(行交换)和Cx(列交换))指示交替的偏移配置是否活动。Rx和Cx信号是互斥的;即,它们不能同时活动。当任何一个都不活动时,指示正常偏移配置。Rx和Cx配置信号可以以对设计者方便的任何方式实现。对于示例PE阵列,Rx和Cx是驻留在每个PEG 200中的寄存器。在这种实施方式中,Rx和Cx必须对阵列中的所有PEG都具有相同的值。即,对整个阵列指定单一的偏移配置。
双向偏移通过对AL、BL、NS和EW命令的简单改变添加到PE指令字。EI和NI命令选择由EW_in和NS_in信号代替(见图12)。当Rx和Cx不活动时,EW_in和NS_in信号分别定义成EI和NI。对于这种配置,图12的命令与图9中的命令是完全相同的。
当Rx信号活动时,行交换偏移是通过使用NS/AL=NS_in和EW/BL=EI执行的。这些命令使EW平面从东偏移,而NS平面从西偏移。从图13可以看到活动的Rx使EO信号设置成NS值,而NS_in信号设置成WI,使得NS平面从西偏移。
当Cx信号活动时,列交换偏移是通过使用EW/BL=EW_in和NS/AL=NI执行的。这些命令使NS平面从北偏移,而EW平面从南偏移。从图13可以看到活动的Cx使NO信号设置成EW值,而EW_in信号设置成SI,使得EW平面从南偏移。
2个多位操作数的乘法可以利用“正常”配置的PE执行。乘法将是需要m趟的多趟运算,其中每“趟”包括n位有条件的加,其中m是乘数中的位数,而n是被乘数中的位数。对于每一趟,乘数后续的位加载到D寄存器中。然后,执行被乘数与(在适当的位偏移)累计部分乘积的有条件加法。以这种方式,位串行乘法以大约m*n执行。
上述位串行乘法有效地在每一趟用乘数的一位去乘被乘数。用于改进位串行乘法的一种方法是增加应用到每一趟的乘数位数。在此描述一种这么做的方法。这种方法对前面方法的改进之处在于支持该方法所需的PE寄存器的个数减少了1个。
示例的改进乘法提供在每一趟中用2个乘数位去乘被乘数的乘法,实现需要6个PE寄存器。通过(除图15所示示例实施方式中的全加法器102和全加法器103之外)向ALU 101’添加适当的加法器并对每个所提供的附加的乘数位添加2个PE寄存器,相同的方法可以扩展到(每一趟)任意个数的乘数位。
改进的乘法方法可以通过两个8位操作数的乘法例子说明。(用于第一趟的前两个循环在图14中说明。)前两个乘数位,m1和m0,加载到乘数寄存器。乘数位在整个第一趟中保持不变。对于第一个循环,被乘数位n0加载到被乘数寄存器,累加器位a0加载到累加器寄存器,且部分乘积寄存器清除。对于每个乘法循环,乘数位乘以被乘数位,且2位结果加到2位的部分乘积和1位的累加器,以便产生3位的部分乘积结果。最低p Bw_cy部分乘积位(对于第一个循环是p0)存储到存储器,且下两个部分乘积位加载到用于下一循环的部分乘积寄存器。
除了加载累加器和被乘数的第二个位(a1和n1),且代替0,部分乘积寄存器包含来自前一乘法循环的部分乘积,第二个循环类似于第一个循环。在每个后续的循环,部分乘积最低位存储到累加器图象。
对于第一趟,p0存储为a0,而p1存储为a1,等等。对于第二趟,累加器图象在2的位偏移访问,因此在第一个循环上,(在加载n0的同时)加载a2,且将p0值写到a2。乘数位m2和m3加载,以便开始第二趟。
为执行改进的乘法所进行的PE寄存器的部署在图15中示出。PE的布置是要显示D 150寄存器用于被乘数位,EW 170和NS 160寄存器用于乘数位,AL 180和BL 190寄存器用于部分乘积位,C 140寄存器用于累加器位。乘法ALU 101’提供产生3个部分乘积输出所需的乘法与求和。表示部分乘积位的PE信号标记为M0、M1和M2。
用于改进的乘法的寄存器的重新定义是通过添加要由PE指令字的AL、BL和D命令字段选择的信号来提供的(图16)。这些信号标记为AL_Op0、AL_Op1、BL_Op0、BL_Op1和D_Op且如图17所示定义。可以看到如图9所示,当Alu_cmd不是1XX0(乘法模式)时,AL、BL和D命令定义为“正常”运算。
1XX0的Alu_cmd使得图17的信号定义为乘法。AL_Op0和BL_Op0特别地将M2和M1 ALU输出耦合到Al 180和BL 190寄存器。在1XX0的范围内,Alu_cmd[1]和Alu_cmd[2]位提供改进的乘法运算所需的进一步控制。
活动的Alu_cmd[1]指示高乘积位(图17中的EW*D)的求逆。这种信号在最后一趟乘(其中乘数是带符号图象)的过程中激活。活动的Alu_cmd[1]还使得在最后一趟第一个循环中AL寄存器设置成1而不是0。这是由高被乘数位产生的部分乘积的第二次补码求逆的一部分。
活动的Alu_cmd[2]信号使Aram值耦合到D_Op,因此它可以加载到D 150寄存器。
PE的位串行本质允许乘法运算对任意大小的源和目的地操作数执行。源操作数可以是图象或标量操作数,带符号或无符号。逻辑中乘法定序器的实现可以强加多种约束,例如将Src2(被乘数)操作数限制为非标量(图象)操作数、将Src2和目的地操作数大小限制为2位或更大,及禁止用目的地操作数覆写源操作数。由PE体系结构自已强加的一种约束是限制改进的乘法为垂直运算(即,无歪斜)。
定序对乘法的存储器访问的方法在图18中示出。在这个例子中,6位乘数(x)乘以4位被乘数(y)。对于乘法的每一趟,两个乘数位乘被乘数操作数并将部分乘积加到累加器值。在第一趟,x1x0乘以y,产生第一个累加器值(5)...(0)。在第二趟,x3x2乘以y,并将6位乘积加到累加器位(5)...(2),产生下一个累加器(7)...(2)。应当指出,低累加器位(1)...(0)在第一趟后不改变。对于第三趟,x5x4乘以y,并将6位乘积加到累加器位(7)...(4),产生最终的乘积位(9)...(4)。累加器位(3)...(0)不受这一趟影响。
对这种运算的PE Ram访问的模式由图18示出。对于每一趟,加载两个乘数位。这一趟包括被乘数与乘数位的顺序加载和结果产生的新累加器位的存储。对于每一趟,被乘数象素从lsb遍历到msb。但是,对于每一趟,累加器图象在高2位的起始点访问(既加载又存储)。对于每一趟,累加器的大小还增加2位,因此写累加器的次数对于每一趟是相同的。
图18所说明的乘法运算是由图19所示的指令顺序实现的。对于每一趟,2个乘数位加载到NS 160和EW 170。接下来,被乘数位顺序加载到D 150寄存器,而累加器位(Z)顺序加载到C 140寄存器。在所有被乘数位都读取之后,必须执行附加的两个循环来完成对这一趟新累加器值的生成。在这两个循环中,该(旧的)累加器值和被乘数在C和D中符号扩展。还是在这两个循环中,加载NS 160和EW 170寄存器,准备下一趟。(由于对于每一趟非零D值将使提前的NS和EW值干扰最终的累加器值,因此这种并发只有在被乘数无符号的时候才有可能)。ALU_cmd遵循类似的模式,在每一趟的前4个循环中设置成1100,在两个符号扩展循环中设置成1000。AL 180和BL 190寄存器在每一趟的第一个循环(al_op1、bl_op1)中加载0,在剩余的循环(al_op0、bl_op0)中加载M1/M2。Wram写命令在整个乘法中是1,存储M0值。在第一趟中,由于累加器最初是0,因此C 140寄存器加载0。如果象素是无符号的,则最后一趟与正常趟相同。但是,对于带符号乘数图象,在最后一趟中设置“反转”位(ALU_Cmd=XX1X)。
权利要求
1.一种包括多个处理元件的处理阵列,其中a.响应提供给所有处理元件的指令,每个处理单元都同时执行相同的操作;b.每个处理元件都配置成对m位的数据值执行算术运算,传递来自每个运算的进位和借位结果中的一个及接受包括输入到运算的进位和借位中的一个的信号;c.要传递的进位和借位值的选择是对每个处理元件通过在该处理元件本地的掩码值单独执行的。
2.如权利要求1所述的处理阵列,适于通过执行m位运算的M/m次重复实现对M位操作数的运算。
3.如权利要求1所述的处理阵列,其中m选为1。
4.如权利要求1所述的处理阵列,适于执行包括对加法将掩码值设置成0而对减法将掩码值设置成1的Addsub运算。
5.如权利要求4所述的处理阵列,适于通过将所述掩码设置成源操作数的符号值并执行源操作数与0的Addsub来计算绝对值。
6.如权利要求4所述的处理阵列,适于通过将所述掩码设置成两个数据值之间差值的符号值然后执行所述差值与绝对差值之加和的Addsub来执行绝对差值之加和的一个步骤。
7.如权利要求4所述的处理阵列,适于通过将所述掩码设置成余数的符号值并执行分母与余数的Addsub来执行一趟除运算。
8.如权利要求4所述的处理阵列,适于通过将所述掩码设置成余数的符号值并执行分母与余数的Addsub来执行一趟模运算。
9.一种包括多个处理元件的处理阵列,其中a.响应提供给所有处理元件的指令,每个处理单元都同时执行相同的运算;b.处理元件互连,以便形成2维的网格,其中每个处理元件都向北、向南、向东和向西耦合到其4个最近的邻居;c.每个处理元件都提供配置成保留数据并响应指定北偏移的指令而在从南邻居接收数据的同时将所述数据传送到北邻居及响应指定南偏移的指令而在从北邻居接收数据的同时将所述数据传送到南邻居的NS寄存器;d.每个处理元件都提供配置成保留数据并响应指定东偏移的指令而在从西邻居接收数据的同时将所述数据传送到东邻居及响应指定西偏移的指令而在从东邻居接收数据的同时将所述数据传送到西邻居的EW寄存器;e.沿东-西和南-北轴之一在相反方向同时的数据偏移是通过分别使用NS和EW寄存器在相反的方向传送和接收数据来执行的。
10.如权利要求9所述的处理阵列,其中NS寄存器适于执行特定数据向北和南之一的偏移,而且其中EW寄存器适于执行其它数据沿相反方向的同时偏移。
11.如权利要求9所述的处理阵列,其中EW寄存器适于执行特定数据向东和西之一的偏移,而且其中NS寄存器适于执行其它数据沿相反方向的同时偏移。
12.如权利要求9所述的处理阵列,适于响应指令执行在相反方向上数据的同时偏移。
13.如权利要求9所述的处理阵列,适于响应注册的配置信号执行在相反方向上数据的同时偏移。
14.如权利要求11所述的处理阵列,适于响应注册的配置信号执行在相反方向上数据的同时偏移。
15.如权利要求10所述的处理阵列,其中数据通过EW寄存器的同时偏移是通过用于通过NS寄存器的北南偏移的信号路径采用的。
16.如权利要求11所述的处理阵列,其中数据通过NS寄存器的同时偏移是通过用于通过EW寄存器的东西偏移的信号路径采用的。
17.如权利要求9所述的处理阵列,适于采用在相反的方向上数据的同时偏移,以便执行蝶形重排运算。
18.一种包括多个处理元件的处理阵列,其中a.每个处理元件都包括适于在单趟中执行m位乘数与n位被乘数的乘法的部件,所述趟包括n个循环,每个循环包括将被乘数位加载到被乘数寄存器、将累加器位加载到累加器寄存器、生成部分乘积值及存储所计算出的累加器位到存储器;b.所述部分乘积包括m+1位,其最低位作为计算出的累加器位传送,而剩余的m位存储在m位的部分乘积寄存器中;c.所述部分乘积是通过将累加器位、注册的部分乘积及被乘数位与m位乘数的m位乘积求和计算的。
19.如权利要求18所述的处理阵列,其中与m位乘数的乘法是通过执行初始累加器值为0的单趟执行的。
20.如权利要求18所述的处理阵列,其中与M位乘数的乘法是在M/m趟中执行的,用于第一趟的m位乘数包括M位乘数的最低的m位,初始的累加器值为0且对累加器的访问对于第一趟是在位0开始的,而且其中对于每个后续的趟a.对累加器值的访问在从用于前一趟的初始访问开始的m位偏移开始;b.所述m位乘数是在从用于前一趟的选择点开始的m位偏移处从M位乘数选择的。
21.如权利要求18所述的处理阵列,其中m是2。
22.如权利要求18所述的处理阵列,还包括用于在趟的开始清除注册的部分乘积的部件。
23.如权利要求18所述的处理阵列,适于通过反转m位乘积的最高位执行带符号乘数的乘法。
24.如权利要求20所述的处理阵列,适于通过在最后一趟中反转每个m位乘积的最高位执行与带符号乘数的乘法。
25.如权利要求18所述的处理阵列,适于在所述n个循环后执行m个附加循环,其间所述被乘数位是被乘数符号位且所述累加器位是累加器符号位。
26.如权利要求20所述的处理阵列,适于在所述n个循环后执行m个附加循环,其间所述被乘数位是被乘数符号位且所述累加器位是累加器符号位。
27.如权利要求26所述的处理阵列,适于对无符号被乘数用0来表示所述被乘数和所述累加器符号位。
28.如权利要求27所述的处理阵列,适于在所述m个循环中执行m个乘数位的加载用于下一趟的无符号被乘数。
全文摘要
在图象处理系统中,对象素数据的计算可以通过位串行处理元件(PE)的阵列执行。为了提供构成阵列的PE的最高可能密度,位串行PE是利用最小化的逻辑实现的。实现对PE体系结构的改进,以便使运算在更少的时钟周期内执行。但是,要注意最小化改进所需的附加逻辑。而且要维持PE的位串行本质,以便促进阵列中PE的最高可能密度。在此所述的PE改进包括改进用于绝对差值求和(SAD)运算、除法、乘法和变换(例如,FFT)重排步骤的执行的增强。
文档编号G06F7/52GK101084483SQ200580021203
公开日2007年12月5日 申请日期2005年5月3日 优先权日2004年5月3日
发明者伍德罗·L.·米克尔 申请人:硅奥普迪思公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1