信息处理方法和系统的制作方法

文档序号:6554199阅读:123来源:国知局

专利名称::信息处理方法和系统的制作方法
技术领域
:本发明一般涉及调度执行预取的指令。本发明尤其涉及维护包含直列行(inlinelines)以及分支预测行(branch-predictlines)的指令行缓冲区(instructionlinebuffer)。
背景技术
:现代处理器具有在调度执行指令之前预取这些指令的机构。预取指令允许某些指令等待执行,而不是使处理器等待从存储器加载其需要的指令。通过这种方式,通常能够在前一指令已经清出流水线的第一级段时立即开始新的指令。通过这种方式,多个指令能够同时通过指令流水线。这通常被称作″指令级并发(ILP)″。这些预取的指令被保存在缓冲区中,直到它们能够被编入序列来提交和执行。指令能够表现出直列执行路径或由所采取的分支要到达的目标路径。用于处理直列和分支指令的某些已知技术包含使用分支目标缓冲区和跟踪高速缓存。分支目标缓冲区的基础是具有分别用于直列数据和目标(分支)数据的2个分别的存储结构。当针对分支目标缓冲区的索引发现有匹配时,序列转向目标(分支)指令。当使用跟踪高速缓存时,最可能的执行序列被存储在高速缓存中,其中目标在直列部分之后被合并到序列中。跟踪高速缓存通常会包含指向跟踪高速缓存中的下一后继部分的指针。使用传统缓冲区和高速缓存的挑战是双重的。第一,随着处理器变成越来越快速,需要更加迅速地预取指令,以使得它们准备好供处理器使用。第二,使用传统技术预取指令通常导致过大的缓冲区和高速缓存,以便使处理器保持工作并且防止停止运行。相关的挑战是如果预测了分支但是该分支实际未被执行,则预测失误的代价会相当大。由于有更多指令需要从流水线中刷除,具有更大流水线的系统要付出更大的代价。因此需要一种组织预取缓冲区以使得其既小且快的系统和方法。此外,还需要一种系统和方法,其维护有关预取缓冲区内存储的指令的状态信息,以利于满足速度要求,但不需要存储预取的指令所需的大数据结构和存储空间。
发明内容已经发现,使用维护相对小的指令加载缓冲区(ILB)的系统和方法可解决上述挑战。使用直列预取器或分支表缓冲区加载器从本地存储器(LS)向ILB发送指令。在一个实施例中,预取器是按地址顺序获取可能要调度的下一指令的基于硬件的预取器。在一个实施例中,作为例如分配器的软件程序提交″加载分支表缓冲区(loadbtb)″指令的结果,加载预测分支指令。在ILB的一个区域中加载预测分支指令,在ILB的另一区域中加载直列指令。在一个实施例中,loadbtb加载包含预测分支目标地址的指令行,以及紧接在具有该预测分支目标地址的指令行之后的指令行。在使用64字节行的实施例中,每个行存储16个4字节指令,加载包含预测分支目标地址的指令行和后继指令行的操作的加载量在17和32指令之间。维护状态信息以便确定ILB内的哪个行是下一当前预测路径(CPP)。当指令行被定为CPP时,根据状态信息将该的一或多个指令调度到提交控制。随着指令行到达ILB,更新状态信息(例如指针和地址)以便确定行的调度顺序。另外,维护第一和最后指令指针,使得当行变成CPP时调度正确的指令,当最后识别的CPP的指令被调度时,加载新的CPP。上述是概括说明,因而必定包含详细的简化,概括和省略;因此,本领域的技术人员会理解,上述概括说明只是示例性的,并不旨在进行任何方式的限制。通过下面提供的非限制性的详细描述将会理解完全由权利要求限定的本发明的其它方面,发明特征和优点。参考附图,本领域的技术人员可以更好地理解本发明及其许多目的,特征和优点。图1图解了根据本发明的计算机网络的总体体系结构;图2的图例图解了根据本发明的处理单元(PU)的结构;图3的图例图解了根据本发明的宽带引擎(BE)的结构;图4的图例图解了根据本发明的协处理单元(SPU)的结构;图5的图例图解了根据本发明的处理单元,可视化器(visualizer)(VS)及光学接口的结构;图6的图例图解了根据本发明的一个处理单元组合;图7图解了根据本发明的另一个处理单元组合;图8图解了根据本发明的另一个处理单元组合;图9图解了根据本发明的另一个处理单元组合;图10图解了根据本发明的另一个处理单元组合;图11A图解了根据本发明的芯片封装内的光学接口的集成;图11B的图例图解了使用图11A的光学接口的处理器的一个配置;图11C的图例图解了使用图11A的光学接口的处理器的另一配置;图12A图解了根据本发明的存储器系统的结构;图12B图解了根据本发明从第一宽带引擎到第二宽带引擎的数据写入;图13的图例图解了根据本发明的处理单元的共享存储器的结构;图14A图解在图13中示出的存储器组的一个结构;图14B图解在图13中示出的存储器组的另一结构;图15图解了根据本发明的直接存储器访问控制器的结构;图16图解了根据本发明的直接存储器访问控制器的可选结构;图17-31图解了根据本发明的数据同步操作;图32的三态存储器图根据本发明的数据同步模式图解了存储器位置的各种状态;图33根据本发明图解了硬件沙箱(sandbox)的密钥控制表(keycontroltable)的结构;图34根据本发明图解了存储硬件沙箱的存储器访问密钥的模式;图35根据本发明图解了硬件沙箱的存储器访问控制表的结构;图36是使用图33的密钥控制表及图35的存储器访问控制表访问存储器沙箱的步骤的流程图;图37根据本发明图解了软件单元的结构;图38是根据本发明向SPU发出远程过程调用的步骤的流程图;图39根据本发明图解了用于处理流数据的专用管道的结构;图40是根据本发明在流数据的处理中由图39的专用管道完成的步骤的流程图;图41根据本发明图解了用于流数据处理的专用管道的可选结构;图42根据本发明图解了用于协调SPU对应用及数据的并行处理的绝对定时器的模式;图43图解了协处理单元(SPE)的组织;图44图解了SPE的单元和指令执行时间;图45是SPE流水线的图例;图46是SPE电路小片的照片;图47是电压/频率表(schmoo);图48是SPE指令行缓冲区(ILB)的图例;图49的状态图示出了ILB内的行的调度顺序;图50的图例示出了作为软件启动的″加载分支表缓冲区″(loadbtb)指令的结果从2个存储器组加载的数据;图51是作为loadbtb指令的结果从2个存储器组加载的数据的另一图例;图52的流程图示出了通过ILB中包含的行的逻辑过程;图53示出了当预测分支目标指令已经被加载时通过ILB中包含的行的示例性过程;图54示出了当预测分支目标指令未被加载时通过ILB中包含的行的示例性过程;图55的流程图详细示出了当通过预取器硬件或作为loadbtb指令的结果而在ILB中加载新行时所采取的步骤;和图56的流程图详细示出了决定何时从ILB将下一调度行加载到当前预测路径(CPP)时所采取的步骤。具体实施例方式根据本发明的计算机系统101的总体体系结构在图1中示出。如此图所示,系统101包含连接多个计算机及计算设备的网络104。网络104可以是LAN,全球网络,诸如因特网,或任何其他计算机网络。连接到网络104的计算机及计算设备(网络的“成员”)包含例如客户端计算机106,服务器计算机108,个人数字助理(PDA)110,数字电视(DTV)112及其它有线或无线计算机及计算设备。由网络104的成员使用的处理器是由相同的通用计算机模块构造。这些处理器也最好全部具有相同ISA并且根据相同指令集执行处理。包含在任何特定处理器内的模块的数量取决于该处理器所需的处理能力。例如,由于系统101的服务器108比客户端106执行更多的数据及应用处理,服务器108比客户端106包含更多的计算模块。另一方面,PDA110执行处理的量最少。因此,PDA110包含最小量的计算模块。DTV112执行的处理量介于客户端106及服务器108之间。因此,DTV112包含介于客户端106及服务器108之间的数量的计算模块。如下所述,各个计算模块包含处理控制器及多个相同处理单元,用于执行通过网络104发送的数据及应用的并行处理。系统101的这种同构结构利于可适应性,处理速度及处理效率。由于系统101的各个成员使用一或多个相同计算模块(或某个部分)执行处理,执行数据及应用的实际处理的特定计算机或计算设备是不重要的。此外,具体应用及数据的处理可以在网络的成员中间分享。通过唯一标识全系统中包括由系统101处理的数据及应用的单元(cell),处理结果可以被发送到请求处理的计算机或计算设备,而无需考虑这个处理发生的位置。由于执行这个处理的模块具有通用结构并且使用通用ISA,避免了为在处理器中间实现兼容而增加的软件层的计算负担。这个体系结构及编程模型利于得到执行例如实时多媒体应用所需的处理速度。为了进一步利用系统101所带来的处理速度及效率,由这个系统处理的数据及应用被封装到唯一标识别的、统一格式化的软件单元(softwarecell)102中。每个软件单元102包含或能够包含应用程序和数据。每个软件单元也包含一个ID以全局标识遍及网络104及系统101的单元。软件单元的这种统一结构和遍及网络的软件单元的唯一标识,利于网络的任何计算机或计算设备上对应用及数据的处理。例如,客户端106可以设定软件单元102,但由于客户端106受处理能力的限制,将这个软件单元发送到服务器108进行处理。因此,软件单元可以在全网络104迁移以根据网络上处理资源的可用性进行处理。系统101的处理器和软件单元的同构结构也避免了现在异构网络的许多问题。例如,避免了设法允许在使用任何指令集的任何ISA上处理应用的低效编程模型,例如,诸如Java虚拟机的虚拟机。因此,系统101可以进一步实现比现在的网络更有效和高效的宽带处理。针对网络104的所有成员的基本处理模块是处理单元(PU)。图2图解了PU的结构。如该图所示,PE201包括处理单元(PU)203,直接存储器访问控制器(DMAC)205及多个协处理单元(SPU),即,SPU207,SPU209,SPU211,SPU213,SPU215,SPU217,SPU219及SPU221。本地PE总线223在SPU,DMAC205及PU203中间发送数据及应用。例如,本地PE总线223可以具有传统体系结构或被实现为分组交换网络。分组交换网络的实现在需要更多硬件的同时,增加了可用带宽。可以使用各种方法构造PE201以实现数字逻辑。然而,PE201最好被构造成在硅质基底上使用互补金属氧化物半导体(CMOS)的单个集成电路。基底的可选材料包含镓砷化物(galliumarsinide),镓铝砷化物(galliumaluminumarsinide)及其它使用各种掺杂剂的所谓III-B化合物。也可以通过使用例如快速单通量量子(RSFQ)逻辑的超导材料实现PE201。PE201通过高带宽存储器连接227与动态随机访问存储器(DRAM)225紧密关联。DRAM225作为PE201的主存储器。尽管DRAM225最好是动态随机访问存储器,但是DRAM225可以通过使用例如作为静态随机访问存储器(SRAM),磁性随机访问存储器(MRAM),光学存储器或全息存储器的其它装置实现。DMAC205利于DRAM225及PE201的SPU和PU之间的数据传送。如下面进一步讨论的,DMAC205为各个SPU指定DRAM225内的专用区域,在该区域只有SPU可以写数据并且只有SPU可以从该区域读取数据。这个专用区域被称为“沙箱”。例如,PU203可以是能独立处理数据及应用的标准处理器。在操作中,PU203安排及协调SPU对数据及应用的处理。SPU最好是单指令、多数据(SIMD)处理器。在PU203的控制下,SPU以并行且独立的方式执行这些数据及应用的处理。DMAC205控制PU203及SPU对存储在共享DRAM225中的数据及应用的访问。尽管PE201最好包含8个SPU,但是根据所需处理能力,在PU中可使用更多或更少数量的SPU。同时,诸如PE201的若干PU可以加入或封装到一起以提供增强的处理能力。例如,如图3所示,四个PU可以封装或加入到一起,例如,在一或多个芯片封装内,以构成网络104的成员的单个处理器。这种结构被称为宽带引擎(BE)。如图3所示,BE301包含四个PU,即,PE303,PE305,PE307及PE309。这些PU间的通信通过BE总线311进行。宽带宽存储器连接313提供共享DRAM315及这些PU之间的通信。代替BE总线311地,BE301的PU间的通信可以通过DRAM315及该存储器连接进行。输入/输出(I/O)接口317及外部总线319提供宽带引擎301和网络104的其它成员之间的通信。BE301的各个FU以并行及独立的方式执行数据及应用的处理,该方式类似于由PU的SPU执行的并行及独立的应用及数据的处理。图4图解了SPU的结构。SPU402包含本地存储器406,寄存器410,四个浮点单元412及四个整数单元414。然而,仍然根据所需的处理能力,可以使用更多或更低数量的浮点单元412及整数单元414。在一个最优实施例中,本地存储器406包含128千字节的存储器,并且寄存器410的容量是128乘128位。浮点单元412最好以每秒32千兆(billion)浮点运算的速度(32GFLOPS)操作,而整数单元414最好以每秒32千兆运算的速度(32GOPS)操作。本地存储器406不是高速缓冲存储器。本地存储器406最好被构造为SRAM。对于SPU的超高速缓存一致性支持是不必要的。PU可以需要针对由PU初始化的直接存储器访问的超高速缓存一致性支持。然而,对于由SPU初始化的直接存储器访问或对于来自和到外部设备的访问,不需要超高速缓存一致性支持。SPU402还包含用于针对SPU发送应用及数据的总线404。在一个最优实施例中,该总线是1024位宽。SPU402还包含内部总线408,420和418。在一个最优实施例中,总线408具有256位的宽度,并且提供本地存储器406和寄存器410之间的通信。总线420和418分别提供寄存器410和浮点单元412之间,及寄存器410和整数单元414之间的通信。在一个最优实施例中,从寄存器410到浮点或整数单元的总线418和420的宽度是384位,并且从浮点或整数单元到寄存器410的总线418和420的宽度是128位。从寄存器410到浮点或整数单元的这些总线的宽度比从这些单元到寄存器410的宽度更大,使得处理期间可容纳更大的来自寄存器410的数据流。对于每个计算最多需要三个字。然而,每个计算的结果通常只是一个字。图5-10进一步图解了网络104的成员的处理器的模块结构。例如,如图5所示,处理器可以包括单个PU502。如上所述,该PU通常包括PU,DMAC和8个SPU。每个SPU包含本地存储器(LS)。另一方面,处理器可以包括可视化器(VS)505的结构。如图5所示,VS505包括PU512,DMAC514和四个SPU,即,SPU516,SPU518,SPU520和SPU522。通常由PU的其它四个SPU占用的芯片封装内的空间在这种情况下由像素引擎508,图像高速缓存510和阴极射线管控制器(CRTC)504占用。根据PU502或VS505需要的通信速度,光学接口506也可以包含在芯片封装上。使用该标准化的模块结构,能容易和有效地构造处理器的许多其它变型。例如,如图6示出的处理器包括两个芯片封装,即,包括BE的芯片封装602和包括四个VS的芯片封装604。输入/输出(I/O)606提供芯片封装602的BE和网络104之间的接口。总线608提供芯片封装602和芯片封装604之间的通信。输入输出处理器(IOP)610控制进出I/O606的数据流。I/O606可以制造成专用集成电路(ASIC)。来自VS的输出是视频信号612。图7图解了针对具有两个光学接口704和706的BE702的芯片封装,所述接口用于向网络104的其它成员(或本地连接的其它芯片封装)提供超高速通信。例如,BE702可以作为网络104上的服务器。图8的芯片封装包括两个PE802和804以及两个VS806和808。I/O810提供芯片封装602和网络104之间的接口。来自芯片封装的输出是视频信号。例如,该结构可以作为图形工作站。图9图解了另一个结构。该结构包含图8中图解的结构的处理能力的一半。代替两个PU地,提供一个PE902,并且代替两个VS地,提供一个VS904。I/O906具有图8中图解的I/O的带宽的一半。然而,这种处理器也可以作为图形工作站。最后的结构在图10中示出。该处理器仅由单个VS1002和I/O1004构成。例如,该结构可以作为PDA。图11A图解了把光学接口集成到网络104的处理器的芯片封装。这些光学接口将光学信号转换为电信号以及将电信号转换为光学信号,并且光学接口可以由包含例如镓砷化物,铝镓砷化物,锗和其它元素或化合物的各种材料构成。如此图所示,光学接口1104和1106被制造在BE1102的芯片封装上。BE总线1108提供BE1102的PU,即,PE1110,PE1112,PE1114,PE1116和这些光学接口间的通信。光学接口1104包含两个端口,即,端口1118和端口1120,并且光学接口1106也包含两个端口,即,端口1122和端口1124。端口1118,1120,1122和1124被分别连接到光波导1126,1128,1130和1132。通过光学接口1104和1106的端口,经由这些光波导针对BE1102收发光信号。通过使用这种光波导和各个BE的四个光学端口,多个BE可以在各种结构中被连接在一起。例如,如图11B所示,两个或更多BE,例如BE1152,BE1154和BE1156,可以通过这种光学端口被串行连接。在这个例子中,BE1152的光学接口1166通过其光学端口连接到BE1154的光学接口1160的光学端口。以类似方式,BE1154上的光学接口1162的光学端口被连接到BE1156的光学接口1164的光学端口。在图11C中图解了矩阵结构。在该结构中,每个BE的光学接口被连接到其它两个BE。如该图所示,BE1172的光学接口1188的光学端口之一被连接到BE1176的光学接口1182的光学端口。光学接口1188的其它光学端口被连接到BE1178的光学接口1184的光学端口。以类似方式,BE1174的光学接口1190的光学端口之一被连接到BE1178的光学接口1184的另一个光学端口。光学接口1190的另一个光学端口被连接到BE1180的光学接口1186的光学端口。该矩阵结构能以类似方式扩展到其它BE。使用串行结构或矩阵结构,网络104的处理器可以被构造成具有任何期望的规模和能力。当然,其它端口可以加到BE的光学接口上,或加到具有比BE更多或更低数量的PU的处理器,以构成其它结构。图12A图解了BE的DRAM的控制系统和结构。在具有其它规模以及包含或多或少PU的处理器中使用类似控制系统和结构。如此图所示,交叉开关装置(cross-barswitch)把具有包括BE1201的四个PU的每个DMAC1210连接到8个组控制1206。每个组控制1206控制DRAM1204的8个组1208(在此图中只示出四个)。因此,DRAM1204包括总共64个组。在一个最优实施例中,DRAM1204具有64兆字节的容量,并且各个组具有1兆字节的容量。在此优选实施例中,各组内最小可寻址单元是1024位块。BE1201还包含交换单元1212。交换单元1212允许BE上与BE1201紧耦合的其它SPU访问DRAM1204。因此,第二个BE可以紧耦合到第一个BE,并且每个BE的每个SPU可以寻址的存储器位置数量两倍于SPU通常可访问的存储器位置数量。对第一BE的DRAM和对第二BE的DRAM的数据直接读或写可以通过诸如交换单元1212的交换单元进行。例如,如图12B所示,为了实现此写入,第一BE的SPU,例如,BE1222的SPU1220,向第二BE的DRAM,例如,BE1226的DRAM1228的存储器位置发出写命令(不象通常那样向BE1222的DRAM1224发出)。BE1222的DMAC1230通过交叉开关装置1221向组控制1234发送写命令,并且组控制1234向连接到组控制1234的外部端口1232发送该命令。BE1226的DMAC1238接收写命令,并且传送该命令到BE1226的交换单元1240。交换单元1240识别包含在写命令中的DRAM地址,并且通过BE1226的组控制1242向DRAM1228的组1244发送数据以存储在该地址。因此,交换单元1240允许DRAM1224和DRAM1228作为BE1226的SPU的单个存储器空间。图13示出了DRAM的64组的结构。这些组被排列成8行,即,行1302,1304,1306,1308,1310,1312,1314和1316,以及8列,即,列1320,1322,1324,1326,1328,1330,1332和1334。每行由组控制器控制。因此,每个组控制器控制8兆字节的存储器。图14A和14B图解了用于存储及访问DRAM的最小可寻址存储器单元,例如1024位块,的不同结构。在图14A中,DMAC1402在单个组1404中存储8个1024位块1406。另一方面,在图14B中,当DMAC1412读写包含1024位块的数据时,这些块在两个组,即,组1414和组1416之间交错。因此,每个这样的组包含十六个数据块,并且每个数据块包含512位。这种交错可以利于DRAM的快速访问,并且在某些应用的处理中有用。图15图解了PE内DMAC1504的体系结构。如此图所示,包括DMAC1506的结构硬件被分布在整个PE,使得每个SPU1502直接访问DMAC1506的结构节点1504。每个节点通过该节点直接访问的SPU执行适于存储器访问的逻辑。图16示出了DMAC的可选实施例,即,非分布式体系结构。在这种情况下,DMAC1606的结构硬件是集中式的。SPU1602和PU1604通过本地PE总线1607与DMAC1606通信。DMAC1606通过交叉开关装置被连接到总线1608。总线1608被连接到DRAM1610。如上所述,PU的所有多个SPU可以独立访问共享DRAM中的数据。结果,第一个SPU可以在第二个SPU请求时操作本地存储器中的特定数据。如果数据在该时刻被从共享DRAM提供给第二SPU,则由于第一SPU正在进行可改变数据值的处理,所以该数据无效。因此,如果第二处理器在该时刻从共享DRAM接收数据,第二处理器可能产生错误结果。例如,数据可以是全局变量的具体值。如果第一处理器在其处理期间改变此值,则第二处理器将接收过期的值。因此,需要一种同步SPU针对共享DRAM内存储器位置的数据读写数据的模式(scheme)。该模式必须防止从这样的存储器位置读取数据,其中另一SPU正在其本地存储器中操作该存储器位置的数据,因此该存储器位置的数据不是最新的,并且防止把数据写入到存储当前数据的存储器位置。为了克服这些问题,针对DRAM的每个可寻址存储器位置,附加存储器分段被分配在DRAM中,用于存储涉及存储在存储器位置中的数据的状态信息。此状态信息包含满/空(F/E)位,向存储器位置请求数据的SPU的标识(SPUID),以及应当从中读取所请求数据的SPU本地存储器的地址(LS地址)。DRAM的可寻址存储器位置可以是任何长度。在一个最优实施例中,此长度是1024位。F/E位设置为1指示存储在相关存储器位置的数据是最新的。另一方面,F/E位设置为0指示存储在相关存储器位置的数据不是最新的。如果当此位被设置成0时SPU请求数据,则防止SPU立即读取数据。在这种情况下,标识请求数据的SPU的SPUID和标识此SPU的本地存储器内的存储器位置的LS地址被输入到附加存储器分段,其中SPU当数据变成最新时读取数据到该存储器位置。附加存储器分段还分配给SPU的本地存储器内的每个存储器位置。此附加存储器分段存储一个位,被称为“忙位”。忙位用于保留用于存储从DRAM检索的特定数据的相关LS存储器位置。如果忙位针对本地存储器中特定存储器位置被设置成1,则SPU只能使用该存储器位置用于这些特定数据的写入。另一方面,如果忙位针对本地存储器中特定存储器位置被设置成0,则SPU能够使用该存储器位置用于任何数据的写入。在图17-31中图解了该方式的例子,其中F/E位,SPUID,LS地址和忙位被用于同步针对PU的共享DRAM的数据的读、写。如图17所示,一或多个PU,例如,PE1720,与DRAM1702交互。PE1720包含SPU1722和SPU1740。SPU1722包含控制逻辑1724,并且SPU1740包含控制逻辑1742。SPU1722还包含本地存储器1726。该本地存储器包含多个可寻址存储器位置1728。SPU1740包含本地存储器1744,并且此本地存储器还包含多个可寻址存储器位置1746。所有这些可寻址存储器位置的长度最好是1024位。附加存储器分段与每个LS可寻址存储器位置相关。例如,存储器分段1729和1734分别与本地存储器位置1731和1732相关,并且存储器分段1752与本地存储器位置1750相关。如上所述,“忙位”被存储在所有这些其它存储器分段中。用若干X示出本地存储器位置1732以指示该位置包含数据。DRAM1702包含多个可寻址存储器位置1704,其中包含存储器位置1706和1708。这些存储器位置的长度最好也是1024位。附加存储器分段同样与所有这些存储器位置相关。例如,附加存储器分段1760与存储器位置1706相关,并且附加存储器分段1762与存储器位置1708相关。涉及存储在每个存储器位置中的数据的状态信息被存储在与该存储器位置相关的存储器分段中。如上所述,这个状态信息包含F/E位,SPUID和LS地址。例如,针对存储器位置1708,这个状态信息包含F/E位1712,SPUID1714和LS地址1716。使用状态信息和忙位,能够实现PU的SPU,或一组PU中间针对共享DRAM的数据同步读、写。图18图解了从SPU1722的LS存储器位置1732向DRAM1702的存储器位置1708同步写入数据的发起。SPU1722的控制1724发起这些数据的同步写入。由于存储器位置1708为空,F/E位1712被设置成0。结果,在LS位置1732中的数据能够被写入存储器位置1708。另一方面,如果该位被设置成1以指示存储器位置1708已满并且包含最新有效数据,则控制1722会接收差错消息并且被禁止向这个存储器位置写数据。在图19中示出了向存储器位置1708成功同步写入数据的结果。写数据被存储在存储器位置1708,并且F/E位1712被设置成1。该设置指示存储器位置1708满,并且在该存储器位置中的数据是最新及有效的。图20图解了从DRAM1702的存储器位置1708向本地存储器1744的LS存储器位置1750同步读取数据的发起。为了发起这个读取,在LS存储器位置1750的存储器分段1752中的忙位被设置成1,以保留该储器位置给这些数据。该忙位设置为1防止SPU1740在此存储器位置存储其它数据。如图21所示,控制逻辑1742接着针对DRAM1702的存储器位置1708发出同步读命令。由于与这个存储器位置相关的F/E位1712被设置成1,存储在存储器位置1708中的数据被认为是最新及有效的。结果,为准备把数据从存储器位置1708传送到LS存储器位置1750,F/E位1712被设置成0。在图22中示出该设置。该位设置为0指示在读取这些数据之后,存储器位置1708中的数据将无效。如图23所示,接着,存储器位置1708内的数据被从存储器位置1708读取到LS存储器位置1750。图24示出最后状态。在存储器位置1708中的数据的复本被存储在LS存储器位置1750。F/E位1712被设置成0以指示在存储器位置1708中的数据无效。该无效是SPU1740对这些数据进行改变的结果。存储器分段1752中的忙位也被设置成0。该设置指示现在LS存储器位置1750可被SPU1740用于任何目的,即,该LS存储器位置不再处于等待接收特定数据的保留状态。因此,现在SPU1740能够为任何目的访问LS存储器位置1750。图25-31图解了当DRAM1702的存储器位置的F/E位被设置成0以指示在该存储器位置中的数据不是最新或有效时,从DRAM1702的存储器位置,例如存储器位置1708,到SPU的本地存储器的LS存储器位置,例如本地存储器1744的LS存储器位置1752的同步数据读取。如图25所示,为了启动这个传送,在LS存储器位置1750的存储器分段1752中的忙位被设置成1,以保留该LS存储器位置用于该数据传送。如图26所示,接着,控制逻辑1742针对DRAM1702的存储器位置1708发出同步读命令。由于与该存储器位置相关的F/E位,即F/E位1712,被设置成0,则存储在存储器位置1708中的数据无效。结果,向控制逻辑1742发送信号以阻塞从该存储器位置的即时数据读取。如图27所示,接着,该读命令的SPUID1714及LS地址1716被写入存储器分段1762。在这种情况下,SPU1740的SPUID和LS存储器位置1750的LS存储器位置被写入存储器分段1762。因此当存储器位置1708内的数据变成最新时,该SPUID和LS存储器位置被用于确定当前数据被发送到的位置。当SPU写数据到该存储器位置时,存储器位置1708中的数据变得有效及最新。在图28中图解了数据从例如SPU1722的存储器位置1732到存储器位置1708的同步写入。由于该存储器位置的F/E位1712被设置成0,因此允许这些数据的同步写入。如图29所示,在此写入之后,存储器位置1708中的数据变成最新及有效。因此,来自存储器分段1762的SPUID1714和LS地址1716被立即从存储器分段1762读取,并且该信息接着被从此分段删除。F/E位1712也被设置成0,以期即时读取存储器位置1708中的数据。如图30所示,当读取SPUID1714和LS地址1716时,该信息被立即用于把存储器位置1708中的有效数据读取到SPU1740的LS存储器位置1750。图31中示出了最后状态。该图示出了从存储器位置1708复制到存储器位置1750的有效数据,存储器分段1752中的忙位设置为0并且存储器分段1762中的F/E位1712设置为0。设置该忙位为0使LS存储器位置1750现在能够被SPU1740出于任何目的访问。设置该F/E位为0指示存储器位置1708中的数据不再最新及有效。图32根据存储在对应于一存储器位置的存储器分段中的F/E位,SPUID和LS地址的状态,总结了上面描述的操作,以及DRAM的该存储器位置的各种状态。存储器位置可以具有三个状态。这三个状态是空状态3280,其中F/E位被设置成0并且没有提供针对SPUID或LS地址的信息;满状态3282,其中F/E位被设置成1并且没有提供针对SPUID或LS地址的信息;和阻塞状态3284,其中F/E位被设置成0并且提供针对SPUID和LS地址的信息。如此图所示,在空状态3280,允许同步写操作,并且导致转变到满状态3282。然而,同步读取操作导致向阻塞状态3284转变,因为当存储器位置处于空状态时,存储器位置中的数据不是最新的。在满状态3282,允许同步读取操作并且导致向空状态3280转变。另一方面,禁止满状态3282中的同步写操作,以防止覆盖有效数据。如果在此状态中尝试这种写操作,则不会出现状态改变,并且差错消息被发送到SPU的相应控制逻辑。在阻塞状态3284,允许把数据同步写入到存储器位置,并且导致向空状态3280转变。另一方面,禁止阻塞状态3284中的同步读取操作,以防止与在前的导致该状态的同步读取操作冲突。如果在阻塞状态3284中尝试同步读取操作,则不会出现状态改变,并且差错消息被发送到SPU的相应控制逻辑。用于针对共享DRAM同步读、写数据的上述模式也可以被用于免除通常由处理器专用于从外部设备读取数据和向外部设备写数据的计算资源。此输入/输出(I/O)功能可以由PU执行。然而,使用该同步模式的修改,运行适当程序的SPU能够执行此功能。例如,通过使用此模式,接收由外部设备发起的用于从I/O接口发送数据的中断请求的PU,可以把此请求的处理分配给此SPU。接着,SPU向I/O接口发出同步写命令。此接口接着通知外部设备数据现在可以被写入DRAM。SPU接着向DRAM发出同步读命令以把DRAM的相关存储器空间设置成阻塞状态。对于SPU的本地存储器中接收数据所需的存储器位置,SPU也将其忙位设置为1。在阻塞状态,与DRAM的相关存储器空间相关的附加存储器分段包含SPU的ID和SPU的本地存储器的相关存储器位置的地址。外部设备接着发出同步写命令以把数据直接写入DRAM的相关存储器空间。由于此存储器空间处于阻塞状态,数据被立即从此空间读到附加存储器分段中所标识的SPU的本地存储器的存储器位置。接着这些存储器位置的忙位被设置成0。当外部设备完成数据写入时,SPU向PU发出有关发送已完成的通知信号。因此,通过使用此模式,源自外部设备的数据传送可以用PU上最小计算负载来处理。然而,分配此功能的SPU应当能够向PU发出中断请求,并且外部设备应当直接访问DRAM。每个PU的DRAM包含多个“沙箱”。沙箱定义共享DRAM的区域,在该区域之外,特定SPU或SPU组不能读或写数据。这些沙箱提供安全性以防止一个SPU处理的数据被另一SPU处理的数据破坏。这些沙箱也允许从网络104下载软件单元到特定沙箱,并且软件单元没有可能破坏整个DRAM的数据。在本发明中,在DRAM和DMAC的硬件中实现沙箱。通过用硬件而不是软件实现这些沙箱,获得速度和安全性的优势。PU的PU控制分配给SPU的沙箱。由于PU通常只操作信任的诸如操作系统的程序,此模式不会危害安全性。根据此模式,PU构建并且维护密钥控制表(keycontroltable)。在图33中图解了此密钥控制表。如此图所示,每个密钥控制表3302中的表项包含SPU的标识(ID)3304,该SPU的SPU密钥3306以及密钥掩码3308。下面说明此密钥掩码的使用。密钥控制表3302最好被存储在诸如静态随机访问存储器(SRAM)的相对快速的存储器中,并且与DMAC相关联。密钥控制表3302中的表项由PU控制。当SPU请求向DRAM的特定存储器位置写入数据,或从DRAM的特定存储器位置读取数据时,DMAC相对于与该存储器位置相关的存储器访问密钥,评估密钥控制表3302中分配给该SPU的SPU密钥3306。如图34所示,专用存储器分段3410被分配给DRAM3402的每个可寻址存储器位置3406。针对存储器位置的存储器访问密钥3412被存储在此专用存储器分段。如上所述,也与每个可寻址存储器位置3406相关的另一个附加专用存储器分段3408存储用于写数据到存储器位置以及从存储器位置读取数据的同步信息。在操作中,SPU向DMAC发出DMA命令。此命令包含DRAM3402的存储器位置3406的地址。在执行此命令之前,DMAC使用SPU的ID3304在密钥控制表3302中查找请求方SPU的密钥3306。接着DMAC把请求方SPU的SPU密钥3306与存储在和SPU寻求访问的DRAM的存储器位置相关的专用存储器分段3410中的存储器访问密钥3412比较。如果两个密钥不匹配,则不执行DMA命令。另一方面,如果两个密钥匹配,则执行DMA命令以及请求的存储器访问。在图35中图解了可选实施例。在这个实施例中,PU还维护存储器访问控制表3502。存储器访问控制表3502包含针对DRAM内每个沙箱的表项。在图35的特定例子中,DRAM包含64个沙箱。存储器访问控制表3502中的每个表项包含沙箱的标识(ID)3504,基存储器地址3506,沙箱尺寸3508,存储器访问密钥3510以及访问密钥掩码3512。基存储器地址3506提供DRAM中特定存储器沙箱起始的地址。因此,沙箱尺寸3508提供沙箱的大小以及特定沙箱的端点。图36是使用密钥控制表3302以及存储器访问控制表3502执行DMA命令的步骤的流程图。在步骤3602,SPU向DMAC发出DMA命令以访问沙箱内的一或多个特定存储器位置。此命令包含标识请求访问的特定沙箱的沙箱ID3504。在步骤3604,DMAC使用SPU的ID3304在密钥控制表3302中查找请求方SPU的密钥3306。在步骤3606,DMAC使用命令中的沙箱ID3504在存储器访问控制表3502中查找与该沙箱相关的存储器访问密钥3510。在步骤3608,DMAC把分配给请求方SPU的SPU密钥3306与和沙箱相关的访问密钥3510比较。在步骤3610,确定两个密钥是否匹配。如果两个密钥不匹配,处理进行到步骤3612,在此步骤不执行DMA命令,并且差错消息被发送到请求方SPU或PU,或二者。另一方面,如果在步骤3610发现两个密钥匹配,则处理执行到步骤3614,其中DMAC执行DMA命令。SPU密钥的密钥掩码以及存储器访问密钥向这个系统提供更大灵活性。密钥的密钥掩码把被屏蔽位转换成通配符。例如,如果与SPU密钥3306相关的密钥掩码3308设置其最后两位为“屏蔽”(例如通过设置密钥掩码3308中的这些位为1来指定),则SPU密钥可以是1或0并且仍然匹配存储器访问密钥。例如,SPU密钥可以是1010。此SPU密钥通常只允许访问具有1010的访问密钥的沙箱。然而,如果此SPU密钥的SPU密钥掩码被设置成0001,那么此SPU密钥可以被用于获得对具有1010或者1011的访问密钥的沙箱的访问。类似地,具有设置为0001的掩码的访问密钥1010可以通过具有1010或者1011的SPU密钥的SPU访问。由于SPU密钥掩码和存储器密钥掩码可以被同时使用,能够建立由SPU到沙箱的可访问性的许多变化。本发明还针对系统101的处理器提供了新编程模型。此编程模型使用软件单元102。这些单元能够被发送到网络104上的任何处理器进行处理。此新编程模型还使用系统101的独特模块化结构和系统101的处理器。由SPU从SPU的本地存储器直接处理软件单元。在DRAM中,SPU不直接操作任何数据或程序。在SPU处理这些数据和程序之前,DRAM中的数据和程序被读取到SPU的本地存储器。因此,SPU的本地存储器包含程序计数器,堆栈和用于执行这些程序的其它软件元素。PU通过向DMAC发出直接存储器访问(DMA)命令来控制SPU。图37图解了软件单元102的结构。如此图所示,例如,软件单元3702的软件单元包含路由信息部分3704和主体3706。包含在路由信息部分3704中的信息依赖于网络104的协议。路由信息部分3704包含头3708,目的ID3710,源ID3712和应答ID3714。目的ID包含网络地址。例如,在TCP/IP协议下,网络地址是网际协议(IP)地址。目的ID3710还包含PU和SPU的标识,其中单元应当发送到该PU和SPU以进行处理。源ID3712包含网络地址,并且标识单元所来自的PU和SPU,以允许目的PU和SPU在必要时获得有关单元的附加信息。应答ID3714包含网络地址,并且标识PU和SPU,其中有关单元的查询以及单元处理的结果应当被导向该PU和SPU。单元主体3706包含独立于网络协议的信息。图37的分解部分示出了单元主体3706的细节。单元主体3706的头3720标识单元主体3706的起始。单元接口3722包含单元使用所需的信息。此信息包含全局唯一ID3724,所需的SPU3726,沙箱尺寸3728以及前一单元ID3730。全局唯一ID3724唯一标识整个网络104的软件单元3702。根据源ID3712,例如源ID3712内的PU或SPU的唯一标识,以及软件单元3702的生成或发送时间和日期,产生全局唯一ID3724。所需的SPU3726提供执行单元所需要的SPU的最小数量。沙箱尺寸3728提供执行单元所必须的、所需SPU的相关DRAM中的保护存储器的数量。前一单元ID3730提供需要顺序执行(例如流数据)的单元组内前一单元的标识。实现部分3732包含单元的核心信息。此信息包含DMA命令列表3734,程序3736和数据3738。程序3736包含由SPU运行的、例如SPU程序3760和3762的程序(称作“spulet”),并且数据3738包含用这些程序处理的数据。DMA命令列表3734包含开始程序所需要的系列DMA命令。这些DMA命令包含DMA命令3740,3750,3755和3758。PU向DMAC发出这些DMA命令。DMA命令3740包含VID3742。VID3742是当发出DMA命令时SPU的映射到物理ID的虚拟ID。DMA命令3740还包含加载命令3744和地址3746。加载命令3744指示SPU把特定信息从DRAM读取到本地存储器。地址3746提供DRAM中包含此信息的虚拟地址。例如,信息可以是来自程序部分3736的程序,来自数据部分3738的数据或其它数据。最后,DMA命令3740包含本地存储器地址3748。此地址标识本地存储器中应当加载信息的地址。DMA命令3750包含类似信息。也可以是其它DMA命令。DMA命令列表3734也包含系列踢动(kick)命令,例如,踢动命令3755和3758。踢动命令是由PU向SPU发出的命令,用以启动单元的处理。DMA踢动命令3755包含虚拟SPUID3752,踢动命令3754和程序计数器3756。虚拟SPUID3752标识要踢动的SPU,踢动命令3754提供相关踢动命令,并且程序计数器3756提供用于执行程序的程序计数器的地址。DMA踢动命令3758向相同SPU或另一SPU提供类似信息。如上所述,PU把SPU作为独立处理器,而不是协处理器。因此,为了由控制SPU的处理,PU使用类似于远程过程调用的命令。这些命令被称为“SPU远程过程调用”(SRPC)。PU通过向DMAC发出系列DMA命令来实现SRPC。DMAC加载SPU程序及其相关堆栈结构到SPU的本地存储器。接着PU向SPU发出初始踢动以执行SPU程序。图38图解了执行spulet的SRPC的步骤。在图38的第一部分3802中示出了在启动指定SPU对spulet的处理时由PU执行的步骤,并且在图38的第二部分3804中示出了在处理spulet时由指定SPU执行的步骤。在步骤3810,PU评估spulet并且接着指定用于处理spulet的SPU。在步骤3812,通过向DMAC发出MDA命令以便为必要的一或多个沙箱设置存储器访问密钥,PU分配DRAM中的空间用于执行spulet。在步骤3814,PU使能针对指定SPU的中断请求以通知spulet完成。在步骤3818,PU向DMAC发出DMA命令以把spulet从DRAM加载到SPU的本地存储器。在步骤3820,执行DMA命令,并且把spulet从DRAM读取到SPU的本地存储器。在步骤3822,PU向DMAC发出DMA命令以把与spulet相关的堆栈结构从DRAM加载到SPU的本地存储器。在步骤3823,执行DMA命令,并且把堆栈结构从DRAM读取到SPU的本地存储器。在步骤3824,PU发出针对DMAC的DMA命令以向SPU分配密钥,从而允许SPU对在步骤3812指定的一或多个硬件沙箱读、写数据。在步骤3826,DMAC用分配给SPU的密钥更新密钥控制表(KTAB)。在步骤3828,PU向SPU发出DMA命令“踢动”以开始程序的处理。根据特定spulet,在特定SRPC的执行中可由PU发出其它DMA命令。如上所示,图38的第二部分3804图解了在执行spulet时SPU执行的步骤。在步骤3830,SPU响应在步骤3828发出的踢动命令开始执行spulet。在步骤3832,在spulet的指示下,SPU评估spulet的相关堆栈结构。在步骤3834,SPU向DMAC发出多个DMA命令以把指定为堆栈结构需要的数据从DRAM加载到SPU的本地存储器。在步骤3836,执行这些DMA命令,并且把数据从DRAM读取到SPU的本地存储器。在步骤3838,SPU执行spulet并且产生结果。在步骤3840,SPU向DMAC发出DMA命令以存储DRAM的结果。在步骤3842,执行DMA命令,并且把spulet的结果从SPU的本地存储器写入到DRAM。在步骤3844,SPU向PU发出中断请求以通知SRPC已经完成。SPU在PU的指示下独立执行任务的能力允许PU将一组SPU,以及与一组SPU相关的存储器资源专用于执行扩展任务。例如,PU可以将一或多个SPU,以及与此一或多个SPU相关的一组存储器沙箱专用于在扩展周期上接收网络104上发送的数据,以及将在此周期接收的数据导向一或多个其它SPU及其相关的存储器沙箱以进行进一步处理。此能力尤其有利于处理通过网络104发送的流数据,例如,流MPEG或流ATRAC音频或视频数据。PU可以将一或多个SPU及其相关存储器沙箱专用于接收这些数据,以及将一或多个其它SPU及其相关存储器沙箱专用于解压缩并且进一步处理这些数据。换句话说,PU能够在一组SPU及其相关存储器沙箱中间建立专用管道关系以处理这种数据。然而,为了有效执行这种处理,管道的专用SPU以及存储器沙箱在没有发生包括数据流的spulet的处理期间应当保持专用于管道。换句话说,在这些周期期间,专用SPU及其相关沙箱应当处于保留状态。当spulet的处理完成时,SPU及其一或多个相关存储器沙箱的保留被称作“驻留终止”。驻留终止响应来自PU的指令而发生。图39,40A以及40B图解了专用管道结构的建立,其包括一组SPU及其相关沙箱,用于处理流数据,例如,流MPEG数据。如图39所示,此管道结构的部件包含PE3902和DRAM3918。PE3902包含PU3904,DMAC3906和包含SPU3908,SPU3910和SPU3912的多个SPU。通过PE总线3914,在PU3904,DMAC3906和这些SPU间进行通信。宽带宽总线3916连接DMAC3906到DRAM3918。DRAM3918包含例如沙箱3920,沙箱3922,沙箱3924和沙箱3926的多个沙箱。图40A图解了建立专用管道的步骤。在步骤4010,PU3904分配SPU3908以处理网络spulet。网络spulet包括用于处理网络104的网络协议的程序。在这种情况下,此协议是传输控制协议/网际协议(TCP/IP)。符合此协议的TCP/IP数据包通过网络104发送。在接收时,SPU3908处理这些包并且将包中的数据装配到软件单元102中。在步骤4012,当网络spulet的处理完成时,PU3904指示SPU3908执行驻留终止。在步骤4014,PU3904分配PU3910和3912以处理MPEGspulet。在步骤4015,当MPEGspulet的处理完成时,PU3904指示SPU3910和3912也执行驻留终止。在步骤4016,PU3904指定沙箱3920作为由SPU3908和SPU3910访问的源沙箱。在步骤4018,PU3904指定沙箱3922作为由SPU3910访问的目的沙箱。在步骤4020,PU3904指定沙箱3924作为由SPU3908和SPU3912访问的源沙箱。在步骤4022,PU3904指定沙箱3926作为由SPU3912访问的目的沙箱。在步骤4024,SPU3910和SPU3912分别向源沙箱3920和源沙箱3924内的存储器块发送同步读命令,以设置这些存储器块为阻塞状态。处理最后进行到步骤4028,其中专用管道的建立完成并且保留专用于管道的资源。因此,SPU3908,3910和3912及其相关沙箱3920,3922,3924和3926进入保留状态。图40B图解了通过此专用管道处理流MPEG数据的步骤。在步骤4030,处理网络spulet的SPU3908在其本地存储器中接收来自网络104的TCP/IP数据包。在步骤4032,SPU3908处理这些TCP/IP数据包并且将这些包内的数据装配到软件单元102中。在步骤4034,SPU3908检查软件单元的头3720(图37)以确定单元是否包含MPEG数据。如果单元不包含MPEG数据,那么,在步骤4036,SPU3908发送该单元到DRAM3918内指定的通用沙箱,以通过不包含在专用管道内的其它SPU处理其它数据。SPU3908还将此发送通知PU3904。另一方面,如果软件单元包含MPEG数据,那么,在步骤4038,SPU3908检查该单元的前一单元ID3730(图37)以识别该单元属于的MPEG数据流。在步骤4040,SPU3908选择专用管道的SPU处理该单元。在这种情况下,SPU3908选择SPU3910处理这些数据。此选择是以前一单元ID3730和负载均衡系数为基础的。例如,如果前一单元ID3730指示软件单元所属的MPEG数据流的前一软件单元被发送到SPU3910进行处理,则当前软件单元通常也将被发送到SPU3910进行处理。在步骤4042,SPU3908发出同步写命令以把MPEG数据写入到沙箱3920。由于此沙箱先前被设置成阻塞状态,在步骤4044,MPEG数据自动被从沙箱3920读取到SPU3910的本地存储器。在步骤4046,SPU3910在其本地存储器中处理MPEG数据以产生视频数据。在步骤4048,SPU3910把视频数据写入沙箱3922。在步骤4050,SPU3910向沙箱3920发出同步读命令以准备此沙箱来接收其它MPEG数据。在步骤4052,SPU3910处理驻留终止。此处理导致此SPU进入保留状态,在此期间SPU等待处理MPEG数据流中的其它MPEG数据。其它专用结构可以在一组SPU及其相关沙箱中间建立以处理其它类型的数据。例如,如图41所示,例如SPU4102,4108和4114的专用SPU组可以被建立以执行三维对象的几何变换,以产生二维显示列表。这些二维显示列表可以由其它SPU进一步处理(呈现)以产生像素数据。为执行此处理,沙箱被专门用于SPU4102,4108和4114,用于存储三维对象和这些对象的处理产生的显示列表。例如,源沙箱4104,4110和4116被专门用于存储分别由SPU4102,SPU4108和SPU4114处理的三维对象。以类似方式,目的沙箱4106,4112和4118被专门用于存储分别由SPU4102,SPU4108和SPU4114处理这些三维对象而产生的显示列表。协同SPU4120专门用于在其本地存储器中从目的沙箱4106,4112和4118接收显示列表。SPU4120在这些显示列表中间做出仲裁,并且把它们发送给其它SPU以呈现像素数据。系统101的处理器还使用绝对定时器。绝对定时器向SPU和PU的其它单元提供时钟信号,该时钟信号既独立于又快于驱动这些单元的时钟信号。图42中图解了此绝对定时器的使用。如此图所示,绝对定时器建立了针对SPU的任务执行的时间预算。此时间预算提供完成这些任务的时间,该时间长于SPU处理任务所需的时间。结果,针对每个任务,在时间预算内存在忙周期和后备周期。无论SPU的实际处理时间或速度如何,所有spulets被编写成根据此时间预算进行处理。例如,针对PU的特定SPU,特定任务可以在时间预算4204的忙周期4202期间执行。由于忙周期4202小于时间预算4204,在时间预算期间出现后备周期4206。在此后备周期期间,SPU进入休眠模式,在此休眠模式期间SPU消耗较少功率。其它SPU或PU的其它单元不预期任务处理的结果,直到时间预算4204过期。因此,通过使用由绝对定时器建立的时间预算,无论SPU的实际处理速度如何,SPU处理的结果始终是协同的。在将来,SPU处理的速度将变得更快。然而,由绝对定时器建立的时间预算将保持原样。例如,如图42所示,将来SPU将在较短的周期内执行任务,并且因此将具有较长后备周期。因此,忙周期4208比忙周期4202更短,并且后备周期4210长于后备周期4206。然而,由于程序被编写成根据绝对定时器建立的相同时间预算进行处理,则SPU间处理结果的协同得到维护。结果,更快速的SPU能够处理针对较慢SPU编写的程序,而不会导致处理结果的期待时间的冲突。在代替用绝对定时器建立SPU之间的协同的一个方式中,PU或一或多个指定SPU可以分析由SPU在处理spulet时执行的特定指令或微码,以解决由增强或不同操作速度产生的SPU并行处理的协同问题。“无操作”(“NOOP”)指令可以被插入到指令中,并且由某些SPU执行以维护由spulet期待的SPU的处理的正确顺序完成。通过插入这些NOOP到指令中,SPU对所有指令的执行的正确定时能够被保持。协处理器单元(SPE)是为加速媒体和流工作负载而设计的新处理器体系结构的第一实现。面积和功率效率是利用应用中的并发的多核心设计的重要推动因素。通过解决例如软件中的数据获取和分支预测的″硬″调度问题,体系结构减低了面积和功率。SPE提供将对某些资源的访问约束到验证的程序的隔离执行模式。突出效率是以多用户操作系统支持为代价的。在本地地址空间而不是在系统地址空间内执行SPE加载和存储指令。相对于系统地址空间,本地地址空间是未转换的,无保护的和非一致性的,并且由本地存储(LS)服务。加载,存储和指令获取没有异常地完成,从而大大简化了核心设计。LS是完全流水线化的,单端口的256KBSRAM,其支持四倍字长(16字节)或行(128字节)访问。SPE本身是可用例如C或C++的高级语言编程的SIMD处理器。多数指令处理128位操作数,被分成4个32位字。128位操作数被存储在用于整数,浮点和条件操作的128项统一寄存器堆中。大的寄存器堆利于深展开以填充执行流水线。图43示出了如何组织SPE以及单元之间的关键带宽(每周期)。当LS空闲时,以32个4字节组从LS获取指令。获取组被对准到64字节边界,以改进有效指令获取带宽。在指令行缓冲区(ILB)中存储3.5个获取的行。半行保存被定序到提交逻辑的指令,另一行保存单项、软件管理的分支目标缓冲区(SMBTB),另两行被用于直列预取器。有效软件以3个方式管理分支它用逐位选择指令替换分支;对于常见情况,它安排成直列的;或它插入分支提示指令以标识分支并且将可能目标加载到SMBTB中。SPE能够向被组织为2个执行流水线的7个执行单元提交多达每周期2个指令。按程序顺序提交指令。指令获取发送双字地址对准的指令对到提交逻辑。如果第一指令(来自偶地址)将被传送到偶流水线单元并且第二指令将被传送到奇流水线单元,则能够提交指令对。加载和存储在提交级段中等待可用LS周期。提交控制和分配需要3个周期。图44详细描述了8个执行单元。在指定严格提交规则的情况下,单元到流水线的分配使性能最大化。简单定点,浮点和加载结果被直接从单元输出旁路到输入操作数以减少结果执行时间。其它结果被发送到转发宏,这些结果晚一个周期从转发宏发出。图45是SPE的流水线图例,示出了刷新和获取如何与其它指令处理相关。虽然频率是SPE性能的重要因素,然而流水线深度类似于20FO4处理器中发现的流水线深度。电路设计,有效布局和逻辑简化是在约束流水线深度的同时支持11FO4设计频率的关键因素。从寄存器堆或转发网络获取操作数。寄存器堆具有6个读取端口,2个写入端口,128个均为128位的项,并且用2个周期来访问。寄存器堆数据被直接发送到功能单元操作数锁存器。功能单元产生的结果被保存在转发宏中,直到它们被确认并且可从寄存器堆得到。这些结果被从6个转发宏读取端口中读取并且在一个周期内发送到单元。通过SPEDMA引擎在1024个位线中针对LS来回传送数据。SPEDMA引擎允许软件与核心执行并行地调度数据传送,从而克服存储器等待时间以实现高存储器带宽和改进性能。SPE具有分别的8字节宽入站和出站数据总线。DMA引擎通过系统地址空间中的窗口支持SPE通过SPE请求队列本地请求的传送,和通过外部请求队列或外部总线请求来请求的传送。SPE请求队列支持多达16个进行中的传送请求。每个请求能够针对本地地址空间传送多达16KB的数据。在请求被发送到总线之前,MMU转换DMA请求地址。软件能够检查或被通知何时请求或请求组被完成。SPE通过通道接口对DMA引擎编程。通道接口是旨在使I/O与数据处理重叠并且使同步的功耗最小化的消息传送接口。用3个指令访问通道设备读通道,写通道和测量通道容量的读通道计数。SPE体系结构支持多达128个单向通道,这些通道能够被配置成阻塞或非阻塞的。图46是2.54×5.81mm2SPE的照片。图47是电压-频率Schmoo图,其示出在运行平均为1.4IPC的单精度密集光源处理和变换工作负载时的SPE有源功率和电路小片温度。这是高计算强度的应用,其已经展开4倍并且软件流水线化以安排好多数指令相关性。它使用大约16KB的LS。相对短的指令执行时间是重要的。如果执行流水线较深,则这个算法将需要进一步展开以隐藏额外的执行时间。更多的展开将需要多于128个寄存器,因而是不切实际的。限制流水线深度也有助于功率最小化。该Schmoo图示出SPE在2GHz处消耗1W,在3GHz处消耗2W,并且在4GHz处消耗4W有源功率。虽然该Schmoo图示出可工作到5.2GHz,然而分别的试验表明在1.4V和56oC处,SPE能够实现高达5.6GHz。图48是SPE指令行缓冲区(ILB)的图例。指令行缓冲区4800(也称作″ILB″4800)包含多个指令行。在一个实施例中,ILB包含分支目标行4810(也称作″提示行″4810),从分支直列的行4820(也称作″后继″行4820),行0至3(分别为4830,4840,4850和4860),以及当前预测路径4880(也称作″CPP″4880)。作为遇到预测分支指令的结果,数据被载入分支目标行4810和4820。在一个实施例中,基于软件的分配器4870提交一特殊指令,称作″加载分支目标缓冲区″(″loadbtb″指令)。loadbtb指令导致均具有16个指令的2个指令行被载入″提示″行4810和″后继″行4820。在一个实施例中,每个行为64字节长,并且包含16个4字节指令。并且,图43-47中讨论的SPE实施例,ILB4800实际包含3个满行,其中每行为128字节长,并且存储32个4字节指令。在图48-56示出的ILB组织中,为了简单,半行被称作″行″。换言之,ILB4800的分支目标缓冲区部分实际包括分支目标行4810和后继行4820;行4810和4820实际为32字节指令行的半行。在讨论如图50和51所示加载2个16字节存储器组中的存储器时会明白将满行分成半行的原因。返回图48,当分配器4870识别出预测分支时,分配器提交loadbtb指令,该loadbtb指令导致加载″提示″行4810和″后继″行4820。″提示″行4810在16个指令内的某处包含分支目标地址。为了效率,在16字节的边界处从本地存储器加载指令行。″后继″行4820包含在其中发现分支目标的行之后的下一批16个指令。通过这种方式,即使分支目标地址是该″提示″行中的最后地址,仍然已经预取了至少17个指令(″提示″行中的最后指令和″后继″行中的下一批16行)。在最优情况下(当分支目标是″提示″行中的第一指令时),预取32个预测分支指令(″提示″和″后继″行中均有16个)。直列预取器4875获取ILB4800中的其它行。在一个实施例中,直列预取器4875是获取直列指令的基于硬件的存储器获取器。如果在″提示″行4810和″后继″行4820中加载预测分支指令,则预取器开始取出从位于″后继″块4820中最后地址之后的地址块开始的直列代码。″后继″行4820之后的指令被取到行0(4830),被取到行0的最后指令之后的指令被取到行1(4840),被取到行2的最后指令之后的指令被取到行2(4850),被取到行2的最后指令之后的指令被取到行3(4860)。最终,被取到行3的最后指令之后的指令被取到行0(4830)。通过这种方式,当没有遇到预测分支时,预取器将指令行取到行0,1,2和3中。然而当遇到预测分支时,指针被用于确定何时遇到该分支指令(即在行0-3的任何行),并且接着在该点将当前预测路径切换到已经载入″提示″行4810和″后继″行4820的预测分支指令。注意,在短的分支代码集合中,可能在″后继″行中存在另一分支,其导致CPP从″后继″行回到″提示″行。如图49-56中所详细说明的,与每个行相关的状态设置被用于确定哪个行变成当前预测路径行4880(也称作CPP行4880)。载入当前预测路径的指令被定序到SPE的提交控制部件4890以便由处理器提交和执行。图49的状态图示出了ILB内的行的调度顺序。如前所述,当前预测路径(CPP)循环通过由基于硬件的预取器加载的4个行(行0至3),直到遇到预测分支。遵循实线(示出尚未预测分支时的流),在循环返回(其中行0再次变成CPP)之前,行0的指令变成CPP,接着行1变成CPP,接着行2变成CPP,接着行3变成CPP。当遇到分支时,例如分配器的软件提交loadbtb指令,该loadbtb指令在″提示″行4810和″后继″行4820中加载预测分支指令。更新为每个行维护的状态信息以注明分支指令的地址(任一行中)以及分支目标指令(存储为″提示″行4810中存储的16个指令之一)的地址。现在处理沿着一个虚线到达″提示″行,沿着哪个虚线取决于哪个行包含分支指令。例如,如果分支指令处于行1(4840)中,则当在行1中遇到分支指令时采取行1和″提示″行4810之间的虚线。换言之,在某个时刻行1变成CPP并且其指令被定序到提交控制。由于为CPP以及其它行维护状态信息,因此识别出CPP的最后指令(即分支指令),此时作为新CPP加载下一后继行(即″提示″行)。另外,分支目标指令可能不是新加载的CPP的第一指令,所以状态信息也指示″提示″行内的哪个指令是要调度的第一指令。当处理来自″提示″行的最后指令时,加载(沿着图49的实线)下一后继行(即″后继″行4820)。沿着实线继续加载后继行,直到遇到预测分支,此时再次采取一个虚线回到″提示″行(实际采取的虚线从包含分支指令的指令行引出)。图50的图例示出了作为软件启动的″加载分支表缓冲区″(loadbtb)指令的结果从2个存储器组加载的数据。在一个实施例中,本地存储器存储5000被分成2个组,每个组有64字节宽。组0包含地址0-63,128-191,等等,而组1包含地址64-127,192-255,等等。例如分配器5030的软件程序提交″加载分支目标缓冲区″(loadbtb)指令,该指令具有包含(1)分支指令的地址和(2)分支指令的目标的地址的操作数。如图48和49所示,分支指令的地址被用于确定下一后继行应当在何位置从6个行之一转到″提示″行4810。目标的地址被用于标识本地存储5000中包含目标地址的指令行。这个指令行(64字节)接着被载入″提示″行4810中。下一指令行接着从其它存储器组被直列加载到ILB内的″后继″行4820。在图50示出的例子中,分支目标位于组0中的某处(字节0到63内)。该行被加载为″提示″行,并且″后继″行位于组1中(字节64-127)。图51是作为loadbtb指令的结果从2个存储器组加载的数据的另一图例。在这个例子中,分支目标位于组1中的某处(字节64到127内)。该行被加载为″提示″行,并且″后继″行位于组0中(字节128到191)。这是ILB的″行″实际为半行而不是满行的一个原因。如果获取满行(字节0到127),则分支目标可能在该行的端部(即目标指令可能在字节124处),在这种情况下loadbtb将加载较少(如果存在)的预测分支的后继行。通过使用半行,无论哪个存储器组中发现分支目标指令,loadbtb均加载″提示″行之后的下一指令行(64字节)。通过这种方式,获取至少17个预测分支目标指令(如果分支目标是最后指令,则至少一个在″提示″行中,并且16个指令在下一个半行中)。图52的流程图示出了通过ILB中包含的行的逻辑过程。处理从5200开始,在步骤5210处理当前预测路径(CPP)中的下一个指令。确定指令的地址是否为预测分支,以及是否在ILB中存储的指令的地址范围内(判决5220)。如果指令是分支指令,则判决5220转移到″是″分支5222,当在CPP中到达分支指令时,″提示″行将被作为下一CPP而加载(步骤5225)。这相当于采取图49中示出的状态图中的一个虚线。由基于硬件的预取器加载的指令行(行0,1,2和3)在步骤5230被无效。这些行的无效使得硬件预取器开始获取在loadbtb指令加载的″后继″行之后的行(步骤5240)。当″提示″行变成CPP时,开始处理″提示″行内对应于分支目标的地址的指令(步骤5250)。处理接着循环返回以将指令定序到提交控制4890。回到判决5220,如果所处理的指令的地址不在ILB中存储的地址范围内预测分支的范围内,则判决5220转移到″否″分支5255,此时确定指令是否为CPP中处理的最后指令(判决5260)。如果指令不是CPP中处理的最后指令,则判决5260转移到″否″5265,其使得处理CPP中的下一指令(步骤5270)。另一方面,如果指令是CPP中要处理的最后指令,则判决5260转移到″是″分支5275,此时(1)刚才完成处理的行被无效(步骤5280),基于硬件的预取器获取指令以填充刚才被无效的行(步骤5285),下一后继行作为新CPP被加载。如果前一CPP是″提示″行,则″后继″行作为新CPP被加载。如果前一CPP是″后继″行,则行0作为新CPP被加载。如果前一CPP是行0,则行1作为新CPP被加载。如果前一CPP是行1,则行2作为新CPP被加载。如果前一CPP是行2,则行3作为新CPP被加载。最终,如果前一CPP是行3,则行0作为新CPP被加载。这相当于采取图49中示出的状态图中的一个实线。图53示出了当预测分支目标指令已经被加载时通过ILB中包含的行的示例性过程。在该例子中,预测分支的分支指令被识别为行1内的指令10。建立状态设置,使得指令1被设置成行1的要调度的最后指令,并且行1的″后继″行被设置成″提示″行。此外,设置对应于″提示″行的状态设置,从而确定″提示″行内的指令5是当该行变成CPP时要调度的第一指令。指令5对应于导致加载″提示″和″后继″行的loadbtb指令中提供的分支目标地址。沿着图53中的粗黑线,如图所示在行1中的指令10被调度之后,要调度的下一行是″提示″行的指令5。并且,在调度″提示″行的最后指令之后(指令16),下一CPP是″后继″行,并且要调度的″后继″行的第一指令是″后继″行的指令1。如果没有提交中间loadbtb指令,当″后继″行是CPP并且调度最后指令(指令16)时,″后继″行之后成为CPP的下一行是行0,并且行0的第一指令是指令1。当″提示″行变成CPP时,直列行(行0至3)被无效,使得预取器硬件获取″后继″行中最后指令之后的指令。图54示出了当预测分支目标指令未被加载时通过ILB中包含的行的示例性过程。该图类似于图53,然而在图54中没有遇到预测分支。沿着粗黑线,各行继续被加载为CPP并且每个行的指令继续被调度。注意,由于没有遇到预测分支,不使用″提示″和″后继″行。当一个行完成其作为CPP的使命时,该行被无效,使得预取器硬件能够重用该行来加载更多后续指令。例如当行0不再是CPP时(行1变成CPP),行0被无效,并且预取器硬件加载行3中已经加载的指令之后的指令。图55的流程图详细示出了当通过预取器硬件或作为loadbtb指令的结果而在ILB中加载新行时所采取的步骤。处理在5500处开始,在步骤5510,从基于硬件的预取器,或作为例如分配器的软件程序提交loadbtb指令以加载分支目标指令到指令行缓冲区的结果,行到达指令行缓冲区(ILB)。当行到达时,它包含以下信息指令数据(每行16指令),指令数据在地址空间中的地址,行的进入点的地址(对于行0,1,2,3或″后继″行为第1指令,对于″提示″行为分支目标指令),在前序列行的退出点的地址(如果不是分支,则为在前行的第16个指令,如果是分支,则为在前行的分支指令的地址)。对应于新到达的行的信息被用于更新行的状态信息。在步骤5520,将新到达的行的地址与当前ILB中所有其它行的进入点相比较,以确定刚到达的该行按调度顺序是否在ILB中已有的一个行之前,并且相应更新各行的状态信息。在步骤5530,将刚到达的行的地址与ILB中已有的其它行的退出点相比较,以确定该新行是否为ILB中已有的另一行的后继行,并且相应更新各行的状态信息。为ILB中的每个行维护状态信息(状态信息5540)。状态信息包含指向行中定序的第一指令(对于直列数据为第1个指令,对于分支为分支目标指令)的指针,地址空间中行的地址,在该行的第一指令之前的另一行中指令的地址(对于直列数据为前面的行的最后指令,对于分支为分支地址),指向按序列顺序在该行前面的ILB行的指针(对于直列数据为状态图中在前的(实线)行,对于分支为包含分支指令的行),指向在该行的第一指令之前的另一行中指令的指针(对于直列数据为前面的行的最后指令,对于分支为分支地址)。根据在行到达ILB时与该行包含在一起的信息,以及根据步骤5520和5530中进行的比较来导出状态信息。图56的流程图详细示出了决定何时从ILB将下一调度行加载到当前预测路径(CPP)时所采取的步骤。指令行5610是当前预测路径,并且其指令将被调度和发送到提交控制4890。为CPP维护状态数据(状态数据5620)。该状态数据包含指向定序的下一指令的指针,指向在另一行变成当前预测路径(CPP)之前定序的最后指令的指针,指向ILB中变成CPP的下一行的指针,地址空间中该行的地址。在示出的例子中,指向定序的下一指令的指针当前指向指令5。并且,在示出的例子中,指向在另一行变成CPP之前所定序的最后指令的指针指向指令10。注意,连接指令1-5的实线指示这些行已经调度,而连接指令5-10的虚线指示这些行仍待调度。没有行连接指令10到指令11-16,因为由于后继行5630将是调度指令10之后的CPP,这些指令不会被调度。换言之,指令10是分支指令,后继行5630包含这样的指令,该指令包含到指令的分支。CPP5620的状态数据也包含指向ILB中在CPP5610的最后调度指令(例子中的指令10)已经被调度之后将变成CPP的下一行(后继行5630)的指针。为ILB中的每个行维护状态数据5640,包含ILB中调度为在当前CPP之后并且因而变成下一CPP的行。该状态数据包含指向在该行之前的ILB的行的指针,在该行中定序的第一指令之前的指令的地址,指向该行的定序的第一指令的指针,地址空间中该行的地址。在示出的例子中,后继行5630的状态数据指向作为ILB中在该行之前的行的CPP,指令的地址对应于将从CPP调度的最后指令(指令10),指向该行的第一指令的指针指向该行的指令8。换言之,CPP的指令10是分支指令(或更具体地,紧接在分支指令之前的指令),后继行5630的指令8是对应于分支指令的″到地址的分支″的指令。如果分支未被处理,则CPP的最后指令将是指令16,并且后继行的第一指令将是指令1。为决定何时从ILB加载下一行,将CPP中处理的当前指令与后继行的状态数据中维护的在前指令相比较(步骤5660)。如果比较表明2个指令不相同(即尚未到达CPP的最后指令,即该例子中CPP的指令10),则判决5665转移到″否″5668,此时CPP中指令的定序在5670继续,并且循环返回以检查下一调度指令。另一方面,如果CPP中处理的当前指令等于后继行的状态信息中保存的在前指令,则判决5665转移到″是″5672,此时完成当前CPP,并且后继行中的指令被移动(或拷贝)到CPP,因而使后继行成为新CPP(步骤5675)。根据新CPP的状态更新状态信息5620。例如,指向定序的下一指令的指针被设置成指向新CPP的指令8(因为指令8是5630中调度的第一指令,其对应于到地址的分支)。。通过先前图55中示出的步骤确定新后继行。另外,图49中示出的状态图能够被用于确定ILB内将作为新CPP的后继的下一行。本发明的一个优选实现是应用程序,即例如可以驻留在计算机的随机访问存储器中的代码模块的一组指令(程序代码)。在计算机需要之前,该指令组可以被存储在另一个计算机存储器中,例如存储在硬盘驱动器中,或存储在例如光盘(最终在CDROM中使用)或软盘最终在软盘驱动器中使用)的可移动存储器中,或者经由因特网或其它计算机网络下载。于是,本发明可以被实现成用于计算机的计算机程序产品。另外,虽然描述的各种方法被方便地实现在通过软件有选择地启动或重新配置的通用计算机中,然而本领域的普通技术人员也会认识到,这种方法可以在硬件,固件或被构造成用于执行所需方法步骤的更加专用的设备中执行。虽然这里已经参照特定实施例描述了本发明,然而应当理解,这些实施例仅仅是本发明的原理和应用的示例。因此应当理解,在不偏离由所附权利要求书定义的本发明的实质和范围的前提下,可以对图解实施例进行许多修改,并且可以设计出其它方案。权利要求1.一种方法,包括接收多个指令行,其中每个指令行包含多个指令;在指令行缓冲区中存储该多个指令行;维护与该多个指令行的每个指令行相关的状态信息;根据状态信息识别该多个指令的一个指令作为下一当前预测路径;确定当前预测路径的最后指令已经被调度;和响应该确定而加载所识别的下一当前预测路径以作为当前预测路径。2.如权利要求1所述的方法,其中指令行缓冲区包含多个分支目标指令行和多个直列指令行。3.如权利要求2所述的方法,还包括执行识别预测分支地址和预测分支目标地址的加载分支表缓冲区命令,该执行包含从本地存储器存储中得到第一分支指令行,其中第一分支指令行包含该预测分支目标地址;和从本地存储器存储中得到第二分支指令行,其中第二分支指令行紧接在第一分支指令行之后。4.如权利要求3所述的方法,还包括识别该多个指令行的一个指令行中的预测分支地址;和设置状态信息,使得预测分支指令是其指令行中调度的最后指令,对应于预测分支目标地址的指令是第一分支指令行中调度执行的下一指令。5.如权利要求2所述的方法,其中由基于硬件的预取器加载该多个直列指令行。6.如权利要求1所述的方法,其中从包括以下的组中选择状态信息指向所调度的每个指令行中要定序执行的第一指令的指针,本地存储器存储中每个指令行的地址,该多个行中在第一指令之前的另一行中的指令的地址,指向该多个指令行中按序列顺序在该指令行之前的另一指令行的指针,和指向该多个行中在第一指令之前的另一行中的指令的指针。7.如权利要求1所述的方法,其中,指令行缓冲区包含多个分支目标指令行和多个直列指令行,该方法还包括从该多个指令行中重复识别当前预测路径,其中当前预测路径中的指令被调度执行,并且其中当遇到分支时,当前预测路径包含该分支目标指令行和该直列指令行;并且其中当未遇到分支时,当前预测不包含该多个分支目标行,而是包含该直列指令行。8.一种信息处理系统,包括处理器;指令行缓冲区,在其中存储预测指令行以便在处理器上执行;处理器可访问的本地存储器,其中本地存储器包含多个指令行,每个指令行包含多个指令;提交控制部件,用于从指令行缓冲区接收调度的指令;和指令行缓冲区工具,用于管理指令行的取出和调度,该指令行缓冲区工具包含用于接收多个指令行的装置;用于在指令行缓冲区中存储多个指令行的装置;用于维护与多个指令行的每个相关的状态信息的装置;用于根据状态信息识别多个指令中的一个以作为下一当前预测路径的装置;用于确定当前预测路径的最后指令已经被调度的装置;和用于响应该确定而加载所识别的下一当前预测路径以作为当前预测路径的装置。9.如权利要求8所述的信息处理系统,其中指令行缓冲区包含多个分支目标指令行和多个直列指令行。10.如权利要求9所述的信息处理系统,还包括用于执行识别预测分支地址和预测分支目标地址的加载分支表缓冲区命令的装置,该执行包含用于从本地存储器存储中得到第一分支指令行的装置,其中第一分支指令行包含该预测分支目标地址;和用于从本地存储器存储中得到第二分支指令行的装置,其中第二分支指令行紧接在第一分支指令行之后。11.如权利要求10所述的信息处理系统,还包括用于识别该多个指令行的一个指令行中的预测分支地址的装置;和用于设置状态信息,使得预测分支指令是其指令行中调度的最后指令,对应于预测分支目标地址的指令是第一分支指令行中调度执行的下一指令的装置。12.如权利要求9所述的信息处理系统,其中由基于硬件的预取器加载该多个直列指令行。13.如权利要求8所述的信息处理系统,其中从包括以下的组中选择状态信息指向所调度的每个指令行中要定序执行的第一指令的指针,本地存储器存储中每个指令行的地址,该多个行中在第一指令之前的另一行中的指令的地址,指向该多个指令行中按序列顺序在该指令行之前的另一指令行的指针,和指向该多个行中在第一指令之前的另一行中的指令的指针。14.如权利要求8所述的信息处理系统,其中,指令行缓冲区包含多个分支目标指令行和多个直列指令行,该信息处理系统还包括从该多个指令行中重复识别当前预测路径,其中当前预测路径中的指令被调度执行,并且其中当遇到分支时,当前预测路径包含该分支目标指令行和该直列指令行;并且其中当未遇到分支时,当前预测不包含该多个分支目标行,而是包含该直列指令行。15.一种存储在计算机可操作媒体上的计算机程序产品,包括用于接收多个指令行的装置,其中每个指令行包含用于实现如前面任何方法权利要求所述的方法的多个指令。全文摘要保持相对小的指令加载缓冲区(ILB)的系统和方法被用于调度指令。使用串联预取器或分支表缓冲区加载器从本地存储器(LS)向ILB发送指令。在一个实施例中,预取器是按地址顺序获取可能要调度的下一指令的基于硬件的预取器。在一个实施例中,作为例如分配器的软件程序提交“加载分支表缓冲区(loadbtb)”指令的结果,加载预测分支指令。在ILB的一个区域中加载预测分支指令,在ILB的另一区域中加载串联指令。在一个实施例中,loadbtb加载包含预测分支目标地址的指令行,以及紧接在具有该预测分支目标地址的指令行之后的指令行。文档编号G06F9/38GK1815438SQ20061000243公开日2006年8月9日申请日期2006年1月27日优先权日2005年2月4日发明者布赖恩·金·弗拉奇斯,布拉德·威廉·迈克尔申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1