用于在多线程处理器中数据传送的寄存器的制作方法

文档序号:6410260阅读:183来源:国知局
专利名称:用于在多线程处理器中数据传送的寄存器的制作方法
背景并行处理是计算处理中并发事件信息处理的一种有效的方式。与串行处理相比较,并行处理要求许多程序的并发执行。在并行处理的情况下,平行化包括在同一时间做多于一件的事情。不像串行范例,其中所有的任务在单个站或任务在专门站执行的流水线机器上是顺序执行的,采用并行处理,设置许多站,每个站能够同时执行实现各种任务和功能。许多站在计算任务的相同或共用单元上同时并独立地工作。因此,并行处理解决了各种类型的计算任务,并适用于通过使用几个指令处理单元和几个数据流来解决的某些问题。
附图简述

图1是处理系统的方框图;图2是本发明一个实施例可以被方便地实施的图1处理系统的详细方框图;图3是图1处理系统的功能流水线单元的方框图;图4是图示说明本发明一个实施例可以被方便地实施的图1处理系统的详细方框图;图5是上下文流水线处理的简化方框图;图6是图示说明本发明一个实施例可以被方便地实施的上下文流水线处理的流程图;图7是图示说明确定下一个邻近寄存器地址的处理过程的流程图。
详细描述构造参考图1,计算机处理系统10包括并行基于硬件的多线程网络处理器12。基于硬件的多线程处理器12耦联存储系统或存储资源14。存储系统14包括动态随机存取存储器(DRAM)14a和静态随机存取存储器14b(SRAM)。处理系统10对能分成并行子任务或功能的任务尤其有用。具体地说,基于硬件的多线程处理器12对是面向带宽的而不是面向等待时间(latency)的任务有用。基于硬件的多线程处理器12具有多功能微引擎或编程引擎16a-16h(统称为编程引擎16),其每个具有同时激活的和在特定任务上独立工作的多硬件控制线程。
编程引擎16的每个含有硬件形式的程序计数器和与程序计数器相关的状态。实际上,对应的上下文或线程组能在每个编程引擎16上同时激活,而在任何一个时刻仅仅一个实际运行着。
在这个例子中,8个编程引擎16a-16h示于图1中。每个编程引擎16a-16h处理8个硬件线程或上下文。编程引擎16a-16h用包括存储器资源14和总线接口(未显示)的共享资源来运行。基于硬件的多线程处理器12包括动态随机存取存储器(DRAM)控制器18a和静态随机存取存储器(SRAM)控制器18b。DRAM存储器14a和DRAM控制器18a典型地被用于处理大容量数据,例如,来自网络分组的网络有效负荷的处理。SRAM存储器14b和SRAM控制器18b用在低等待时间、快速访问的任务的联网实现中,,例如访问查询表、核心处理器20的存储器等。
基于数据的特征,8个编程引擎16a-16h或访问DRAM存储器14a或访问SRAM存储器14b。因此,低等待时间、低带宽数据存储在SRAM存储器14b并从中提取,而等待时间不重要的较高带宽的数据存储在DRAM存储器14a并从中提取。编程引擎16可以对DRAM控制器18a或SRAM控制器18b执行存储器访问指令。
基于硬件的多线程处理器12还包括用于装入对编程引擎16的微码控制的处理器核心20。在这个例子中,尽管其他类型的处理器核心可以用于这个发明的实施例中,但处理器核心20是基于XScaleTM的结构,由美国加州圣克拉市(SantaClara)的英特尔(Intel)公司设计。
处理器核心20执行通用计算机的功能,诸如处理协议、事故和在编程引擎16送出分组作诸如在边界条件下的更详细的处理的场合对分组处理的额外支持。
处理器核心20执行一个操作系统(未显示)。通过这个操作系统(OS),处理器核心20可以调用在编程引擎16a-16h上操作的功能。因为处理器核心20以XScaleTM结构实现,所以诸如华盛顿州西雅图微软公司的MicrosoftNT实时操作系统、加利福尼亚州阿曼达风河(WindRiver)公司的VxWorks实时操作系统或者因特网上可用的免费OS都能使用。
硬件多线程的优点可以用SRAM或DRAM存储访问来解释。作为一个例子,由上下文请求的,来自编程引擎16中的一个,如编程引擎16a,的SRAM访问(例如线程_0)将导致SRAM控制器18b启动对SRAM存储器14b的访问。SRAM控制器18b访问SRAM存储器14b,从SRAM存储器14b提取数据,并返回数据给请求的编程引擎16。
在SRAM访问期间,假如编程引擎16a-16h中的一个具有能够操作的单线程,则编程引擎将待用直到数据从SRAM存储器14b返回。
通过在编程引擎16a-16h中的每个内采用硬件上下文交换,硬件上下文交换使得其他具有独特程序计数器的上下文能够在那相同的编程引擎中执行。因此,另一个线程,例如线程_1可以运行,而第一个线程,线程_0等待读取数据返回。在执行期间,线程_1可访问DRAM存储器14a。当线程_1在DRAM单元上运行,且线程_0在SRAM单元上运行时,一个新的线程,例如线程_2现在可以在编程引擎16中运行。线程_2可以运行某段时间,直到它需要访问存储器或执行一些其他长等待时间的操作,诸如访问总线接口。因此同时地,多线程处理器12可以具有所有都由编程引擎16的一个完成或运行的总线操作、SRAM操作和DRAM操作,并具有适用于处理多个工作的一个以上的线程或上下文。
硬件上下文交换也与任务的完成同步。例如,二个线程可以访问共享存储资源,例如SRAM存储器14b。分离功能单元的每一个,例如SRAM控制器18b和DRAM控制器18a,当它们完成来自编程引擎线程或上下文的之一的请求任务时,返回报告告知操作完成的标志。当编程引擎16a-16h接收标志时,编程引擎16a-16h可以确定哪个线程接通。
基于硬件的多线程处理器12的应用的一个例子是作为网络处理器。作为网络处理器,基于硬件的多线程处理器12对接诸如媒体存取控制器(MAC)设备的网络设备,例如,遵守IEEE802.3的10/100BaseT八进制MAC或吉比特以太网设备。通常,作为网络处理器,基于硬件的多线程处理器12可以对接任何类型的通讯设备或接收或发送多个数据的接口。在联网应用中运行的计算机处理系统10可以接收网络分组并以并行方式处理那些分组。
编程引擎中的寄存器
参考图2,示出了一个来自编程引擎16的示范编程引擎16a。编程引擎16a包括一个控制存储30,其在一个例子中包括每个是40比特宽的4096个指令的RAM。RAM存储编程引擎16a执行的微程序。控制存储30中的微程序是由处理器核心20可装入的(图1)。
除了对正在执行的线程是本地的事件信号之外,编程引擎16a采用是全局的信令状态。用信令状态,正在执行的线程可以向所有编程引擎16a-16h广播信号状态。编程引擎中任何和所有线程可以按这些信令状态转移。
如上所述,编程引擎16a支持8个上下文的多线程执行。这允许一个线程仅仅在另一个线程发布存储器引用(reference)且在做更多的工作之前必须等到索引完成之后开始执行。因为存储器等待时间是重要的,所以多线程执行对保持编程引擎16a有效的硬件执行是必需的。多线程执行允许编程引擎16通过执行跨过几个线程的有用的独立工作来隐藏存储器等待时间。
允许有效上下文交换的编程引擎16a具有它自己的寄存器组、程序计数器和上下文特定本地寄存器。每个上下文具有复本消除了对每个上下文交换把上下文特定信息移入和移出到共享存储器和编程引擎寄存器的需要。快速上下文交换允许上下文执行计算,而其他上下文等待输入-输出(I/O),典型地,外部存储器存取完成,或来自另一个上下文或硬件单元的信号。
通用寄存器编程引擎16a通过保持8个程序计数器和8个上下文相关的寄存器组来执行8个上下文。许多不同类型的上下文相关的寄存器,诸如通用寄存器(GPRs)32、内部编程主体寄存器(未显示)、静态随机存取存储器(SRAM)输入传送寄存器34、动态随机存取存储器(DRAM)输入传送寄存器36、SRAM输出传送寄存器38、DRAM输出传送寄存器40。
GPRs32用于通用编程用途。GPRs32在编程控制下被专有地读写。GPRs32在在指令用作源时,提供运算对象给执行数据路径44。
执行数据路径44可以取得一个或二个运算对象,执行一个操作并随意地回写一个结果。执行数据路径44包括一个按内容寻址存储器(CAM)45。每个CAM45的表目(entry)存储能够和源运算对象比较的32比特值。所有的表目可并行比较,且查询的结果是6比特值。
当在指令中用作目的地时,用执行数据路径44的结果写入GPRs32。编程引擎16a也包括I/O传送寄存器34、36、38和40,其用来把数据传送到和传送出编程引擎16a,和在编程引擎16a外面的单元,例如DRAM存储器14a、SRAM存储器14b等。
传送寄存器编程引擎16a也包括传送寄存器34、36、38和40。传送寄存器34、36、38和40用于把数据传送到和传送出编程引擎16a,和在编程引擎外面的单元,例如DRAMs、SRAMs等。具有四个类型的如图2中图示说明的传送寄存器,也就是输入传送寄存器和输出传送寄存器。
输入传送寄存器,当在指令中用作源时,提供运算对象给执行数据路径44,而当在指令中用作目的地时,执行数据路径44产生的结果被写入输出传送寄存器。
本地控制和状态寄存器(CSRs)本地控制和状态寄存器(CSRs)37在执行数据路径44的外部,并保存特定用途信息。它们可以通过特定指令(local_csr_rd和local_csr_wr)来读取和写入,通常不如数据路径寄存器那样被频繁地访问。
下一邻近寄存器编程引擎16a也包括一百二十八(128)个下一邻近(NN)寄存器,,统称为NN寄存器35。每个NN寄存器35,当在指令中用作源时,也提供运算对象给执行数据路径44。每个NN寄存器35通过外部实体来写入,不局限于邻近编程引擎,或通过驻存每个NN寄存器35的同一编程引擎16a来写入。通过寄存器号码编码在指令中的上下文相关操作,或通过例如CSR寄存器中的NN_Put(NN写入地址)和NN_Get(NN读取地址)选择的循环操作(ring operation)来选择特定寄存器。
当先前邻近编程引擎执行具有NN_Put作为目的地的指令时,使用NN_Put寄存器。写入由此寄存器中的值所选择的NN寄存器,然后在NN_Put中的值被增加(127的值返回到0)。把此寄存器中的值与NN_Get寄存器中的值比较,来确定何时要求NN_Full和NN_Empty状态信号。
当NN寄存器35被作为在指令的源域中指定的源存取时,使用NN_Get寄存器。读取由此个寄存器中的值所选择的NN寄存器,然后NN_Put中的值被减少(127的值返回到0)。把此寄存器中的值与NN_Put寄存器中的值比较,来确定何时要求NN_Full和NN_Empty状态信号。
具体地说,当每个NN寄存器35在指令中用作目的地时,指令结果数据从编程引擎16a被送出,通常到另一邻近编程引擎。另一方面,当NN寄存器35在指令中用作目的地时,指令结果数据被写入到编程引擎16a中所选择的NN寄存器35。数据没有象当每个NN寄存器35在指令中用作目的地时那样,从编程引擎16a被送出。如下面所述,每个NN寄存器35使用上下文流水线方法。
也使用本地存储器42。本地存储器42包括位于在编程引擎16a中的可寻址存储器。在程序控制下专有地读取和写入本地存储器42。本地存储器42也包括被所有编程引擎16共享的变量。在功能流水线阶段期间,通过接下来描述的编程引擎16a-16h在各种指派任务中修改共享的变量。共享变量包括定义读取-修改-写入次数的临界区。下面也描述计算处理系统10中临界区的实现和使用。
功能流水线和流水线阶段参考图3,编程引擎16a示于功能流水线单元50中。功能流水线单元50包括编程引擎16a和数据单元52,后者包括由编程引擎操作的数据,例如网络分组54。编程引擎16a表示为具有本地寄存器单元56。本地寄存器单元56存储来自数据分组54的信息。
在功能流水线单元50中,编程引擎16a的上下文58,即编程引擎0.1(PE0.1)到编程引擎0.n(PE0.n),当时间66从时间=0进展到时间=t在网络分组54上执行不同功能时,与编程引擎16a保持不变。编程执行时间被分成“m”功能流水线阶段或管道阶段60a-60m。流水线阶段60a-60m的每个流水线阶段对流水线上的数据执行不同的流水线功能62a、64或62p。
例如,流水线阶段60a是规则的时间间隔,在该时间间隔中特殊处理功能,例如功能62a被施加到数据分组54中的一个。处理功能62可以持续一个或多个流水线阶段60。例如功能64持续二个流水线阶段,即流水线阶段60b和60c。
诸如编程引擎16a的单个编程引擎可以组成功能流水线单元50。在功能流水线单元50中,功能62a、64和62p移动穿过功能流水线单元50,从一个编程引擎(例如编程引擎16a)到另外一个编程引擎(例如编程引擎16b),如接下来将描述的。
参考图4,数据分组54按照顺序被指派给编程引擎上下文58。因此,假如“n”线程或上下文58在编程引擎16a中执行,则第一个上下文58“PE0.1”在来自“PE0.n”上下文的数据分组54到达之前完成数据分组54的处理。采用这个方法编程引擎16b可以开始处理“n+1”分组。
例如把编程引擎16a的执行时间划分成功能流水线阶段60a-60c,导致一个以上编程引擎16并行执行等价功能流水线单元70。功能流水线阶段60a分布跨越二个编程引擎16a和16b,编程引擎16a和16b中的每个各自执行8个上下文。
在操作中,当更多编程引擎16被增加到功能流水线单元50和70时,数据分组54中的每个与上下文58中的一个保持不变达较长时间。在本例子中,数据分组54与上下文保持不变达16个数据分组到达时间(8个上下文×2编程引擎),因为上下文PE0.1没有被要求接受另一个数据分组58,直到另一个上下文58已接收到它们的数据分组为止。
在这个例子中,功能流水线阶段60a的功能62a可以从编程引擎16a传送到编程引擎16b。通过使用下一邻近寄存器实现功能62a的传送,如由图4中虚线80a-80c所图示说明的。
功能流水线阶段60a-60m的数量等于功能流水线单元50和70中编程引擎16a和16b的数量。这确保在任何一个时刻特殊流水线阶段仅仅在一个编程引擎16中执行。
上下文流水线操作编程引擎16的每个支持8个上下文的多线程执行。原因之一是允许一个线程仅仅在另一个线程发布存储器引用且在做更多工作之前必须等到引用完成之后开始执行。这个行为对保持编程引擎16a-16f的有效硬件执行是必需的,因为存储器等待时间是重要的。换种说法,假如仅仅得到单个线程执行支持,则编程引擎将闲置相当的循环以等待引用完成,从而降低了整个计算吞吐量。多线程执行允许编程引擎通过执行横跨几个线程的有用的独立工作来隐藏存储器等待时间。
编程引擎16a-16h(图1)各自具有8个可用上下文。为了允许有效的上下文交换,编程引擎中的8个上下文中的每个具有它自己的寄存器组、程序计数器和上下文特定本地寄存器。每个上下文具有复本消除了对每个上下文交换要把上下文特定信息移到和移出共享存储器的需要和编程引擎寄存器。快速上下文交换允许上下文执行计算,在其他上下文等待I/O,(通常为外部存储器访问)的完成,或等待来自另一个上下文或硬件单元的信号。
现在参考图5,使用CAM45a-45c在编程引擎16a-16c上保存对特定指派的任务的上下文。以流水线方式处理分组,类似于使用NN寄存器35a-35c的装配线来把数据从一个编程引擎传送到随后的邻近编程引擎。数据从一个阶段90a传送到随后的阶段90b,然后从流水线的阶段90b到阶段90c,等等。换句话说,把数据传送到流水线下一个阶段,允许处理器循环的步骤重迭。尤其是,在执行一个指令同时,可以提取下一个指令,这意味着在任何一个时刻一个以上指令可以在“管道”中,每个在被处理的不同阶段。
例如,使用NN寄存器35a-35c,在流水线中数据可从流水线中的一个编程引擎16向前传送到下一个编程引擎16,如图5中例子所图示说明的。实现流水线处理的这个方法具有的优点是,对每个阶段90a-c包括在CAM45a-45c中的信息,对流水线阶段的所有8个上下文是始终有效的。当来自正被处理的分组的最小数据必需前进通过上下文流水线时,可以利用上下文流水线方法。
参考图6,如上所述,上下文流水线操作要求从管道阶段(诸如管道阶段P)得出的数据,可被发送到下一个管道阶段(例如管道阶段P+1)(100)。然后,从管道阶段P中的处理引擎16a的运算器输出写入下一邻近寄存器(102),在管道阶段P+1由下一编程引擎16b读取下一个邻近寄存器作为源运算对象(104)。
参考图7,可以使用二种处理方法来确定被写入在编程引擎16b中的下一邻近寄存器的地址。在一种处理方法中,对于编程引擎16b中的相同上下文,编程引擎16a的每个上下文可以写入到的相同下一邻近寄存器中(200)。在另外一种方法中,可使用编程引擎16a中的写指针寄存器和编程引擎16a中的读指针寄存器(300),来实现内部处理引擎FIFO(302)。使用编程引擎16a中的写指针寄存器和编程引擎16a中的读指针寄存器的值,在插入数据到FIFO之前产生由编程引擎16检验的满指示(304),和在从FIFO移除数据前产生由编程引擎16b检验的空指示(306)。FIFO下一邻近配置可以提供在管道阶段P和P+1中上下文之间的弹性。当管道阶段P+1中上下文发现下一邻近FIFO为空时,那个上下文可以执行不运算(No-op)功能,允许管道阶段保持预定执行速率或“节奏”,即使没有以此相同的速率给先前的管道阶段提供输入。
其他实施例在上面结合图1-7描述的例子中,计算机处理系统10可以使用各种网络处理器实现多个编程引擎16。
应该理解为尽管本发明已结合本发明的详细描述对本发明作了说明,但是上述描述是用作例示来说明的,而不对阐释由附加权利要求范围定义的本发明范围作限制。其他方面、优点和修改在下面权利要求的范围内。
权利要求
1.一种处理器,其特征在于,所述处理器包括多个编程引擎,其包含多个寄存器,用于把数据从驻存在执行编程引擎中的多个寄存器中的一个传送到驻存在邻近编程引擎中的多个寄存器中随后的一个寄存器。
2.如权利要求1所述的处理器,其特征在于,多个寄存器包含下一邻近寄存器。
3.如权利要求1所述的处理器,其特征在于,多个寄存器被配置成指派数据分组处理的任务给多个编程引擎。
4.如权利要求1所述的处理器,其特征在于,多个寄存器被配置成建立对应于多个编程引擎的的编程阶段。
5.如权利要求1所述的处理器,其特征在于,多个寄存器在编程阶段之间建立多个流水线。
6.如权利要求1所述的处理器,其特征在于,多个寄存器保持流水线的当前运行编程阶段,邻近的编程引擎被配置成保持多个流水线的随后的编程阶段。
7.如权利要求1所述的处理器,其特征在于,多个寄存器通过在多个编程引擎中传送功能数据的功能流水线控制单元来支持功能流水线。
8.如权利要求7所述的处理器,其特征在于,所述处理器进一步包括跨接功能流水线单元的同步单元。
9.如权利要求7所述的处理器,其特征在于,功能流水线控制单元包括多个功能流水线阶段。
10.如权利要求7所述的处理器,其特征在于,多个功能流水线阶段的每个阶段执行不同的系统功能。
11.如权利要求7所述的处理器,其特征在于,多个编程引擎按顺序处理数据分组。
12.如权利要求7所述的处理器,其特征在于,数据分组被指派到多个编程引擎的多个上下文中。
13.如权利要求7所述的处理器,其特征在于,多个编程引擎使用系统的功能流水线单元执行数据分组处理功能。
14.如权利要求7所述的处理器,其特征在于,多个编程引擎执行内部线程信令。
15.在编程引擎之间传输数据的一种方法,其特征在于,所述方法包括从多个编程引擎的数据寄存器读取数据,以在流水线单元的并行处理器中处理此数据,该流水线单元支持每个编程引擎中多个上下文执行;和把数据写到编程引擎的多个数据寄存器,多个数据寄存器驻存在执行编程引擎中。
16.如权利要求15所述的方法,其特征在于,所述方法进一步包括为从多个数据寄存器读取数据和写入数据到多个数据寄存器,提供下一邻近寄存器。
17.如权利要求15所述的方法,其特征在于,所述方法进一步包括指派数据分组处理任务给多个编程引擎。
18.如权利要求15所述的方法,其特征在于,所述方法进一步包括建立对应于多个编程引擎的编程阶段和在编程阶段之间建立多个流水线。
19.如权利要求15所述的方法,其特征在于,所述方法进一步包括保持此流水线的当前运行编程阶段,并配置邻近编程引擎来保持多个流水线的随后的编程阶段。
20.如权利要求15所述的方法,其特征在于,数据的读取和写入包括由在多个编程引擎中传递功能数据的功能流水线控制单元来支持功能流水线。
21.存储在计算机可读媒介的计算机程序产品,其特征在于,所述程序产品包含使并行处理器作下述操作的指令从编程引擎的多个数据寄存器读取数据,为在流水线单元的并行处理器中处理数据,该流水线单元支持每个编程引擎中多上下文执行;和把数据写到编程引擎的多个数据寄存器,多个数据寄存器驻存在执行编程引擎中。
22.如权利要求21所述的计算机程序产品,其特征在于,所述程序产品进一步包括指令,该指令使处理器提供下一邻近寄存器,为从多个数据寄存器读取数据和写入数据到多个数据寄存器。
23.如权利要求21所述的计算机程序产品,其特征在于,多个寄存器使用流水线单元执行数据传送。
24.如权利要求21所述的计算机程序产品,其特征在于,所述程序产品进一步包括指令,该指令使处理器配置多个数据寄存器,以把分组处理的任务指派给多个编程引擎。
25.一种制品,其特征在于,该制品包括在其上已存储指令的存储媒介,该指令被机器执行时,导致下面情况数据从执行编程引擎中第一个多个寄存器中的一个寄存器传送到驻存在邻近编程引擎中第二个多个寄存器的随后的一个寄存器;把分组处理的任务分配给多个编程引擎;建立对应于多个编程引擎的编程阶段;和建立编程阶段间多个流水线。
26.如权利要求25所述的计算机编程产品,其特征在于,所述编程产品进一步包括指令,该指令把数据从驻存在编程引擎的当前执行编程引擎中的下一邻近寄存器传送到驻存在与当前执行编程引擎邻近的编程引擎中的随后下一邻近寄存器。
27.如权利要求25所述的计算机编程产品,其特征在于,所述编程产品进一步包括指令,该指令用于多个寄存器以保持流水线当前运行的编程阶段,和用于邻近编程引擎以保持多个流水线的随后的编程阶段。
28.一种多处理系统,其特征在于,所述处理系统包括多个编程引擎,它们包括多个下一邻近寄存器和同步处理器,前者配置成把数据从驻存在执行编程引擎的第一个多个寄存器中的一个寄存器传送到驻存在邻近编程引擎中第二个多个寄存器的随后一个寄存器,后者处理跨接功能流水线单元的数据分组。
29.如权利要求28所述的多处理系统,其特征在于,所述处理系统进一步包括由多个编程引擎的多个编程阶段利用的共享存储单元,共享变量包括定义存储单元的读-改-写时间的临界区。
30.如权利要求28所述的多处理系统,其特征在于,多个编程引擎中的每个引擎包括可按内容寻址的存储器(CAM)。
全文摘要
本发明涉及采用适用于在多硬件上下文和编程引擎中数据传送的寄存器以便于进行高性能数据处理的一个系统和方法。此系统和方法包含一个包括具有寄存器的编程引擎的处理器,用于把数据从驻存在执行编程引擎中的寄存器中的一个寄存器传送到驻存在邻近编程引擎中的寄存器中的随后的一个寄存器。
文档编号G06F9/30GK1659514SQ03812766
公开日2005年8月24日 申请日期2003年3月27日 优先权日2002年4月3日
发明者G·沃尔里齐, M·罗森布鲁斯, D·伯恩斯泰因, M·埃迪莱塔 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1