CN100495367C - 在处理器与存储器流控制器间传送命令参数的系统和方法 - Google Patents
在处理器与存储器流控制器间传送命令参数的系统和方法 Download PDFInfo
- Publication number
- CN100495367C CN100495367C CNB2006100942338A CN200610094233A CN100495367C CN 100495367 C CN100495367 C CN 100495367C CN B2006100942338 A CNB2006100942338 A CN B2006100942338A CN 200610094233 A CN200610094233 A CN 200610094233A CN 100495367 C CN100495367 C CN 100495367C
- Authority
- CN
- China
- Prior art keywords
- passage
- spu
- stream control
- memory stream
- mfc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/32—Handling requests for interconnection or transfer for access to input/output bus using combination of interrupt and burst mode transfer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
Abstract
本发明提供了一种用于在处理器与存储器流控制器之间传送命令参数的系统和方法。所述系统和方法利用通道接口作为在处理器与存储器流控制器之间进行通信的主要机制。例如,所述通道接口提供了与处理器工具、存储器流控制工具、机器状态寄存器和外部处理器中断工具进行通信的通道。这些通道可以被指定为阻塞或非阻塞。对于阻塞通道,当没有要从相应寄存器读取的数据,或没有可供写入相应寄存器的空间时,处理器处于低功率“停止”状态。当数据变得可用或空间被释放时,通过所述阻塞通道之间的通信来自动唤醒处理器。这样,本发明的通道允许处理器处于低功率状态。
Description
技术领域
本发明一般地涉及改进的数据处理系统和方法。更具体地说,本发明涉及用于在处理器与存储器流控制器之间传送命令参数的系统和方法。
背景技术
通常,在现有技术中,当CPU或其他处理单元(PU)等待某些程序外部的事件时,操作系统或活动的程序将运行轮询循环,该轮询将不断读取由PU和所述程序一起使用的寄存器,直到出现等待的事件为止。当所述程序正在运行时,PU轮询事件寄存器并且不做有用的工作。
典型的现代处理器通常为此通信使用虚拟存储器和外部设备的存储器映射。另一方面,某些处理器(特别是在多处理器环境中)只能访问局部存储器而不能访问虚拟存储器。局部存储器是有限的并且在典型的多处理器配置中,加载和存储操作不能访问此局部存储器之外的存储器。这样,在等待来自外部设备的响应时,将局部存储器用于其他PU功能受到限制。如果PU正在同时等待来自若干设备的通信响应,会进一步限制用于其他功能的可用存储器。
存储器还可以用来记录入站或出站寄存器中是否存在有效数据。有效数据是放置在寄存器中以供接收设备使用但是尚未被接收设备访问的数据。这样,从以上可知,多数现代计算设备中存在对存储器资源的大量消耗。
发明内容
鉴于以上描述,具有一种用于在处理器与所述处理器外部的其他设备(例如,其他处理器、输入/输出(I/O)设备等)之间进行通信的系统和方法是有益的,其中此类通信不会增加所述处理器的局部或虚拟存储器的负担。此外,具有一种允许在等待数据或事件时使处理器处于低功率状态的系统和方法是有益的。
本发明提供了一种用于在处理器与存储器流控制器之间传送命令参数的系统和方法。本发明的系统和方法利用通道接口作为在处理器与存储器流控制器之间进行通信的主要机制。例如,所述通道接口提供了与处理器工具、存储器流控制工具、机器状态寄存器和外部处理器中断工具进行通信的通道。这些通道用于减轻处理器的局部存储的负担并最小化总线通信量。
这些通道可以被指定为阻塞或非阻塞。对于阻塞通道,当没有要从相应寄存器读取的数据,或没有可供写入相应寄存器的空间时,处理器处于低功率“停止”状态。当数据变得可用或空间被释放时,通过阻塞通道之间的通信来自动唤醒处理器。这样,本发明的通道允许处理器处于低功率状态而不是如现有技术系统中那样连续轮询或纠缠于事件寄存器。
本发明的这些和其他特征和优点将在以下对本发明的示例性实施例的详细说明中进行描述,或者鉴于以下对本发明的示例性实施例的详细说明,本发明的这些和其他特征和优点将对本领域的技术人员变得显而易见。
附图说明
在所附权利要求中说明了被认为是本发明特性的新颖特征。但是,当结合附图阅读时,通过参考以下对示例性实施例的详细说明,可以最佳地理解发明本身及其优选使用方式、进一步的目的和优点,这些附图是:
图1是根据本发明的一个示例性实施例的宽带处理器体系结构(BPA)的示例性方块图;
图2是根据本发明的一个示例性实施例的典型MFC200的示例性方块图;
图3A是示出了根据本发明的一个示例性实施例的MFC命令的参数助记符的示例图;
图3B是示出了根据本发明的一个示例性实施例的DMA列表命令的详细信息的示例图;
图4是根据美国专利申请公开No.2004/0264445中描述的机制示出了与单对通道的通道电路有关的SPU发出和控制逻辑和数据流的布置的示例图;
图5是概述了根据本发明的一个示例性实施例的通道接口的示例性操作的流程图;
图6A是示出了本发明的一个实施例使用通道的方式的示例图;
图6B至6E示出了列出根据本发明的一个示例性实施例的SPU通道映射的示例图;
图7A是示出了根据本发明的一个示例性实施例的MFC命令操作码通道的详细信息的示例图;
图7B是示出了根据本发明的一个示例性实施例的MFC类ID通道的详细信息的示例图;
图7C描述了根据本发明的一个示例性实施例的典型8路集关联高速缓存的RMT表项;
图7D是示出了根据本发明的一个示例性实施例的MFC命令标记标识通道的详细信息的示例图;
图7E是示出了根据本发明的一个示例性实施例的MFC传输大小或列表大小通道的详细信息的示例图;
图7F是示出了根据本发明的一个示例性实施例的MFC局部存储地址通道的详细信息的示例图;
图7G是示出了根据本发明的一个示例性实施例的MFC有效地址低通道或列表地址通道的详细信息的示例图;
图7H是示出了根据本发明的一个示例性实施例的MFC有效地址高通道的详细信息的示例图;
图8是概述了根据本发明的一个示例性实施例的写入MFC命令参数的示例性操作的流程图;
图9A是示出了根据本发明的一个示例性实施例的MFC写入标记组查询屏蔽通道的详细信息的示例图;
图9B是示出了根据本发明的一个示例性实施例的MFC读取标记组查询屏蔽通道的详细信息的示例图;
图9C是示出了根据本发明的一个示例性实施例的MFC写入标记状态更新请求通道的详细信息的示例图;
图9D是示出了根据本发明的一个示例性实施例的MFC读取标记组状态通道的详细信息的示例图;
图9E是示出了根据本发明的一个示例性实施例的MFC读取列表停止和通知标记状态通道的详细信息的示例图;
图9F是示出了根据本发明的一个示例性实施例的MFC写入列表停止和通知标记确认通道的详细信息的示例图;
图9G是示出了根据本发明的一个示例性实施例的MFC读取原子命令状态通道的详细信息的示例图;
图10是概述了根据本发明的一个示例性实施例的用于轮询MFC命令的完成或一组MFC命令的完成的示例性操作的流程图;
图11是概述了根据本发明的一个示例性实施例的等待标记组更新或等待事件(一个或多个标记组完成)的示例性操作的流程图;
图12是概述了根据本发明的一个示例性实施例的用于使用SPU事件工具作为替代来等待或轮询有条件的标记事件的示例性操作的流程图;
图13是概述了根据本发明的一个示例性实施例的用于轮询以判定MFCDMA列表命令是否已达到设置了停止和通知标志的列表单元的示例性操作的流程图;
图14是概述了根据本发明的一个示例性实施例的用于等待MFC DMA列表命令达到设置了停止和通知标志的列表单元的示例性操作的流程图;
图15是概述了根据本发明的一个示例性实施例的用于使用SPU事件工具作为替代来等待或轮询列表停止和通知标记组状态的示例性操作的流程图;
图16是示出了根据本发明的一个示例性实施例的MFC写入多源同步请求通道的详细信息的示例图;
图17A是示出了根据本发明的一个示例性实施例的SPU写入出站邮箱通道的详细信息的示例图;
图17B是示出了根据本发明的一个示例性实施例的SPU写入出站中断邮箱通道的详细信息的示例图;
图17C是示出了根据本发明的一个示例性实施例的SPU读取入站邮箱通道的详细信息的示例图;
图18是示出了根据本发明的一个示例性实施例的SPU信号通知通道的详细信息的示例图;
图19A是示出了根据本发明的一个示例性实施例的SPU写入递减器通道的详细信息的示例图;
图19B是示出了根据本发明的一个示例性实施例的SPU读取递减器通道的详细信息的示例图;
图20A是示出了根据本发明的一个示例性实施例的SPU读取机器状态通道的详细信息的示例图;
图20B是示出了根据本发明的一个示例性实施例的SPU写入状态保存和恢复通道的详细信息的示例图;
图20C是示出了根据本发明的一个示例性实施例的SPU读取状态保存和恢复通道的详细信息的示例图;
图21A至21B是示出了根据本发明的一个示例性实施例的SPU事件工具的逻辑表示的方块图;
图22A至22D是示出了根据本发明的一个示例性实施例的SPU读取事件状态通道的详细信息的示例图;
图22E至22F是示出了根据本发明的一个示例性实施例的SPU写入事件屏蔽通道的详细信息的示例图;
图22G至22H是示出了根据本发明的一个示例性实施例的SPU读取事件屏蔽通道的详细信息的示例图;
图22I至22J是示出了根据本发明的一个示例性实施例的SPU写入事件确认通道的详细信息的示例图;
图23是概述了根据本发明的一个实施例的用于处理MFC DMA列表命令停止和通知事件的示例性操作的流程图;
图24是概述了根据本发明的一个实施例的用于处理MFC SPU命令队列可用事件的示例性操作的流程图;
图25是概述了根据本发明的一个实施例的用于处理SPU入站邮箱可用事件的示例性操作的流程图;
图26是概述了根据本发明的一个实施例的用于处理SPU递减器事件的示例性操作的流程图;
图27是概述了根据本发明的一个实施例的用于处理SPU出站中断邮箱可用事件的示例性操作的流程图;
图28是概述了根据本发明的一个实施例的用于处理SPU出站邮箱可用事件的示例性操作的流程图;
图29是概述了根据本发明的一个实施例的用于处理SPU信号通知2可用事件的示例性操作的流程图;
图30是概述了根据本发明的一个实施例的用于处理SPU信号通知1可用事件的示例性操作的流程图;
图31是概述了根据本发明的一个示例性实施例的用于处理锁定线保留丢失事件的示例性操作的流程图;
图32是概述了根据本发明的一个示例性实施例的用于处理特权注意事件的示例性操作的流程图;以及
图33是概述了根据本发明的一个实施例的用于处理多源同步事件的示例性操作的流程图。
具体实施方式
图1是其中可以实现本发明的各方面的数据处理系统的示例性方块图。图1中示出的示例性数据处理系统是异构宽带处理器体系结构实现的实例,如可从国际商业机器公司获得的CELL Broadband Engine处理器。虽然在本发明的优选实施例的描述中将使用宽带处理器体系结构(BPA),但是如在阅读以下说明时将对本领域的技术人员显而易见的,本方面并不局限于此。
如图1所示,BPA 100包括:异构布置的Power处理器单元(PPE)110,所述单元具有处理器(PPU)116和其L1和L2高速缓存112和114;以及多个协作处理器单元(SPE)120-134,每个协处理器单元都具有其自己的处理器单元(SPU)140-154、存储器流控制(MFC)155-162、局部存储器或存储(LS)163-170以及总线接口单元(BIU单元)180-194,总线接口单元例如可以是直接存储器存取(DMA)、存储器管理单元(MMU)和总线接口单元的组合。还提供了高带宽内部单元互连总线(EIB)196、总线接口控制器(BIC)197和存储器接口控制器(MIC)198。宽带引擎100可以是片上系统,以便可以在单个微处理器芯片上提供图1中描述的每个单元。
BPA 100可以是片上系统,以便在单个微处理器芯片上提供图1中描述的每个单元。此外,BPA 100是异构处理环境,其中每个SPU都可以从系统中的每个其他SPU接收不同的指令。此外,SPU的指令集不同于PPU的指令集,例如,PPU可以执行基于精简指令集计算机(RISC)的指令,而SPU执行向量化的指令。
SPE 120-134彼此连接并通过EIB 196连接到L2高速缓存114。此外,SPE120-134通过EIB 196连接到MIC 198和BIC 197。MIC 198提供了到共享存储器199的通信接口。BIC 197提供了BPA 100与其他外部总线和设备之间的通信接口。
PPE 110是双线程的PPE 110。此双线程的PPE 110和8个SPE 120-134的组合使得BPA 100能够处理10个同时的线程和多于128个的未完成存储器请求。PPE 110充当处理大多数计算工作负荷的其他8个SPE 120-134的控制器。例如,PPE 110可用于运行常规的操作系统,而SPE 120-134执行向量化的浮点代码执行。
SPE 120-134包括协处理单元(SPU)140-154、存储器流控制单元155-162、局部存储器或存储163-174以及接口单元180-194。在一个示例性实施例中,局部存储器或存储163-174包括256KB指令和数据存储器,该存储器对PPE 110是可见的并且可以由软件直接寻址。
PPE 110可以使用小程序或线程来加载SPE 120-134,将SPE链接在一起以处理复杂运算中的每个步骤。例如,结合了BPA 100的机顶盒可以加载程序以便读取DVD、进行视频和音频解码和显示,并且数据将在SPE之间传输,直到在输出显示上结束。
存储器流控制单元(MFC)155-162用作SPU到系统的其余部分和其他单元的接口。MFC 155-162提供了用于在主存储与局部存储163-174之间进行数据传输、保护和同步的主要机制。对于处理器中的每个SPU都逻辑地存在MFC。某些实现可以在多个SPU之间共享单个MFC的资源。在这种情况下,为MFC定义的所有工具和命令都必须看起来独立于每个SPU的软件。共享MFC的作用限于实现相关的工具和命令。
存储器流控制(MFC)单元
图2是根据本发明的一个示例性实施例的典型存储器流控制(MFC)单元200的示例性方块图。在此示例性实施例中,MFC 200具有两个到SPU的接口210和212、两个到总线接口单元(BIU)220的接口214和216以及两个到可选的SL1高速缓存230的接口222和224。SPU接口210和212是SPU通道接口210和SPU局部存储接口212。SPU通道接口210允许SPU访问MFC工具和发出MFC命令。SPU局部存储接口212被MFC 200用来访问SPU中的局部存储。到BIU220的接口214允许存储器映射的I/O(MMIO)访问MFC工具。此接口214还允许其他处理器发出MFC命令。使用MMIO发出的命令被称为MFC代理命令。
到SL1高速缓存的接口222和224主要用于数据传输。接口222由MFC 200用于访问主存储中的地址转换表,而另一个接口224用于在主存储和局部存储之间传输数据。
如图2所示,典型MFC中的主要单元包括存储器映射的输入/输出(MMIO)接口240、MFC寄存器250和DMA控制器260。MMIO接口240将SPU的MFC工具映射到系统的实地址空间中。这允许从系统中的任何处理器或任何设备来访问MFC工具。此外,MMIO接口240可以被配置为将SPU的局部存储映射到实地址空间中。这允许从系统中的任何处理器或任何设备来直接访问局部存储,实现局部存储到局部存储的传输和I/O设备直接访问SPU的局部存储域的功能。
MFC寄存器单元250包含多数MFC工具。某些工具包含在直接存储器存取控制器(DMAC)260中。下面是MFC 200中的工具的列表。用户模式环境工具,即,可以从非特权应用访问的环境工具,包括:(1)邮箱工具,(2)SPU信号通知工具,(3)代理标记组完成工具,(4)MFC多源同步工具,(5)SPU控制和状态工具,以及(6)SPU隔离工具。特权模式环境工具,即,只能由特权软件(如操作系统)访问的工具,包括:(1)MFC状态寄存器1,(2)MFC逻辑分区ID寄存器,(3)MFC存储描述寄存器,(4)MFC数据地址寄存器,(5)MFC数据存储中断状态寄存器,(6)MFC地址比较控制寄存器,(7)MFC局部存储地址比较工具,(8)MFC命令错误寄存器,(9)MFC数据存储中断指针寄存器,(10)MFC控制寄存器,(11)MFC原子刷新寄存器,(12)SPU出站中断邮箱寄存器,(13)SPU特权工具,(14)SPU特权控制寄存器,(15)SPU局部存储限制寄存器,(16)SPU配置寄存器,以及(17)SPE上下文保存和恢复。
以下将更详细地描述对本发明的机制尤为重要的工具,即,邮箱工具、SPU信号通知工具、代理标记组完成工具、MFC多源同步工具、SPU通道访问工具、SPU事件工具和中断工具。
MFC 200中的DMAC 260通常负责数据的同步和传输。DMAC 260可以在SPU的局部存储与主存储区之间移动数据。可选地,数据可以被缓存在SL1高速缓存中。
SPE和PPE通过命令队列270和280之一将对MFC的DMA命令请求排队来指示MFC 200执行这些DMA操作。由SPE发出的命令被排队到MFC SPU命令队列280。由PPE发出的命令被排队到MFC代理命令队列270。MFC使用存储器映射单元(MMU)290来执行所有MFC地址转换和DMA传输所需的MFC访问保护检查。
MFC命令提供了使得在SPU中执行的代码能够访问主存储并与系统中的其他处理器和设备保持同步的主要方法。还提供了管理可选的高速缓存的命令。MFC命令可以由SPU上运行的代码发出,也可以由诸如PPE之类的其他处理器或设备上运行的代码发出。在关联的SPU上运行的代码执行一系列通道指令以发出MFC命令。在其他处理器或设备上运行的代码执行一系列存储器映射的I/O(MMIO)传输以向SPE发出MFC命令。发出的命令被排队到命令队列270和280之一。
通常,可以使用MMIO寄存器或者通过关联的SPU所执行的通道指令来对命令进行排队。MMIO方法旨在由PPE用来代表SPE控制主存储与关联的局部存储之间的数据传输。传输数据的MFC命令被称为MFC DMA命令。始终从SPE的角度来参考MFC DMA命令的数据传输方向。因此,将数据传入SPE(从主存储到局部存储)的命令是Get命令,而将数据从SPE传出(从局部存储到主存储)的命令是Put命令。
MFC命令使用多个影响命令的操作的参数。图3A是示出了根据本发明的一个示例性实施例的MFC命令的参数助记符的示例图。并非所有命令都使用所有参数。例如,EAH参数是可选的。当命令中没有指定可选的参数时,由硬件将该可选参数设置为‘0’。
MFC命令可以分为三类:定义的命令、非法命令以及保留的命令。通过检查操作码并且如果其存在,检查扩展的操作码来确定命令的分类。如果命令操作码或者操作码和扩展操作码的组合不是定义的或保留的命令的命令操作码或者操作码和扩展操作码的组合,则该命令是非法的。
定义的命令属于以下三类命令之一:数据传输命令、SL1高速缓存管理命令和同步命令。数据传输命令进一步分为定义了数据移动方向(即,到达或来自局部存储)的子类别。Put命令是将数据从局部存储移动到主存储的数据传输命令。Get命令是将数据从主存储移动到局部存储的数据传输命令。应用可以将数据传输命令放置在MFC代理命令队列270中。除非另外指出,否则可以按任何顺序来执行这些命令(异步)。
“非法”类命令指不在定义的类或保留的类中的命令。“保留”类命令旨在用于实现相关的用途。
SL1存储控制命令是用于控制与SL1高速缓存有关的操作的命令。例如,这些存储控制命令包括“提示”命令,其用于通知SL1高速缓存可能将发出特定类型的数据传输命令,例如,get或put命令、地址范围操纵命令以及刷新命令。
MFC同步命令被用于控制相对于其他MFC、处理器和其他设备来执行存储访问的顺序。MFC同步命令包括用于实施按序执行的命令、用于根据DMA命令队列中屏障命令之前的所有命令来对所有后续命令排序的屏障命令、用于逻辑地设置目标信号通知寄存器中的信号位的发送信号命令等。
MFC命令可以是单个DMA命令,也可以是DMA列表命令。图3B中示出了根据本发明的一个示例性实施例的DMA列表命令的详细信息。DMA列表命令将一列存储在局部存储中的有效地址和传输大小对或者列表单元用作DMA传输的参数。这些参数用于SPU启动的DMA列表命令,在MFC代理命令队列中不支持所述命令。每个列表单元的第一个字都包含传输大小和停止和通知标志。第二个字包含有效地址的低32位。虽然为列表中的每个传输单元指定了起始有效地址,但是仅在主要列表命令中指定了传输中涉及的局部存储地址(术语“主要”指如图3A中示出的参数指定的列表命令)。
局部存储地址根据列表中每个单元传输的数据量来内部地递增。但是,由于对齐限制,如果局部存储地址没有从列表单元传输的16字节边界开始,则硬件自动将局部存储地址递增到下一个16字节边界。只有使用小于16字节的传输大小才会出现这种情况。传输大小小于16字节的列表单元使用由有效地址的4个最低有效位定义的当前4倍字长(16字节)内的局部存储偏移量。
列表单元中指定的有效地址与基本DMA列表命令中指定的有效地址的高32位所限定的4GB区域有关。虽然DMA列表起始地址与单个4GB区域有关,但是列表单元内的传输可以跨越4GB边界。
设置“s”(停止和通知)位将导致DMA操作在处理当前列表单元之后暂停该列表的执行,并且为SPU设置停止和通知事件状态。直到MFC从SPU程序接收到停止和通知确认后才会恢复已停止的列表的执行。使用关联的命令标记组标识符将停止和通知事件发布到SPU程序。当具有停止和通知单元的同一标记组中存在多个DMA列表命令时,软件将确保使用标记特定的屏障或全局屏障来强制DMA列表命令的有序执行以免不确定性。
将确保按顺序开始和发出DMA列表命令中的所有DMA列表单元。DMA列表命令中的所有单元都具有内在的本地排列次序。单个DMA列表命令最多可以包含2048个单元,占用16KB的局部存储。
通道接口
在BPA中,通道被用作协处理单元(SPU)与存储器流控制(MFC)单元之间的主要接口。SPU通道访问工具被用于配置、保存和恢复SPU通道。SPU指令集体系结构(ISA)提供了一组通道指令以便通过通道接口(或SPU通道)与外部设备通信。表1列出了这些指令:
通道指令 | 指令助记符 | 操作描述 |
读取通道 | rdch | 导致读取存储在已寻址通道中的数据并将其加载到选定的通用寄存器(GPR)中。 |
写入通道 | wrch | 导致从选定的GPR读取数据并将其存储在已寻址通道中 |
读取通道计数 | rchcnt | 导致将与已寻址通道关联的计数存储在选定的GPR中 |
表1-通道指令
在体系结构上,可以将SPU通道配置为具有只读或只写的访问类型。不能将通道配置为读写。除了访问类型之外,每个通道还可以被配置为非阻塞或阻塞。在读取具有通道计数‘0’的通道或写入满通道(即,具有通道计数‘0’的通道)时,配置为阻塞的通道将导致SPU停止。“读取”通道意味着只能对此通道发出读取通道指令(rdch)并且始终返回数据。“写入”通道意味着只能对此通道发出写入通道指令(wrch)并且该通道始终接受数据。
“读取阻塞”通道意味着只能对此通道发出读取通道指令(rdch)。只有在通道计数不为零时才能完成发送到读取阻塞通道的读取通道指令(rdch)。通道计数‘0’指示通道为空。对具有计数‘0’的读取阻塞通道执行通道读取(rdch)将导致SPU停止,直到数据在通道中可用为止。
“写入阻塞”通道意味着只能对此通道发出写入通道指令(wrch)。只有在通道计数不为零时才能完成发送到写入阻塞通道的写入通道指令(wrch)。通道计数‘0’指示通道已满。对具有计数‘0’的写入阻塞通道执行写入通道指令(wrch)将导致SPU停止,直到已寻址通道中的表项可用为止。
应当指出,发出不适合通道配置的通道指令会导致无效的通道指令中断。例如,对配置为写入的通道或写入阻塞通道发出读取通道指令(rdch)将导致无效的通道指令中断。
每个通道都具有相应的计数(即,深度),其指示了可为该通道发出的未完成操作的数量。通道深度(即,未完成传输的最大数量)是实现相关的。当在SPU中建立新的上下文或者重新开始现有的上下文时,软件必须初始化通道计数。
共同未决和共同受让的美国专利申请公开No.2004/0264445(标题为“External Message Passing Method and Apparatus”,外部消息传递方法和装置,申请日2003年6月26日,其在此引入作为参考)中描述了通道和通道接口的操作。图4是根据美国专利申请公开No.2004/0264445中描述的机制示出了与单对通道的通道电路有关的SPU发出和控制逻辑和数据流的布置的示例图。现在将参考图4中示出的各个块对通道接口的操作进行描述。
如图4所示,块430表示SPU的外部设备指令发出和控制逻辑。块432表示到达和来自SPU的数据流。如公知的,处理器可以同时与许多不同的外部设备进行通信。在本处理器中,通过通道寄存器完成通信。每个通道仅以一个方向进行操作,并且根据SPU可以对通道执行的操作将其称为读取通道或写入通道。块434表示用于单个外部设备(由块435表示)的一组通道的通道逻辑。如以下将更详细地讨论的,此外部设备435可以是MFC(如MFC200)、机器状态寄存器或任何其他类型的外部设备。具体地说,在此通道接口的一般描述之后,以下将说明使用通道接口与MFC、机器状态寄存器、事件工具、邮箱工具以及信号通知工具的通信。
在块434中,示出了读取通道计数器436、读取寄存器438、写入通道计数器440、写入寄存器442、MUX(多路复用器)444和MUX 446。通道指令在总线448上被从SPU发出和控制逻辑430传送到读取和写入计数器436和440以及MUX 444和446的门输入。还在通道输出线450上将这些指令提供给诸如435之类的适当外部设备。数据输入线452将数据从外部设备435提供给读取寄存器438。在通道输入线454上提供了从外部设备435到计数器436的通道计数输入信号,其表示数据已被输入寄存器并且用于将计数器436中的计数更改一个值或数字。
在数据输出线456上提供了从写入寄存器442输出到外部设备435的数据。当外部设备435已圆满地完成了数据接收并且将计数器440中的计数更改一个值或数字时,在通道确认线458上将通道确认信号从外部设备435返回写入通道计数器440。在本发明的优选实施例中,总线448上的信号将递减适当的读取或写入计数器,而线454或458上的信号将递增适当的读取或写入计数器。
如图所示,在通道停止线460上将计数器436和440两者的计数通过MUX444提供给SPU发出和控制逻辑430。在通道写入数据线462上将通道写入数据从SPU数据流块432提供给写入寄存器442。在总线464上将来自块436、438和440的输出返回数据流块432。非通道指令通过总线466在块430与432之间传送。
图5是概述了根据本发明的一个示例性实施例的通道接口的示例性操作的流程图。应当理解,图5中的流程图中的每个块和块的组合,以及此后描述的后续图形中的流程图都可以由计算机程序指令来实现。可以将这些计算机程序指令提供给处理器或其他可编程数据处理装置以产生机器,以便在所述处理器或其他可编程数据处理装置上执行的指令将创建用于实现一个或多个流程图块中指定的功能的装置。这些计算机程序指令也可以被存储在引导处理器或其他可编程数据处理装置以特定方式执行功能的计算机可读存储器或存储介质中,以便存储在所述计算机可读存储器或存储介质中的所述指令产生一件包括实现所述一个或多个流程图块中指定的功能的指令装置的制品。
相应地,流程图的多个块支持用于执行指定功能的装置的组合、用于执行指定功能的步骤的组合和用于执行指定功能的程序指令装置。还应理解,流程图中的每个块和流程图中的块的组合可以由执行指定功能或步骤的基于硬件的专用计算机系统来执行,或者通过专用硬件和计算机指令的组合来执行。
如图5所示,通道读取或写入指令的发出将导致判定指定的通道是否是其中已实现上述控制机制的通道(步骤576)。如果否,则判定是否启用了通道错误逻辑(步骤578)。如果是,则停止处理器(步骤580)。如果否,则判定命令是读取命令还是写入命令(步骤582)。
如果非实现的命令是写入命令,则不对该命令执行任何进一步的操作(步骤584)。另一方面,如果非实现的命令是读取命令,则将零返回给数据处理器数据流(步骤586)。在任一情况下,处理都返回等待下一个读取或写入指令的状态。在所示的优选实施例中,所有有效的读取指令都必须返回值。如此处所定义的,对非实现的通道的通道读取指令将返回一个全部为零的值。
应当指出,对于特定的实现,不必定义所有通道。每个通道都将具有唯一的数字标识符。在一个优选实施例中,此通道标识符的范围是从0到127。但是,由于无需定义所有通道,所以可以不使用所有标识符。这样,如果存在对未定义通道的指令,则处理遵循以上引用的非实现的路径。在某些实现中,希望将对非实现的通道的通道读取或写入命令视为非法操作。进一步的操作可能是强制处理器停止,如上述步骤580中示出的。
返回图5,如果在步骤576中判定已实现指定的通道,则检查指定的通道是否为阻塞通道(步骤588)。如果否,则递减该通道的计数,但不允许小于零(步骤590)。如果判定通道为阻塞通道,则进行检查以判定该通道的计数是否大于零(步骤592)。如果是,则处理返回步骤590。
如果如步骤592中判定的,所述计数已为零,则SPU停止直到外部设备提供了有关此通道的输入为止并因此从零更改计数(步骤594和595)。因此,周期性地处理步骤594和595的循环,直到该通道的计数更改为止。一旦计数已更改,处理从步骤595继续到步骤590。
其后,判定通道是主动的还是被动的(步骤596)。如果通道是被动的,则检查命令是写入指令还是读取指令(步骤598)。如果命令是写入指令,则局部地存储数据以供外部读取(步骤600)。如果命令是读取指令,则通过图4的SPU数据流432将数据返回SPU(步骤602)。
应当指出,在被动通道的情况下,SPU依靠外部处理来完成操作。作为一个实例,读取通道可以依靠外部设备来加载数据。另一方面,在主动通道中,SPU主动地完成执行读取或写入操作的操作。此类操作的一个实例是当连接的硬件做出对来自主动读取通道的数据的外部请求时。
当在步骤596中判定通道是主动通道时,检查命令是读取命令还是写入命令(步骤604)。如果是写入命令,则将写入数据外部地输出到SPU或内部寄存器(步骤606)。如果是读取命令,则将读取请求发送到适当的外部设备(步骤608)。
将等待所请求的数据的输入(步骤610)。将周期性地判定是否已接收到读取数据(步骤612)。如果否,则处理返回步骤610直到出现下一次检查时为止。当接收到数据时,处理完成(步骤602)。
从以上显而易见的是,使用特定的通道读取或写入指令来访问每个通道,其中在所述指令中指定了通道号。每个通道都具有与之一起指定的计数。使用读取通道计数指令来读取此计数,其中在所述指令中指定了所需的通道。通道命令不是推测性的并且不能在外部接口处被无序地处理。通道体系结构不要求SPU外部的设备按序处理通道命令,但是可根据处理器和外部设备实现来做出此要求。此计数寄存器中的值跟踪此寄存器的访问数对此寄存器发生的外部确认数。
在操作中,通过访问一个或多个外部接口来更改通道计数的方式基于实现。在一个优选实施例中,对于每次成功的到达或来自寄存器的数据传输,所述计数将递增1。对于每个通道,SPU访问可被定义为读取或写入通道。进而,在所述优选实施例中,当通道被定义或实现为“阻塞”通道时,“0”计数用于停止进一步的操作。当通道寄存器被定义成具有队列深度“1”时,“0”计数可用于指示该通道中的数据是无效的。通道还可以被定义成停止对读取或写入通道命令的SPU操作(如果在该命令上计数是“0”的话),直到计数不再是“0”为止。
在一个优选实施例中,对于每个SPU发起的读取或写入通道命令,计数器值将递减,而对于每个外部发起的读取或写入(具有或没有数据)访问,计数器值将递增。换言之,计数器保持输入对输出的指示。因此,对于写入,为“0”的值或计数指示没有更多的外部写入位置(slot)可用。另一方面,对于读取,计数值“0”指示没有有效的数据。当计数为零时,如果发出其他SPU读取或写入通道命令,并且通道被定义为非阻塞,则计数将保持在“0”并且寄存器中的数据将丢失。如所述优选实施例中实现的,该寄存器中之前最新的数据将丢失。如果计数处于该通道寄存器实现的位数的最大值并且出现将导致计数递增超出范围的其他事务,则计数将停留在该最大值。
初始化计数值的方法是实现相关的,并且一种方法是通过外部接口初始化。此计数可用于写入队列的流控制。所述计数可被预置为外部队列的深度。计数寄存器中的零值意味着此外部队列中没有更多的空间。对于为“1”的外部队列深度,计数应被预置为“1”。当SPU写入此通道时,计数转为“0”。当外部设备从此通道进行读取时,计数递增到“1”,由此指示通道已对另一个写入操作准备就绪。
如上所述,对于读取通道寄存器,这允许计数指示有效的数据。如果计数寄存器预置为“0”,这指示数据无效。当外部设备写入此通道时,计数递增到“1”,指示数据对于SPU读取有效。当SPU从此通道读取时,计数递减回“0”,指示可以出现另一个外部写入。
在本发明的一个优选实施例中,计算机代码通道计数读取指令被发送到计数器以确定读取和写入通道两者的计数。当外部设备是诸如多处理器环境中的其他SPU或计算设备之类的智能设备时,所述外部设备还可将通道计数读取指令发送到计数器以确定计数。以这种方式,外部设备可以确定通道何时在读取通道或写入通道中包含未读取的数据和/或何时适于将其他数据发送到包含读取通道的处理器。
在与本发明一起使用时,读取通道和写入通道可以是非累积的通道或累积的通道。累积通道是累积多个写入的通道。即,入站数据被逻辑地添加到已包含在寄存器或其他存储装置中的数据,直到读取通道为止。在读取通道时,累积寄存器被重置(通常为“0”),并且通道开始再次累积。此操作可用于读取或写入通道两者。
进而,累积通道可以是阻塞或非阻塞的。通常,累积通道将只具有计数深度“1”,相反,非累积通道可以对该通道的每个写入进行计数。
概括地说,通道接口利用定义的通道来释放存储器,但是仍然提供了可轻松地访问的与寄存器中的数据何时有效(或换言之,先前未被读取)有关的信息。通过将通道计数读取指令发送到计数机制来获得此信息。当智能外部设备连接到给定的通道时,该外部设备可以使用类似的指令来将数据发送到给定通道或从给定通道接收数据。通过使用通道计数读取指令,当指定的通道被定义为非阻塞通道时,通道接口还进一步防止了意外地重写寄存器中的数据。
本发明利用通道接口和定义的通道来从/向不同类型的外部设备和由此类外部设备提供的工具传送指令和数据。例如,本发明提供了用于利用SPU的通道接口与MFC、机器状态寄存器和中断工具进行指令和数据传送的机制。此外,通道接口用于与BPA的事件工具、邮箱工具、多源同步工具、代理标记组完成工具、信号通知工具等进行指令和数据传送。
图6A是示出了本发明的一个实施例使用通道的方式的示例图。如图6A所示,通道接口620提供了多个通道,SPU 622可以通过这些通道与MFC 624、机器状态寄存器634和中断工具636通信。每个通道都可以包含与上面根据图4描述的单元相似的单元并且其操作与图5A和5B中描述的操作类似。在本发明的一个示例性实施例中,通道接口620可以对应于由图4中的块434表示的所有通道对的集合。例如,SPU6 22可以对应于图4中的块430和432的组合,并且图6中的所有其他块对应于图4中的块435。
如图6A所示,通道631、633和635提供了与SPU 622关联的通信路径,SPU事件工具630和递减器632可以通过此路径与MFC 624通信。SPU事件工具630提供了用于处理在BPA中生成的事件的机制。如将在以下更详细地说明的,通道633提供了用于识别所需事件并获得有关这些所需事件的信息的机制。递减器632提供了这样的机制,运行在SPU上的软件可以通过该机制测量时间进度或被告知所经过的给定测量时间。递减器632可以通过通道631来设置它的值和读取状态。
SPU(发出和控制逻辑、处理器数据流)622提供了用于与外部设备通信的指令、数据和工具。例如,SPU 622提供了SPU通道访问工具,该工具是初始化、保存和恢复SPU通道的特权工具。所述工具包括三个MMIO寄存器:SPU通道索引寄存器、SPU通道计数寄存器和SPU通道数据寄存器。SPU通道索引寄存器是一个指针,该指针指向其计数和数据分别由SPU通道计数寄存器和SPU通道数据寄存器来访问的通道。SPU通道索引寄存器使用SPU通道计数寄存器或SPU通道数据寄存器来选择访问哪个SPU通道。SPU通道数据寄存器用于读取或初始化由SPU通道索引寄存器选择的SPU通道数据。
除了用于与SPU 622的工具通信的通道631、633和635之外,通道637还提供了与机器状态寄存器634关联的通信路径。机器状态寄存器634包含当前的机器隔离状态和中断状态。隔离状态指示了SPU是否已被隔离。BPA的隔离工具允许特权软件和应用隔离代码映像并将其加载到一个或多个SPU中。SPU隔离工具确保加载到SPU的关联局部存储中的代码映像未被以任何方式更改。当支持嵌套的中断时,与机器状态寄存器相关的中断状态用于保存和恢复中断状态信息。
此外,通道639提供了与中断工具636关联的通信路径。中断工具636用于将中断和中断状态信息路由到PPE或外部设备,将提供给PPE的中断按优先顺序排列,以及生成处理器内部中断。
此外,通道641提供了与邮箱工具638关联的通信路径。邮箱工具638用于将信息发送到诸如其他SPU、PPE之类的外部设备或者从这些外部设备接收信息。
通道643提供了与SPU信号通知工具640关联的通信路径。SPU信号通知工具640用于将诸如缓冲区完成标志之类的信号发送给来自系统中其他处理器和设备的SPU。
通道645提供了与代理标记组完成工具642关联的通信路径。代理标记组完成工具642是用于确定何时完成对一组相似标记的指令的处理的工具。
通道647提供了与MFC多源同步工具644关联的通信路径。MFC多源同步工具644实现跨局部存储和主存储地址域的累积排序。相对于其他处理器或单元对由多个源(即,两个或更多个处理器或单元)执行的存储访问排序被称为累积排序。
图6B和6C示出了列出根据本发明的一个示例性实施例的SPU通道映射的示例图。如图6所示,SPU通道接口支持各种类型的用于传送指令和数据的通道。这些通道包括SPU事件通道650、SPU信号通知通道652、SPU递减器通道654、MFC多源同步通道656、SPU保留通道658、屏蔽读取通道660、SPU状态管理通道662、MFC命令参数通道664、MFC标记状态通道666和SPU邮箱通道668。这些“通道”本质上是存储器映射的寄存器和用于写入这些寄存器的相应电路。因此,术语“通道”在此还用来指用于存储与指定“通道”对应的数据值的一个或多个寄存器。以下将说明这些通道中的每个通道的操作。PPE、SPU和MFC中提供了各种工具以使用这些通道。以下将详细描述这些类型的通道中的每个通道,从那些用于与MFC通信的通道开始。
MFC命令参数通道
MFC命令参数通道664是用于将数据写入MFC SPU命令队列(参见上面的图2和表1)的MFC命令参数寄存器的通道。MFC命令参数通道664是非阻塞的并且没有与其关联的通道计数。因此,执行发送到这些通道中的任意通道的读取通道计数(rchcnt)指令将返回计数“1”。
MFC命令参数通道664包括MFC局部存储地址通道、MFC有效地址高通道、MFC有效地址低通道或列表地址通道、MFC传输大小或列表大小通道、MFC命令标记标识通道、MFC命令操作码通道以及MFC类ID通道。以下将详细描述这些通道中的每个通道。
MFC命令操作码通道
图7A中提供了根据本发明的一个示例性实施例的MFC命令操作码通道的详细信息。MFC命令操作码通道根据操作码来标识要执行的操作。与指令流异步地检查此操作码的有效性。如果MFC命令或者任意命令参数无效,则暂停MFC命令队列处理并且生成无效的MFC命令中断。
使用单个通道指令将MFC命令和类ID参数写入MFC SPU命令队列。如图7A所示,在一个优选实施例中,MFC命令操作码参数是32位字的低16位。此字段的高8位被保留并且低8位标识MFC命令操作码。
MFC类ID通道
如图7B所示,MFC类ID通道用于指定每个MFC命令的替换类ID和传输类ID。SPU和软件使用这些ID来提高系统的整体性能。具体地说,替换类ID(RclassID)与替换管理表(RMT)一起使用以控制高速缓存替换。例如。可以从PPE操作的加载和存储地址生成替换类ID(PPE包括地址范围工具,该工具提供了将PPE加载和存储以及指令取回的有效地址或实地址映射到高速缓存替换管理工具的类ID的方法)。
RclassID用于生成特权软件管理表(即,替换管理表(RMT))的索引,该索引用于控制替换策略。RMT的格式是实现相关的。RMT包括实现相关的表项数,其应包含集允许位、有效位和其他控制信息。可选地,实现还可以提供高速缓存旁路位和算法位。RMT表中的表项数和每个表项的大小是实现相关的。
图7C描述了典型8路集关联高速缓存的RMT表项。RMT表位于系统的实地址空间中。特权软件应将这些RMT表映射为特权页。实现应为每个主要的高速缓存结构提供RMT。
返回图7B,传输类ID(TclassID)用于识别对具有不同特性的存储的访问。TclassID旨在用于允许实现根据存储位置的特性来优化与MFC命令对应的传输。TclassID的设置和使用是实现相关的。
RclassID和TclassID(此后在此称为“类ID参数”)的内容不是一成不变的并且必须针对每个MFC命令排队顺序来编写。类ID参数执行相同的功能,无论它们是否与从SPU命令队列的PPE或SPU侧发出的命令一起使用。类ID参数用于控制与SPE关联的资源并且对与其他SPE或PPE关联的资源没有影响。类ID参数的有效性未被验证。所支持的类ID参数的数量是实现相关的。
MFC命令标记标识通道
MFC命令标记标识通道用于为每个命令或一组命令指定标识符。图7D中描述了MFC命令标记标识通道的详细信息。例如,标识标记是x‘0’与x‘1F’之间的任意值。标识标记在硬件中仅具有局部范围。因此,相同的标记可以用于不同的SPE或PPE。
可以使用相同的标识标记任意数量的MFC命令。标记有相同标识的MFC命令被称为标记组。标记与写入特定队列的命令关联。提供给MFC SPU命令队列的标记与提供给MFC代理命令队列的标记无关。MFC命令标记标识参数的内容不是一成不变的并且必须针对每个MFC命令排队顺序来编写。根据指令流异步地检查此参数的有效性。如果高位(例如,位0到10)没有设置为0,则暂停MFC命令队列处理并且生成中断。
MFC传输大小或列表大小通道
MFC传输大小或列表大小通道用于指定MFC传输的大小或者MFC DMA传输列表(即,一系列DMA传输命令的列表)的大小。图7E中提供了MFC传输大小或列表大小通道的详细信息。在一个示例性实施例中,传输大小可以具有值1、2、4、8、16,或者是16字节的倍数直到最大16KB。MFC DMA传输列表大小可以具有值8,或者是8的倍数,最大到16KB。MFC传输大小或列表大小通道的内容不是一成不变的并且必须针对每个MFC命令排队顺序来编写。根据指令流异步地检查此参数的有效性。如果大小无效,则暂停MFC命令队列处理并且生成MFC DMA对齐中断。
MFC局部存储地址通道
MFC局部存储地址通道用于提供与要排队的MFC命令关联的SPU局部存储地址。如MFC命令中定义的,MFC局部存储地址被用作MFC传输的资源或目的地。图7F提供了MFC局部存储地址通道的详细信息。
MFC局部存储地址通道的内容不是一成不变的并且必须针对每个MFC命令排队顺序来编写。根据指令流异步地检查MFC局部存储地址参数的有效性。如果地址未对齐,则暂停MFC命令队列处理并且生成MFC DMA对齐异常。例如,要被看作对齐,则局部存储地址的4个最低有效位必须与有效地址的4个最低有效位相匹配。
MFC有效地址低或列表地址通道
MFC有效地址低或列表地址通道用于指定MFC命令的有效低地址,或者用于指定指向MFC DMA列表命令的列表单元的局部存储指针。如果MFC状态寄存器中启用了转换,则通过PPE的地址转换工具将有效地址转换为实地址。图7G提供了MFC有效地址低或列表地址通道的详细信息。
MFC有效地址低或列表地址通道的内容不是一成不变的并且必须针对每个MFC命令排队顺序来编写。对于小于16字节的传输大小,此参数的位28到31必须根据传输大小提供自然对齐。对于16字节或更大的传输大小,位28到31必须是“0”。如果禁用转换,则此参数必须在主存储域的实地址空间限制内。对于MFC列表命令,列表地址的位29到31必须是“0”。如果不满足这些条件中的任何条件,则参数无效并被看作未对齐。
根据指令流异步地检查MFC有效地址低或列表地址参数的有效性。如果地址无效,例如由于段故障、映射故障、保护违规或者因为地址未对齐,则暂停MFC命令队列处理并且生成中断。可以生成的中断的类型是MFC数据段中断、MFC数据存储中断以及DMA对齐中断。
MFC有效地址高通道
MFC有效地址高通道用于指定MFC命令的有效地址。如果在MFC状态寄存器中启用了转换,则通过地址转换工具将有效地址转换为实地址。图7H中示出了MFC有效地址高通道的详细信息。
MFC有效地址高通道的内容不是一成不变的并且必须针对每个MFC命令排队顺序来编写。如果未写入高32位,则硬件设置EAH,高地址位被设置为0,即,地址在0与4GB之间。根据指令流异步地检查此参数的有效性。如果地址无效,例如由于段故障、映射故障或者保护违规,则暂停MFC命令队列处理并生成中断。可以生成的中断的类型包括MFC数据段中断和MFC数据存储中断。应当指出,在传输过程中检查有效地址的有效性。可以在遇到无效地址和生成异常之前执行部分传输。
使用上述的MFC命令参数通道,要将来自SPU的MFC命令排队,MFC命令参数必须首先被写入MFC命令参数通道。可以以任意顺序执行此操作,除了MFC命令操作码和类ID参数必须最后写入以外。因此,为了写入MFC命令参数,遵循如图8中概述的操作。
如图8所示,所述操作包括将局部存储地址参数写入MFC局部存储地址通道(步骤810)。有效地址高参数被写入MFC有效地址高通道(步骤820)。有效地址低或列表地址参数被写入MFC有效低或列表地址通道(步骤830)。MFC传输或列表大小参数被写入MFC传输大小或列表大小通道(步骤840)。MFC命令标记参数被写入MFC命令标记标识符通道(步骤850)。将所有以上参数写入它们各自的通道之后,MFC命令操作码和类ID参数被写入MFC操作码和MFC类ID通道(步骤860)并且操作终止。应当理解,可以以任何顺序执行步骤810-850并且步骤860在将其他参数写入它们各自的通道之后。
MFC命令参数保留在MFC命令参数通道中,直到由MFC处理MFC命令操作码和类ID参数的写入为止。对MFC命令操作码通道和MFC类ID通道的写入通道(wrch)指令将导致保存在MFC命令参数通道中的参数被发送到MFC命令队列。在将MFC命令自身发出到MFC命令队列之前,可以以任意顺序写入MFC命令参数。写入MFC命令参数通道的最后参数的值在排队操作中使用。
在已将MFC命令排队之后,MFC参数的值变为无效并且必须为下一个MFC命令排队请求进行重新指定。未指定所有所需MFC参数(即,除了可选的EAH之外的所有参数)可以导致MFC命令队列的不正确操作。
MFC命令操作码通道和MFC类ID通道具有由硬件配置的最大到所述硬件支持的MFC队列命令数的计数。在接通电源之后和清空MFC代理命令队列之后,软件必须将MFC命令操作码通道的通道计数初始化为实现支持的空MFC代理命令队列位置数。还必须对SPE抢占式上下文切换保存和恢复MFC命令操作码通道的通道计数。
MFC标记组状态通道
如上所述,每个命令都可以标记有称为MFC命令标记的标识符(例如,5位标识符)。相同的标识符可用于多个MFC命令。具有相同标识符的一组命令被定义为标记组。软件可以使用MFC命令标记来检查或等待每个标记组的所有已排队的命令的完成。此外,软件使用所述MFC命令标记来检查或等待MFC DMA列表命令到达设置了停止和通知标志的单元,以及确认用于恢复MFC DMA列表命令的列表单元。
将首先描述MFC标记组状态通道,然后将提供对用于确定标记组的状态和用于确定MFC DMA列表命令完成的过程的描述。
MFC标记组状态通道包括MFC写入标记组查询屏蔽通道、MFC读取标记组查询屏蔽通道、MFC写入标记状态更新请求通道、MFC读取标记组状态通道、MFC读取列表停止和通知标记状态通道、MFC写入列表停止和通知标记确认通道以及MFC读取原子命令状态通道。以下将详细描述这些通道中的每个通道。
MFC写入标记组查询屏蔽通道
MFC写入标记组查询屏蔽通道用于选择要包括在查询或等待操作中的标记组。图9A中示出了MFC写入标记组查询屏蔽通道的详细信息。
MFC保留由此通道提供的数据,直到被对此通道发出的后续写入通道(wrch)指令更改为止。因此,无需为每个状态查询或等待重新指定数据。如果在MFC标记状态更新请求暂停时此屏蔽被软件修改,则结果的含义是不确定的。应始终在修改此屏蔽之前取消暂停的MFC标记状态更新请求。可以通过将值“0”(即,立即更新)写入MFC写入标记状态更新请求通道来取消MFC标记状态更新请求。可以通过读取(rdch)MFC读取标记组查询屏蔽通道来访问此通道的当前内容。此通道是非阻塞的并且没有关联的计数。如果读取通道计数(rchcnt)指令被发送到此通道,则始终返回计数“1”。
MFC读取标记组查询屏蔽通道
MFC读取标记组查询屏蔽通道用于读取代理标记组查询屏蔽寄存器的当前值。图9B中提供了MFC读取标记组查询屏蔽通道的详细信息。读取此通道将始终返回写入到MFC写入标记组查询屏蔽通道的最后数据。此通道可用于避免代理标记组查询屏蔽的软件阴影副本并用于SPE上下文保存和恢复操作。此通道是非阻塞的并且没有关联的计数。因此,如果读取通道计数(rchcnt)指令被发送到此通道,则始终返回计数“1”。
MFC写入标记状态更新请求通道
MFC写入标记状态更新请求通道控制在MFC读取标记组状态通道中何时更新MFC标记组状态。图9C中示出了MFC写入标记状态更新请求通道的详细信息。
MFC写入标记状态更新请求通道可以指定是立即更新状态还是根据出现的条件进行更新,例如,在任何启用的MFC标记组完成具有“无未完成操作”状态时更新还是仅在所有启用的MFC标记组都具有“无未完成操作”状态时更新。对此通道的写入通道(wrch)指令必须在来自MFC读取标记组状态通道的读取通道(rdch)之前出现。
MFC写入标记状态更新请求应在设置标记组屏蔽和在对所需标记组发出命令之后执行。如果对标记组的命令在发出MFC写入标记状态更新请求之前完成,由此满足更新状态条件,则无需等待便返回状态。在没有首先通过写入MFC写入标记状态更新请求通道来请求状态更新的情况下,从MFC读取标记组状态通道进行读取将导致软件引起的死锁。
可以通过向MFC写入标记状态更新请求通道发出立即更新状态请求,读取与MFC写入标记状态更新请求通道关联的计数直到返回值“1”为止,然后从MFC读取标记组状态通道进行读取以确定和丢弃不需要的结果来取消先前的MFC标记状态更新请求。
两个有条件的更新请求(没有介于其间的状态读取请求)将导致返回不可预料的标记状态。为了避免不可预料的结果,软件将标记状态更新请求与标记状态读取配对,除非正在通过立即更新请求执行请求取消。
特权软件将此通道的计数初始化为“1”。向此通道发出写入通道(wrch)指令时此通道的计数被设置为“0”。当MFC接收到标记状态更新请求时计数被设置为“1”。此通道允许写入阻塞并且最大计数为“1”。
MFC读取标记组状态通道
MFC读取标记组状态通道包含来自最后的标记组状态更新请求的标记组的状态。图9D中提供了MFC读取标记组状态通道的详细信息。
在标记组状态更新时,只有已启用的标记组的状态才有效。在标记组状态更新时,与已禁用的标记组对应的位位置被设置为“0”。
在从MFC写入标记状态更新请求通道进行读取之前必须先请求此通道。未能执行此操作会导致软件引起的死锁条件。这被认为是编程错误,并且要求特权软件消除该死锁条件。
发送到MFC读取标记组状态通道的读取通道计数(rchcnt)指令在状态仍不可用时返回“0”,在状态可用时返回“1”。此指令可用于在读取MFC读取标记组状态通道时避免停止SPU。软件将此通道的计数初始化为值“0”。此通道允许读取阻塞并且最大计数为“1”。
MFC读取列表停止和通知标记状态通道
图9E中提供了MFC读取列表停止和通知标记状态通道的详细信息。如上所述,MFC列表命令的列表单元包含停止和通知标志。如果对列表单元设置了所述标志,则MFC停止执行MFC列表命令(即,DMA列表命令),并在此通道中设置与MFC列表命令的标记组对应的位。还将与此通道关联的计数设置为“1”。MFC列表命令保持停止,直到通过将标记值写入MFC写入列表停止和通知标记确认通道来确认为止。
当希望在DMA列表执行已达到特定点时通知程序时,MFC列表停止和通知工具很有用。当应用希望动态地更改停止的列表单元之后的列表单元(传输大小或有效地址)时,这也很有用。还可以通过将列表单元的传输大小设置为“0”来跳过列表单元。不允许硬件预取停止和通知单元以外的列表单元。
特权软件应将MFC读取列表停止和通知标记状态通道的计数初始化为“0”。软件可以通过再次读取此通道的内容来确定哪些标记组具有自上次读取此通道以来已停止的命令。向此通道发出读取通道(rdch)指令会将所有位重置为0并将对应于此通道的计数设置为“0”。因此,发出不具有包含停止和通知标志设置为“1”的未完成列表单元和不具有停止命令的读取通道(rdch)指令会导致软件引起的死锁。
在没有停止标记组时向此通道发出读取通道(rdch)指令将导致SPU执行停止,直到遇到设置了停止和通知标志的列表单元为止。软件还可以读取(rchcnt)与此通道关联的计数,以便与SPU事件工具一起用来确定何时遇到设置了停止和通知标志的MFC列表单元。如果自上次读取此通道以来没有新的停止的MFC列表命令,则发送到MFC读取列表停止和通知标记状态通道的读取通道计数(rchcnt)指令将返回“0”。此通道是读取阻塞通道并具有最大计数“1”。
MFC写入列表停止和通知标记确认通道
图9F中示出了MFC写入列表停止和通知标记确认通道的详细信息。MFC写入列表停止和通知标记确认通道用于确认包含对列表单元(设置了停止和通知标志)停止的MFC列表命令的标记组。通过将MFC标记组写入此通道来确认标记组。写入之后,重新启动与写入此通道的值相匹配的标记组的所有停止的MFC列表命令。
当希望在DMA列表执行已达到特定点时通知程序时,MFC列表停止和通知工具很有用。当应用希望动态地更改停止的列表单元之后的列表单元(传输大小或有效地址)时,这也很有用。还可以通过将列表单元的传输大小设置为0来跳过列表单元。不允许硬件预取停止和通知单元以外的列表单元。
确认当前没有因停止和通知条件而停止的标记组是未定义的。执行此操作将导致MFC读取列表停止和通知标记状态通道中出现无效状态。为了保持一致,此条件被看作无操作。
此通道是非阻塞通道并且没有关联的计数。无论何时将读取通道计数(rchcnt)指令发送到此通道,都始终返回计数“1”。
MFC读取原子命令状态通道
图9G中提供了MFC读取原子命令状态通道的详细信息。MFC读取原子命令状态通道包含上次完成的立即MFC原子更新命令的状态。原子命令是不必等待MFC SPU队列中的其他命令便可执行并独立于MFC SPU队列中的其他命令执行的命令。MFC支持四种原子命令:getllar(获得锁定线保留)、putllc(使锁定线有条件)、putlluc(使锁定线无条件)和putqlluc(使排队的锁定线无条件)。这些命令执行与可缓存的存储指令相似的功能,通常由软件用来释放“锁”。putlluc和putqlluc命令之间的不同在于putqlluc命令被标记和排队在MFC SPU命令队列中的其他MFC命令之后,而putlluc命令被立即执行。
由于putqlluc命令已被标记并具有隐式标记特定的栅栏(fence),所以根据已在MFC SPU命令队列中的同一标记组内的所有其他命令来对其进行排序。不标记getllar、putllc和putlluc命令;因此,它们被立即执行。尽管getllar、putllc和putlluc命令被立即执行,但是这些命令仍然要求MFC SPU命令队列中具有可用位置。应假定与MFC SPU命令队列中的其他命令没有次序。在发出每个getllar、putllc或putlluc命令之后,软件必须从MFC读取原子命令状态通道发出读取以验证命令是否完成。在发出立即原子命令之前向此通道发出通道读取(rdch)指令将导致软件引起的死锁。
软件可以读取与此通道关联的通道计数(rchcnt)以判定立即原子MFC命令是否已完成。如果返回值“0”,则尚未完成立即原子MFC命令。如果返回值“1”,则立即原子MFC命令已完成并且状态通过读取(rdch)此通道而可用。
读取(rdch)MFC读取原子命令状态通道应始终在立即原子MFC命令之后。执行多个原子MFC命令而没有介于其间的读取MFC读取原子命令状态通道将导致不正确的状态。
特权软件将此通道的计数初始化为“0”。此通道是读取阻塞通道并且最大计数为“1”。此通道的内容在读取时清除。后续立即MFC原子更新命令的完成会覆盖更早的MFC命令的状态。
上述MFC标记组状态通道用于帮助确定标记组的状态和确定MFC DMA列表命令是否完成。支持三个基本过程以确定标记组的状态:轮询MFC读取标记组状态通道,等待标记组更新或等待事件,以及中断标记组状态更新事件。对于轮询MFC命令或MFC命令组是否完成,基本过程如图10中所示。
如图10所示,任何暂停的标记状态更新请求都被清除(步骤1010)。例如,这可以通过将“0”写入MFC写入标记状态更新请求通道,读取与MFC写入标记状态更新请求通道关联的通道计数直到返回值“1”为止,读取MFC读取标记组状态通道以及丢弃标记状态数据来完成。
然后,通过将适当的屏蔽数据写入MFC写入标记组查询屏蔽通道来启用所需的标记组(步骤1020)。然后请求立即标记状态更新,例如,通过将值“0”写入MFC写入标记状态更新请求通道(步骤1030)。
然后执行读取MFC读取标记组状态通道(步骤1040)。返回的数据是应用了标记组屏蔽的每个标记组的当前状态。判定是否存在其他所需的标记组(步骤1050)。如果存在,则操作返回步骤1030。否则,操作终止。
为了等待标记组更新,或者等待事件(一个或多个标记组完成),基本过程如图11所示。如图所示,通过清除任何暂停的标记状态更新请求来开始操作(步骤1110)。例如,这可以通过将“0”写入MFC写入标记状态更新请求通道,读取与MFC写入标记状态更新请求通道关联的通道计数直到返回值“1”为止,读取MFC读取标记组状态通道以及丢弃标记状态数据来完成。
通过将值“01”或“10”写入MFC写入标记状态更新请求通道来请求有条件的标记状态更新(步骤1120)。值“01”指定任何启用的标记组的完成都会导致标记组更新。值“10”指定所有启用的标记组必须完成以导致SPU标记组状态更新。
此后,读取MFC读取标记组状态通道以等待步骤1120中指定的特定标记事件(步骤1130)。此读取停止SPU的执行直到满足步骤1120中指定的条件为止。可替代地,可以执行读取与MFC读取标记组状态通道关联的计数以轮询或等待特定的标记事件(步骤1132)。
判定返回的计数是否具有值“1”(步骤1140)。如果否,则操作返回步骤1132。如果计数为“1”,则读取MFC读取标记组状态通道以确定哪个标记组或哪些标记组已完成(步骤1150)。然后操作终止。
等待或轮询有条件的标记事件的替代方法是使用SPU事件工具。当应用等待多个事件中的一个事件发生或者在等待命令完成期间可以执行其他工作时,通常使用此过程。图12中示出了此过程。
如图12所示,任何暂停的标记状态更新请求都被清除(步骤1210)。如上所述,例如,这可以通过将“0”写入MFC写入标记状态更新请求通道,读取与MFC写入标记状态更新请求通道关联的通道计数直到返回值“1”为止,读取MFC读取标记组状态通道以及丢弃标记状态数据来完成。
选择一个或多个标记组(步骤1220)。通过将值“1”写入(wrch)SPU写入事件确认通道来清除任何暂停的标记状态更新事件(步骤1230)。通过将值“1”写入SPU写入事件屏蔽通道来取消对MFC标记组状态更新事件的屏蔽(步骤1240)。然后读取SPU读取事件状态通道以等待出现启用的事件(步骤1250)。此读取停止SPU的执行直到出现启用的事件为止。可替代地,可以读取与SPU读取事件状态通道关联的计数来轮询或等待特定的标记事件,直到返回计数“1”为止。
读取SPU读取事件状态通道并判定是否出现启用的事件(步骤1260)。如果否,则操作返回步骤1250。如果出现启用的事件,则读取MFC读取标记组状态通道以确定哪个标记或标记组导致所述事件(步骤1270)。然后操作终止。
支持三个基本过程以判定MFC DMA列表命令是否已到达设置了停止和通知标志的列表单元:轮询MFC读取列表停止和通知标记状态通道,等待MFCDMA列表命令停止和通知事件以及中断MFC DMA列表命令停止和通知事件。对于轮询以判定MFC DMA列表命令是否已到达设置了停止和通知标志的列表单元,基本过程在图13中示出。
如图13所示,通过发出具有设置了停止和通知标志的列表单元的DMA列表命令来开始操作(步骤1310)。读取与MFC读取列表停止和通知标记状态通道关联的计数直到返回值“1”为止(步骤1320)。如果返回值“1”(步骤1330),则读取(rdch)MFC读取列表停止和通知标记状态通道(步骤1340)。返回的数据是自上次读取此通道以来已到达设置了停止和通知标志的列表单元的每个标记组的当前状态。
判定所需的一个或多个标记组是否已到达设置了停止和通知标志的列表单元(步骤1350)。如果否,操作返回步骤1340,直到所需的一个或多个标记组已到达设置了停止和通知标志的列表单元为止。
如果所需的一个或多个标记组已到达设置了停止和通知标志的列表单元,则将与已停止的标记组对应的标记组号写入(wrch)MFC写入列表停止和通知标记确认通道来继续MFC DMA列表命令(步骤1360)。然后操作终止。
图14中示出了等待MFC DMA列表命令到达设置了停止和通知标志的列表单元的基本过程。如图所示,通过发出具有设置了停止和通知标志的列表单元的MFC DMA列表命令开始操作(步骤1410)。执行MFC读取列表停止和通知标记状态通道的读取(rdch)(步骤1420)。返回的数据是自上次读取此通道以来已到达设置了停止和通知标志的列表单元的每个标记组的当前状态。此读取停止SPU直到MFC DMA列表命令已到达设置了停止和通知标志的列表单元为止。
判定所需的一个或多个标记组是否已到达设置了停止和通知标志的列表单元(步骤1430)。在返回数据中设置了相应的位。由于为每次读取重置位,所以软件必须在等待多个标记组停止时执行标记组的累积。
如果否,则操作返回步骤1420直到所需的一个或多个标记组已到达设置了停止和通知标志的列表单元为止。否则,执行将与已停止的标记组对应的标记组号写入(wrch)MFC写入列表停止和通知标记确认通道以重新启动MFC DMA列表命令(步骤1440)。
等待或轮询列表停止和通知标记组状态的替代方法是使用SPU事件工具。当在执行MFC DMA列表命令过程中SPU程序可以执行其他工作时,通常使用此过程。例如,图15中概述了此过程。
如图15所示,通过清除任何暂停的MFC DMA列表命令停止和通知事件来开始所述过程(步骤1510)。例如,这可以通过将值“1”写入(wrch)SPU写入事件确认通道来完成。通过将“1”写入SPU写入事件屏蔽通道的Sn位来启用MFC DMA列表命令停止和通知事件(步骤1520)。发出具有设置了停止和通知标志的列表单元的MFC DMA列表命令(步骤1530)。
可以执行读取(rdch)SPU读取事件状态通道以等待出现启用的事件(步骤1540)。此读取停止SPU的执行直到出现启用的事件为止。可替代地,可以读取(rchcnt)与SPU读取事件状态通道关联的计数以轮询特定的标记事件直到返回计数“1”为止。
判定是否已出现启用的事件(步骤1550)。如果否,则操作返回步骤1540。如果已出现启用的事件,判定是否已出现DMA列表停止和通知事件(步骤1560)。如果未出现DMA列表停止和通知事件,则操作返回步骤1540。
如果出现了DMA列表停止和通知事件,则执行读取(rdch)MFC读取列表停止和通知标记状态通道以确定哪个或哪些标记组导致了事件(步骤1570)。将与已停止的标记组对应的标记组号写入(wrch)MFC写入列表停止和通知标记确认通道以继续MFC DMA列表命令(步骤1580)。
MFC写入多源同步请求通道
图16中提供了MFC写入多源同步请求通道的详细信息。MFC写入多源同步请求通道是MFC多源同步工具的一部分并且使MFC开始跟踪发送到关联的MFC的未完成传输。MFC多源同步工具包括MFC多源同步寄存器(其允许处理器或设备从主存储地址域控制同步),以及MFC写入多源同步请求通道(MFC_WrMSSyncReq)(其允许SPU从局部存储地址域控制同步)。
可以通过写入MFC写入多源同步请求通道来请求同步。当请求的同步完成时,通道计数被设置回“1”并且忽略写入此通道的数据。第二次写入此通道将导致SPU停止直到完成第一次写入跟踪的未完成传输为止。
为了使用MFC写入多源同步请求通道,程序写入MFC写入多源同步请求通道,然后等待MFC写入多源同步请求通道变为可用,即,在通道计数被设置回“1”时。软件将此通道的计数初始化为值“1”。此通道是写入阻塞通道并且最大计数为“1”。
邮箱工具
除了用于与MFC通信的通道之外,本发明的通道接口还提供了用于与SPU中提供的邮箱工具通信的通道。MFC在SPU与其他处理器和设备之间提供了一组邮箱队列。每个邮箱队列都具有指派的SPU通道以及相应的MMIO寄存器。SPU软件通过使用SPU通道指令来访问邮箱队列。其他处理器和设备通过使用MMIO寄存器之一来访问邮箱队列。除了队列之外,MFC还为邮箱提供了队列状态、邮箱中断和SPU事件通知。MMIO寄存器、通道、状态、中断、邮箱队列和事件统称为“邮箱工具”。如上所述,图2中的MFC寄存器单元240内提供了所述邮箱工具。
MFC提供了两个邮箱队列来将信息从SPU发送到其他处理器或其他设备:SPU出站邮箱队列和SPU出站中断邮箱队列。这些邮箱队列用于将较短的消息发送到PPE(例如,返回代码或状态)。通过读取相应的MMIO寄存器,SPU使用写入通道(wrch)指令写入这些队列之一的数据对任何处理器或设备都可用。
发送到SPU写入出站中断邮箱通道的写入通道(wrch)指令还可以导致将中断发送到处理器或者系统中的其他设备。来自这些队列(SPU出站邮箱或SPU出站中断邮箱寄存器)中的任意一个的MMIO读取可以设置SPU事件,此事件又导致SPU中断。
为外部处理器或者其他设备提供一个邮箱队列以将信息发送到SPU,即,SPU入站邮箱队列。此邮箱队列由PPE写入。但是,其他处理器、SPU或者其他设备也可以使用此邮箱队列。通过读取SPU读取入站邮箱通道,由处理器或其他设备使用MMIO写入写入此队列的数据可用于SPU。对SPU入站邮箱寄存器的MMIO写入可以设置SPU事件,此事件又导致SPU中断。
SPU出站邮箱寄存器用于从相应的SPU出站邮箱队列读取32位数据。SPU出站邮箱寄存器具有相应的SPU写入出站邮箱通道,该通道用于将数据写入SPU出站邮箱队列。发送到SPU出站邮箱队列的写入通道(wrch)指令将指令中指定的32位数据加载到SPU出站邮箱队列中以供其他处理器或其他设备读取。如果SPU出站邮箱队列已满,则SPU停止发送到此队列的写入通道(wrch)指令直到出现来自此邮箱寄存器的MMIO读取为止。
此寄存器的MMIO读取始终按照SPU写入信息的顺序来返回信息。读取空SPU出站邮箱队列时返回的信息是未定义的。SPU出站邮箱队列中的表项数(或队列深度)是实现相关的。
SPU邮箱状态寄存器的MMIO读取返回邮箱队列的状态。在SPU邮箱状态寄存器的SPU_Out_Mbox_Count字段中给出了SPU出站邮箱队列中的有效队列表项数。SPU出站邮箱寄存器的MMIO读取设置暂停的SPU出站邮箱可用事件。如果邮箱队列中剩余的数据量低于实现相关的阈值并且此条件被启用(即,SPU_WrEventMask[Le]被设置为‘1’),则更新SPU读取事件状态通道(即,SPU_RdEventStat[Le]被设置为‘1’),并且其通道计数被设置为‘1’。这导致SPU出站中断邮箱可用事件。
SPU入站邮箱寄存器用于将32位数据写入相应的SPU入站邮箱队列。SPU入站邮箱队列具有用于从队列读取数据的相应的SPU读取入站邮箱通道。SPU读取入站邮箱通道的读取通道(rdch)指令将32位数据从SPU入站邮箱队列加载到读取通道(rdch)指令指定的SPU寄存器。SPU不能从空邮箱读取。如果SPU入站邮箱队列为空,则SPU在对此通道的读取通道(rdch)指令上停止直到将数据写入邮箱为止。对此通道的读取通道(rdch)指令始终按照PPE或者其他处理器和设备写入信息的顺序来返回信息。
队列中的表项数(或队列深度)是实现相关的。SPU邮箱状态寄存器的MMIO读取返回邮箱队列的状态。在SPU邮箱状态寄存器的SPU_In_Mbox_Count字段中给出了SPU邮箱队列中的可用队列位置数(即,SPU_Mbox_Stat[SPU_In_Mbox_Count])。
软件在写入SPU_In_Mbox之前检查SPU邮箱状态寄存器以避免SPU邮箱溢出。SPU入站邮箱寄存器的MMIO写入设置暂停的SPU邮箱事件。如果已启用(即,SPU_WrEventMask[Mbox]=‘1’),则更新SPU读取事件状态通道并将其通道计数设置为‘1’,这导致SPU入站邮箱可用事件。
SPU邮箱状态寄存器包含SPU与相应SPE中的PPE之间的邮箱队列的当前状态。读取此寄存器对邮箱队列没有影响。
SPU邮箱通道
如上所述,MFC提供的邮箱工具包括多个SPU邮箱通道,所述通道包括SPU写入出站邮箱通道、SPU写入出站中断邮箱通道和SPU读取入站邮箱通道。这些SPU邮箱通道被定义为阻塞,即,它们在通道已满(写入阻塞)或数据不可用(读取阻塞)时停止SPU。当应用没有其他工作要执行时,通道的分块方法对节约功率非常有益。实质上,可以使处理器处于低功率状态直到释放了空间或者数据可用为止。
虽然这些通道是阻塞通道并且因此获得了节省功率的好处,但是访问这些通道可能导致SPU无限期地停止。软件可以通过使用SPU事件工具(稍后说明),或者通过读取与邮箱通道关联的通道计数来避免停止SPU。
SPU写入出站邮箱通道
图17A提供了根据本发明的一个示例性实施例的SPU写入出站邮箱通道的详细信息。发送到此通道的写入通道指令(wrch)将数据写入SPU写入出站邮箱队列。由SPU写入此通道的数据可用于SPU出站邮箱寄存器的MMIO读取。对此通道的写入通道(wrch)还将导致关联的通道计数递减‘1’。写入满的SPU写入出站邮箱队列将导致SPU执行停止直到读取SPU出站邮箱寄存器,将SPU写入出站邮箱队列中的位置释放为止。
为了避免停止情况,可以读取与此通道关联的通道计数以确保在发出通道写入之前在SPU写入出站邮箱队列中存在位置(slot)。可替代地,可以使用SPU出站邮箱可用事件来发信号通知SPU写入出站邮箱队列中位置的可用性,如果确定此队列是满的话。
当SPU写入出站邮箱队列已满时,读取与此通道关联的通道计数将返回值‘0’。非零值指示了SPU写入出站邮箱队列中空闲的32位字数。
特权软件将SPU写入出站邮箱通道的计数初始化为SPU写入出站邮箱队列的深度。此通道是写入阻塞通道。此通道的最大计数是实现相关的并且应是SPU写入出站邮箱队列的深度(即,可用位置数)。
SPU写入出站中断邮箱通道
图17B提供了根据本发明的一个示例性实施例的SPU写入出站中断邮箱通道的详细信息。对此通道的写入通道(wrch)指令将数据写入SPU写入出站中断邮箱队列。由SPU写入此通道的数据可用于SPU出站中断邮箱寄存器的MMIO读取。
对此SPU写入出站邮箱通道的写入通道(wrch)指令还将导致关联的计数递减‘1’。写入满的SPU写入出站中断邮箱队列将导致SPU执行停止直到读取SPU出站中断邮箱寄存器,将SPU写入出站中断邮箱队列中的位置释放为止。
为了避免停止情况,可以读取与此通道关联的通道计数以确保在发出通道写入之前在SPU写入出站中断邮箱队列中存在位置。可替代地,可以使用SPU出站中断邮箱可用事件来发信号通知SPU写入出站中断邮箱队列中位置的可用性,如果此队列先前已满的话。到SPU写入出站中断邮箱通道的写入通道(wrch)指令还导致将中断发送到处理器或其他设备。所述中断和先前发出的MFC命令没有顺序。
当SPU写入出站中断邮箱队列已满时,读取与此通道关联的计数返回值‘0’。非零计数值指示此队列中空闲的32位字数。
特权软件将此通道的计数初始化为SPU写入出站中断邮箱队列的深度。此通道是写入阻塞通道。此通道的最大计数是实现相关的并且应是SPU写入出站中断邮箱队列的深度(即,可用位置数)。
SPU读取入站邮箱通道
图17C提供了根据本发明的一个示例性实施例的SPU读取入站邮箱通道的详细信息。此通道的读取返回SPU读取入站邮箱队列中的下一个数据。处理器或设备通过对SPU入站邮箱寄存器发出写入来将数据放置在SPU读取入站邮箱队列中。
从SPU读取入站邮箱通道进行读取将导致关联的计数递减‘1’。读取空邮箱将导致SPU执行停止直到写入SPU入站邮箱寄存器,将数据项放入SPU读取入站邮箱队列为止。为了避免停止情况,可以读取与此通道关联的通道计数以确保在发出通道读取之前在SPU读取入站邮箱队列中存在数据。可替代地,可以使用SPU入站邮箱可用事件来发信号通知SPU读取入站邮箱队列中数据的可用性。
如果邮箱为空,则读取通道计数(rchcnt)返回值‘0’。如果rchcnt的结果为非零,则邮箱包含已由PPE写入但尚未被SPU读取的信息。
特权软件将SPU读取入站邮箱通道的通道计数初始化为‘0’。最大计数是实现相关的。此通道是读取阻塞通道。
SPU信号通知工具
MFC提供了SPU信号通知工具,该工具用于从系统中的其他处理器和设备将诸如缓冲区完成标志之类的信号发送到SPU。例如,可以在图2的MFC寄存器单元250中提供此信号通知工具。
BPA提供了两个独立的信号通知工具:SPU信号通知1和SPU信号通知2。每个工具都包括一个寄存器和一个通道:SPU信号通知1寄存器和SPU信号通知1通道;以及SPU信号通知2寄存器和SPU信号通知2通道。
SPU使用一组发送信号命令(具有与向其发送信号的SPU关联的信号通知寄存器的有效地址)来发出信号。PPE和其他不支持发送信号命令的设备通过执行到与SPU(将向其发送信号)关联的SPU信号通知寄存器的MMIO写入来模拟发送信号命令。
可以将信号通知工具中的每个工具编程为覆盖模式(在一对一信号传递环境中是有用的),或者编程为逻辑“或”模式(在多对一信号传递环境中是有用的)。在SPU配置寄存器中设置每个通道的模式。
执行发送信号命令或MMIO(将编程为覆盖模式的信号传递寄存器作为目标)会将关联通道的内容设置为信号传递操作的数据。它还将相应通道计数设置为‘1’。在逻辑“或”模式中,将信号传递操作的数据与通道的当前内容进行“或”运算,并且相应计数被设置为值‘1’。
此外,当执行单独的加载时,信号通知寄存器被用作映像的有效地址。在这些情况下,SPU信号通知1寄存器包含64位有效地址的高32位,而SPU信号通知2寄存器包含最低有效32位。在设置有效地址之前,软件必需使SPU信号通知工具处于覆盖模式以便单独的加载请求可以正确运行。
SPU信号传递通道
SPU信号传递通道是SPU信号通知工具的PPE部分。它们用于从系统中的其他处理器和其他设备读取信号。信号传递通道被配置为读取阻塞并且最大计数为‘1’。当读取通道(rdch)指令被发送到这些通道之一并且关联的通道计数为‘1’时,通道的当前内容和关联的计数被重置为‘0’。当读取通道(rdch)指令被发送到这些通道之一,并且通道计数是‘0’时,SPU停止直到处理器或设备执行对关联寄存器的MMIO写入为止。
SPU信号通知通道
图18提供了根据本发明的一个示例性实施例的SPU信号通知通道的详细信息。信号通知通道可以是SPU信号通知1或2通道。发送到SPU信号通知通道的读取通道(rdch)指令返回信号控制字1的32位值,并原子地重置任何在读取时设置的位。如果没有信号暂停,则读取此通道将停止SPU直到发出信号为止。如果没有信号暂停,则发送到此通道的读取通道计数(rchcnt)指令返回‘0’。如果未读取的信号暂停,则它返回‘1’。
特权软件将此通道的计数初始化为值‘0’。此通道是读取阻塞通道并且最大计数为‘1’。
SPU递减器
每个SPU都包含32位递减器。如果在MFC控制寄存器中启用,其被写入并且MFC_CNTL[Dh]设置为‘0’。向SPU写入递减器通道发出写入通道(wrch)指令时开始SPU递减器。通过遵循以下描述的程序顺序,或者在写入MFC控制寄存器并且MFC_CNTL[Dh]设置为‘1’时递减器停止。可以在MFC控制寄存器(即,MFC_CNTL[Ds])中得到递减器的当前运行状态。为使递减器停止,无需暂停递减器事件。
指派了两个通道来管理递减器:一个用于设置递减器值,一个用于读取递减器的当前内容。当最高有效位(位0)从‘0’更改为‘1’时出现递减器事件。
SPU写入递减器通道
图19A提供了根据本发明的一个示例性实施例的SPU写入递减器通道的详细信息。SPU写入递减器通道用于将32位值加载到递减器。加载到递减器中的值确定了写入通道(wrch)指令与递减器事件之间的间隔时间。当递减器的最高有效位(msb)从‘0’更改为‘1’时出现事件。如果加载到递减器中的值导致msb从‘0’更改到‘1’,则立即发信号通知事件。将递减器设置为值‘0’会导致在单个递减器间隔之后出现事件。
为了正确地保存和恢复递减器的状态,在更改递减器值之前必须停止递减器。以下顺序概述了设置新的递减器值的过程:
1.写入SPU写入事件屏蔽通道以禁用递减器事件。
2.写入SPU写入事件确认通道以确认任何暂停的事件并停止递减器。递减器停止是因为步骤1中已禁用递减器事件。
3.写入SPU写入递减器通道以设置新的递减器计数值。(注意:启动递减器是因为步骤2停止了递减器。)
4.写入SPU写入事件屏蔽通道以启用递减器事件。
5.等待计时器过期。
此通道是非阻塞通道并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU读取递减器通道
图19B提供了根据本发明的一个示例性实施例的SPU读取递减器通道的详细信息。SPU读取递减器通道用于读取32位递减器的当前值。读取递减器计数对递减器的准确性没有影响。连续读取递减器将返回相同的值。
此通道是非阻塞通道并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU状态管理通道
除了以上通道之外,还提供了SPU状态管理通道。这些SPU状态管理通道包括SPU读取机器状态通道和两个中断相关状态通道。中断相关状态通道包括SPU写入状态保存和恢复通道以及SPU读取状态保存和恢复通道。
SPU读取机器状态通道
图20A提供了根据本发明的一个示例性实施例的SPU读取机器状态通道的详细信息。SPU读取机器状态通道包含当前的SPU机器状态信息。此通道包含两个状态位:隔离状态和SPU中断状态。此隔离状态反映了SPU的当前操作状态是隔离的还是非隔离的。
SPU中断启用状态反映了SPU中断启用的当前状态。如果已启用,则在存在任何启用的SPU事件时生成SPU中断。
此通道是非阻塞通道并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU写入状态保存和恢复通道
图20B提供了根据本发明的一个示例性实施例的SPU写入状态保存和恢复通道的详细信息。对此通道的写入将更新SPU中状态保存和恢复寄存器0(SRRO)的内容。当支持嵌套的中断时,对此通道的写入通常用于恢复中断状态信息。
当启用SPU中断时不应写入此通道。执行此操作可导致SRRO的内容不确定。必须在写入此通道之后和执行依赖SRRO内容的指令之前发出同步指令的通道格式。
此通道是非阻塞通道并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU读取状态保存和恢复通道
图20C提供了SPU读取状态保存和恢复通道的详细信息。读取此通道将返回SPU中状态保存和恢复寄存器0(SRRO)的内容。当支持嵌套的中断时,读取此通道通常用于保存中断状态信息。
此通道是非阻塞通道并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU事件工具
图21A至21B是示出了SPU事件工具的逻辑表示的示例性方块图。如图21所示,边沿触发的事件将SPU暂停事件寄存器2110中的相应位设置为‘1’。通过使用通道指令将‘1’写入SPU写入事件确认通道2120中的相应位来确认或重置SPU暂停事件寄存器2110中的事件。
SPU暂停事件寄存器(Pend_Event)2110是内部寄存器。可以使用SPU通道访问工具来读取SPU暂停事件寄存器2110。
使用通道读取(rdch)指令读取SPU读取事件状态通道2130会返回和SPU写入事件屏蔽通道2140中的值逻辑地‘与’后的SPU暂停事件寄存器的值。此功能仅将已启用的事件的状态提供给SPU程序,而SPU暂停事件寄存器2110允许特权软件查看所有出现的事件。SPE上下文保存和恢复操作需要访问所有事件。
当将新的值写入SPU写入事件屏蔽通道2140或者在SPU暂停事件寄存器2110中记录了新的事件时,SPU读取事件状态通道2130的内容将更改。SPU读取事件状态通道2130中的任何从‘0’到‘1’的位更改都会使SPU读取事件状态通道计数递增‘1’。如果在将写入发送到SPU写入事件确认通道2120之后仍在SPU读取事件状态通道2130中设置了事件,则计数也会递增。在使用通道读取(rdch)指令读取SPU读取事件状态通道2130时计数将递减‘1’。计数在值‘1’达到饱和,并且不会递减到值‘0’以下。当SPU读取事件状态通道计数为非零时,如果启用了中断情况,则将其发送到SPU。
SPU事件通道
SPU程序可以使用多个SPU事件通道来监视事件。这些SPU事件通道包括SPU读取事件状态通道、SPU写入事件屏蔽通道、SPU读取事件屏蔽通道以及SPU写入事件确认通道。SPU读取事件状态通道包含SPU写入事件屏蔽通道中启用的所有事件的状态。SPU写入事件确认通道用于重置事件的状态,此状态通常是SPU程序已处理或记录事件的指示。如果不存在启用的事件,则从SPU读取事件状态通道进行读取会停止SPU程序。
当单个事件具有停止SPU程序的类似方法时,如果尚未出现事件,则SPU事件工具向软件提供了查找多个事件和导致SPU程序的中断的方法。
SPU读取事件状态通道
图22A至22D提供了根据本发明的一个示例性实施例的SPU读取事件状态通道的详细信息。SPU读取事件状态通道包含读取此通道时由SPU写入事件屏蔽通道启用的所有事件的当前状态。如果SPU写入事件屏蔽通道指定事件不是查询的一部分,则在报告的状态中它的相应位置是‘0’。
从通道计数为‘0’的SPU读取事件状态通道进行读取将导致SPU停止,由此提供了“等待事件”功能。从通道计数为‘1’的此通道进行读取返回任何启用并暂停的事件的状态并将通道计数设置为‘0’。对于下列条件,通道计数被设置为‘1’:
·出现事件并且SPU写入事件屏蔽通道中相应的屏蔽是‘1’;
·将‘1’写入SPU写入事件屏蔽通道中与SPU暂停事件寄存器中的‘1’对应的位位置;
·写入SPU写入事件确认通道之后暂停已启用的事件;以及
·特权软件使用SPU通道访问工具将通道计数设置为‘1’。
如果没有出现已启用的事件,则SPU读取事件状态通道的读取通道计数(rchcnt)指令返回零。读取通道计数(rchcnt)指令可用于避免在从SPU读取事件状态通道读取事件状态时停止SPU。
特权软件必须将SPU读取事件状态通道的计数值初始化为‘0’。使用SPU通道访问工具中的SPU通道计数寄存器来初始化通道计数。如果启用SPU中断(SPU_RdMachStat[IE]设置为‘1’),则非零的SPU读取事件状态通道计数将导致向SPU发出中断。
应当指出,软件可以在两个实例中导致幻影事件:
1.从SPU读取事件状态通道读取事件状态之前,软件在事件已递增SPU读取事件状态通道计数之后确认或屏蔽该事件。这种情况下,读取SPU读取事件状态通道返回指示该事件不再存在或已禁用的数据。
2.如果软件在读取SPU读取事件状态通道和确认已启用的事件之前重置了该事件的中断条件(如从邮箱读取)。这种情况下,读取事件状态寄存器返回指示该事件仍然暂停的数据,尽管生成该事件的条件不再存在。在这种情况下,仍必须确认事件。
为了避免生成幻影事件,应按以下方式处理事件:
·读取SPU读取事件状态通道。
·对于所有要处理的事件,通过将相应的位写入SPU写入事件确认通道来确认事件。
·处理事件(例如,读取邮箱,重置或停止计时器,或读取信号通知寄存器)。
SPU写入事件屏蔽通道
图22E至22F提供了根据本发明的一个示例性实施例的SPU写入事件屏蔽通道的详细信息。SPU写入事件屏蔽通道选择哪些暂停的事件影响SPU读取事件状态通道的状态。保留此通道的内容直到发生后续的通道写入或SPU通道访问为止。可通过读取SPU读取事件屏蔽通道访问此通道的当前内容。
所有事件都记录在SPU暂停事件寄存器中,与SPU事件屏蔽设置无关。事件保持暂停直到被到SPU写入事件确认通道的写入通道(wrch)指令清除,或者特权软件使用SPU通道访问工具将新的值加载到SPU暂停事件寄存器为止。暂停的事件将被清除,即使其被禁用。
暂停的事件(其被禁用并且随后被清除)并不反映在SPU读取事件状态通道中。启用暂停的事件将导致更新SPU读取事件状态通道和SPU中断(如果已启用)。
此通道是非阻塞的并且没有关联的计数。此通道的读取通道计数(rchcnt)指令始终返回‘1’。
SPU读取事件屏蔽通道
图22G至22H提供了根据本发明的一个示例性实施例的SPU读取事件屏蔽通道的详细信息。SPU读取事件屏蔽通道用于读取事件状态屏蔽的当前值。读取此通道始终返回SPU写入事件屏蔽通道最后写入的数据。此通道可用于避免事件状态屏蔽的软件阴影副本并用于SPE上下文保存和恢复操作。此通道是非阻塞的并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU写入事件确认通道
图22I至22J提供了根据本发明的一个示例性实施例的SPU写入事件确认通道的详细信息。对SPU写入事件确认通道(设置了特定的事件位)的写入确认软件正在为相应事件提供服务。已经确认的事件被重置和重新采样。将继续报告已被报告但尚未确认的事件,直到确认或被特权软件使用SPU通道访问工具清除为止。
已禁用的事件不会在SPU读取事件状态通道中报告,但是它们将保持暂停,直到通过将‘1’写入SPU写入事件确认通道的相应位来将其清除为止。确认已禁用的事件将清除该事件,尽管它未被报告。在事件出现之前将其清除会导致软件引起的死锁。
此通道是非阻塞的并且没有关联的计数。无论何时读取通道计数(rchcnt)指令被发送到此通道,都始终返回计数‘1’。
SPU事件
硬件通过检测适当的通道计数、递减器计数或SPU通道访问操作来确定事件。上述BPA支持多种不同类型的事件。例如,当MFC读取标记组状态通道的计数从0更改为非零值时会设置MFC标记组状态更新事件。当MFC读取列表停止和通知标记状态通道的计数从0更改为非零值时会设置MFC DMA列表命令停止和通知事件。当排队的MFC命令操作码寄存器的计数从0(已满)更改为非零值(未满)时会设置MFC SPU命令队列可用事件。当SPU读取入站邮箱通道的计数从0更改为非零值时会设置SPU入站邮箱可用事件。
同样,当递减器计数的最高有效位从0更改为1时会设置SPU递减器事件。如果加载到递减器中的值导致最高有效位从0更改为1,则立即发信号通知事件。将递减器值设置为0将导致事件在单个递减器间隔之后出现。
进而,当SPU写入出站中断邮箱通道计数从0更改为非零值时会设置SPU出站邮箱可用事件。当相应的SPU信号通知通道的计数从0更改为非零值时会设置SPU信号通知1或2可用事件。当原子保留丢失时会设置锁定线保留事件(请参见后面的“锁定线保留丢失事件”部分)。在写入SPU特权控制寄存器并且注意事件请求位设置为1时会设置特权注意事件(请参见后面的“特权注意事件”部分)。当MFC写入多源同步请求通道计数从值0更改为值1时会设置多源同步事件。现在将更详细地描述这些事件。
MFC标记组状态更新事件
MFC标记组状态更新事件用于通知SPU程序一个或多个标记组已完成,MFC读取标记组状态通道已被更新以及可以在不停止SPU的情况下被读取(请参见上面的“MFC标记组状态通道”部分)。在MFC读取标记组状态通道的通道计数从‘0’更改为‘1’时出现事件。事件的出现会将Pend_Event[Tg]设置为‘1’。如果启用事件(即,将SPU_RdEventStat[Tg]设置为‘1’),则SPU事件状态通道的计数被设置为‘1’。
当向SPU暂停事件寄存器发出通道写入(wrch),或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应位设置为0时,Pend_Event[Tg]位被设置为‘0’。在对一个或多个标记组发出任何命令之前必须清除此事件。
MFC DMA列表命令停止和通知事件
MFC DMA列表命令停止和通知事件用于通知SPU程序MFC DMA列表命令中的列表单元已完成,以及MFC读取列表停止和通知标记状态通道已被更新并可以在不停止SPU的情况下被读取。在MFC读取列表停止和通知标记状态通道的通道计数从‘0’更改为‘1’时出现此事件。
当根据关联的SPE完成了设置了停止和通知标志的列表单元的所有传输,以及MFC DMA列表命令中所有先前列表单元的传输时,计数设置为‘1’。出现此事件时,将Pend_Event[Sn]设置为‘1’。如果启用事件(即,将PU_RdEventStat[Sn]设置为‘1’),则SPU读取事件状态通道的计数被设置为‘1’。在向SPU写入事件确认通道发出通道写入(wrch)并且标记位设置为‘1’(SPU_WrEventAck[Sn])时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Sn]位被设置为‘0’。
图23中概述了处理MFC DMA列表命令停止和通知事件的过程。如图23所示,通过执行到SPU读取事件屏蔽通道的读取通道(rdch)指令并将数据保存在“屏蔽”中来开始此过程(步骤2310)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[Sn]设置为‘0’来屏蔽事件(步骤2320)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[Sn]设置为1来确认事件(步骤2330)。
然后,将读取通道(rdch)指令发送到MFC读取列表停止和通知标记状态通道MFC_StallStat[gn](步骤2340)。返回的信息用于确定哪个或哪些标记组具有处于停止和通知状态的DMA列表单元(步骤2350)。然后根据每个具有停止的DMA列表单元的标记组来执行应用特定的操作(步骤2360)。
通过向列表停止和通知标记确认通道MFC_StallAck[MFC Tag]发出写入通道(wrch)指令来确认和继续每个已停止的DMA列表命令,其中提供的MFC标记是要继续的标记组的编码的标记ID(步骤2370)。然后退出DMA列表停止和通知处理机(步骤2380)。应当指出,如果应用软件没有确认在MFC_StallStat[gn]通道中指示的所有停止的标记组,则对于未确认的标记组,不会出现第二个停止和通知事件。
通过向具有SPU_WrEvent Mask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤2390)。然后退出总体事件处理机(步骤2395)。
应当指出,当DMA列表包含多个设置了停止和通知标志的列表单元,和/或当标记组具有多个排队的DMA列表命令并且单元设置了停止和通知标志时,则在为标记组排队DMA列表命令之前,应用软件将标记组特定的停止计数器初始化为0。此外,当为具有停止和通知单元的标记组排队多个DMA列表命令时,使用标记特定的栅栏、屏障或命令屏障来实施排序。每次为标记组指示停止和通知状态时,应递增相应的计数器。应用软件然后可以使用此计数器来确定在列表中的哪一点发生停止。
应用软件使用停止和通知来更新在由于动态更改条件而停止的列表单元之后的列表单元地址和传输大小。可以通过将停止的列表单元之后的列表单元的传输大小设置为0来跳过这些列表单元。但是,不能更改已排队的DMA列表命令中的列表单元数。
MFC SPU命令队列可用事件
MFC SPU命令队列可用事件用于通知SPU程序MFC SPU命令队列中的表项可用并且可在不停止SPU的情况下写入MFC命令操作码通道。当MFC命令操作码通道的通道计数从‘0’(已满)更改为非零(未满)值时出现此事件。
当完成MFC SPU命令队列中的一个或多个MFC DMA命令时,计数被设置为‘1’。当出现此事件时,它将Pend_Event[Qv]设置为‘1’。如果启用事件(即,SPU_RdEvent Mask[Qv]为‘1’),则SPU_RdEventMask[Qv]被设置为‘1’并且SPU读取事件状态通道的计数被设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)(即,SPU_WrEventAck[Qv]设置为‘1’)时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位被设置为‘0’时,Pend_Event[Qv]位被设置为‘0’。
图24中概述了处理MFC SPU命令队列可用事件的过程。如图24所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤2410)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[Qv]设置为‘0’来屏蔽事件(步骤2420)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将PU_WrEventAck[Qv]设置为‘1’来确认事件(步骤2430)。
通过向MFC命令操作码通道(MFC_CMD)发出读取通道计数(rchcnt)指令来获得通道计数(步骤2440)。判定通道计数是否为‘0’(步骤2450)。如果否,则将DMA命令排队到MFC命令队列中(步骤2460)。然后判定队列中是否剩余有其他命令(步骤2470)。如果是,则过程返回步骤2430。如果没有剩余其他命令,或者如果通道计数为‘0’,则退出SPU命令队列处理机(步骤2480)。然后通过向SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复屏蔽(步骤2490)。然后退出总体事件处理机(步骤2495)。
SPU入站邮箱可用事件
SPU入站邮箱可用事件用于通知SPU程序PPE或其他设备已写入空的SPU邮箱并且可在不停止SPU的情况下读取SPU读取入站邮箱通道(请参见124页)。如果启用此事件(即,SPU_RdEventStat[Mb]为‘1’),则SPU读取事件状态通道的计数被设置为‘1’。
当SPU读取入站邮箱通道的通道计数从‘0’(空)更改为非零(非空)值时出现此事件。事件的出现将Pend_Event[Mb]设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)(即,将SPU_WrEventAck[Mb]设置为‘1’)或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Mb]位被设置为‘0’。
图25中概述了处理SPU入站邮箱可用事件的过程。如图25所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤2510)。然后,通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEvent[Masking]设置为‘0’来屏蔽事件(步骤2520)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[Sn]设置为‘1’来确认事件(步骤2530)。
通过向SPU读取入站邮箱通道发出读取通道计数(rchcnt)指令来获得通道计数(步骤2540)。判定通道计数是否为‘0’(步骤2550)。如果否,则通过向SPU读取入站邮箱通道(SPU_RdInMbox)发出读取通道(rdch)指令来读取下一个邮箱数据表项(步骤2560)。然后过程返回步骤2530。
如果通道计数为‘0’,则退出SPU入站邮箱处理机(步骤2570)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤2580)。然后退出总体事件处理机(步骤2590)。
SPU递减器事件
SPU递减器事件用于通知SPU程序递减器已达到‘0’。如果启用事件(即,将SPU_RdEventStat[Tm]设置为‘1’),并且将SPU读取事件状态通道的计数设置为‘1’,则在递减器的最高有效位从‘0’更改为‘1’(负数)值时出现此事件。此事件的出现将Pend_Event[Tm]设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)(SPU_WrEventAck[Tm]设置为1),或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Tm]位被设置为‘0’。
图26中概述了处理SPU递减器事件的过程。如图26所示,通过执行对SPU读取事件屏蔽通道的读取通道(rdch)指令并将数据保存在“屏蔽”中来开始此过程(步骤2610)。通过向SPU写入事件屏蔽通道发出写入通道(wrch)指令并且将SPU_WrEventMask[Tm]设置为‘0’来屏蔽事件(步骤2620)。通过向SPU写入事件确认通道发出写入通道(wrch)指令(SPU_WrEventAck[Tm]设置为‘1’)来确认事件(步骤2630)。
通过向SPU读取递减器通道发出读取通道(rdch)指令来读取递减器值(步骤2640)。如果此值是负数,其可用于确定从所需的间隔开始经过了多少额外的时间。判定是否需要新的计时器事件(步骤2650)。如果需要新的计时器事件,则将新的递减器值写入(wrch)SPU写入递减器通道(步骤2660)。此后,或者如果不需要新的计时器事件,则退出SPU递减器事件处理机(步骤2670)。通过向具有SPU_WrEvent Mask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤2680)。然后退出总体事件处理机(步骤2690)。
SPU出站中断邮箱可用事件
SPU出站中断邮箱可用事件用于通知SPU程序PPE或其他设备已读取满的SPU出站中断邮箱寄存器并且可以在不停止SPU的情况下写入SPU写入出站中断邮箱通道。如果启用事件(即,将SPU_RdEventStat[Me]设置为‘1’)并且将SPU读取事件状态通道的计数设置为‘1’,则在SPU写入出站中断邮箱通道的通道计数从‘0’(已满)更改为非零(未满)值时出现此事件。此事件将Pend_Event[Me]设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)并且Me位设置为‘1’(即,将SPU_WrEventAck[Me]设置为1)时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Me]位被设置为‘0’。
图27中概述了处理SPU出站中断邮箱可用事件的过程。如图27所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤2710)。通过向SPU写入事件屏蔽通道发出写入通道(wrch)指令并且将SPU_WrEvent Mask[Me]设置为‘0’来屏蔽事件(步骤2720)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[Me]设置为1来确认事件(步骤2730)。
通过向SPU写入出站中断邮箱通道发出读取通道计数(rchcnt)指令来获得通道计数(步骤2740)。判定通道计数是否为‘0’(步骤2750)。如果通道计数不为‘0’,则通过向SPU写入出站中断邮箱通道发出写入通道(wrch)指令来写入新的邮箱数据表项(步骤2760)。如果通道计数为‘0’,则再次读取通道计数(步骤2740)。此后,退出SPU出站中断邮箱可用处理机(步骤2770)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤2780)。然后退出总体事件处理机(步骤2790)。
SPU出站邮箱可用事件
SPU出站邮箱可用事件用于通知SPU程序处理器或其他设备已读取满的SPU出站邮箱寄存器并且可以在不停止SPU的情况下写入SPU写入出站邮箱通道。当SPU写入出站邮箱通道的通道计数从‘0’(已满)更改为非零(未满)值时出现此事件。此事件的出现将Pend_Event[Le]设置为‘1’。如果启用事件(即,将SPU_RdEventStat[Le]设置为‘1’),则SPU读取事件状态通道的计数被设置为‘1’。当向SPU写入事件确认通道(参见144页)发出通道写入(wrch)并且Le位设置为‘1’(即,将SPU_WrEventAck[Le]设置为1)时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Le]位被设置为‘0’。
图28中概述了处理SPU出站邮箱可用事件的过程。如图28所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤2810)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[Le]设置为‘0’来屏蔽事件。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[Le]设置为‘1’来确认事件(步骤2830)。
通过向SPU写入出站邮箱通道发出读取通道计数(rchcnt)指令来获得通道计数(步骤2840)。判定通道计数是否为‘0’(步骤2850)。如果通道计数不为‘0’,则通过向SPU写入出站邮箱通道发出写入通道(wrch)指令来写入新的邮箱数据表项(步骤2860)。如果通道计数为‘0’则再次读取通道计数(步骤2840)。此后,退出SPU出站邮箱处理机(步骤2870)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤2880)。然后退出总体事件处理机(步骤2890)。
SPU信号通知2可用事件
SPU信号通知2可用事件用于通知SPU程序其他处理器或设备已写入空的SPU信号通知2寄存器并且可以在不停止SPU的情况下读取SPU信号通知2通道。当SPU信号通知2通道的通道计数从‘0’(空)更改为‘1’(有效)值时出现此事件。如果启用事件(即,SPU_RdEventStat[S2]为‘1’)并且SPU读取事件状态通道的计数设置为‘1’,则此事件将Pend_Event[S2]设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)并且S2位设置为‘1’(SPU_WrEventAck[S2])时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[S2]位被设置为‘0’。
图29中概述了处理SPU信号通知2可用事件的过程。如图29所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤2910)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[S2]设置为‘0’来屏蔽事件(步骤2920)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[S2]设置为‘1’来确认事件(步骤2930)。
通过向SPU信号通知2通道发出读取通道计数(rchcnt)指令来获得通道计数(步骤2940)。判定通道计数是否为‘0’(步骤2950)。如果通道计数不为‘0’,则通过向SPU信号通知2通道发出读取通道指令来读取信号数据(步骤2960)。此后,或者如果通道计数为‘0’,则退出信号通知2处理机(步骤2970)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤2980)。然后退出总体事件处理机(步骤2990)。
SPU信号通知1可用事件
SPU信号通知1可用事件用于通知SPU程序其他处理器或设备已写入空的SPU信号通知1寄存器并可以在不停止SPU的情况下读取SPU信号通知1通道。当SPU信号通知1通道的通道计数从‘0’(空)更改为‘1’(有效)值时出现此事件。如果启用事件(即,SPU_RdEventStat[S1]为‘1’)并且SPU读取事件状态通道的计数设置为‘1’,则此事件将Pend_Event[S1]设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)并且S1位设置为‘1’(SPU_WrEventAck[S1])时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[S1]位被设置为‘0’。
图30中概述了处理SPU信号通知1可用事件的过程。如图30所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤3010)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[S1]设置为‘0’来屏蔽事件(步骤3020)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[S1]设置为‘1’来确认事件(步骤3030)。
通过向SPU信号通知1通道发出读取通道计数(rchcnt)指令来获得通道计数(步骤3040)。判定通道计数是否为‘0’(步骤3050)。
如果通道计数不为‘0’,则通过向SPU信号通知1通道发出读取通道指令来读取信号数据(步骤3060)。此后,或者如果通道计数为‘0’,则退出信号通知1处理机(步骤3070)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤3080)。然后退出总体事件处理机(步骤3090)。
锁定线保留丢失事件
锁定线保留丢失事件用于通知SPU程序导致高速缓存线上保留丢失的总线操作。SPU程序通过发出获得锁定线并保留(getllar)命令来获得保留。当其他处理器或设备修改了带有保留的高速缓存线时,保留将丢失。
如果特权软件写入了MFC原子刷新寄存器中的刷新位(MFC_Atomic_Flush[F]被设置为‘1’),保留也会丢失。事件在保留丢失时出现。此事件的出现将Pend_Event[Lr]设置为‘1’。如果启用事件(即,将SPU_RdEventStat[Lr]设置为‘1’),则SPU读取事件状态通道的计数被设置为‘1’。当向SPU写入事件确认通道发出通道写入(wrch)并且Lr位设置为‘1’(SPU_WrEventAck[Lr])时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Lr]位被设置为‘0’。
图31中概述了处理锁定线保留丢失事件的过程。如图31所示,通过向SPU读取事件屏蔽通道发出读取通道(rdch)指令并将数据保存在“屏蔽”中来开始此操作(步骤3110)。通过向SPU写入事件屏蔽通道发出写入通道(wrch)指令并且将SPU_WrEventMask[Lr]设置为‘0’来屏蔽事件(步骤3120)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[Lr]设置为‘1’来确认事件(步骤3130)。
执行应用特定的功能以响应系统对锁定线区域中数据的修改(步骤3140)。通过检查存储器中的软件结构以确定是否仍在监视锁定线来开始此操作。如果仍在“等待”锁定线,则下一个步骤通常将包括向被修改的同一锁定线区域发出getllar命令以获得新的数据并且然后对其进行操作。
然后,退出锁定线保留丢失事件处理机(步骤3150)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤3160)。然后退出总体事件处理机(步骤3170)并且过程结束。
特权注意事件
特权注意事件用于通知SPU程序特权软件正在请求SPU程序的注意。特权软件通过将‘1’写入SPU特权控制寄存器中的注意事件所需位(即,将SPU_PrivCnt1[A]设置为‘1’)来请求注意。如果启用事件(即,SPU_RdEventStat[A]为‘1’)并且SPU读取事件状态通道的计数设置为‘1’,则此事件将Pend_Event[A]设置为‘1’。当向设置了A位(即,SPU_WrEventAck[A]为‘1’)的SPU写入事件确认通道发出通道写入(wrch)时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[A]位被设置为‘0’。
图32中概述了处理特权注意事件的过程。如图32所示,通过向SPU读取事件屏蔽通道发出读取通道(rdch)指令并将数据保存在“屏蔽”中来开始此过程(步骤3210)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[A]设置为‘0’来屏蔽事件(步骤3220)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[A]设置为‘1’来确认事件(步骤3230)。
执行应用特定的功能以响应特权注意事件(步骤3240)。例如,可以使用此功能来发信号通知正在请求SPU的输出,或某些其他操作。应发出对特权注意事件的应用或操作系统特定的响应,例如停止和发信号、SPU入站邮箱写入、SPU出站中断邮箱写入,或更新系统或I/O存储器空间中的状态。
退出特权注意事件处理机(步骤3250)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤3260)。然后退出总体事件处理机(步骤3270)。
多源同步事件
多源同步事件用于通知SPU程序已完成多源同步请求。通过写入(wrch)MFC写入多源同步请求通道(MFC_WrMSSyncReq)来请求多源同步。当MFC写入多源同步请求通道(MFC_WrMSSyncReq)的通道计数从‘0’更改为‘1’时出现此事件。如果启用事件(即,SPU_RdEventStat[Ms]为‘1’)并且SPU读取事件状态通道的计数设置为‘1’,则此事件将Pend_Event[Ms]设置为‘1’。当向设置了Ms位(即,将SPU_WrEventAck[Ms]设置为‘1’)的SPU写入事件确认通道发出通道写入(wrch)时,或者当特权软件使用SPU通道访问工具更新SPU暂停事件寄存器并且相应的位设置为‘0’时,Pend_Event[Ms]位被设置为‘0’。在发出多源同步请求之前必须清除多源同步事件。
图33中概述了处理多源同步事件的过程。如图33所示,通过将读取通道(rdch)指令发送到SPU读取事件屏蔽通道并将数据保存在“屏蔽”中来开始此过程(步骤3310)。通过向SPU写入事件屏蔽通道发出写入通道指令并且将SPU_WrEventMask[Tm]设置为‘0’来屏蔽事件(步骤3320)。通过对SPU写入事件确认通道执行写入通道(wrch)指令并且将SPU_WrEventAck[Ms]设置为‘1’来确认事件(步骤3330)。
执行应用特定的功能以响应暂停的多源同步操作的完成(步骤3340)。例如,这通常是指示特定缓冲区中的数据已被完整地更新或者不再使用缓冲区区。退出多源同步事件处理机(步骤3350)。通过向具有SPU_WrEventMask[mask]的SPU写入事件屏蔽通道发出写入通道(wrch)指令来恢复“屏蔽”(步骤3360)。然后退出总体事件处理机(步骤3370)。
概括地说,本发明提供了一种用于促进处理器与外部设备之间的通信的机制,该机制减轻了本地存储的负担并允许处理器在等待数据、释放空间或出现事件时继续处于低功率状态。本发明的机制提供了多个通道以便与处理器的各种工具、存储器流控制器、机器状态寄存器以及外部处理器中断工具通信。这些通道可用于提供指令、指令参数、处理器内部信息、信号通知、机器隔离信息、机器中断状态信息、生成的事件以及用于执行事件处理。
重要的是注意到,虽然在完整功能的数据处理系统的上下文中说明了本发明,但是本领域的技术人员将理解,可以以指令的计算机可读介质的形式和各种形式来发布本发明的诸过程,并且本发明均可等同地适用而与实际用于执行发布的信号承载介质的特定类型无关。计算机可读介质的实例包括可记录型介质,诸如软盘、硬盘驱动器、RAM、CD-ROM、DVD-ROM以及传输型介质,诸如数字和模拟通信链路、使用诸如例如射频和光波传输之类的传输形式的有线或无线通信链路。所述计算机可读介质可以采取编码格式的形式,可以对其解码以便在特定的数据处理系统中实际使用。
出于示例和说明目的给出了对本发明的描述,并且所述描述并非旨在是穷举的或是将本发明限于所公开的形式。对于本领域的技术人员来说,许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且当适合于所构想的特定使用时,使得本领域的其他技术人员能够理解本发明的具有各种修改的各种实施例。
Claims (23)
1.一种在数据处理系统中用于在处理器与存储器流控制单元之间传送指令和数据的方法,所述方法包括:
在所述处理器与所述存储器流控制单元之间建立一个或多个存储器流控制命令参数通道以便在所述处理器与所述存储器流控制单元之间传输数据;
在所述存储器流控制单元中通过所述一个或多个存储器流控制命令参数通道来接收存储器流控制命令参数数据;
将所述数据存储在与所述一个或多个通道关联的一个或多个存储器流控制命令参数寄存器中;以及
根据存储在所述一个或多个存储器流控制命令参数寄存器中的所述数据来处理命令队列中的一个或多个命令。
2.根据权利要求1的方法,其中从多处理器系统中的处理器来接收所述存储器流控制命令参数数据。
3.根据权利要求2的方法,其中所述处理器是具有所述处理器和局部存储的协处理单元的一部分。
4.根据权利要求2的方法,其中所述一个或多个存储器流控制命令参数通道是非阻塞通道,并且其中所述一个或多个存储器流控制命令参数通道没有通道计数。
5.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制局部存储地址通道、存储器流控制有效地址高通道、存储器流控制有效地址低或列表地址通道、存储器流控制传输大小或列表大小通道、存储器流控制命令标记标识通道、存储器流控制命令操作码通道或存储器流控制类ID通道中的至少一个通道。
6.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制命令操作码通道,并且其中所述存储器流控制命令参数数据包括命令操作码,所述命令操作码通过所述存储器流控制命令操作码通道来传输并且标识了将由关联的存储器流控制命令执行的操作。
7.根据权利要求6的方法,还包括:
异步地检查所述命令操作码的有效性;
如果所述命令操作码无效,则暂停对存储器流控制命令队列的处理;以及
生成无效的存储器流控制命令中断。
8.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制类ID通道,并且其中所述存储器流控制命令参数数据包括替换类ID,所述替换类ID通过所述存储器流控制类ID通道来接收并且与替换管理表一起用来控制关联的存储器流控制命令的高速缓存替换。
9.根据权利要求8的方法,其中从控制处理器操作的加载和存储地址来生成所述替换类ID。
10.根据权利要求8的方法,还包括:
根据所述替换类ID来生成所述替换管理表的索引;以及
根据所述替换管理表中由所述索引标识的表项来控制替换策略。
11.根据权利要求8的方法,其中所述存储器流控制命令参数数据还包括传输类ID,所述传输类ID通过所述存储器流控制类ID通道来接收并且用于标识对存储的访问。
12.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制命令标记标识通道,并且其中所述存储器流控制命令参数数据包括命令标记标识符,所述命令标记标识符通过所述存储器流控制命令标记标识通道来接收并用于标识一组存储器流控制命令。
13.根据权利要求12的方法,还包括:
异步地检查所述命令标记标识符的有效性;
如果所述命令标记标识符的高位没有被设置成‘0’,则暂停对所述存储器流控制命令队列的处理;以及
生成中断。
14.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制命令传输大小或列表大小通道,并且其中所述存储器流控制命令参数数据包括传输大小或列表大小参数,所述传输大小或列表大小参数通过所述存储器流控制命令传输大小或列表大小通道来接收并标识了关联的存储器流控制命令的直接存储器存取传输的大小。
15.根据权利要求14的方法,还包括:
异步地验证所述传输大小或列表大小参数的有效性;
如果所述传输大小或列表大小参数无效,则暂停对所述存储器流控制命令队列的处理;以及
生成存储器流控制直接存储器存取对齐中断。
16.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制局部存储地址通道,并且其中所述存储器流控制命令参数数据包括与所述存储器流控制命令关联的SPU局部存储地址参数,所述SPU局部存储地址参数通过所述存储器流控制局部存储地址通道来接收并标识了存储器流控制传输的源或目的地地址。
17.根据权利要求16的方法,还包括:
异步地验证所述SPU局部存储地址参数的有效性;
如果所述SPU局部存储地址未对齐,则暂停对所述存储器流控制命令队列的处理;以及
生成存储器流控制直接存储器存取对齐异常。
18.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制有效地址低或列表地址通道,并且其中所述存储器流控制命令参数数据包括关联的存储器流控制命令的存储器流控制有效低地址或列表地址,所述存储器流控制有效低地址或列表地址通过所述存储器流控制有效地址低或列表地址通道来接收。
19.根据权利要求18的方法,还包括:
异步地验证所述存储器流控制有效低地址或列表地址的有效性;
如果所述存储器流控制有效低地址或列表地址未对齐,则暂停对所述存储器流控制命令队列的处理;以及
生成中断。
20.根据权利要求1的方法,其中所述一个或多个存储器流控制命令参数通道包括存储器流控制有效地址高通道,并且其中所述存储器流控制命令参数数据包括关联的存储器流控制命令的存储器流控制有效高地址,所述存储器流控制有效高地址通过所述存储器流控制有效地址高通道来接收。
21.根据权利要求20的方法,还包括:
异步地验证所述存储器流控制有效高地址的有效性;
如果所述存储器流控制有效高地址未对齐,则暂停对所述存储器流控制命令队列的处理;以及
生成中断。
22.根据权利要求6的方法,还包括:
接收到所述存储器流控制命令操作码通道的写入通道指令;以及
将保存在所述一个或多个存储器流控制命令参数通道中的存储器流控制命令参数发送到存储器流控制命令队列以响应接收到到所述存储器流控制命令操作码通道的所述写入通道指令。
23.一种装置,所述装置包括:
用于在处理器与存储器流控制单元之间建立一个或多个存储器流控制命令参数通道以便在所述处理器与所述存储器流控制单元之间传输数据的装置;
用于在所述存储器流控制单元中通过所述一个或多个存储器流控制命令参数通道来接收存储器流控制命令参数数据的装置;
用于将所述数据存储在与所述一个或多个通道关联的一个或多个存储器流控制命令参数寄存器中的装置;以及
用于根据存储在所述一个或多个存储器流控制命令参数寄存器中的所述数据来处理命令队列中的一个或多个命令的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/207,986 US7386636B2 (en) | 2005-08-19 | 2005-08-19 | System and method for communicating command parameters between a processor and a memory flow controller |
US11/207,986 | 2005-08-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1916877A CN1916877A (zh) | 2007-02-21 |
CN100495367C true CN100495367C (zh) | 2009-06-03 |
Family
ID=37737876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100942338A Expired - Fee Related CN100495367C (zh) | 2005-08-19 | 2006-06-27 | 在处理器与存储器流控制器间传送命令参数的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US7386636B2 (zh) |
JP (1) | JP4516941B2 (zh) |
CN (1) | CN100495367C (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7849297B2 (en) * | 2003-08-28 | 2010-12-07 | Mips Technologies, Inc. | Software emulation of directed exceptions in a multithreading processor |
US7418585B2 (en) * | 2003-08-28 | 2008-08-26 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US7711931B2 (en) * | 2003-08-28 | 2010-05-04 | Mips Technologies, Inc. | Synchronized storage providing multiple synchronization semantics |
US7870553B2 (en) * | 2003-08-28 | 2011-01-11 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US7836450B2 (en) * | 2003-08-28 | 2010-11-16 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
DE602004017879D1 (de) * | 2003-08-28 | 2009-01-02 | Mips Tech Inc | Integrierter mechanismus zum suspendieren und endznem prozessor |
US9032404B2 (en) * | 2003-08-28 | 2015-05-12 | Mips Technologies, Inc. | Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor |
US20050050305A1 (en) * | 2003-08-28 | 2005-03-03 | Kissell Kevin D. | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor |
US7739479B2 (en) * | 2003-10-02 | 2010-06-15 | Nvidia Corporation | Method for providing physics simulation data |
US7895411B2 (en) * | 2003-10-02 | 2011-02-22 | Nvidia Corporation | Physics processing unit |
US20050086040A1 (en) * | 2003-10-02 | 2005-04-21 | Curtis Davis | System incorporating physics processing unit |
US20050251644A1 (en) * | 2004-05-06 | 2005-11-10 | Monier Maher | Physics processing unit instruction set architecture |
GB2419198A (en) * | 2004-10-14 | 2006-04-19 | Hewlett Packard Development Co | Identifying performance affecting causes in a data storage system |
US7650266B2 (en) * | 2005-05-09 | 2010-01-19 | Nvidia Corporation | Method of simulating deformable object using geometrically motivated model |
JP5079988B2 (ja) * | 2005-06-13 | 2012-11-21 | オリンパス株式会社 | 分散処理システム、分散処理方法及びプログラム |
US7778271B2 (en) * | 2005-08-19 | 2010-08-17 | International Business Machines Corporation | Method for communicating instructions and data between a processor and external devices |
US7500039B2 (en) * | 2005-08-19 | 2009-03-03 | International Business Machines Corporation | Method for communicating with a processor event facility |
US7386636B2 (en) * | 2005-08-19 | 2008-06-10 | International Business Machines Corporation | System and method for communicating command parameters between a processor and a memory flow controller |
US7472261B2 (en) * | 2005-11-08 | 2008-12-30 | International Business Machines Corporation | Method for performing externally assisted calls in a heterogeneous processing complex |
KR100782594B1 (ko) * | 2006-07-14 | 2007-12-06 | 엠텍비젼 주식회사 | 데이터 처리 기능을 구비한 메모리 장치 |
US7934063B2 (en) * | 2007-03-29 | 2011-04-26 | International Business Machines Corporation | Invoking externally assisted calls from an isolated environment |
US7627744B2 (en) * | 2007-05-10 | 2009-12-01 | Nvidia Corporation | External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level |
US7908403B2 (en) * | 2008-02-14 | 2011-03-15 | International Business Machines Corporation | Reserved device access contention reduction |
JP5864849B2 (ja) * | 2010-10-20 | 2016-02-17 | 株式会社堀場エステック | 流体計測システム |
CN106294232B (zh) * | 2015-05-21 | 2019-04-30 | 深圳市中兴微电子技术有限公司 | 一种dma控制器及其实现方法 |
US10955810B2 (en) | 2015-11-13 | 2021-03-23 | International Business Machines Corporation | Monitoring communications flow in an industrial system to detect and mitigate hazardous conditions |
US10061714B2 (en) * | 2016-03-18 | 2018-08-28 | Oracle International Corporation | Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors |
US10664276B2 (en) | 2016-09-28 | 2020-05-26 | International Business Machines Corporation | Remote command invocation using a register for storing a command and an attention bit indicating command has been issued |
CN109144749B (zh) * | 2018-08-14 | 2021-07-27 | 苏州硅岛信息科技有限公司 | 一种使用处理器实现多处理器间通信的方法 |
EP3792767B1 (en) * | 2019-09-13 | 2023-07-12 | Accemic Technologies GmbH | Event processing |
CN115454502B (zh) * | 2022-09-02 | 2023-06-02 | 杭州登临瀚海科技有限公司 | 用于调度simt架构处理器的返回数据的方法及相应处理器 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62280956A (ja) * | 1986-05-30 | 1987-12-05 | Hitachi Ltd | 配列デ−タ転送方法 |
JPH0750466B2 (ja) * | 1987-08-19 | 1995-05-31 | 富士通株式会社 | 並列計算機キャッシュ・メモリ制御方式 |
US5870627A (en) * | 1995-12-20 | 1999-02-09 | Cirrus Logic, Inc. | System for managing direct memory access transfer in a multi-channel system using circular descriptor queue, descriptor FIFO, and receive status queue |
US6453365B1 (en) * | 1998-02-11 | 2002-09-17 | Globespanvirata, Inc. | Direct memory access controller having decode circuit for compact instruction format |
US6321295B1 (en) * | 1998-03-19 | 2001-11-20 | Insilicon Corporation | System and method for selective transfer of application data between storage devices of a computer system through utilization of dynamic memory allocation |
US6363438B1 (en) | 1999-02-03 | 2002-03-26 | Sun Microsystems, Inc. | Method of controlling DMA command buffer for holding sequence of DMA commands with head and tail pointers |
US6601150B1 (en) * | 1999-05-10 | 2003-07-29 | Nortel Networks Limited | Memory management technique for maintaining packet order in a packet processing system |
US6496925B1 (en) | 1999-12-09 | 2002-12-17 | Intel Corporation | Method and apparatus for processing an event occurrence within a multithreaded processor |
US20030099254A1 (en) | 2000-03-03 | 2003-05-29 | Richter Roger K. | Systems and methods for interfacing asynchronous and non-asynchronous data media |
US7089344B1 (en) | 2000-06-09 | 2006-08-08 | Motorola, Inc. | Integrated processor platform supporting wireless handheld multi-media devices |
US6615890B1 (en) * | 2000-06-09 | 2003-09-09 | Venture Tape Corp. | Tape applicator for glazing applications |
US6681295B1 (en) * | 2000-08-31 | 2004-01-20 | Hewlett-Packard Development Company, L.P. | Fast lane prefetching |
GB2373595B (en) * | 2001-03-15 | 2005-09-07 | Italtel Spa | A system of distributed microprocessor interfaces toward macro-cell based designs implemented as ASIC or FPGA bread boarding and relative common bus protocol |
US6526491B2 (en) * | 2001-03-22 | 2003-02-25 | Sony Corporation Entertainment Inc. | Memory protection system and method for computer architecture for broadband networks |
US6662242B2 (en) | 2001-04-17 | 2003-12-09 | International Business Machines Corporation | Method for PCI IO using PCI device memory mapping in a logically partitioned system |
US7111089B2 (en) | 2002-12-23 | 2006-09-19 | Motorola, Inc. | Programmable scheduler for digital signal processor |
US7739438B2 (en) | 2003-02-12 | 2010-06-15 | Hewlett-Packard Development Company, L.P. | Method for priority-encoding interrupts and vectoring to interrupt code |
US20040193754A1 (en) * | 2003-03-27 | 2004-09-30 | International Business Machines Corporation | DMA prefetch |
US7836222B2 (en) * | 2003-06-26 | 2010-11-16 | International Business Machines Corporation | System and method for tracking messages between a processing unit and an external device |
US7200689B2 (en) * | 2003-07-31 | 2007-04-03 | International Business Machines Corporation | Cacheable DMA |
JP4606823B2 (ja) * | 2004-09-14 | 2011-01-05 | 株式会社日立製作所 | ディスクアレイ装置 |
US7778271B2 (en) | 2005-08-19 | 2010-08-17 | International Business Machines Corporation | Method for communicating instructions and data between a processor and external devices |
US7386636B2 (en) | 2005-08-19 | 2008-06-10 | International Business Machines Corporation | System and method for communicating command parameters between a processor and a memory flow controller |
US7500039B2 (en) * | 2005-08-19 | 2009-03-03 | International Business Machines Corporation | Method for communicating with a processor event facility |
-
2005
- 2005-08-19 US US11/207,986 patent/US7386636B2/en not_active Expired - Fee Related
-
2006
- 2006-06-27 CN CNB2006100942338A patent/CN100495367C/zh not_active Expired - Fee Related
- 2006-08-16 JP JP2006221861A patent/JP4516941B2/ja not_active Expired - Fee Related
-
2008
- 2008-04-21 US US12/106,483 patent/US8024489B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP4516941B2 (ja) | 2010-08-04 |
US7386636B2 (en) | 2008-06-10 |
JP2007052790A (ja) | 2007-03-01 |
CN1916877A (zh) | 2007-02-21 |
US8024489B2 (en) | 2011-09-20 |
US20080244200A1 (en) | 2008-10-02 |
US20070079018A1 (en) | 2007-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100495367C (zh) | 在处理器与存储器流控制器间传送命令参数的系统和方法 | |
CN101243421B (zh) | 在处理器与外部设备之间传送指令和数据的系统和方法 | |
US7487305B2 (en) | Prioritized bus request scheduling mechanism for processing devices | |
US6665699B1 (en) | Method and data processing system providing processor affinity dispatching | |
US7869459B2 (en) | Communicating instructions and data between a processor and external devices | |
CN101371232B (zh) | 在用户级存储器中提供后备存储器 | |
CN101950259A (zh) | 在硬件中登记用户处理程序以用于事务存储器事件处理 | |
CN101221493A (zh) | 并行处理器中的多线程执行 | |
CN1303043A (zh) | 具有指令历史信息的基本块高速缓存的微处理器 | |
US20060015876A1 (en) | Light weight context switching technique | |
CN100432924C (zh) | 用于在数据推测微处理器中操作重放的系统及方法 | |
US7043626B1 (en) | Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming | |
JP5558713B2 (ja) | データ処理システム内でプロセッサ内のイベントに関連する命令およびデータを伝達するための方法 | |
US7627869B2 (en) | Hardware register access via task tag ID | |
US20230161704A1 (en) | Computing system with direct invalidation in a hierarchical cache structure based on at least one designated key identification code | |
JPH0738168B2 (ja) | データ処理装置 | |
JPH0519179B2 (zh) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090603 Termination date: 20200627 |