CN101243421A - 在处理器与外部设备之间传送指令和数据的系统和方法 - Google Patents
在处理器与外部设备之间传送指令和数据的系统和方法 Download PDFInfo
- Publication number
- CN101243421A CN101243421A CNA200680030145XA CN200680030145A CN101243421A CN 101243421 A CN101243421 A CN 101243421A CN A200680030145X A CNA200680030145X A CN A200680030145XA CN 200680030145 A CN200680030145 A CN 200680030145A CN 101243421 A CN101243421 A CN 101243421A
- Authority
- CN
- China
- Prior art keywords
- passage
- processor
- mfc
- channel
- event
- 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.)
- Granted
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/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
Abstract
本发明提供了一种用于在处理器和外部设备之间传送指令和数据的系统和方法。所述系统和方法使用通道接口作为在处理器和存储器流控制器之间通信的主要机制。所述通道接口提供用于例如与处理器设备、存储器流控制设备、机器状态寄存器以及外部处理器中断设备进行通信的通道。可以将这些通道指定为阻塞或非阻塞。对于阻塞通道,当没有可从相应寄存器读取的数据时,或没有可供写入相应寄存器的空间时,将处理器置于低功率“停止”状态。当数据变得可用或空间被释放时,通过跨阻塞通道的通信自动唤醒所述处理器。因此,本发明的通道允许将处理器保持在低功率状态。
Description
技术领域
本发明一般地涉及改进的数据处理系统和方法。更具体地说,本发明涉及用于在处理器与外部设备之间传送指令和数据的系统和方法。
背景技术
通常,在现有技术中,当CPU或其他处理单元(PU)在等待程序外部的某一事件时,操作系统或活动程序将运行轮询循环,它在此循环中将保持读取PU以及程序使用的事件寄存器,直到它所等待的事件发生。当程序运行时,PU在轮询事件寄存器并且未执行有用的工作。
典型的现代处理器通常使用虚拟存储器以及外部设备的存储器映射来进行此通信。另一方面,一些处理器(尤其是在多处理器环境中)仅具有访问本地存储器的权限,而没有访问虚拟存储器的权限。本地存储器是有限的,并且在典型的多处理器配置中,加载和存储操作无法访问此本地存储器外部的存储器。因此,当等待来自外部设备的响应时,限制了针对其他PU功能使用本地存储器。如果一个PU同时等待来自若干设备的通信响应,甚至会进一步限制用于其他功能的可用存储器。
存储器还可以用于跟踪入站或出站寄存器中是否存在有效数据。有效数据是已放置在寄存器中以供接收设备使用但接收设备尚未访问的数据。因此,从以上可知,在多数现代计算设备中,存储器资源存在许多损耗。
发明内容
鉴于以上所述,具有一种用于在处理器与处理器外部的其他设备(例如,其他处理器、输入/输出(I/O)设备等)之间通信的系统和方法是有利的,其中此类通信不会加重处理器的本地或虚拟存储器的负担。此外,具有一种允许在等待数据或事件时将处理器置于低功率状态的系统和方法是有利的。
本发明提供了一种用于在处理器和外部设备之间传送指令和数据的系统和方法和/或一种用于与处理器事件设备通信的系统和方法。本发明的系统和方法使用通道接口作为在处理器和存储器流控制器之间通信的主要机制。所述通道接口提供用于例如与处理器设备、存储器流控制设备、机器状态寄存器以及外部处理器中断设备进行通信的通道。这些通道用于降低处理器的本地存储的负担以及使总线通信量最小化。
可以将这些通道指定为阻塞或非阻塞。对于阻塞通道,当没有可从相应寄存器读取的数据时,或没有可供写入相应寄存器的空间时,将处理器置于低功率“停止”状态。当数据变得可用或空间被释放时,通过跨阻塞通道的通信自动唤醒处理器。因此,本发明的通道允许将处理器保持在低功率状态,而不是如现有技术系统那样不断轮询或遍历事件寄存器。
本发明的这些和其他特征和优点将在以下对本发明的示意性实施例的详细说明中进行描述,或者鉴于以下详细说明,本发明的这些和其他特征和优点将对本领域的技术人员变得显而易见。
附图说明
在所附权利要求中说明了被认为是本发明特性的新颖特征。但是,当结合附图阅读时,通过参考以下对示例性实施例的详细说明,可以最佳地理解发明本身及其优选使用方式、进一步的目的和优点,这些附图是:
图1是根据本发明的示意性实施例的宽带处理器体系结构(BPA)的示意性方块图;
图2是根据本发明的示意性实施例的典型MFC 200的示意性方块图;
图3A是示出了根据本发明的示意性实施例的MFC命令的参数助记符的示意图;
图3B是示出了根据本发明的示意性实施例的DMA列表命令的详细信息的示意图;
图4是示出了根据美国专利申请公开No.2004/0264445中所述机制的关于单对通道的通道电路的SPU发出和控制逻辑以及数据流的布置的示意图;
图5提供了示出根据本发明的示意性实施例的通道接口的示意性操作的流程图;
图6A是示出了本发明的一个实施例使用通道的方式的示意图;
图6B和6C示出了根据本发明的一个示意性实施例的列出SPU通道图的示意图;
图7A是示出了根据本发明的一个示意性实施例的MFC命令操作码通道的详细信息的示意图;
图7B是示出了根据本发明的一个示意性实施例的MFC类ID通道的详细信息的示意图;
图7C示出了根据本发明的一个示意性实施例的用于8路、成组相联(set associative)高速缓存的典型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是示出了根据本发明的示意性实施例的用于轮询以判定MFC DMA列表命令是否已到达设置了停止和通知标志的列表元素的示意性操作的流程图;
图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读取状态保存和恢复通道的详细信息的示意图;
图21是示出了根据本发明的一个示意性实施例的SPU事件设备的逻辑表示的示意性方块图;
图22A是示出了根据本发明的一个示意性实施例的SPU读取事件状态通道的详细信息的示意图;
图22B是示出了根据本发明的一个示意性实施例的SPU写入事件掩码通道的详细信息的示意图;
图22C是示出了根据本发明的一个示意性实施例的SPU读取事件掩码通道的详细信息的示意图;
图22D是示出了根据本发明的一个示意性实施例的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宽带引擎处理器)的实施方式的实例。虽然宽带处理器体系结构(BPA)将用于本发明的优选实施例的描述,但是如本领域的技术人员在阅读以下说明时将容易地理解的,本发明并不限于此。
如图1所示,BPA 100包括power处理器元件(PPE)110的异构布置,所述power处理器元件具有处理器(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。此外,SPE 120-134通过EIB 196连接到MIC 198和BIC 197。MIC 198提供到共享存储器199的通信接口。BIC 197在BPA 100与其他外部总线和设备之间提供通信接口。
PPE 110是双线程PPE 110。此双线程PPE 110和八个SPE 120-134的组合使得BPA 100能够处理10个同时发生的线程以及超过128个未完成的存储器请求。PPE 110用作其他八个处理大多数计算工作负荷的SPE120-134的控制器。例如,PPE 110可以用于运行常规的操作系统,而SPE120-134执行矢量化浮点代码执行。
SPE 120-134包括协处理单元(SPU)140-154、存储器流控制单元155-162、本地存储器或存储163-174以及接口单元180-194。在一个示意性实施例中,本地存储器或存储163-174包括一个对PPE 110可见并可由软件直接寻址的256KB指令和数据存储器。
PPE 110可以使用小程序或线程加载SPE 120-134,从而将SPE链接在一起以处理复杂操作中的每个步骤。例如,集成了BPA 100的机顶盒可以加载程序以便读取DVD、进行视频和音频解码以及显示,并且数据将从SPE传递到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中的本地存储。一个到BIU 220的接口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原子刷新(flush)寄存器、(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之一将DMA命令请求排队到MFC来指示MFC 200执行这些DMA操作。由SPE发出的命令被排队到MFC SPU命令队列280。由PPE发出的命令被排队到MFC代理命令队列270。MFC使用存储器映射单元(MMU)290执行DMA传输所需的所有MFC地址转换和MFC访问保护检查。
MFC命令提供了使得在SPU中执行的代码能够访问主存储以及维护与系统中的其他处理器和设备的同步的主要方法。还提供了命令以管理可选的高速缓存。MFC命令可以由在SPU上运行的代码发出,或者由在其他处理器或设备(例如PPE)上运行的代码发出。在关联的SPU上运行的代码执行一系列通道指令以发出MFC命令。在其他处理器或设备上运行的代码执行一系列存储器映射的I/O(MMIO)传输以向SPE发出MFC命令。所发出的命令被排队到命令队列270和280之一。
通常,可以使用MMIO寄存器或通过由关联SPU执行的通道指令对命令进行排队。MMIO方法旨在由PPE使用以便代表SPE控制主存储与关联的本地存储之间的数据传输。传输数据的MFC命令被称为MFC DMA命令。MFC DMA命令的数据传输方向始终以SPE为参照。因此,将数据传入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传输的参数。这些参数用于MFC代理命令队列不支持的SPU启动的DMA列表命令。每个列表元素的第一个字包含传输大小以及停止和通知标志。第二个字包含有效地址的低32位。虽然为列表中的每个传输元素指定了开始有效地址,但是主要列表命令中仅指定了传输中涉及的本地存储地址(术语“主要”指由图3A中所示的参数指定的列表命令)。
本地存储地址根据列表中的每个元素传输的数据量在内部递增。但是,由于对齐限制,如果本地存储地址没有在列表元素传输的16字节边界上开始,则硬件自动将本地存储地址递增到下一个16字节边界。仅当使用小于16字节的传输大小时才会发生此情况。传输大小小于16字节的列表元素在由有效地址的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通道可以配置为具有只读或只写的访问类型。通道不能配置为读取和写入。除了访问类型之外,每个通道可以配置为非阻塞或阻塞。配置为阻塞的通道使SPU在读取通道计数为“0”的通道或写入满通道(即,通道计数为“0”的通道)时停止。“读取”通道表示只有读取通道指令(rdch)可以被发出到此通道并始终返回数据。“写入”通道表示只有写入通道指令(wrch)可以被发出到此通道且通道始终接受数据。
“读取阻塞”通道表示只有读取通道指令(rdch)可以被发出到此通道。仅当通道计数不为零时,发送到读取阻塞通道的读取通道指令(rdch)才会完成。通道计数为“0”表示通道为空。对计数为“0”的读取阻塞通道执行通道读取(rdch)会导致SPU停止,直到通道中的数据可用。
“写入阻塞”通道表示只有写入通道指令(wrch)可以被发出到此通道。仅当通道计数不为零时,发送到写入阻塞通道的写入通道指令(wrch)才会完成。通道计数为“0”表示通道是满的。对计数为“0”的写入阻塞通道执行写入通道指令(wrch)会导致SPU停止,直到已寻址的通道中的表项变得可用。
应当指出,发出不适用于通道配置的通道指令会导致无效的通道指令中断。例如,向配置为写入或写入阻塞通道的通道发出读取通道指令(rdch)会导致无效的通道指令中断。
每个通道都具有相应的计数(即,深度),所述计数表示可以针对此通道发出的未完成操作的数量。通道深度(即,未完成传输的最大数量)与实施方式相关。当在SPU中建立新的上下文时,或者继续现有上下文时,软件必须初始化通道计数。
在标题为“External Message Passing Method and Apparatus”(申请日为2003年6月26日,在此引入作为参考)的共同未决和共同受让的美国专利申请公开No.2004/0264445中说明了通道和通道接口的操作。图4是示出了根据美国专利申请公开No.2004/0264445中所述机制的关于单对通道的通道电路的SPU发出和控制逻辑以及数据流的布置的示意图。现在将参考图4中示出的各个方块来描述通道接口的操作。
如图4所示,方块430表示SPU的外部设备指令发出和控制逻辑。方块432表示到达和来自SPU的数据流。如所公知的,处理器可以同时与许多不同的外部设备通信。在现在的处理器中,通过通道寄存器完成通信。每个通道仅在一个方向上工作,并且根据SPU可以对通道执行的操作而称为读取通道或写入通道。方块434表示由方块435表示的单个外部设备的一组通道的通道逻辑。如将在以下更详细讨论的,此外部设备435可以是MFC(例如MFC 200)、机器状态寄存器或任何其他类型的外部设备。具体地说,在通道接口的此一般描述之后,将在其后描述使用通道接口与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上的信号将递增相应读取计数器或写入计数器的计数。
如所示出的,计数器436和440的计数在通道停止线460上通过MUX444提供给SPU发出和控制逻辑430。通道写入数据在通道写入数据线462上从SPU数据流方块432提供给写入寄存器442。来自方块436、438和440的输出在总线464上返回数据流方块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”的值或计数指示没有更多的外部写入槽可用。另一方面,对于读取,为“0”的计数值指示没有有效的数据。当计数为零时,如果发出其他SPU读取或写入通道命令,并且通道定义为非阻塞,则计数将保持为“0”并且寄存器中的数据将丢失。如优选实施例中实现的,此寄存器中的先前最新数据将丢失。如果对于此通道寄存器实施方式的位数,计数处于最大值,并且发生其他将导致计数超范围递增的事务,则计数将停留在此最大值。
初始化计数值的方法与实施方式相关,并且一种方法是通过外部接口进行初始化。此计数可用于写入队列的流控制。可以将计数预先设置为外部队列的深度。计数寄存器中的零值表示此外部队列中没有更多的空间。对于为“1”的外部队列深度,计数应预先设置为“1”。当SPU写入此通道时,计数将转到“0”。当外部设备从此通道中读取时,计数将递增到“1”,由此指示通道已准备好其他写入操作。
如上所述,对于通道寄存器的读取,这允许计数指示有效数据。如果计数寄存器预先设置为“0”,这指示数据无效。当外部设备向此通道写入时,计数将递增到“1”,指示数据对于SPU读取有效。当SPU从此通道中读取时,计数将递减回“0”,指示可以发生其他外部写入。
在本发明的优选实施例中,计算机代码通道计数读取指令被发送到计数器以确定读取和写入通道的计数。当外部设备为智能设备(例如多处理器环境中的其他SPU或计算设备)时,外部设备还可以将通道计数读取指令发送到计数器以确定计数。通过此方式,外部设备可以确定通道何时在读取或写入通道中包含未读取的数据和/或何时适于将其他数据发送到包含读取通道的处理器。
使用本发明,读取和写入通道可以为非累积或累积的。累积通道是累积多个写入的通道。即,将入站数据逻辑地添加到已包含在寄存器或其他存储装置中的数据,直到读取该通道。读取该通道时,通常将累积寄存器重置为“0”,并且通道将再次开始累积。此操作可以用于读取或写入通道。
进而,累积通道可以为阻塞或非阻塞的。通常,累积通道将仅具有为“1”的计数深度,而非累积通道可用于对向此通道执行的每个写入计数。
概括地说,通道接口使用已定义的通道来释放存储器,但仍提供有关寄存器中的数据何时有效(换言之,先前尚未被读取)的易于访问的信息。通过向计数机制发送通道计数读取指令来获取此信息。当智能外部设备连接到给定通道时,外部设备可以使用类似指令向给定通道发送数据或从给定通道接收数据。当指定的通道定义为非阻塞通道时,通道接口还可通过使用通道计数读取指令进一步防止意外覆盖寄存器中的数据。
本发明使用通道接口和已定义的通道来向/从不同类型的外部设备以及由此类外部设备提供的设备传送指令和数据。例如,本发明提供了用于使用SPU的通道接口与MFC、机器状态寄存器和中断设备传送指令和数据的机制。此外,通道接口用于与BPA的事件设备、邮箱设备、多源同步设备、代理标记组完成设备、信号通知设备等传送指令和数据。
图6A是示出了本发明的一个实施例使用通道的方式的示意图。如图6A所示,通道接口620提供多个通道,SPU 622可以通过这些通道与MFC624、机器状态寄存器634和中断设备636通信。每个通道可以包括类似于上面图4中所述元素的元素,并且其操作类似于图5A和5B中所述的操作。在本发明的一个示意性实施例中,通道接口620可以对应于由图4中的方块434表示的所有通道对的聚合。SPU 622可以对应于图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命令队列的MFC命令参数寄存器的通道(参见以上的图2和表1)。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通道
MFC类ID通道用于指定每个MFC命令的替换类ID和传输类ID,如图7B所示。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命令入队序列写入。无论与从PPE还是从SPU命令队列的SPU侧发出的命令一起使用,类ID参数都执行相同的功能。类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标记组状态通道
如上所述,每个命令都可以使用标识符(例如5位标识符,称为MFC命令标记)进行标记。可以为多个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标记状态更新请求。可以通过向MFC写入标记状态更新请求通道写入值“0”(即,立即更新)来取消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读取列表停止和通知标记状态通道中的状态无效。为保持一致性,将此条件视为无操作(no-op)。
此通道为非阻塞通道,并且没有关联的计数。每当向此通道发送读取通道计数(rchcnt)指令时,计数都始终返回为“1”。
MFC读取原子命令状态通道
图9G中提供了MFC读取原子命令状态通道的详细信息。MFC读取原子命令状态通道包含上一个已完成的立即MFC原子更新命令的状态。原子命令是无需等待MFC SPU队列中的其他命令而执行以及独立于MFC SPU队列中的其他命令而执行的命令。MFC支持四个原子命令:getllar(获取锁定线并保留)、putllc(有条件地放置锁定线)、putlluc(无条件地放置锁定线),以及putqlluc(无条件地放置排队锁定线)。这些命令执行与可缓存存储指令类似的功能,通常由软件使用以释放“锁定”。putlluc和putqlluc命令之间的差别在于putqlluc命令带有标记并且在MFC SPU命令队列中排在其他MFC命令之后,而putlluc命令则被立即执行。
由于putqlluc命令带有标记并具有隐含的标记特定的屏障,因此相对于已在MFC SPU命令队列内的同一标记组中的所有其他命令进行排序。getllar、putllc和putlluc命令没有标记;因此它们被立即执行。尽管getllar、putllc和putlluc命令被立即执行,但是这些命令仍需要MFC SPU命令队列中的可用槽。应假设与MFC SPU命令队列中的其他命令没有顺序关系。在发出每个getllar、putllc或putlluc命令之后,软件必须从MFC读取原子命令状态通道发出读取以验证命令的完成。在发出立即原子命令之前向此通道发出通道读取(rdch)指令会导致软件引起的死锁。
软件可以读取与此通道关联的通道计数(rchcnt)以判定立即原子MFC命令是否已完成。如果返回值“0”,则立即原子MFC命令尚未完成。如果返回值“1”,则立即原子MFC命令已经完成,并且可通过读取(rdch)此通道来获取状态。
应始终在立即原子MFC命令之后从MFC读取原子命令状态通道读取(rdch)。无需中间读取而从MFC读取原子命令状态通道执行多个原子MFC命令会导致不正确的状态。
特权软件将此通道的计数初始化为“0”。此通道为读取阻塞通道,并且最大计数为“1”。读取时会清除此通道的内容。后续的立即MFC原子更新命令的完成会覆盖较早MFC命令的状态。
上述MFC标记组状态通道用于促进确定标记组状态以及确定MFC DMA列表命令完成。支持三个用于确定标记组状态的基本过程:轮询MFC读取标记组状态通道、等待标记组更新,或等待事件并在标记组状态更新事件时中断。对于轮询一个MFC命令的完成或一组MFC命令的完成,图10中示出了基本过程。
如图10所示,将清除任何未决的标记状态更新请求(步骤1010)。这例如可以通过以下操作完成:向MFC写入标记状态更新请求通道写入“0”,读取与MFC写入标记状态更新请求通道关联的通道计数直到返回值“1”,以及读取MFC读取标记组状态通道并丢弃标记状态数据。
然后,通过向MFC写入标记组查询掩码通道写入适当掩码数据来启用感兴趣的标记组(步骤1020)。随后,例如通过向MFC写入标记状态更新请求通道写入值“0”来请求立即标记状态更新(步骤1030)。
然后,执行MFC读取标记组状态通道的读取(步骤1040)。返回的数据是每个应用了标记组掩码的标记组的当前状态。判定是否存在其他感兴趣的标记组(步骤1050)。如果是,则操作返回步骤1030。否则,操作结束。
对于等待标记组更新,或等待事件(一个或多个标记组完成),图11中示出了基本过程。如所示出的,操作以清除任何未决的标记状态更新请求来开始(步骤1110)。这例如可以通过以下操作完成:向MFC写入标记状态更新请求通道写入“0”,读取与MFC写入标记状态更新请求通道关联的通道计数直到返回值“1”,以及读取MFC读取标记组状态通道并丢弃标记状态数据。
通过向MFC写入标记状态更新请求通道写入值“01”或“10”来请求条件标记状态更新(步骤1120)。值“01”指定任何已启用标记组的完成将导致标记组更新。值“10”指定所有已启用标记组都必须完成以导致SPU标记组状态更新。
此后,读取MFC读取标记组状态通道以等待在步骤1120中指定的特定标记事件(步骤1130)。此读取将停止SPU的执行,直到满足在步骤1120中指定的条件。备选地,可以执行与MFC读取标记组状态通道关联的计数的读取以轮询或等待特定的标记事件(步骤1132)。
判定返回的计数是否具有值“1”(步骤1140)。如果否,则操作返回步骤1132。如果计数为“1”,则读取MFC读取标记组状态通道以判定哪个或哪些标记组完成(步骤1150)。然后操作结束。
等待或轮询条件标记事件的备选方案是使用SPU事件设备。通常,当应用等待多个事件中的一个事件发生或者可以在等待命令完成时执行其他操作时,将使用此过程。所述过程如图12所示。
如图12所示,将清除任何未决的标记状态更新请求(步骤1210)。如上所述,这例如可以通过以下操作完成:向MFC写入标记状态更新请求通道写入“0”,读取与MFC写入标记状态更新请求通道关联的通道计数直到返回值“1”,以及读取MFC读取标记组状态通道并丢弃标记状态数据。
选择一个或多个标记组(步骤1220)。通过向SPU写入事件确认通道写入(wrch)值“1”来清除任何未决的标记状态更新事件(步骤1230)。通过向SPU写入事件掩码通道写入“1”来取消MFC标记组状态更新事件的掩码(步骤1240)。然后,读取SPU读取事件状态通道以等待发生已启用的事件(步骤1250)。此读取将停止SPU的执行,直到发生已启用的事件。备选地,可以读取与SPU读取事件状态通道关联的计数以轮询或等待特定的标记事件,直到计数返回为“1”。
读取SPU读取事件状态通道并判定是否发生已启用的事件(步骤1260)。如果否,则操作返回步骤1250。如果发生已启用的事件,则读取MFC读取标记组状态通道以判定哪个或哪些标记组导致此事件(步骤1270)。然后操作结束。
支持三个用于判定MFC DMA列表命令是否已到达设置了停止和通知标志的列表元素的基本过程:轮询MFC读取列表停止和通知标记状态通道、等待MFC DMA列表命令停止和通知事件,以及在MFC DMA列表命令停止和通知事件时中断。对于轮询以判定MFC DMA列表命令是否已到达设置了停止和通知标志的列表元素,图13中示出了基本过程。
如图13所示,操作开始,将发出具有设置了停止和通知标志的列表元素的MFC DMA列表命令(步骤1310)。读取(rchcnt)与MFC读取列表停止和通知标记状态通道关联的计数直到返回值“1”(步骤1320)。如果返回值“1”(步骤1330),则读取(rdch)MFC读取列表停止和通知标记状态通道(步骤1340)。返回的数据是自上次读取此通道以来每个已到达设置了停止和通知标志的列表元素的标记组的当前状态。
判定一个或多个感兴趣的标记组是否已到达设置了停止和通知标志的列表元素(步骤1350)。如果否,则操作返回步骤1340,直到一个或多个感兴趣的标记组已到达设置了停止和通知标志的列表元素。
如果一个或多个感兴趣的标记组已到达设置了停止和通知标志的列表元素,则向MFC写入列表停止和通知标记确认通道写入(wrch)与已停止的标记组对应的标记组号以重新开始MFC DMA列表命令(步骤1360)。然后操作结束。
图14中示出了用于等待MFC DMA列表命令到达设置了停止和通知标志的列表元素的基本过程。如所示出的,操作开始,将发出具有设置了停止和通知标志的列表元素的MFC DMA列表命令(步骤1410)。执行MFC读取列表停止和通知标记状态通道的读取(rdch)(步骤1420)。返回的数据是自上次读取此通道以来每个已到达设置了停止和通知标志的列表元素的标记组的当前状态。此读取将停止SPU,直到MFC DMA列表命令已到达设置了停止和通知标志的列表元素。
判定一个或多个感兴趣的标记组是否已到达设置了停止和通知标志的列表元素(步骤1430)。将在返回数据中设置相应位。由于针对每个读取重置位,因此软件必须在等待多个标记组停止时执行标记组的累积。
如果否,操作将返回步骤1420,直到一个或多个感兴趣的标记组已到达设置了停止和通知标志的列表元素。否则,将向MFC写入列表停止和通知标记确认通道写入(wrch)与已停止的标记组对应的标记组号以重新启动MFC DMA列表命令(步骤1440)。
等待或轮询列表停止和通知标记组状态的备选方案是使用SPU事件设备。通常,当MFC DMA列表命令执行时SPU程序可以执行其他操作时,使用此过程。所述过程例如在图15中示出。
如图15所示,过程开始,将清除任何未决的MFC DMA列表命令停止和通知事件(步骤1510)。这例如可以通过向SPU写入事件确认通道写入(wrch)值“1”完成。通过向SPU写入事件掩码通道的Sn位写入“1”来启用MFC DMA列表命令停止和通知事件(1520)。发出具有设置了停止和通知标志的列表元素的MFC DMA列表命令(步骤1530)。
可以从SPU读取事件状态通道进行读取(rdch)以等待发生已启用的事件(步骤1540)。此读取将停止SPU的执行直到发生已启用的事件。备选地,可以读取(rchcnt)与SPU读取事件状态通道关联的计数以轮询特定的标记事件,直到计数返回为“1”。
判定是否已发生已启用的事件(步骤1550)。如果否,则操作返回步骤1540。如果发生已启用的事件,则判定是否已发生DMA列表停止和通知事件(步骤1560)。如果尚未发生DMA列表停止和通知事件,则操作返回步骤1540。
如果发生DMA列表停止和通知事件,则执行从MFC读取列表停止和通知标记状态通道读取(rdch)以判定哪个或哪些标记组导致此事件(步骤1570)。然后,向MFC写入列表停止和通知标记确认通道写入(wrch)与已停止的标记组对应的标记组号以重新开始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,即SPU入站邮箱队列。此邮箱队列旨在由PPE写入。但是,其他处理器、SPU或其他设备也可以使用此邮箱队列。通过读取SPU读取入站邮箱通道,SPU可使用由处理器或其他设备使用MMIO写入向此队列写入的数据。向SPU入站邮箱寄存器进行的MMIO写入可以设置SPU事件,而SPU事件又导致SPU中断。
SPU出站邮箱寄存器用于从相应的SPU出站邮箱队列读取32位数据。SPU出站邮箱寄存器具有相应的SPU写入出站邮箱通道,以便将数据写入SPU出站邮箱队列。发送到SPU出站邮箱队列的写入通道(wrch)指令将指令中指定的32位数据加载到SPU出站邮箱队列,以供其他处理器或其他设备读取。如果SPU出站邮箱队列已满,则SPU将在发送到此队列的写入通道(wrch)指令上停止,直到从此邮箱寄存器发生MMIO读取。
对此寄存器进行的MMIO读取返回的信息始终采用SPU写入信息的顺序。没有定义从空SPU出站邮箱队列进行读取而返回的信息。SPU出站邮箱队列中的表项数(或队列深度)与实施方式相关。
对SPU邮箱状态寄存器进行的MMIO读取将返回邮箱队列的状态。SPU出站邮箱队列中的有效队列表项数在SPU邮箱状态寄存器的SPU_Out_Mbox_Count字段中给出。对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邮箱状态寄存器(即SPU_Mbox_Stat[SPU_In_Mbox_Count])的SPU_In_Mbox_Count字段中给出。
在写入SPU_In_Mbox之前,软件将检查SPU邮箱状态寄存器以避免SPU邮箱溢出。对SPU入站邮箱寄存器进行的MMIO写入将设置未决SPU邮箱事件。如果启用(即,SPU_WrEventMask[Mbox]=“1”),则会更新SPU读取事件状态通道,并将其通道计数设置为“1”,这将导致SPU入站邮箱可用事件。
SPU邮箱状态寄存器包含相应SPE中的SPU和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写入出站邮箱队列中存在槽。备选地,可以使用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控制寄存器中启用,则会向此寄存器写入设置为“0”的MFC_CNTL[Dh]。当向SPU写入递减器通道发出写入通道(wrch)指令时,将启动SPU递减器。通过执行此后所述的程序序列,或者当向MFC控制寄存器写入设置为“1”的MFC_CNTL[Dh]时,将停止递减器。在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(SRR0)的内容。当支持嵌套的中断时,向此通道进行写入通常用于恢复中断状态信息。
当启用SPU中断时,不应向此通道进行写入。这样做会导致SRR0的内容不确定。必须在写入此通道之后并在执行依赖于SRR0内容的指令之前发出通道形式的同步指令。
此通道为非阻塞通道,并且没有关联的计数。每当向此通道发送读取通道计数(rchcnt)指令时,计数将始终返回为“1”。
SPU读取状态保存和恢复通道
图20C提供了SPU读取状态保存和恢复通道的详细信息。对此通道进行读取会返回SPU中的状态保存和恢复寄存器0(SRR0)的内容。当支持嵌套的中断时,对此通道进行读取通常用于保存中断状态信息。
此通道为非阻塞通道,并且没有关联的计数。每当向此通道发送读取通道计数(rchcnt)指令时,计数将始终返回为“1”。
SPU事件设备
图21是示出了SPU事件设备的逻辑表示的示意性方块图。如图21所示,边沿触发的事件将SPU未决事件寄存器2110中的相应位设置为“1”。通过使用通道指令向SPU写入事件确认通道2120中的相应位写入“1”,来确认或重置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提供了根据本发明的一个示意性实施例的SPU读取事件状态通道的详细信息。SPU读取事件状态通道包含读取此通道时SPU写入事件掩码通道启用的所有事件的当前状态。如果SPU写入事件掩码通道指定某个事件不是查询的一部分,则在报告的状态中此事件的对应位置为“0”。
从通道计数为“0”的SPU读取事件状态通道进行读取会导致SPU停止,从而提供“等待事件”功能。从通道计数为“1”的此通道进行读取会返回任何已启用的未决事件的状态,并将通道计数设置为“0”。针对以下条件将通道计数设置为“1”:
·发生事件并且SPU写入事件掩码通道中的相应掩码为“1”;
·向SPU写入事件掩码通道中与SPU未决事件寄存器中的“1”对应的位位置写入“1”;
·向SPU写入事件确认通道写入之后已启用的事件未决;以及
·特权软件使用SPU通道访问设备将通道计数设置为“1”。
如果尚未发生任何已启用的事件,则SPU读取事件状态通道的读取通道计数(rchcnt)指令将返回零。当从SPU读取事件状态通道读取事件状态时,读取通道计数(rchcnt)指令可用于避免停止SPU。
特权软件必须将SPU读取事件状态通道的计数值初始化为“0”。将使用SPU通道访问设备中的SPU通道计数寄存器来初始化通道计数。如果启用SPU中断(SPU_RdMachStat[IE]设置为“1”),则非零的SPU读取事件状态通道计数会导致向SPU发出中断。
应当指出,软件可以在两种情况下导致幻像事件:
1.如果在事件使SPU读取事件状态通道计数递增之后并在从SPU读取事件状态通道读取事件状态之前,软件对事件进行确认或掩码。在此情况下,读取SPU读取事件状态通道将返回指示事件不再存在或已禁用的数据。
2.如果在读取SPU读取事件状态通道之前并在确认事件之前,软件重置已启用事件的中断条件(例如从邮箱进行读取)。在此情况下,即使生成事件的条件不再存在,读取事件状态寄存器仍将返回指示事件仍然未决的数据。在此情况下,仍然必须确认事件。
为避免生成幻像事件,应按以下方式处理事件:
·读取SPU读取事件状态通道。
·对于所有要处理的事件,通过向SPU写入事件确认通道写入相应位来确认事件。
·处理事件(例如,读取邮箱、重置或停止计时器,或读取信号通知寄存器)。
SPU写入事件掩码通道
图22B提供了根据本发明的一个示意性实施例的SPU写入事件掩码通道的详细信息。SPU写入事件掩码通道选择哪些未决事件将影响SPU读取事件状态通道的状态。此通道的内容被保留,直到发生后续通道写入或SPU通道访问。可以通过读取SPU读取事件掩码通道访问此通道的当前内容。
无论SPU事件掩码设置为何都将在SPU未决事件寄存器中记录所有事件。事件保持未决,直到被到达SPU写入事件确认通道的写入通道(wrch)指令清除或者特权软件使用SPU通道访问设备向SPU未决事件寄存器加载新值。未决事件将被清除,即使其已被禁用。
已禁用并随后清除的未决事件不会反映在SPU读取事件状态通道中。启用未决事件会导致更新SPU读取事件状态通道和SPU中断(如果启用)。
此通道为非阻塞通道并且没有关联的计数。此通道的读取通道计数(rchcnt)指令将始终返回“1”。
SPU读取事件掩码通道
图22C提供了根据本发明的一个示意性实施例的SPU读取事件掩码通道的详细信息。SPU读取事件掩码通道用于读取事件状态掩码的当前值。读取此通道将始终返回由SPU写入事件掩码通道写入的最后数据。此通道可用于避免事件状态掩码的软件影子复制以及进行SPE上下文保存和恢复操作。此通道为非阻塞通道,并且没有关联的计数。每当向此通道发送读取通道计数(rchcnt)指令时,计数将始终返回为“1”。
SPU写入事件确认通道
图22D提供了根据本发明的一个示意性实施例的SPU写入事件确认通道的详细信息。向设置了特定事件位的SPU写入事件确认通道进行写入将确认软件是否处理相应事件。已确认的事件被重置和重新取样。已报告但未确认的事件将继续被报告,直到被确认或直到由特权软件使用SPU通道访问设备清除。
不会在SPU读取事件状态通道中报告已禁用的事件,但是事件会保持未决,直到通过向SPU写入事件确认通道中的相应位写入“1”来清除这些事件。确认已禁用的事件会清除此事件,即使尚未报告此事件也会如此。在事件发生之前清除事件会导致软件引起的死锁。
此通道为非阻塞通道,并且没有关联的计数。每当向此通道发送读取通道计数(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”时,会发生此事件。
当设置了停止和通知标志的列表元素的所有传输,以及MFC DMA列表命令中的所有先前列表元素的传输都已相对于关联的SPE完成时,会将计数设置为“1”。当发生此事件时,它将Pend_Event[Sn]设置为“1”。如果启用事件(即,将PU_RdEventStat[Sn]设置为“1”),则会将SPU读取事件状态通道的计数设置为“1”。当向标记位设置为“1”的SPU写入事件确认通道发出通道写入(wrch)(SPU_WrEventAck[Sn]),或者当特权软件使用相应位设置为“0”的SPU通道访问设备更新SPU未决事件寄存器时,会将Pend_Event[Sn]位设置为“0”。
图23中示出了用于处理MFC DMA列表命令停止和通知事件的过程。如图23所示,过程开始,将对SPU读取事件掩码通道执行读取通道(rdch)指令并将数据保存在“掩码”中(步骤2310)。通过向SPU_WrEventMask[Sn]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤2320)。通过向SPU_WrEventAck[Sn]设置为1的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤2330)。
然后,向MFC读取列表停止和通知标记状态通道MFC_StallStat[gn]发送读取通道(rdch)指令(步骤2340)。返回的信息用于判定哪个或哪些标记组具有处于停止和通知状态的DMA列表元素(步骤2350)。然后,针对每个具有已停止DMA列表元素的标记组执行应用特定的操作(步骤2360)。
通过向列表停止和通知标记确认通道MFC_StallAck[MFC标记](其中提供的MFC标记是要重新开始的标记组的编码标记ID)发出写入通道(wrch)指令来确认和重新开始每个已停止的DMA列表命令(步骤2370)。然后退出DMA列表停止和通知处理机(步骤2380)。应当指出,如果应用软件没有确认MFC_StallStat[gn]通道中指示的所有已停止标记组,则不会针对未确认的标记组发生第二个停止和通知事件。
通过向具有SPU_WrEvent Mask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤2390)。然后退出通用事件处理机(步骤2395)。
应当指出,当DMA列表包含多个设置了停止和通知标志的列表元素,以及/或者当标记组具有多个排队有设置了停止和通知标志的元素的DMA列表命令时,应用软件将在为标记组排队DMA列表命令之前将标记组特定的停止计数器初始化为0。此外,当为具有停止和通知元素的标记组排队多个DMA列表命令时,将借助标记特定的防护、屏障或命令屏障强制实施排序。每次指示标记组的停止和通知状态时,都应递增相应的计数器。然后,应用软件可以使用此计数器来确定将在列表中的哪个点发生停止。
应用软件使用停止和通知来更新由于动态更改条件而停止的列表元素之后的列表元素地址和传输大小。可以通过将其传输大小设置为0来跳过已停止列表元素之后的列表元素。但是,不能更改排队的DMA列表命令中的列表元素数。
MFC SPU命令队列可用事件
MFC SPU命令队列可用事件用于通知SPU程序MFC SPU命令队列中的某个表项可用以及可以写入MFC命令操作码通道而不会停止SPU。当MFC命令操作码通道的通道计数从“0”(已满)更改为非零(未满)值时,会发生此事件。
当MFC SPU命令队列中的一个或多个MFC DMA命令完成时,会将计数设置为“1”。当发生此事件时,它将Pend_Event[Qv]设置为“1”。如果启用事件(即,SPU_RdEventMask[Qv]为“1”),则会将SPU_RdEventStat[Qv]设置为“1”并将SPU读取事件状态通道的计数设置为“1”。当向SPU写入事件确认通道发出通道写入(wrch)(即,将SPU_WrEventAck[Qv]设置为“1”),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[Qv]位设置为“0”。
图24中示出了用于处理MFC SPU命令队列可用事件的过程。如图24所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤2410)。通过向SPU_WrEventMask[Qv]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤2420)。通过向PU_WrEventAck[Qv]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤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读取入站邮箱通道(参见124页)而不停止SPU。如果启用此事件(即,SPU_RdEventStat[Mb]为“1”),则会将SPU读取事件状态通道的计数设置为“1”。
当SPU读取入站邮箱通道的通道计数从“0”(空)更改为非零(非空)值时,会发生此事件。事件的发生会将Pend_Event[Mb]设置为“1”。当向SPU写入事件确认通道发出通道写入(wrch)(即,将SPU_WrEventAck[Mb]设置为“1”),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[Mb]位设置为“0”。
图25中示出了用于处理SPU入站邮箱可用事件的过程。如图25所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤2510)。然后,通过向SPU_WrEvent[Masking]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤2520)。通过向SPU_WrEventAck[Sn]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤2530)。
通过向SPU读取入站邮箱通道发出读取通道计数(rchcnt)指令来获取通道计数(步骤2540)。判定通道计数是否为“0”(步骤2550)。如果否,则通过向SPU读取入站邮箱通道(SPU_RdInMbox)发出读取通道(rdch)指令来读取下一个邮箱数据表项(步骤2560)。然后过程返回步骤2530。
如果通道计数为“0”,则退出SPU入站邮箱处理机(步骤2570)。通过向具有SPU_WrEventMask[掩码]的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”),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[Tm]位设置为“0”。
图26中示出了用于处理SPU递减器事件的过程。如图26所示,过程开始,将对SPU读取事件掩码通道执行读取通道(rdch)指令并将数据保存在“掩码”中(步骤2610)。通过向SPU_WrEventMask[Tm]设置为“0”的SPU写入事件掩码通道发出写入通道(wrch)指令来对事件进行掩码(步骤2620)。通过向SPU写入事件确认通道发出写入通道(wrch)指令(将SPU_WrEventAck[Tm]设置为“1”)来确认事件(步骤2630)。
通过向SPU读取递减器通道发出读取通道(rdch)指令来读取递减器值(步骤2640)。如果此值为负数,则它可以用于确定自所需间隔起所经历的额外时间。判定是否需要新的计时器事件(步骤2650)。如果需要新的计时器事件,则向SPU写入递减器通道写入(wrch)新的递减器值(步骤2660)。此后,或者如果不需要新的计时器事件,则退出SPU递减器事件处理机(步骤2670)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤2680)。然后退出通用事件处理机(步骤2690)。
SPU出站中断邮箱可用事件
SPU出站中断邮箱可用事件用于通知SPU程序PPE或其他设备已读取满的SPU出站中断邮箱寄存器以及可写入SPU写入出站中断邮箱通道而不停止SPU。如果启用此事件(即,SPU_RdEventStat[Me]设置为“1”)并将SPU读取事件状态通道的计数设置为“1”,则当SPU写入出站中断邮箱通道的通道计数从“0”(已满)更改为非零(未满)值时将发生此事件。此事件将Pend_Event[Me]设置为“1”。当向Me位设置为“1”的SPU写入事件确认通道发出通道写入(wrch)(即,将SPU_WrEventAck[Me]设置为1),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[Me]位设置为“0”。
图27中示出了用于处理SPU出站中断邮箱可用事件的过程。如图27所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤2710)。通过向SPU_WrEvent Mask[Me]设置为“0”的SPU写入事件掩码通道发出写入通道(wrch)指令来对事件进行掩码(步骤2720)。通过向SPU_WrEventAck[Me]设置为1的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤2730)。
通过向SPU写入出站中断邮箱通道发出读取通道计数(rchcnt)指令来获取通道计数(步骤2740)。判定通道计数是否为“0”(步骤2750)。如果通道计数不为“0”,则通过向SPU写入出站中断邮箱通道发出写入通道(wrch)指令来写入新的邮箱数据表项(步骤2760)。如果通道计数为“0”,则再次读取通道计数(步骤2740)。此后,将退出SPU出站中断邮箱可用处理机(步骤2770)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤2780)。然后退出通用事件处理机(步骤2790)。
SPU出站邮箱可用事件
SPU出站邮箱可用事件用于通知SPU程序处理器或其他设备已读取满的SPU出站邮箱寄存器以及可写入SPU写入出站邮箱通道而不会停止SPU。当SPU写入出站邮箱通道的通道计数从“0”(已满)更改为非零(未满)值时,会发生此事件。事件的发生将Pend_Event[Le]设置为“1”。如果启用事件(即,将SPU_RdEventStat[Le]设置为“1”),则会将SPU读取事件状态通道的计数设置为“1”。当向Le位设置为“1”的SPU写入事件确认通道发出通道写入(wrch)(参见144页)(即,将SPU_WrEventAck[Le]设置为1),或者当特权软件使用相应位设置为“0”的SPU通道访问设备更新SPU未决事件寄存器时,会将Pend_Event[Le]位设置为“0”。
图28中示出了用于处理SPU出站邮箱可用事件的过程。如图28所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤2810)。通过向SPU_WrEventMask[Le]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤2820)。通过向SPU_WrEventAck[Le]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤2830)。
通过向SPU写入出站邮箱通道发出读取通道计数(rchcnt)指令来获取通道计数(步骤2840)。然后,判定通道计数是否为“0”(步骤2850)。如果通道计数不为“0”,则通过向SPU写入出站邮箱通道发出写入通道(wrch)指令来写入新的邮箱数据表项(步骤2860)。如果通道计数为“0”,则再次读取通道计数(步骤2840)。此后,将退出SPU出站邮箱处理机(步骤2870)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤2880)。然后退出通用事件处理机(步骤2890)。
SPU信号通知2可用事件
SPU信号通知2可用事件用于通知SPU程序其他处理器或设备已写入空SPU信号通知2寄存器,以及可读取SPU信号通知2通道而不会停止SPU。当SPU信号通知2通道的通道计数从“0”(空)更改为“1”(有效)值时,会发生此事件。如果启用事件(即,SPU_RdEventStat[S2]为“1”)并将SPU读取事件状态通道的计数设置为“1”,则此事件将Pend_Event[S2]设置为“1”。当向S2位设置为“1”的SPU写入事件确认通道发出通道写入(wrch)(SPU_WrEventAck[S2]),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[S2]位设置为“0”。
图29中示出了用于处理SPU信号通知2可用事件的过程。如图29所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤2910)。通过向SPU_WrEventMask[S2]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤2920)。通过向SPU_WrEventAck[S2]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤2930)。
通过向SPU信号通知2通道发出读取通道计数(rchcnt)指令来获取通道计数(步骤2940)。判定通道计数是否为“0”(步骤2950)。如果通道计数不为“0”,则通过向SPU信号通知2通道发出读取通道指令来读取信号数据(步骤2960)。此后,或者如果通道计数为“0”,则退出信号通知2处理机(步骤2970)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤2980)。然后退出通用事件处理机(步骤2990)。
SPU信号通知1可用事件
SPU信号通知1可用事件用于通知SPU程序其他处理器或设备已写入空SPU信号通知1寄存器,以及可读取SPU信号通知1通道而不会停止SPU。当SPU信号通知1通道的通道计数从“0”(空)更改为“1”(有效)值时,会发生此事件。如果启用事件(即,SPU_RdEventStat[S1]为“1”)并将SPU读取事件状态通道的计数设置为“1”,则此事件会将Pend_Event[S1]设置为“1”。当向S1位设置为“1”的SPU写入事件确认通道发出通道写入(wrch)(SPU_WrEventAck[S1]),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[S1]位设置为“0”。
图30中示出了用于处理SPU信号通知1可用事件的过程。如图30所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤3010)。通过向SPU_WrEventMask[S1]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤3020)。通过向SPU_WrEventAck[S1]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤3030)。
通过向SPU信号通知1通道发出读取通道计数(rchcnt)指令来获取通道计数(步骤3040)。判定通道计数是否为“0”(步骤3050)。
如果通道计数不为“0”,则通过向SPU信号通知1通道发出读取通道指令来读取信号数据(步骤3060)。此后,或者如果通道计数为“0”,则退出信号通知1处理机(步骤3070)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤3080)。然后退出通用事件处理机(步骤3090)。
锁定线保留丢失事件
锁定线保留丢失事件用于通知SPU程序已导致高速缓存线上的保留丢失的总线操作。SPU程序通过发出获取锁定线并保留(getllar)命令来获取保留。当其他处理器或设备修改具有保留的高速缓存线时,保留会丢失。
如果特权软件写入MFC原子刷新寄存器中的刷新位(将MFC_Atomic_Flush[F]设置为“1”),保留也会丢失。当保留丢失时会发生事件。此事件的发生将Pend_Event[Lr]设置为“1”。如果启用事件(即,将SPU_RdEventStat[Lr]设置为“1”),则将SPU读取事件状态通道的计数设置为“1”。当向Lr位设置为“1”的SPU写入事件确认通道发出通道写入(wrch)(SPU_WrEventAck[Lr]),或者当特权软件使用相应位设置为“0”的SPU通道访问设备来更新SPU未决事件寄存器时,会将Pend_Event[Lr]位设置为“0”。
图31中示出了用于处理锁定线保留丢失事件的过程。如图31所示,操作开始,将对SPU读取事件掩码通道发出读取通道(rdch)指令并将数据保存在“掩码”中(步骤3110)。通过向SPU_WrEventMask[Lr]设置为“0”的SPU写入事件掩码通道发出写入通道(wrch)指令来对事件进行掩码(步骤3120)。通过向SPU_WrEventAck[Lr]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤3130)。
执行应用特定的功能以响应系统修改锁定线区域中的数据(步骤3140)。这通常通过检查存储器中的软件结构以判定锁定线是否仍被监视开始。如果它仍在“等待”,则下一步通常包括向被修改的同一锁定线区域发出getllar命令以获取新数据并对此数据执行操作。
然后,退出锁定线保留丢失事件处理机(步骤3150)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤3160)。然后退出通用事件处理机(步骤3170)并且过程结束。
特权关注事件
特权关注事件用于通知SPU程序特权软件正在从SPU程序请求关注。特权软件通过向SPU特权控制寄存器的关注事件所需位写入“1”(即,将SPU_PrivCntl[A]设置为“1”)来请求关注。如果启用事件(即,SPU_RdEventStat[A]为“1”)并将SPU读取事件状态通道的计数设置为“1”,则此事件将Pend_Event[A]设置为“1”。当向设置了A位的SPU写入事件确认通道发出通道写入(wrch)(即,SPU_WrEventAck[A]为“1”),或者当特权软件使用相应位设置为“0”的SPU通道访问设备更新SPU未决事件寄存器时,会将Pend_Event[A]位设置为“0”。
图32中示出了用于处理特权关注事件的过程。如图32所示,过程开始,将对SPU读取事件掩码通道发出读取通道(rdch)指令并将数据保存在“掩码”中(步骤3210)。通过向SPU_WrEventMask[A]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤3220)。通过向SPU_WrEventAck[A]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤3230)。
执行应用特定的功能以响应特权关注事件(步骤3240)。这可以例如用于发信号通知正在请求使用SPU,或者某种其他操作。应发出对特权关注事件的应用或操作系统特定的响应,例如停止和发信号通知、SPU入站邮箱写入、SPU出站中断邮箱写入,或更新系统或I/O存储器空间中的状态。
退出特权关注事件处理机(步骤3250)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤3260)。然后退出通用事件处理机(步骤3270)。
多源同步事件
多源同步事件用于通知SPU程序多源同步请求已经完成。通过向MFC写入多源同步请求通道(MFC_WrMSSyncReq)进行写入(wrch)来请求多源同步。当MFC写入多源同步请求通道(MFC_WrMSSyncReq)的通道计数从“0”更改为“1”时,会发生此事件。如果启用事件(即,SPU_RdEventStat[Ms]为“1”)并将SPU读取事件状态通道的计数设置为“1”,则此事件将Pend_Event[Ms]设置为“1”。当向设置了Ms位的SPU写入事件确认通道发出通道写入(wrch)(即,将SPU_WrEventAck[Ms]设置为“1”),或者当特权软件使用相应位设置为“0”的SPU通道访问设备更新SPU未决事件寄存器时,会将Pend_Event[Ms]位设置为“0”。必须在发出多源同步请求之前清除多源同步事件。
图33中示出了用于处理多源同步事件的过程。如图33所示,过程开始,将对SPU读取事件掩码通道发送读取通道(rdch)指令并将数据保存在“掩码”中(步骤3310)。通过向SPU_WrEventMask[Tm]设置为“0”的SPU写入事件掩码通道发出写入通道指令来对事件进行掩码(步骤3320)。通过向SPU_WrEventAck[Ms]设置为“1”的SPU写入事件确认通道执行写入通道(wrch)指令来确认事件(步骤3330)。
执行应用特定的功能以响应未决多源同步操作的完成(步骤3340)。例如,这将通常是特定缓冲区中的数据已经完全更新,或者缓冲区域不再处于使用中的指示。退出多源同步事件处理机(步骤3350)。通过向具有SPU_WrEventMask[掩码]的SPU写入事件掩码通道发出写入通道(wrch)指令来恢复“掩码”(步骤3360)。然后退出通用事件处理机(步骤3370)。
概括地说,本发明提供了一种用于促进处理器与外部设备之间的通信的机制,所述机制降低了本地存储的负担,并允许处理器在等待数据、释放空间或事件发生时保持在低功率状态。本发明的机制提供了多个通道,用于与处理器、存储器流控制器、机器状态寄存器的设备以及外部处理器中断设备进行通信。这些通道可用于提供指令、指令参数、处理器间信息、信号通知、机器隔离信息、机器中断状态信息、生成事件,以及执行事件处理。
重要的是指出,虽然在完整功能的数据处理系统的上下文中说明了本发明,但是本领域的技术人员将理解,可以以指令的计算机可读介质的形式和各种形式来发布本发明的诸过程,并且本发明均可等同地适用而与实际用于执行发布的信号承载介质的特定类型无关。计算机可读介质的实例包括可记录型介质,诸如软盘、硬盘驱动器、RAM、CD-ROM、DVD-ROM以及传输型介质,诸如数字和模拟通信链路、使用诸如例如射频和光波传输之类的传输形式的有线或无线通信链路。所述计算机可读介质可以采取编码格式的形式,可以对其解码以便在特定的数据处理系统中实际使用。
出于示例和说明目的给出了对本发明的描述,并且所述描述并非旨在是穷举的或是将本发明限于所公开的形式。对于本领域的技术人员来说,许多修改和变化都将是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且当适合于所构想的特定使用时,使得本领域的其他技术人员能够理解本发明的具有各种修改的各种实施例。
Claims (85)
1.一种在数据处理系统中用于在处理器与存储器流控制MFC单元之间传送指令和数据的方法,所述方法包括:
在所述处理器与MFC单元之间建立一个或多个通道以便在所述处理器与所述MFC单元之间传输数据;
通过所述一个或多个通道在所述MFC单元中接收数据;
在与所述一个或多个通道关联的一个或多个寄存器中存储所述数据;以及
根据存储在所述一个或多个寄存器中的数据来处理命令队列中的一个或多个命令。
2.根据权利要求1的方法,其中所述一个或多个通道包括用于与MFC代理标记组完成设备通信的一个或多个MFC标记组状态通道,所述数据为MFC标记组数据,以及所述一个或多个寄存器为MFC标记寄存器。
3.根据权利要求2的方法,其中所述一个或多个MFC标记组状态通道包括MFC写入标记组查询掩码通道,并且其中所述MFC标记组数据包括通过所述MFC写入标记组查询掩码通道接收的标识符,所述标识符标识了关联的查询MFC命令的标记组。
4.根据权利要求2的方法,其中所述一个或多个MFC标记组状态通道包括MFC读取标记组查询掩码通道,并且其中发送到所述MFC读取标记组查询掩码通道的读取通道指令用于读取代理标记组查询掩码寄存器中存储的当前值,所述当前值是最后写入MFC写入标记组查询掩码通道的数据。
5.根据权利要求2的方法,其中所述一个或多个MFC标记组通道包括MFC写入标记状态更新请求通道,并且其中发送到所述MFC写入标记状态更新请求通道的写入通道指令将更新MFC标记组状态值。
6.根据权利要求5的方法,其中发送到所述MFC写入标记状态更新请求通道的所述写入通道指令指定将立即执行所述更新或在发生条件时执行所述更新。
7.根据权利要求6的方法,其中所述条件是任何已启用的MFC标记组完成具有“没有未完成的操作”状态或所有已启用的MFC标记组具有“没有未完成的操作”状态中的一项。
8.根据权利要求2的方法,其中所述一个或多个MFC标记组状态通道包括MFC读取标记组状态通道,并且其中发送到所述MFC读取标记组状态通道的读取通道指令将返回已启用的标记组的当前状态。
9.根据权利要求2的方法,其中所述一个或多个MFC标记组状态通道包括MFC读取列表停止和通知标记状态通道,并且其中发送到所述MFC读取列表停止和通知标记状态通道的读取通道指令标识了哪些标记组具有已停止的命令。
10.根据权利要求2的方法,其中所述一个或多个MFC标记组状态通道包括MFC写入列表停止和通知标记确认通道,并且其中发送到所述MFC写入列表停止和通知标记确认通道的写入通道指令确认标记组包含已停止的命令。
11.根据权利要求2的方法,其中所述一个或多个MFC标记组状态通道包括MFC读取原子命令状态通道,并且其中发送到所述MFC读取原子命令状态通道的读取通道指令将返回最后完成的立即MFC原子更新命令的状态。
12.根据权利要求2的方法,还包括:使用所述一个或多个MFC标记组状态通道来确定标记组的状态。
13.根据权利要求12的方法,其中使用所述一个或多个MFC标记组状态通道包括:
通过将标识感兴趣的标记组的标记组掩码数据写入MFC写入标记组查询掩码通道来启用所述感兴趣的标记组;
通过将值写入MFC写入标记状态更新请求通道来请求立即标记状态更新;以及
将读取通道指令发送到MFC读取标记组状态通道以便应用所述标记组掩码数据和获取所述感兴趣的标记组的当前状态。
14.根据权利要求12的方法,其中使用所述一个或多个MFC标记组状态通道包括:
通过将值写入MFC写入标记状态更新请求通道来请求有条件的标记状态更新;以及
读取MFC读取标记组状态通道以判定是否已发生状态更新以及标识已完成其处理的标记组。
15.根据权利要求12的方法,其中使用所述一个或多个MFC标记组状态通道包括:
通过将标识感兴趣的标记组的标记组掩码数据写入MFC写入标记组查询掩码通道来选择所述感兴趣的标记组;
通过将值写入处理器写入事件掩码通道来启用MFC标记组状态更新事件;
将读取通道指令发送到处理器读取事件状态通道;
根据将所述读取通道指令发送到所述处理器读取事件状态通道的结果来判定是否已发生所述MFC标记组状态更新事件;以及
读取MFC读取标记组状态通道以标识如果所述MFC标记组状态更新事件已发生,则哪个标记组导致了所述事件。
16.根据权利要求2的方法,还包括:
使用所述一个或多个MFC标记组状态通道来判定MFC直接存储器访问DMA列表命令是否已到达设置了停止和通知标志的列表元素。
17.根据权利要求16的方法,其中使用所述一个或多个MFC标记组通道包括:
读取MFC读取列表停止和通知标记状态通道以标识设置了停止和通知标志的每个标记组的当前状态;
判定感兴趣的标记组是否已到达设置了停止和通知标志的列表元素;
如果所述感兴趣的标记组已到达设置了停止和通知标志的列表元素,将写入通道指令发送到具有与所述感兴趣的标记组对应的标记组标识符的MFC写入列表停止和通知标记确认通道。
18.根据权利要求16的方法,其中使用所述一个或多个MFC标记组通道包括:
清除任何未决的MFC直接存储器访问DMA列表命令停止和通知事件;
读取处理器读取事件状态通道;根据读取所述处理器读取事件状态通道的结果来判定是否已发生已启用的事件;
如果发生已启用的事件,则判定所述已启用的事件是否为DMA列表停止和通知事件;
如果所述已启用的事件是DMA列表停止和通知事件,则将读取通道指令发送到MFC读取列表停止和通知标记状态通道,以标识哪个标记组导致了所述DMA列表停止和通知事件;以及
将写入通道指令发送到具有与导致所述DMA列表停止和通知事件的标记组对应的标记组标识符的MFC写入列表停止和通知标记确认通道。
19.根据权利要求1的方法,其中所述一个或多个通道包括一个或多个用于与所述处理器中提供的邮箱设备通信的邮箱通道,其中所述邮箱设备包括一组邮箱队列,其中所述邮箱队列组中的每个邮箱队列都具有关联的邮箱通道和存储器映射的输入/输出MMIO寄存器。
20.根据权利要求19的方法,其中所述处理器使用处理器通道指令来访问与所述邮箱队列关联的邮箱通道,并且其中外部设备使用与所述邮箱通道关联的MMIO寄存器来访问与所述邮箱队列关联的邮箱通道。
21.根据权利要求19的方法,其中所述邮箱队列组包括用于将指令或数据从所述处理器发送到外部设备的处理器出站邮箱队列和处理器出站中断邮箱队列。
22.根据权利要求21的方法,其中所述一个或多个邮箱通道包括用于将数据写入所述处理器出站邮箱队列的处理器写入出站邮箱通道,其中将写入通道指令发送到所述处理器出站邮箱通道将在所述写入通道指令中指定的数据载入所述处理器出站邮箱队列以供外部设备读取。
23.根据权利要求22的方法,其中如果所述处理器出站邮箱队列已满,则处理器在所述写入通道指令上停止,直到执行与所述处理器写入出站邮箱通道关联的MMIO寄存器的MMIO读取。
24.根据权利要求19的方法,其中所述邮箱队列组包括用于为所述处理器从外部设备接收指令或数据的处理器入站邮箱队列,并且其中所述处理器入站邮箱队列具有用于从所述处理器入站邮箱队列读取数据的关联的处理器读取入站邮箱通道,其中发送到所述处理器读取入站邮箱通道的读取通道指令将数据从所述处理器入站邮箱队列载入所述读取通道指令所指定的寄存器。
25.根据权利要求24的方法,其中如果所述处理器入站邮箱队列为空,则处理器在所述读取通道指令上停止,直到数据被写入所述邮箱。
26.根据权利要求19的方法,其中所述邮箱设备进一步包括存储所述邮箱队列的状态的处理器邮箱状态寄存器,并且其中所述邮箱队列的状态包括所述邮箱队列中的多个有效队列表项。
27.根据权利要求1的方法,其中所述一个或多个通道包括一个或多个用于与信号通知设备通信的信号通知通道,其中所述信号通知设备包括与所述一个或多个信号通知通道中的每个通道关联的信号通知寄存器。
28.根据权利要求27的方法,其中所述处理器通过使用一组发送信号命令连同与要将信号发送到其的外部设备关联的信号通知寄存器的有效地址,经由所述一个或多个信号通知通道将信号发送到外部设备。
29.根据权利要求27的方法,其中所述信号通知设备被编程为工作在其中将覆写信号通知寄存器的当前内容的覆写模式。
30.根据权利要求27的方法,其中所述信号通知设备被编程为工作在逻辑‘或’模式,在所述逻辑‘或’模式中,将信号通知寄存器的当前内容与传输到所述信号通知设备的数据进行逻辑‘或’并将结果存储在所述信号通知寄存器中。
31.根据权利要求27的方法,其中所述一个或多个信号通知通道是读取阻塞通道。
32.根据权利要求1的方法,其中所述一个或多个通道包括一个或多个用于与所述处理器中提供的递减器通信的递减器通道。
33.根据权利要求32的方法,其中所述一个或多个递减器通道包括处理器写入递减器通道,并且其中发出到所述处理器写入递减器通道的写入通道指令标识了所述递减器的值,并且其中所述值指示了所述写入通道指令与生成递减器事件之间经过的时间。
34.根据权利要求32的方法,还包括:
使用所述一个或多个递减器通道来设置递减器值。
35.根据权利要求34的方法,其中设置递减器值包括:
将写入通道指令发送到处理器写入事件掩码通道以禁用递减器事件;
将写入通道指令发送到处理器写入事件确认通道以确认任何未决的事件以及停止所述递减器;
将写入通道指令发送到处理器写入递减器通道以设置新的递减器值;以及
将写入通道指令发送到处理器写入事件掩码通道以启用递减器事件。
36.根据权利要求33的方法,其中所述一个或多个递减器通道包括用于读取所述递减器的当前值的读取递减器通道。
37.根据权利要求1的方法,其中所述一个或多个通道包括一个或多个用于与机器状态寄存器通信的状态管理通道。
38.根据权利要求37的方法,其中所述一个或多个状态管理通道包括处理器读取机器状态通道,并且其中所述处理器读取机器状态通道用于标识隔离状态和处理器中断状态。
39.根据权利要求37的方法,其中所述一个或多个状态管理通道包括写入状态保存和恢复通道,所述写入状态保存和恢复通道具有关联的状态保存和恢复寄存器,并且其中发出到所述写入状态保存和恢复通道的写入通道指令将恢复中断状态。
40.根据权利要求37的方法,其中所述一个或多个状态管理通道包括读取状态保存和恢复通道,所述读取状态保存和恢复通道具有关联的状态保存和恢复寄存器,并且其中发出到所述读取状态保存和恢复通道的读取通道指令将中断状态保存到所述状态保存和恢复寄存器。
41.一种在数据处理系统中用于传送与处理器中的事件关联的指令和数据的方法,所述方法包括:
使用所述处理器的事件设备建立一个或多个用于传送事件数据的通道;
通过所述一个或多个通道在所述事件设备中接收数据;
在与所述一个或多个通道关联的一个或多个寄存器中存储所述数据;以及
根据所述一个或多个寄存器中存储的所述数据来处理一个或多个事件。
42.根据权利要求41的方法,其中所述事件设备包括未决事件寄存器,并且其中边沿触发的事件将在与所述边沿触发的事件对应的未决事件寄存器中设置位。
43.根据权利要求42的方法,其中通过将值写入到写入事件确认通道中的相应位来确认所述未决事件寄存器中的事件。
44.根据权利要求42的方法,其中将读取通道指令发出到读取事件状态通道会返回与写入事件掩码通道中的值进行逻辑‘与’的所述未决事件寄存器的值,从而仅提供所述写入事件掩码通道中标识的已启用事件的事件状态信息。
45.根据权利要求44的方法,其中在将新值写入到所述写入事件掩码通道时或在所述未决事件寄存器中记录新事件时,将更改所述读取事件状态通道的内容。
46.根据权利要求44的方法,其中更改所述读取事件状态通道中的位将使读取事件状态通道计数递增1,并且其中在将写入通道指令发送到写入事件确认通道之后在所述读取事件状态通道中设置事件时,所述读取事件状态通道计数将递增1。
47.根据权利要求46的方法,其中当使用通道读取指令读取所述读取事件状态通道时,所述读取事件状态通道计数将递减1。
48.根据权利要求46的方法,其中当所述读取事件状态通道计数不是0时,将中断发送到所述处理器。
49.根据权利要求41的方法,其中所述一个或多个通道包括处理器读取事件状态通道,并且其中所述处理器读取事件状态通道包含由处理器写入事件掩码通道启用的所有事件的当前状态。
50.根据权利要求49的方法,其中如果与所述处理器读取事件状态通道关联的通道计数为0,将读取通道指令发送到所述处理器读取事件状态通道会停止所述处理器。
51.根据权利要求49的方法,其中如果发生事件并且所述事件在处理器写入事件掩码通道中的相应位为1,则与所述处理器读取事件状态通道关联的通道计数被设置为1。
52.根据权利要求49的方法,其中如果将1写入处理器写入事件掩码通道中与处理器未决事件寄存器中的1对应的位位置,则与所述处理器读取事件状态通道关联的通道计数被设置为1。
53.根据权利要求49的方法,其中如果在将写入通道指令发送到处理器写入事件确认通道之后已启用的事件未决,则与所述处理器读取事件状态通道关联的通道计数被设置为1。
54.根据权利要求49的方法,其中如果特权软件使用处理器通道访问设备将与所述处理器读取事件状态通道关联的通道计数设置为1,则所述通道计数被设置为1。
55.根据权利要求49的方法,其中处理一个或多个事件包括:
将读取通道指令发出到所述处理器读取事件状态通道以标识已发生的事件;
发出写入通道指令以便针对要处理的所有事件在处理器写入事件确认通道中写入相应的位;以及
处理所述事件。
56.根据权利要求41的方法,其中所述一个或多个通道包括处理器写入事件掩码通道,并且其中所述处理器写入事件掩码通道包含处理器事件掩码,所述处理器事件掩码标识了影响处理器读取事件状态通道的状态的事件。
57.根据权利要求56的方法,其中发出到所述处理器写入事件掩码通道的写入通道指令将启用所述处理器事件掩码中的相应事件并更新处理器读取事件状态通道的状态。
58.根据权利要求41的方法,其中所述一个或多个通道包括用于读取事件状态掩码的当前值的处理器读取事件掩码通道。
59.根据权利要求58的方法,其中发出到所述处理器读取事件掩码通道的读取通道指令将返回最后写入处理器写入事件掩码通道的数据。
60.根据权利要求41的方法,其中所述一个或多个通道包括用于确认已发生的事件的处理器写入事件确认通道。
61.根据权利要求60的方法,其中将写入通道指令发出到设置了特定事件位的处理器写入事件确认通道将确认由软件处理相应的事件。
62.根据权利要求41的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件包括:
通过检测与所述一个或多个通道关联的通道计数、检测与所述处理器的递减器关联的递减器计数,或检测处理器通道访问操作中的至少一项来标识事件。
63.根据权利要求62的方法,其中在MFC读取标记组状态通道的通道计数从0更改为非0值时,将设置存储器流控制器MFC标记组状态更新事件,并且其中所述MFC标记组状态更新事件通知在所述处理器上运行的程序标记组已完成处理并且MFC读取标记组状态通道已更新,从而可以读取所述MFC读取标记组状态通道而不停止所述处理器。
64.根据权利要求62的方法,其中在MFC读取列表停止和通知标记状态通道的通道计数从0更改为非0值时,将设置存储器流控制器MFC直接存储器访问DMA列表命令停止和通知事件,并且其中所述MFC DMA列表命令停止和通知事件通知在所述处理器上运行的程序MFC DMA列表命令内的列表元素已完成处理,并且MFC读取列表停止和通知标记状态通道已更新,从而可以读取所述MFC读取列表停止和通知标记状态通道而不停止所述处理器。
65.根据权利要求62的方法,其中在排队的MFC命令操作码寄存器的通道计数从0更改为非0值时,将设置存储器流控制器MFC处理器命令队列可用事件,并且其中所述MFC处理器命令队列可用事件通知在所述处理器上运行的程序MFC处理器命令队列中的表项可用,并且发送到所述MFC命令操作码通道的写入通道指令不会停止所述处理器。
66.根据权利要求62的方法,其中在处理器读取入站邮箱通道的通道计数从0更改为非0值时,将设置处理器入站邮箱可用事件,并且其中所述处理器入站邮箱可用事件通知在所述处理器上运行的程序外部设备已写入空的处理器邮箱寄存器,并且发出到处理器读取入站邮箱通道的读取通道指令不会停止所述处理器。
67.根据权利要求62的方法,其中在所述递减器计数的最高位从0更改为1时,将设置处理器递减器事件,并且其中所述处理器递减器事件通知在所述处理器上运行的程序所述递减器已到达0值。
68.根据权利要求62的方法,其中在处理器写入出站中断邮箱通道计数从0更改为非0值时,将设置处理器出站中断邮箱可用事件,并且其中所述处理器出站中断邮箱事件通知在所述处理器上运行的程序外部设备已读取满的处理器出站中断邮箱寄存器,并且发送到处理器写入出站中断邮箱通道的写入通道指令不会停止所述处理器。
69.根据权利要求62的方法,其中在相应处理器信号通知通道的通道计数从0更改为非0值时,将设置处理器信号通知可用事件,并且其中所述处理器信号通知可用事件通知在所述处理器上运行的程序外部设备已写入空的处理器信号通知寄存器,并且发出到处理器信号通知通道的读取通道指令不会停止所述处理器。
70.根据权利要求62的方法,其中在原子保留丢失时将设置锁定线保留事件,并且其中所述锁定线保留事件通知在所述处理器上运行的程序总线操作已导致高速缓存线上的保留丢失。
71.根据权利要求62的方法,其中在写入处理器特权控制寄存器且关注事件请求位设置为1时将设置特权关注事件,并且其中所述特权关注事件通知在所述处理器上运行的程序特权软件正在请求来自在所述处理器上运行的程序的关注。
72.根据权利要求62的方法,其中在MFC写入多源同步请求通道计数从0值更改为非0值时,将设置多源同步事件,并且其中所述多源同步事件通知在所述处理器上运行的程序多源同步请求的处理已完成。
73.根据权利要求64的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述MFC DMA列表命令停止和通知事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述MFC DMA列表命令停止和通知事件;
将读取通道指令发出到MFC读取列表停止和通知标记状态通道以标识哪个标记组具有DMA列表命令的处于停止和通知状态的DMA列表元素;
针对具有已停止的DMA列表元素的每个标记组执行应用特定的操作;以及
将写入通道指令发出到具有标记组标识符的列表停止和通知标记确认通道以由此确认和重新开始已停止的DMA列表命令。
74.根据权利要求65的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述MFC处理器命令队列可用事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述MFC处理器命令队列可用事件;
将读取通道计数指令发出到所述MFC命令操作码通道以获取与所述MFC命令操作码通道关联的通道计数;
判定所述通道计数是否为0;以及
如果所述通道计数不为0,则将DMA命令排队到所述MFC命令队列。
75.根据权利要求66的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述处理器入站邮箱事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述处理器入站邮箱事件;
将读取通道计数指令发出到所述处理器读取入站邮箱通道以获取与所述处理器读取入站邮箱通道关联的通道计数;
判定所述通道计数是否为0;以及
如果所述通道计数不为0,则将读取通道指令发出到所述处理器读取入站邮箱通道以读取下一个邮箱数据表项。
76.根据权利要求67的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述处理器递减器事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述处理器递减器事件;
将读取通道指令发出到处理器读取递减器通道以获取当前递减器值;
判定是否要生成新的计时器事件;以及
如果要生成新的计时器事件,则将写入通道指令发出到具有新的递减器值的处理器写入递减器通道。
77.根据权利要求68的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述处理器出站中断邮箱事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述处理器出站中断邮箱事件;
将读取通道计数指令发出到处理器写入出站中断邮箱通道以获取与所述处理器写入出站中断邮箱通道关联的通道计数;
判定所述通道计数是否为0;以及
如果所述通道计数不为0,则将写入通道指令发出到具有新的邮箱数据表项的处理器写入出站中断邮箱通道。
78.根据权利要求62的方法,其中在处理器写入出站邮箱通道计数从0更改为非0值时,将设置处理器出站邮箱可用事件,并且其中所述处理器出站邮箱事件通知在所述处理器上运行的程序外部设备已读取满的处理器出站邮箱寄存器,并且发送到处理器写入出站邮箱通道的写入通道指令不会停止所述处理器。
79.根据权利要求78的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述处理器出站邮箱事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述处理器出站邮箱事件;
将读取通道计数指令发出到处理器写入出站邮箱通道以获取与所述处理器写入出站邮箱通道关联的通道计数;
判定所述通道计数是否为0;以及
如果所述通道计数不为0,则将写入通道指令发出到具有新的邮箱数据表项的处理器写入出站邮箱通道。
80.根据权利要求69的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述处理器信号通知可用事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述处理器信号通知可用事件;
将读取通道计数指令发出到处理器信号通知通道以获取与所述处理器信号通知通道关联的通道计数;
判定所述通道计数是否为0;以及
如果所述通道计数不为0,则将读取通道指令发出到所述处理器信号通知通道以从所述处理器信号通知通道读取信号数据。
81.根据权利要求70的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述锁定线保留事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述锁定线保留事件;以及
执行应用特定的功能以响应锁定线区域中的数据的系统修改。
82.根据权利要求71的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述特权关注事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述特权关注事件;以及
执行应用特定的功能以响应所述特权关注事件。
83.根据权利要求72的方法,其中根据所述一个或多个寄存器中存储的数据来处理一个或多个事件进一步包括:
将读取通道指令发出到处理器读取事件掩码通道;
将所述读取通道指令的返回结果存储为掩码数据;
将写入通道指令发出到处理器写入事件掩码通道以启用所述多源同步事件;
将写入通道指令发出到处理器写入事件确认通道以确认所述多源同步事件;以及
执行应用特定的功能以响应所述多源同步事件。
84.一种包括具有计算机可读程序的计算机可用介质的计算机程序产品,其中当所述计算机可读程序在计算设备上执行时,将导致所述计算设备执行根据权利要求1至83中的任一权利要求的步骤。
85.一种装置,所述装置包括:
处理器;以及
与所述处理器相连的存储器,其中所述存储器包括指令,当所述指令由处理器执行时,将导致所述处理器执行根据权利要求1至83中的任一权利要求的步骤。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/207,971 | 2005-08-19 | ||
US11/207,970 | 2005-08-19 | ||
US11/207,971 US7500039B2 (en) | 2005-08-19 | 2005-08-19 | Method for communicating with a processor event facility |
US11/207,970 US7778271B2 (en) | 2005-08-19 | 2005-08-19 | Method for communicating instructions and data between a processor and external devices |
PCT/EP2006/065372 WO2007020274A2 (en) | 2005-08-19 | 2006-08-16 | System and method for communicating instructions and data between a processor and external devices |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101243421A true CN101243421A (zh) | 2008-08-13 |
CN101243421B CN101243421B (zh) | 2011-09-07 |
Family
ID=37768503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200680030145XA Active CN101243421B (zh) | 2005-08-19 | 2006-08-16 | 在处理器与外部设备之间传送指令和数据的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (2) | US7500039B2 (zh) |
CN (1) | CN101243421B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885908B (zh) * | 2014-03-04 | 2017-01-25 | 中国科学院计算技术研究所 | 一种基于外部设备可访问寄存器的数据传输系统及其方法 |
CN107077381A (zh) * | 2014-10-09 | 2017-08-18 | 华为技术有限公司 | 异步指令执行装置和方法 |
CN107131921A (zh) * | 2016-02-26 | 2017-09-05 | 高准公司 | 用于计量电子器件的低功率模式 |
CN107851017A (zh) * | 2015-07-31 | 2018-03-27 | Arm 有限公司 | 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 |
CN108345547A (zh) * | 2012-06-15 | 2018-07-31 | 英特尔公司 | 乱序加载的基于锁的和基于同步的方法 |
CN112015527A (zh) * | 2019-05-29 | 2020-12-01 | 闪迪技术有限公司 | 管理从提交队列获取和执行命令 |
CN112088367A (zh) * | 2018-05-23 | 2020-12-15 | 美高森美存储解决方案股份有限公司 | 用于在用于高速缓存应用程序的存储控制器中的分散收集处理引擎的方法和装置 |
CN112106036A (zh) * | 2019-08-29 | 2020-12-18 | 深圳市大疆创新科技有限公司 | 一种交互方法、设备、系统及可读存储介质 |
CN113485951A (zh) * | 2021-07-31 | 2021-10-08 | 郑州信大捷安信息技术股份有限公司 | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 |
WO2022133656A1 (zh) * | 2020-12-21 | 2022-06-30 | 华为技术有限公司 | 一种数据处理装置、方法及相关设备 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8849968B2 (en) * | 2005-06-20 | 2014-09-30 | Microsoft Corporation | Secure and stable hosting of third-party extensions to web services |
US7500039B2 (en) * | 2005-08-19 | 2009-03-03 | International Business Machines Corporation | Method for communicating with a processor event facility |
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 |
US8074231B2 (en) | 2005-10-26 | 2011-12-06 | Microsoft Corporation | Configuration of isolated extensions and device drivers |
US20070094495A1 (en) * | 2005-10-26 | 2007-04-26 | Microsoft Corporation | Statically Verifiable Inter-Process-Communicative Isolated Processes |
US8180971B2 (en) * | 2005-12-09 | 2012-05-15 | University Of Rochester | System and method for hardware acceleration of a software transactional memory |
US8032898B2 (en) * | 2006-06-30 | 2011-10-04 | Microsoft Corporation | Kernel interface with categorized kernel objects |
US7987464B2 (en) * | 2006-07-25 | 2011-07-26 | International Business Machines Corporation | Logical partitioning and virtualization in a heterogeneous architecture |
US8565337B2 (en) * | 2007-02-07 | 2013-10-22 | Valens Semiconductor Ltd. | Devices for transmitting digital video and data over the same wires |
US8789063B2 (en) | 2007-03-30 | 2014-07-22 | Microsoft Corporation | Master and subordinate operating system kernels for heterogeneous multiprocessor systems |
US20080244507A1 (en) * | 2007-03-30 | 2008-10-02 | Microsoft Corporation | Homogeneous Programming For Heterogeneous Multiprocessor Systems |
GB2474446A (en) * | 2009-10-13 | 2011-04-20 | Advanced Risc Mach Ltd | Barrier requests to maintain transaction order in an interconnect with multiple paths |
US20130159740A1 (en) * | 2011-12-16 | 2013-06-20 | Texas Instruments Incorporated | Electronic device and method for energy efficient status determination |
CN103179050B (zh) * | 2011-12-20 | 2017-10-13 | 中兴通讯股份有限公司 | 数据包入队和出队管理方法及数据包处理装置 |
US9747225B2 (en) * | 2015-05-05 | 2017-08-29 | Microsoft Technology Licensing, Llc | Interrupt controller |
CN106294232B (zh) * | 2015-05-21 | 2019-04-30 | 深圳市中兴微电子技术有限公司 | 一种dma控制器及其实现方法 |
US11086672B2 (en) | 2019-05-07 | 2021-08-10 | International Business Machines Corporation | Low latency management of processor core wait state |
CN112130904B (zh) * | 2020-09-22 | 2024-04-30 | 黑芝麻智能科技(上海)有限公司 | 处理系统、处理器间通信方法、以及共享资源管理方法 |
Family Cites Families (25)
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 |
CN1378148A (zh) * | 2001-03-30 | 2002-11-06 | 深圳市中兴集成电路设计有限责任公司 | 一种直接存储器访问控制器及其控制方法 |
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 |
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 |
-
2005
- 2005-08-19 US US11/207,971 patent/US7500039B2/en not_active Expired - Fee Related
-
2006
- 2006-08-16 CN CN200680030145XA patent/CN101243421B/zh active Active
-
2009
- 2009-01-29 US US12/361,907 patent/US7930457B2/en not_active Expired - Fee Related
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108345547A (zh) * | 2012-06-15 | 2018-07-31 | 英特尔公司 | 乱序加载的基于锁的和基于同步的方法 |
CN103885908B (zh) * | 2014-03-04 | 2017-01-25 | 中国科学院计算技术研究所 | 一种基于外部设备可访问寄存器的数据传输系统及其方法 |
CN107077381A (zh) * | 2014-10-09 | 2017-08-18 | 华为技术有限公司 | 异步指令执行装置和方法 |
CN107851017A (zh) * | 2015-07-31 | 2018-03-27 | Arm 有限公司 | 用于在存储器与存储在寄存器组中的一个或多个数据元素向量之间传输多个数据结构的设备和方法 |
CN107131921B (zh) * | 2016-02-26 | 2020-12-11 | 高准公司 | 用于计量电子器件的低功率模式 |
CN107131921A (zh) * | 2016-02-26 | 2017-09-05 | 高准公司 | 用于计量电子器件的低功率模式 |
CN112088367A (zh) * | 2018-05-23 | 2020-12-15 | 美高森美存储解决方案股份有限公司 | 用于在用于高速缓存应用程序的存储控制器中的分散收集处理引擎的方法和装置 |
CN112088367B (zh) * | 2018-05-23 | 2022-03-22 | 美高森美存储解决方案股份有限公司 | 用于在用于高速缓存应用程序的存储控制器中的分散收集处理引擎的方法和装置 |
CN112015527A (zh) * | 2019-05-29 | 2020-12-01 | 闪迪技术有限公司 | 管理从提交队列获取和执行命令 |
CN112015527B (zh) * | 2019-05-29 | 2024-03-22 | 闪迪技术有限公司 | 管理从提交队列获取和执行命令 |
CN112106036A (zh) * | 2019-08-29 | 2020-12-18 | 深圳市大疆创新科技有限公司 | 一种交互方法、设备、系统及可读存储介质 |
WO2022133656A1 (zh) * | 2020-12-21 | 2022-06-30 | 华为技术有限公司 | 一种数据处理装置、方法及相关设备 |
CN113485951A (zh) * | 2021-07-31 | 2021-10-08 | 郑州信大捷安信息技术股份有限公司 | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 |
CN113485951B (zh) * | 2021-07-31 | 2022-02-11 | 郑州信大捷安信息技术股份有限公司 | 一种基于fpga的dma读操作实现方法、fpga设备以及通信系统 |
Also Published As
Publication number | Publication date |
---|---|
US20070043936A1 (en) | 2007-02-22 |
US7500039B2 (en) | 2009-03-03 |
US20090217300A1 (en) | 2009-08-27 |
US7930457B2 (en) | 2011-04-19 |
CN101243421B (zh) | 2011-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101243421B (zh) | 在处理器与外部设备之间传送指令和数据的系统和方法 | |
CN100495367C (zh) | 在处理器与存储器流控制器间传送命令参数的系统和方法 | |
US7778271B2 (en) | Method for communicating instructions and data between a processor and external devices | |
CN102750130B (zh) | 分配计数器以追踪寄存器映射的方法和系统 | |
JP3697831B2 (ja) | コンピュータシステム | |
CN101365999B (zh) | 发送完成事件批处理 | |
US6711643B2 (en) | Method and apparatus for interrupt redirection for arm processors | |
US7257658B2 (en) | Message based interrupt table | |
US8103816B2 (en) | Technique for communicating interrupts in a computer system | |
CN101939732B (zh) | 在电子计算器系统中用于广播系统管理中断至其它处理器之机制 | |
CN101371232B (zh) | 在用户级存储器中提供后备存储器 | |
WO2000036505A1 (en) | Interrupt architecture for a non-uniform memory access (numa) data processing system | |
CN103761145A (zh) | 用于各个处理器的辅助中断虚拟化的访客中断控制器 | |
CN103218329A (zh) | 数字信号处理数据传输 | |
US6792483B2 (en) | I/O generation responsive to a workload heuristics algorithm | |
JP2003523574A (ja) | 2次リオーダ・バッファ・マイクロプロセッサ | |
EP0951674B1 (en) | A method for posting entries to shared queues in a multiprocessor environment | |
CN1303044A (zh) | 使用基本块高速缓存的微处理器 | |
JP5558713B2 (ja) | データ処理システム内でプロセッサ内のイベントに関連する命令およびデータを伝達するための方法 | |
CN100373330C (zh) | 识别微处理器中的数据推测操作的推测指针 | |
US20030014558A1 (en) | Batch interrupts handling device, virtual shared memory and multiple concurrent processing device | |
JPH07114522A (ja) | マルチプロセッサシステム | |
JPH0644190A (ja) | マルチプロセッサ方式 | |
JPH01253036A (ja) | メッセージ・パッシング管理方式 | |
JPH0594421A (ja) | 情報伝送装置 |
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 |