对线性图形进行编程以用于流矢量计算的方法

文档序号:6412140阅读:197来源:国知局
专利名称:对线性图形进行编程以用于流矢量计算的方法
技术领域
本发明主要涉及矢量处理领域。更特别地,本发明涉及一种对用于流型矢量计算的线性数据流图进行编程的方法以及一种用于实现该结果指令程序的计算机。
背景技术
许多为移动设备设计的新应用(多媒体、制图技术、图像压缩/解压缩,等等)涉及高百分比的流型矢量计算。在矢量处理中,对矢量或其它数据结构的每一元素重复一组操作是很常见的。这组操作通常是用数据流图来描述的。例如,可以用数据流图为程序循环的单个迭代来描述要在该数据结构的元素上执行的所有操作。在整个数据流的处理过程中(例如,像是在音频或视频处理中),可能有必要执行这些操作数次。进行这种处理的计算机便会从可以直接执行的数据流图的表示中受益。
如果该表示对于在具有不同并行处理能力的一系列计算机上的执行都是是足够有表现力的,那也是会很有益的。因此,该表示必须既是用于在顺序计算机上的线性执行的一系列计算,又是一个用于在并行计算机上并行执行的迭代之内以及之间的操作相关性的列表。
在传统(冯·诺依曼)计算机中,程序计数器(PC)是用来对程序中的指令进行排序的。程序流是由程序员显式地控制的。数据对象(变量)可由任何数目地指令改变,所以无法在不冒着使计算无效的风险的情况下改变指令的顺序。
在数据流程描述中,数据对象被描述为操作的结果,所以在数据就绪之前操作无法被执行。除了这个要求之外,执行操作的次序没有被规定。
可以将数据流图的操作表示为一系列来源于公知的计算机指令集的操作,这样的指令集是适合于Intel x86或Motorola M68K处理器的。但是结果程序很难以并行的方式来执行,因为不必要的相关性常常迫使操作串行化。出现这些不必要的相关性是因为所有操作结果在被随后的操作中使用之前,必须存储在一小组命名寄存器中。即使对于具有附加寄存器的计算机来说,这也会造成资源争用并导致串行化。使用命名寄存器传递结果,也遮掩了在一个迭代内的数据相关性与在迭代之间的数据相关性之间的差别。如果知道在迭代之间没有相关性,那么就可以同时地执行一个循环的所有迭代并行度仅仅受到计算机上的资源量的限制。
因此,存在着一个未能满足的需要,即对于一种用于在避免使用命名寄存器的同时描述既表示操作相关性又表示数据相关性的数据流图的方法的需要。
附图的简要说明在所附的权利要求中阐述了被认为是该发明的特性的新颖特征。在参考附图阅读时,通过参考下文中对于一个说明性的实施例的具体说明,将最佳地理解该发明本身、以及它最好的使用模式和进一步的目标和优点,其中

图1是一个示例性的数据流图。
图2是一个根据本发明的顺序指令列表的表。
图3是一个根据本发明的顺序指令列表的表,说明了数据相关性。
图4是一个根据本发明的顺序指令列表的表,说明了次序相关性。
图5是根据本发明使用隧道同时执行一个计算的多重迭代的图形表示。
图6是一个根据本发明的用于执行由顺序指令列表所描述的计算的计算机的图形表示。
发明的具体说明尽管本发明容许有许多不同形式的实施例,但在图中仅示出了一个或多个的具体实施例,并在这里将具体说明它们,要理解的是当前的公开内容应被看作是该发明的原理的示例,而不是意图将本发明局限于示出并说明的具体实施例。在下面的说明中,在这些附图的几个视图中,是用相似的参考数字来描述相同、相似或对应的部分的。
本发明涉及一种用于通用计算机的计算机程序执行格式,其用于加速对流型矢量数据的迭代计算。该发明还涉及一种以规定的格式执行程序的计算机。该格式是一种顺序数据流处理器的指令集,其中显式地声明了所有的相关性以便于并行执行。
计算被方便地表示为数据流图。在图1中示出了一个示例性的数据流图。参考图1,数据流图100是由许多外部交互块A、B、C、D、K和L,以及多个计算节点E、F、G、H、I和J组成的。计算节点也被称作处理节点或功能节点。在该数据流图表示中,程序流是由计算节点和外部交互块之间的互连确定的。在该图中的并行路径的执行次序没有被规定。在图1中,来自一个数据输入流的第一值在外部交互块A中加载,而来自同一流的第二值在块B中加载。这两个操作的次序是很重要的,所以在该图中规定了一个如虚箭头102所示次序相关性。相似地,来自第二输入流的连续数据值在外部交互块C和D中加载,顺序是由虚箭头104指示的。在计算节点E中,将在A和B中加载的值相乘(由助记符号‘vmul’指示的)。作为操作数输入到该乘法中的值是带符号的16位值,如由在节点E的输入上的‘s16’所指示的那样。来自节点E的输出被相似地指示为有带符号的32位值(‘s32’)。在计算节点F中,将在B和D中加载的值相乘(由助记符号‘vmul’指示的)。作为操作数输入到该乘法的值是带符号的16位值,如在将块A和B连接到节点F的弧线上的‘s16’指示的那样。来自节点F的输出被相似地指示为有带符号的32位值(‘s32’)。计算节点G、F、I和J相似地操作,其中助记符号‘vsub’和‘vadd’分别表示减法和加法。在外部交互块K中,将在节点I执行的减法的结果累加到命名累加器a0中。在外部交互块L中,将在节点J中执行的减法的结果累加到命名累加器a0中。
如果第一输入流是一个复矢量x的交错的实部和虚部,而第二输入流是一个复矢量y的交错的实部和虚部,那么该累加器包含该矢量点积x.y的实部和虚部的和。
图2示出了图1中所示的数据流图的线性图表示。各指令是由指令标识符表示的。在这个实例中,使用了来自图1的对应的节点标识符,但是,这不是必需的。指令A、B、C和D指示矢量元素的加载。指令的线性次序表示在该数据流图表示中的次序相关性。乘法指令E包括指示该操作是一个乘法的助记符号‘vmul’,以及操作数A和C。这指示用于该乘法操作的操作数是操作A和C(矢量加载操作)的结果。要注意,因为次序相关性是由指令的线性次序指示的,所以,矢量加载A的结果是该输入矢量中的第一数据值,而矢量加载B的结果是该输入矢量中的第二数据值。在该数据流图的下一个迭代中,这些将分别是第三和第四值。
在本发明的一个实施例中,计算指令E被写作Evmul A,C这个指令包括指令的标识符(‘E’),要执行的操作的描述符(‘vmul’)以及生成用于该计算的操作数的指令的描述符(‘A’和‘C’)。
在本发明的一个进一步的实施例中,计算指令E被写作Evmul.s32 A,C该指令包括附加描述符‘.32’,指示该操作的结果是带符号的32位值。例如,其它描述符包括‘s8’、‘s16’、‘s24’、‘u8’以及‘u16’。
本发明的格式使用对于前一个指令、而不是对于命名寄存器的引用来指示传递在一个迭代内的操作结果(数据相关性)的传递。该结果的类型和大小以及该结果是带符号的还是无符号的(结果的符号性)是用生成指令来指示的。通过对一组叫做累加器的命名寄存器进行操作的指令,以及对一组叫做隧道的无名FIFO(先进先出)寄存器进行操作的指令,来显式地指示在迭代之间传递的结果。
参考图2,指令K将指令I的结果累加到一个叫做‘a0’的累加器中。这个命名累加器被用于每一个迭代中,并且在该迭代的开始,该累加器会保存来自前一个迭代的值。在指令L中再次使用累加器a0。指令K和L的线性次序指示在来自操作J的结果之前对来自指令I的结果进行累加。
因此,在本发明的程序格式中,每一个外部交互作用节点和每一个计算节点都是用指令来表示的。该指令包括一个指令标识符、一个指令助记符号以及一个或更多的操作数。就计算指令来说,操作数是生成该计算的输入的指令的标识符,就外部交互作用来说,操作数是输入数据的目的地以及输出数据的源指令和目的地。
由于操作数引用生成该数据的指令而不是一个命名存储单元,所以数据相关性是显式的。这在图3中举例说明了。参考图3,示出了该线性图的数据相关性。箭头从一个指令指向生成用于那个指令的输入的前一个指令。例如,指令H取决于由指令B和C生成的数据。因此以这种格式表示了数据的相关性。操作数被指示为对指令的结果的引用,因此消除了有关命名寄存器的不必要的争用。
由导致在状态上发生改变的指令的执行次序引起的相关性,叫做次序相关性,是用在该指令列表中的这些非独立指令的串行次序来指示的。图4示出了该计算的次序相关性。虚箭头从待执行的第一指令指向后续的指令。次序相关性是与数据相关性无关地规定的,因此只要保持状态改变的次序就会支持多重迭代的同时执行。
因此将该计算被表示为一个顺序指令列表,该顺序指令列表包括一个用于数据流图的各个输入的源指令,一个用于数据流图的各个节点的计算指令以及一个用于数流图的各个输出的汇点指令。每一个指令包括一个指令标识符,而用于节点的计算指令包括在该节点中执行的操作的描述符以及生成该节点的输入的每一条指令的标识符。计算指令包括算术、乘法以及逻辑指令。源指令包括从输入数据流加载数据的指令,从一个存储器加载一个纯量值的指令,从一个累加器加载一个值的指令,以及从一个隧道中检索一个值的指令。汇点指令包括对一个累加器进行加、减或存储到累加器的指令,输出到一个输出数据流的指令或传递给一个隧道的指令。
在本发明的一个实施例中,隧道被用于在生成自前一个迭代保存得到的结果的同时,在当前迭代中保存来自一个操作的结果。隧道指示了在一个图中的连续迭代之间的数据流,在那里,流的源和汇点是在该图中的同一点。由于可以将来自一个迭代的数据并行地传递给下一个迭代,所以这使得多重迭代可以被同时执行。上述累加器不能这么做,这是因为它们的源和汇点位于在该数据流图中的不同点。
在图5中示出了隧道的一个示例性的使用。在这个实例中,一个计算的两个连续的迭代被并行地执行,其中通过两个隧道将数据从一个迭代传递给下一个迭代。参考图5,第一迭代开始于在外部交互块502中被加载到矢量v1中的数据元素。将该数据元素传递给第一隧道504。将该数据值存储在该隧道中,并生成以前存储的值。以前存储的值在节点506中被加到加载的数据元素上,而且还被传递给第二隧道508。在节点510中,将来自隧道508的以前存储的值加到加法506的结果上。在节点514中,用来自加法510的结果乘以来自块512的常数值。在节点518中,以存储在块516中的常数(16)为量,将来自乘法514的结果右移。在外部交互块520中,存储来自右移操作的结果以输出矢量v0。
下一个迭代始于在外部交互块522中被加载到矢量v1中的下一个数据元素。将数据元素传递给第一隧道524。将该数据值存储在该隧道中并生成以前存储的值。该以前存储的值是由前一个迭代在该隧道中存储的值。用这种方法,在迭代之间传递数据。以前存储的值在节点526中被加到加载的数据元素上,并且还被传递给第二隧道528。该以前存储的值是由前一个迭代在该隧道中存储的值。在节点530中将来自隧道528的以前存储的值加到该加法526的结果上。在节点534中,用来自加法530的结果乘以来自块532的常数值。在节点538中,以存储在块536中的常数(16)为量,将来自乘法534的结果右移。在外部交互块540中,存储来自右移操作的结果以输出矢量v0。
如果仅并行执行两个迭代,那么第三个迭代在块502开始,而从隧道504和508检索的值是在第二个迭代中存储的值。因此隧道的使用也使得数据能够在并行执行的迭代之间传递。
图5中的数据流图执行了数据值矢量的三点移动平均。
可以根据该顺序指令列表生成一个计算机指令程序。该生成可以包括调度指令以有效使用计算机的硬件资源。本发明的格式允许为在顺序计算机上执行的线性执行或在并行计算机上的并行执行有效地调度计算。在图6中示出了一个由根据顺序指令列表生成的指令程序控制的计算机的实施例。参考图6,计算机600包括多个计算单元602和一个互连单元604。在该图中,计算单元是一个乘法器606、一个加法器(算术单元)608、一个逻辑单元610和一个移位器612。可以使用其它计算单元,包括相同类型的多个单元。互连单元604是用来将计算单元的输出连接到其它计算单元的输入上。存在多种形式的互连单元604,包括可重配置的开关、数据存储器或寄存器堆。也可以经由互连单元604将一个累加器614连在计算单元602上。通过数据矢量输入单元622将要处理的数据传递给互连单元604,并通过数据矢量输出单元624从互连单元中检索处理后的数据。通常,使用多个数据矢量输入和输出单元。该计算机是由存储在序列发生器620的程序存储器618中的一个指令程序控制的。该指令控制数据矢量输入和输出单元622和624、互连单元604、累加器614以及计算单元602。
如在此实施例中所述,本发明是使用用于执行采用上述格式的顺序指令列表的编程处理器来实现的。但是,本领域的普通技术人员会理解,可以在不偏离本发明的情况下以多种不同的变化方式来实现上述处理。这样的变化是预料之中的,并被认为是等效的。
虽然已经结合具体实施例描述了该发明,但显然,根据以上说明,许多替换物、修改、变更以及变化对于本领域的普通技术人员来说都会是显而易见的。因此,意味着本发明应当包含所有这样的落在所附权利要求的范围之内的替换、修改、变更以及变化。
权利要求
1.一种用于生成可用数据流图表示的计算的格式化描述的方法,该方法包括生成用于该数据流图的每一输入的源指令;生成用于该数据流图的每一节点的计算指令,该用于一个节点的计算指令包括在该节点中执行的操作的描述符以及生成该节点的输入的每一指令的描述符;生成用于该数据流图的每一输出的汇点指令;以及生成包括源指令、计算指令和汇点指令的顺序指令列表。
2.根据权利要求1的方法,其中,该计算指令进一步包括描述符,该描述符有关在该节点中执行的操作的结果的类型、大小、符号性中的至少一个。
3.根据权利要求1的方法,其中该格式化描述进一步包括用于该顺序指令列表的每一指令的指令标识符,并且在其中,生成该节点的输入的每一指令的标识符是生成该节点的输入的顺序指令列表中的指令的指令标识符。
4.根据权利要求1的方法,其中该源指令是从输入数据矢量中加载数据值的指令、从累加器中加载数据值的指令以及从隧道中加载数据值的指令中的一个。
5.根据权利要求1的方法,其中,该汇点指令是将数据值存储到输出数据矢量中的指令和将数据值存储到隧道中的指令中的一个。
6.根据权利要求1的方法,其中该汇点指令是将数据值放到累加器中的指令、将数据值加到累加器中、从累加器中减去数据值的指令、如果一个数据值比在累加器中的值大就存储该数据值的指令以及如果一个数据值比在累加器中的值小就存储该数据值的指令中的一个。
7.根据权利要求1的方法,其中,改变该数据流图的状态的指令的次序是用该顺序指令列表中的指令的次序来确定的。
8.根据权利要求1的方法,其中计算指令包括算术指令、乘法指令、移位指令以及逻辑指令中的一个。
9.根据权利要求1的方法,其中一个节点有不超过三个的输入。
10.一种计算机,包括若干计算单元;用于互连这些计算单元的互连单元;以及程序存储器;其中该计算机是由存储在该程序存储器中的指令程序控制的,以实现可用数据流图表示的计算,并且其中,该指令程序是根据顺序指令列表生成的,该顺序指令列表包括用于该数据流图的每一输入的源指令;用于该数据流图的每一节点的计算指令,该用于一个节点的计算指令包括在该节点的操作的描述符以及生成该节点的输入的每一指令的描述符;以及用于该数据流图的每一输出的汇点指令。
11.根据权利要求10的计算机,其中该计算指令是可以在多个处理单元中的一个计算单元上执行的。
12.根据权利要求10的计算机,其中该计算机的互连单元是由存储在该程序存储器中的指令程序来控制的。
13.根据权利要求10的计算机,其中该计算机的互连单元包括数据存储器、寄存器堆以及可重配置的开关中的一个。
14.根据权利要求10的计算机,其中,该计算指令进一步包括描述符,该描述符有关在该节点中执行的操作的结果的类型、大小以及符号性中的至少一个。
15.根据权利要求10的计算机,其中该格式化描述进一步包括用于该顺序指令列表的各个指令的指令标识符,并且在其中,生成该节点的输入的每一指令的至少一个标识符,是生成该节点的输入的顺序指令列表中的指令的指令标识符。
16.根据权利要求10的计算机,进一步包括下面三种组件中的至少一个数据矢量输入单元;可作为数据隧道操作的多个寄存器;以及累加器;其中该源指令是从该数据矢量输入单元加载数据值的指令、从该累加器加载数据值的指令以及从该数据隧道加载数据值的指令中的一个。
17.根据权利要求16的计算机,其中,该汇点指令是将一个数据值存储到该数据隧道的指令。
18.根据权利要求10的计算机,进一步包括至少一个数据矢量输出单元,其中,该汇点指令是将数据值存储到该数据矢量输出单元的指令。
19.根据权利要求10的计算机,进一步包括累加器,其中该汇点指令是将数据值放到该累加器中的指令、将数据值加到该累加器中的指令、从该累加器中减去数据值的指令、如果一个数据值比在该累加器中的值大就存储该数据值的指令以及如果一个数据值比在该累加器中的值小就存储该数据值的指令中的一个。
20.根据权利要求10的计算机,其中,改变该数据流图的状态的指令的次序是用该顺序指令列表中的这些指令的次序来确定的。
21.根据权利要求10的计算机,其中该计算单元包括算术单元、乘法器以及逻辑单元中的一个,其中计算指令包括算术指令、乘法指令、移位指令以及逻辑指令中的一个。
22.根据权利要求10的计算机,其中该计算单元可被配置用于并行处理多条指令。
全文摘要
一种用于生成一个可用数据流图表示的计算的格式化描述的方法,以及用于执行所述计算的计算机。为数据流图的各个输入(502,522)生成源指令,为数据流图的各个节点(506、510、514等)生成计算指令,以及为数据流图的各个输出(520,540)生成汇点指令。用于一个节点的计算包括一个在该节点中执行的操作的描述符以及各个生成该节点的输入的指令的标识符。该格式化描述是一个顺序指令列表(A,B,C,......J,K,L,图2),该顺序指令列表包括源指令、计算指令和汇点指令。
文档编号G06FGK1666179SQ03815338
公开日2005年9月7日 申请日期2003年5月20日 优先权日2002年6月28日
发明者菲利普·E·梅, 肯特·唐纳德·莫特, 雷蒙德·B·埃西克四世, 西尔维乌·基里切斯库, 布莱恩·杰弗里·卢卡斯, 詹姆斯·M·诺利斯, 迈克尔·艾伦·许特, 阿里·赛义迪 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1