发明内容
因此,本发明的一个目的是改进Kahn型数据处理系统的操作。
这一目的通过根据权利要求1的数据处理系统以及根据权利要求24的数据处理方法解决。
本发明基于这样的思想,即通过为每一处理器引入一个通信装置而有效地将数据处理系统中的通信硬件(例如总线和存储器)与计算硬件例如(处理器)分开。通过引入这一分离,处理器可以集中于执行它们的功能特定的任务,同时通信装置提供对各处理器的通信支持。
因此给数据处理系统提供计算、通信支持和通信网络层。计算层包括第一和至少一个第二处理器,用于处理数据对象流。第一处理器把一个流中的一些数据对象传送给第二处理器,后者然后可以处理这些数据对象。通信网络层包括存储器和用于链接第一处理器和第二处理器与该存储器的通信网络。通信支持层安排在计算层和通信网络层之间,包括用于计算层中的每一第二处理器的一个通信装置。每一第二处理器的该通信装置控制在所述第二处理器和存储器之间通过通信网络层中的通信网络的通信。
在一个第二处理器和通信网络层之间引入通信装置提供一个明确定义的系统级抽象层,这特别是通过提供了在通信和存储器实现方面的抽象。此外,实现了具有局部责任的分布式组织,从而改善了系统的可扩展性。
在本发明的另外一个实施例中,所述通信装置包括读/写单元,用于允许所述关联的第二处理器从/向通信网络层中的存储器的读/写,一个同步单元,用于使所述关联的第二处理器的读/写同步和/或存储器访问的处理器间的同步,和/或一个任务调度单元,用于调度与所连接的处理器相关的任务,用于管理要由所述第二处理器处理的一组任务,和/或管理任务间通信信道。相应地,通过提供分开的单元,可以由通信装置独立地控制读/写、读/写的同步和任务切换,允许在实现不同应用程序时有更大的自由度。
在本发明的再一个实施例中,所述通信单元能够处理多个向内的和向外的流和/或每一任务的多个流。它的积极效果是,由一个第二处理器处理的一个任务所产生的数据流可以转发给几个其它的任务供进一步处理,反之亦然。
在本发明的另一个实施例中,通信装置能够实现控制在所述连接着的第二处理器和独立于所述连接着的处理器的所述存储器之间的通信的同样的功能。因此,通信装置的设计可以主要针对要由所述通信装置实现特定的功能而优化,避免第二处理器的设计的强烈影响。
在本发明的另外一个实施例中,在所述第二处理器和它们相关的通信装置之间的通信是主/从通信,所述第二处理器起主的作用。
在本发明的另外一个实施例中,在所述通信支持层中的所述通信装置包括一个朝向所述相关的第二处理器的可适配的第一任务级接口和一个朝向所述通信网络和存储器的第二系统级接口,其中,所述第一和第二接口可同时或非同时激活。通过提供可修正的任务级接口,在允许特定第二处理器对特定应用程序进行参数化和采用的同时,便利了在总体系统结构中重新使用通信装置。
在本发明的再一个实施例中,至少一个所述第二处理器是可编程的,所述一个第二处理器的通信装置的第一任务级接口至少部分可编程,其中,通信装置的部分功能可编程。
本发明还涉及一种用于在数据处理系统中处理数据的方法,所述数据处理系统包括用于处理数据对象流的第一和至少一个第二处理器,所述第一处理器被设计成把数据对象流中的数据对象传送给第二处理器;至少一个存储器用于存储和检索数据对象;和用于每一所述第二处理器的一个通信装置,其中,提供对所述第一和所述第二处理器的共享访问,其中,每一所述第二处理器的通信装置控制所述第二处理器和所述存储器之间的通信。
本发明另外还涉及在具有计算层的数据处理系统中的通信装置,所述计算层包括用于处理数据对象流的第一和至少一个第二处理器,所述第一处理器被设计成传送数据对象流中的数据对象给第二处理器,所述数据处理系统还具有一个包括通信网络和存储器的通信网络层;以及一个安排在所述计算层和所述通信网络层之间的通信支持层。该通信装置适于在第二处理器和通信网络之间有效工作,并和第二处理器关联,并控制经由通信网络层中的所述通信网络的所述第二处理器和所述存储器之间的通信。
在本发明的一个方面,提供了一种数据处理系统,包括:
-包括用于处理数据对象流的第一和至少一个第二处理器的计算层,所述第一处理器被安排成从一个数据对象流把数据对象传送给第二处理器;
-包括通信网络和存储器的通信网络层,用于使经由该通信网络层在第一和至少一个第二处理器能够实现通信;和
-包括用于每个所述第二处理器的一个通信装置的通信支持层,
所述通信支持层被安排在所述计算层和所述通信网络层之间;
其中,每个所述第二处理器的通信装置控制和处理在所述第二处理器和所述存储器之间通过所述通信网络层中的通信网络所进行的通信;
其中,在所述第二处理器和它们的关联通信装置之间的通信是主/从通信,所述第二处理器起主设备的作用。
在本发明的另一个方面,提供了一种数据处理系统中的通信装置,所述数据处理系统包括:一个包括用于处理数据对象流的第一和至少一个第二处理器的计算层,所述第一处理器被安排来从数据对象流传送数据对象给第二处理器;一个包括通信网络和存储器的通信网络层;一个被安排在所述计算层和所述通信网络层之间的通信支持层;
其中,该通信装置与一个第二处理器相关联,并控制经由该通信网络层中的通信网络在所述第二处理器和所述存储器之间的通信;
其中,在所述第二处理器和通信装置之间的通信是主/从通信,所述第二处理器起主设备的作用。
在本发明的又一个方面,提供了一种用于在数据处理系统中处理数据的方法,所述数据处理系统包括:用于处理数据对象流的第一和至少一个第二处理器,所述第一处理器被安排成从数据对象流传送数据对象给第二处理器;至少一个用于存储和检索数据对象的存储器;和用于每个所述第二处理器的一个通信装置,其中,提供对所述第一和所述第二处理器的共享访问,所述方法包括下列步骤:
通过每个所述第二处理器的通信装置控制在所述第二处理器和所述存储器之间的通信,
其中,在所述第二处理器和它们的关联通信装置之间的通信是主/从通信,所述第二处理器起主设备的作用。
本发明的另外的实施例在从属权利要求中说明。
具体实施方式
图2表示根据本发明的一个优选实施例用于处理数据对象流的处理系统。该系统可以分为不同的层,即计算层1、通信支持层2和通信网络层3。计算层1包括CPU11和两个处理器12a、12b。这只是举例,显然在该系统中可以包括更多处理器。通信支持层2包括与CPU11关联的外壳21和分别与处理器12a、12b关联的外壳22a、22b。通信网络层3包括通信网络31和存储器32。
处理器12a、12b优选是专用处理器;每一个专门用于执行一个有限范围的流处理。每一处理器被安排成重复对一个流的连续数据对象施加同样的处理操作。处理器12a、12b每一个可以执行一个不同的任务或功能,例如可变长度解码,运行长度解码,运动补偿,图像缩放或者执行DCT变换。在操作中,每一处理器12a、12b对一个或者多个数据流执行操作。所述操作例如可以包括接收一个流和产生另一个流或接收一个流而不产生新流或产生一个流而不接收流或修改一个接收的流。处理器12a、12b能够处理由其它处理器12b、12a或由CPU11产生的数据流,或者甚至产生它们自身的流。一个流包括连续的数据对象,这些数据对象通过所述存储器32从或向处理器12a、12b传输。
外壳22a、22b包括朝向作为通信层的通信网络层的第一接口。该层对于所有外壳是一致的或同类的。此外,外壳22a、22b包括一个朝向这些外壳22a、22b所分别关联的处理器12a、12b的第二接口。该第二接口是一个任务级接口,并且是为相关的处理器12a、12b定制的,以便能够处理所述处理器12a、12b的特定需要。相应地,外壳22a、22b具有一个处理器特定的接口作为第二接口,但是这些外壳的总体结构对于所有处理器是同类的和一致的,以便便利在总体系统结构中重新使用这些外壳,同时允许对于特定应用程序的参数化和采用。
外壳22a、22b包括一个用于数据传输的读/写单元、一个同步单元和一个任务切换单元。这三个单元在主/从基础上与相关的处理器通信,其中处理器起主的作用。相应地,这三个单元的每一个由来自处理器的请求启动。优选地,在处理器和这三个单元之间的通信由请求-应答握手机制实现,以便传递参数值和等待请求的值返回。因此,通信是阻塞的(blocking),亦即各控制线程要等待它们的完成。
读/写单元优选实现两个不同的操作,亦即允许处理器12a、12b从存储器读数据对象的读操作和允许处理器12a、12b向存储器32写数据对象的写操作。每一任务具有一组预先定义的端口,它相应于对该数据流的连接点。这些操作的参量是各相应端口的ID“port_id”,读/写应该发生处的偏移量“offset”,和数据对象的可变长度“n_bytes”。端口由“port_id”参量选择。这一参量是一个小的非负数,具有只用于当前任务的局部范围。
同步单元执行用于同步的两种操作以处理从空的FIFO读时的或向满的FIFO写时的局部阻塞条件。第一操作亦即获取空间(getspace)操作是在存储器中请求空间以用于实现FIFO,第二操作亦即释放空间(putspace)操作是请求释放在FIFO中的空间。这些操作的参量是“port_id”和“n_bytes”可变长度。
获取空间操作和释放空间操作是在同步的线性带或FIFO级上执行的,而在由所述操作获得的窗口内则支持随机存取读/写动作。
任务切换单元以获取任务(gettask)操作来实现处理器的任务切换。这些操作的参量是“blocked(受阻的)”、“error(出错)”和“task_info(任务信息)”。
参量“blocked”是二进制值,如果由于对于输入端口或者输出端口的获取空间调用返回“假”而使最后的处理步骤不能成功完成,则它被设定为“真”。相应地,任务调度单元被迅速告知,这一任务最好不要再作调度,除非对该受阻的端口到来一个新的“space(空间)”消息。这一参量值被认为是一个劝告,只导致改善的调度而决不会影响功能。参量“error”是一个二进制值,如果在最后的处理步骤期间在协处理器内发生致命错误,则它设定为“真”。从mpeg解码来的例子例如是出现不认识的可变长代码或非法运动矢量。如果是这样,则外壳清除任务表允许标志以防止进一步的调度,和给主CPU发送一个中断以修复系统状态。当前任务肯定不被调度,直到CPU通过软件作出反应。
上面刚刚说明的操作由来自处理器的读调用、写调用、获取空间调用、释放空间调用或者获取任务调用来启动。
图3表示读和写处理以及它们相关的同步操作的示意图。从处理器的观点看,一个数据流像一个具有当前访问点的无穷的数据带。从处理器发布的获取空间调用请求对由图3中的小箭头指示的当前访问点前面的一定的数据空间的访问许可。如果这一许可被授予,则该处理器可以在所请求的空间亦即图3b的带框的窗口内执行读和写动作,使用由n_bytes参量指示的变长数据和由offset参量指示的随机访问位置。
如果许可未被授予,则该调用返回“假”。在一个或者多个获取空间调用(和可选几个读/写动作)后,处理器可以决定该处理或该数据空间的某些部分是否已经结束,并发布一个释放空间调用。这一调用把访问点前移一定数目的字节(亦即图3d的n_bytes2),其中,其大小由先前授予的空间所限制。
图4表示循环FIFO存储器的示意图。传送数据流需要FIFO缓冲器,它优选地具有有限的和固定的大小。优选地,它是在存储器中预先分配的,并且应用程序一个循环寻址机制,以便在线性存储器地址范围内有适当的FIFO行为。
在图4中心的旋转箭头50指示一个方向,在该方向上来自处理器的获取空间调用确认为读/写所授予的窗口,它与释放空间调用把访问点向前移动是同一个方向。小箭头51、52表明任务A和B的当前访问点。在本例中,A是写入者,因此在后面留下适当的数据,而B是读取者,在后面留下空的空间(或者无意义的垃圾)。在每一访问点前面的阴影区域(A1,B1)表明通过获取空间操作获得的访问窗口。
任务A和B可以以不同速度进行,和/或由于多任务可能在某些时间期间得不到及时服务。外壳22a、22b给A和B在其上运行的处理器12a、12b提供信息,以保证A和B的访问点维持它们各自的排序,或者严格说,授予的访问窗口永不重叠。使用由外壳22a、22b提供的信息使得实现总功能的正确性是处理器12a、12b的责任。例如,由于缓冲器中的可用空间不够,外壳22a、22b有时可能回答来自处理器的获取空间请求为“假”。于是该处理器应该根据被拒绝的访问请求避免访问缓冲器。
外壳22a、22b是分布式的,使得每一个可以接近它们所关联的处理器12a、12b来实现。每一外壳局部包含用于与映射在其处理器上的任务相关的流的配置数据,并局部实现所有控制逻辑以适当地处理这一数据。相应地,在外壳22a、22b中实现一个局部流表,它包含用于每一流各字段(fields)的一个行,或者换句话说,用于每一访问点各字段的一个行。
为处理图4的安排,任务A和B的处理器外壳22a、22b的流表每一个包含这样的一行,该行保存一个“空间(space)”字段,其中包含从它自己的访问点朝向在该缓冲器中的另一访问点的(可能是不利的)距离,和一个指示在该缓冲器中具有所述另一访问点的任务和端口的远程外壳的ID。另外,所述局部流表可以包含相应于当前访问点的存储器地址和用于缓冲器基地址和缓冲器大小的编码,以便支持所引用的地址增量。
这些流表优选是映射在在每一所述外壳22中的小存储器-像寄存器文件-上的存储器。因此,获取空间调用可以通过比较所请求的大小与局部存储的可用空间而立即在局部回答。在释放空间调用时,这一局部空间字段减少指定的数量,并且给保持前一访问点的另一个外壳发送一个释放空间消息以增加它的空间值。相应地,在接收到来自一个远程源的这种释放消息时,外壳22将它的局部字段增加。因为在外壳之间传输消息需要时间,因此可能出现两个空间字段加起来不必等于整个缓冲器大小的情形,而是暂时含有不利的值。然而,这不会破坏同步的安全性。在例外环境下甚至可能发生多个消息同时在通往目的地的途中,对它们的服务不按顺序,不过甚至在这种场合,同步仍保持正确。
图5表示更新每一外壳中的局部空间值和发送“释放空间”消息的机制。在这一安排中,来自处理器12a、12b的获取空间请求-即获取空间调用-可以通过比较所请求的大小与局部存储的空间信息而立即在相关的外壳22a、22b中得到回答。在释放空间调用时,局部外壳22a、22b以指明的数量减少空间字段,并且给远程外壳发送一个释放空间消息。该远程外壳-亦即另一处理器的外壳-保存另一个访问点,并且增量那里的空间值。相应地,在从一个远程源接收到这种释放消息时,本地外壳将它的空间字段增加。
属于访问点的空间字段由两个源修改:在本地的释放空间调用时它减少,和在接收到释放空间消息时它增加。如果这种增加或者减少不作为原子操作(atomic operation)实现,则这将导致错误的结果。在这种情况下可以使用分开的本地空间和远程空间字段,它们每一个只通过单一源更新。在本地的获取空间调用时,这些值被减去。外壳22总在控制它自己的本地表的更新和以一种基本的方式执行这些。显然这只是一个外壳实现的事项,这对于它的外部功能来说不可见。
如果获取空间调用返回“假”,则处理器可自由决定如何反应。可能性是:a)处理器可以用较小的n_bytes参量发布一个新的获取空间调用,b)处理器可以等待一会儿然后再试,或c)处理器可以退出该任务,而允许另一任务在该处理器上进行。
这将允许任务切换的决定取决于更多数据的期望到达时间和内部积累状态的数量,相关联的状态节省费用。对于不可编程的专用硬件处理器,该决定是结构设计过程的一部分。
外壳22的实现和操作在读和写端口之间没有区别,虽然特别的实例也许对这些有区别。外壳22所实现的操作有效地隐藏了实现中的各个方面,诸如FIFO缓冲器的大小、它在存储器中的位置、受存储器制约的循环FIFO的地址的任何折返(wrap-around)机制、超高速缓冲存储策略、超高速缓冲存储一致性、全局I/O定位限制、数据总线宽度、存储器定位限制、通信网络结构和存储器组织。
优选地,外壳22a、22b对未格式化的字节序列进行操作。在由传送数据流的写入者和读取者使用的同步包的大小之间不需要任何相关性。数据内容的语义解释留给处理器。任务不知道应用图表关联结构(application graph incidence structure),诸如它正与哪一些其它任务在通信,这些任务映射在哪些处理器上,和哪些其它的任务映射在同一个处理器上。
在外壳22的高性能实现中,可以通过外壳22a、22b的读/写单元和同步单元并行发布读调用、写调用、获取空间调用、释放空间调用。作用于外壳22的不同端口的调用没有互相的排序(ordering)的限制,而作用于外壳22的相同端口上的调用则必须根据调用任务或处理器排序。对于这种情况,当前一调用返回时,处理器可以发布下一调用,在软件实现中是通过从函数调用的返回而在硬件实现中则通过提供一个确认信号。
在读调用中的大小参量即n_bytes的零值可以被预留以执行从存储器向由port_ID和offset参量指示的位置处的外壳超高速缓冲存储器预取数据。这种操作可以用于由外壳执行的自动预取。相似地,可以预留写调用中的零值用于超高速缓冲存储器的刷新请求,虽然自动的超高速缓冲存储器刷新是外壳的责任。
可选地,所有5种操作都接受另外一个最后的task_ID参量。这通常是一个从先前的获取任务(gettask)调用作为结果值而得到的小的正数。预留为这一参量的零值用于不是任务特定的而是与处理器控制有关的调用。
在优选实施例中,用于传送数据流的建立(set-up)是具有连接到有限大小FIFO缓冲器上的一个写入者和一个读取者的流。这种流需要具有有限的和固定大小的FIFO缓冲器。它预先分配在存储器中,并且在其线性地址范围内为适当的FIFO行为应用程序一个循环寻址机制。
然而,在基于图2和图6的另外的实施例中,由一个任务产生的数据流要由具有不同输入端口的两个或者多个不同的使用者使用。这种情形可以用术语分叉(forking)描述。然而,我们希望既为多任务硬件处理器也为在CPU上运行的软件任务重新使用该任务实现。这是通过各任务具有与它们的基本功能相对应的固定数目的端口、并且由应用程序配置引发的任何分叉的需要都要外壳解决来实现的。
显然流分叉可以由外壳22通过只维持两个分开的正常的流缓冲器实现,即通过倍增所有写和释放空间操作和通过对所倍增的获取空间检查的结果值执行与操作。优选地,这是不予执行的,因为其代价将包括双倍的写带宽和或许更多的缓冲器空间。相反,优选的是用两个或者更多读取者和一个写入者共享同一FIFO缓冲器来实现。
图6表示具有单一写入者和多个读取者的FIFO缓冲器的示意图。同步机制必须保证在A和C之间的配对顺序及其后在A和B之间的正常的配对顺序,而B和C没有相互的限制,例如假定它们是纯粹的读取者。这是通过跟踪分别为每一读取者(A到B和A到C)可用的空间而在与执行写操作的处理器关联的外壳中实现的。当写入者执行一个局部获取空间调用时,它的n_bytes参量与每一这些空间值比较。这是通过使用在所述流表中用于分叉的额外的行而实现的,它由一个额外的字段或列连接以指示改变到下一行。
这对于大多数不使用分叉同时不限定只以两路分叉的场合带来非常小的开销。优选地,分叉仅由写入者实现,而读取者不知道这种情况。
在基于图2和图7的另外一个实施例中,数据流作为根据带模型的一个三站流实现。每一站执行对流过的数据流的某些更新。三站流的应用程序的一个例子是一个写入者、一个中间的监督者和最后一个读取者。在这样的例子中,第二任务优选地观察通过的数据,并且可能检查某些数据,而基本上允许数据通过,不进行修改。相对较不经常的是它可以决定改变流中的少数项。这可以通过处理器在缓冲器中就地更新而有效实现,避免把整个流内容从一个缓冲器复制到另一个。在实际中,这在下述情形下可以是有用的:当硬件处理器12在通信,而主CPU11进行干预以修改该流来改正硬件缺陷,进行修正以适应稍微不同的流格式,或者只是为了调试。这一安排可以由共享存储器中的单一流缓冲器的所有三个处理器实现,以减少存储器流量和处理器工作负载。任务B并不实际读或写整个数据流。
图7表示一个用于三站流的有穷存储器缓冲器的实现。这一三路缓冲器的正确的语义包括维持A、B和C彼此之间一个严格的排序和保证窗口不重叠。在这种方式下,该三路缓冲器是图4的所示的两路缓冲器的扩展。这种多路循环FIFO由上述外壳的操作和由在优选实施例中讨论的带释放空间消息的分布式实现方式直接支持。在单一FIFO中的站并不仅局限于3个。在一个站既使用又产生有用数据的就地处理中也可以只用两个站。在这种情况下两个任务都执行就地处理来彼此交换数据,在缓冲器中不留空的空间。
在基于图2的另外的实施例中说明了对缓冲器的单一访问。这种单一访问缓冲器只包括单一端口。在这一例子中任务或者处理器之间将不执行数据交换。相反,这仅是所述外壳的一个标准通信操作的应用程序供局部使用。外壳的配置包括标准缓冲器存储器,它有单一访问点与其连接。这时任务使用该缓冲器作为局部的中间结果暂存器或超高速缓冲存储器。从结构的观点看来,这可能具有下述优点,诸如为几个目的和任务组合使用较大的存储器,和例如使用可由软件配置的存储器大小。此外,除了用作中间结果暂存器存储器以便这一配置为任务特定的算法服务,此配置还可以很好地应用程序于在多任务处理器中存储和检索任务状态。在这种情况下为状态交换执行读/写操作不是任务的功能代码自身的一部分,而是处理器控制代码的一部分。由于缓冲器不用于与其它任务通信,因此通常不需要对该缓冲器执行释放空间和获取空间操作。
在基于图2和图8的另一个实施例中,根据优选实施例的外壳22另外包括一个数据超高速缓冲存储器,用于在处理器12和通信网络31和存储器32之间的数据传输(亦即读操作和写操作)。在外壳22中的数据超高速缓冲存储器的实现提供数据总线宽度的透明变换,对全局互联亦即通信网络31的定位限制的解决,和对全局互联的I/O操作数目的减少。
优选地,外壳22在读和写接口中包括该超高速缓冲存储器,然而这些超高速缓冲存储器从应用程序功能的观点是看不见的。这里,使用释放空间和获取空间操作的机制用于明确控制超高速缓冲存储器一致性。超高速缓冲存储器在把处理器读和写端口从通信网络3的全局互联的解耦中起重要作用。这些超高速缓冲存储器对于系统在有关速度、功率和区域的性能方面有主要的影响。
对于授予一个任务端口的流数据的窗口的访问被保证为专有的。其结果是在这一区域上的读和写操作是安全的,并且在第一侧不需要中间的处理器内通信。通过局部获取空间请求来从循环FIFO的一个前任获得新的存储器空间来扩展该访问窗口。如果超高速缓冲存储器某些部分被标记以响应这种扩展,而且任务有兴趣读取该扩展中的数据,则超高速缓冲存储器中这种部分需要被无效化。然后在高速缓存发生失误的这一位置发生读操作,并且新的有效数据被加载到该超高速缓冲存储器。完善的外壳实现可以使用获取空间来发布预取请求以减少超高速缓冲存储器失误的代价。利用局部释放空间请求给循环FIFO的后继者留下新的存储器空间来收缩该访问窗口。如果这种收缩的某些部分正好在超高速缓冲存储器中发生,并且该部分已经被写亦即脏(dirty)或不可用,则超高速缓冲存储器的该部分需要被刷新,以使得局部数据可用于其它处理器。给其它处理器发送释放空间消息必须推迟,直到超高速缓冲存储器的刷新完成和存储器操作的安全排序得到保证。
与其它类超高速缓冲存储器一致性机制诸如总线探听(snooping)相比,为明确的超高速缓冲存储器一致性控制而只使用局部获取空间和释放空间事件在大系统结构中相对容易实现。另外它不提供通信开销,例如像在超高速缓冲存储器通体写结构中那样。
获取空间和释放空间操作规定要在字节粒度上操作。超高速缓冲存储器的主要责任是对处理器隐藏全局互联数据传输大小和数据传输定位的限制。优选地,数据传输大小在上述定位上设定为16字节,而小到2字节的同步的数据量可以被有效地使用。因此,同一存储器字或传输单元可以同时在不同处理器的超高速缓冲存储器中存储,而无效信息在每一超高速缓冲存储器中在字节的粒度上被处理。
图8表示在三种不同的情形下读取和管理超高速缓冲存储器中的数据的有效性。在该图中每一种情形都假定读请求发生在空的超高速缓冲存储器中,导致超高速缓冲存储器失误。图8a表示读请求导致取出一个存储器传输单元800-亦即一个字-它整个被包含在所授予的窗口810内。显然,这整个字在存储器中是有效的,不需要特定的有效(或无效)性测量。
在图8b中所取的字801部分延伸到处理器获得的空间811之外,不过仍保留在在外壳中作为可以使用的受到局部管理的空间内。如果仅仅使用获取空间参量的话,则该字将被部分地被宣布为无效,且一旦获取空间窗口被扩展的话则它将需要被重新读。然而,如果对可用空间的实际值进行检查的话,则整个字可以标记为有效。
在图8c中预取的字802部分延伸到不知道要被保存的、并且仍有可能被某些其它处理器写入的空间820内。这时在当该字被加载到超高速缓冲存储器中时,必须把该字中的这一区域标记为无效。如果后来该字的这一部分被访问,则需要重新读该字,因为不知道的部分在该字中一般也会延伸到位于当前访问点左边。
此外,一个单一读请求可以覆盖多于一个存储器字,这或者是因为它横跨两个连续字的边界,或者是因为处理器的读接口比存储器字宽。图8表示对所请求的缓冲器空间来说相当大的存储器字。在实际中,所请求的窗口常常大很多,然而在极端的情况下,整个循环通信缓冲器也可以和单一存储器字一样小。
在超高速缓冲存储器一致性控制中,在获取空间、读操作和有效(或无效)标记之间,以及在释放空间、写操作和“脏”标记和刷新之间有紧密的关系。在一个“Kahn”型应用程序中,端口具有指定的方向,或输入或输出。优选使用分开读和写的超高速缓冲存储器,这将简化一些实现中的问题。对于处理器将在整个循环地址空间线性处理的多个流,读超高速缓冲存储器可任选地支持预取数,而写超高速缓冲存储器可选支持预刷新,在朝向下一个字的两个读取移动内,使得前一个字的超高速缓冲存储器设置可提供,以供预期的未来使用。读和写数据路径的分开实现也更容易支持来自处理器的并行发生的读和写请求,例如在流水线式处理器的实现中并行发生的情况。
另外处理器以字节粒度写数据,超高速缓冲存储器逐字节管理在该超高速缓冲存储器中的“脏”比特。在释放空间请求时,超高速缓冲存储器从超高速缓冲存储器把这些字刷新到与由这一请求所指明的地址范围重叠的共享存储器中。所述“脏”比特位要用于总线写请求中的写屏蔽,以保证该存储器决不会在访问窗口之外的字节位置被写入。
在基于图2的另一个实施例中,外壳22a中的同步单元连接到另一外壳22b的另外的同步单元。同步单元保证一个处理器在为一个已处理的流的有效数据被写到一些存储器位置之前不访问这些存储器位置。相似地,使用同步接口来保证处理器12a不覆盖写入存储器32中的有效数据。同步单元通过同步消息网络通信。优选地,它们形成一个环的一部分,在该环内同步信号从一个处理器传送到下一个处理器,或当这些信号不再为任何后继的处理器需要时被封锁和覆盖。同步单元一起形成一个同步通道。同步单元维持关于用于从处理器12a向处理器12b传输数据对象流的存储器空间的信息。