用于处理集群的加载/存储电路的制作方法

文档序号:6362308阅读:125来源:国知局
专利名称:用于处理集群的加载/存储电路的制作方法
技术领域
本发明一般涉及处理器,并且更具体地,涉及处理集群。
背景技术
图1是描述执行速率的加速比相对多核系统(从2核变化到16核)的并行开销的图示,其中加速比是单处理器执行时间除以并行处理器执行时间。可以看到,并行开销接近于零以从大量的核中获取显著效益。但是,由于并行程序之间存在任何交互时的开销会趋于很高,因此对于除了完全解耦的程序之外的任何程序而言,有效地使用多于一个或两个的处理器通常是很困难的。因此,需要一种改进的处理集群。

发明内容
因此,本公开的实施例提供一种用于执行并行处理的装置。该装置的特征在于:消息总线(1420);数据总线(1422);以及加载/存储单元(1408),该加载/存储单元(1408)具有:配置为与系统存储器(1416)通信的系统接口(5416);耦合到数据总线(1422)的数据接口(5420);耦合到消息总线(1420)的消息接口(5418);指令存储器(5405);数据存储器(5403);耦合到数据接口(5420)的缓冲器(5406);耦合到消息接口(5418)的线程调度电路(5401,5404);耦合到数据存储器(5403)、缓冲器(5406)、指令存储器(5405)、线程调度电路(5401,5404)以及系统接口(5416)的处理器(5402)。


图1是多核加速比参数的图形;图2是根据本公开一个实施例的系统的图示;图3是根据本公开的一个实施例的片上系统(SOC)的图示;图4是根据本公开的一个实施例的并行处理集群的图示;图5是全局加载/存储(GLS)单元的示例图;图6是GLS处理器的概念操作图;图7和图8示出GLS单元的数据流的示例图;图9是GLS单元的更加详细的示例图;图10是示出GLS单元的标量逻辑的图示。
具体实施例方式在图2中,可以看到执行并行处理的SOC应用的示例。在该示例中,示出成像装置1250,该成像装置1250 (例如,其可以是移动电话或者照相机)一般包括图像传感器1252、S0C1300、动态随机访问存储器(DRAM) 1254、闪存(FMEM) 1256、显示器1526和电源管理集成电路(PMIC) 1260。在操作中,图像传感器1252能够捕获S0C1300和DRAM1254可以处理并存储在非易失性存储器(即,闪存1256)中的图像信息(可以是静止图像或视频)。此外,存储在闪存1256中的图像信息可以通过使用S0C1300和DRAM1254显示在显示器1258上。并且,成像装置1250通常是便携的,并且包括作为电源的电池;PMIC1260 (其可由S0C1300控制)可以协助调节电源使用以延长电池寿命。在图3中,根据本公开的一个实施例描绘了片上系统或S0C1300的示例。此S0C1300 (通常为诸如0ΜΑΡ 的集成电路或IC) 一般包括处理集群1400 (其一般执行上述并行处理)和提供宿主环境(上面描述和引用的)的主机处理器1316。该主机处理器1316可以是宽(即,32位、64位等)RISC处理器(诸如,ARM Cortex_A9)并且与总线仲裁器1310、缓冲器1306、总线桥1320 (其允许主机处理器1316通过接口总线或I总线1330访问外围接口 1324)、硬件应用编程接口(API) 1308以及中断控制器1322在主机处理器总线或HP总线1328上通信。处理集群1400通常与功能电路1302 (例如,其可以是已充电的耦合装置或C⑶接口并且其可以与片外装置通信)、缓冲器1306、总线仲裁器1310以及外围接口1324通过处理集群总线或PC总线1326进行通信。以此配置,主机处理器1316能够通过API1308提供信息(S卩,配置处理集群1400以符合所需的并行实现),而处理集群1400和主机处理器1316都可以直接访问闪存1256 (通过闪存接口 1312)和DRAM1254 (通过存储控制器1304)。此外,通过联合测试行动组(JTAG)接口 1318可以进行测试和边界扫描。转到图4,根据本公开的一个实施例描绘了并行处理集群1400的示例。通常,处理集群1400对应硬件722。·处理集群1400 —般包括分区1402-1到1402-R,这些分区包含节点808-1到808-N、节点包装器810-1到810-N、指令存储器(MEM) 1404-1到1404-R和总线接口单元或BIU4710-1到4710-R (将在下面详细讨论)。节点808-1到808-N的每个耦合到数据互连814 (通过其各自的BIU4710-1到4710-R和数据总线1422),并且通过消息总线1420为分区1402-1到1402-R提供来自控制节点1406的控制或消息。全局加载/存储(GLS)单元1408和共享的功能存储器1410还提供用于数据移动的额外功能(如下所述)。此外,3级或L3高速缓存1412、外围设备1414 (一般不被包含在IC内)、存储器1416(其通常是闪存1256和/或DRAM1254以及不包含在S0C1300内的其他存储器)以及硬件加速器(HWA)单元1418与处理集群1400 —起使用。还提供接口 1405以向控制节点1406传输数据和地址。处理集群1400 —般使用“推进”模型用于数据传送。该传送一般表现为缓冲写入(posted write),而不是请求-响应的访问类型。由于数据传送是单向的,因此与请求-响应访问相比,这种传送具有将对全局互连(即,数据互连814)的占用减少到1/2的优点。在将响应发送给请求方之后,一般不希望通过互联814发送请求,这导致互连814上的两次转变。推进模型生成单一的传送。这对于可扩展性是很重要的,因为网络延迟随着网络规模的增加而增加,并且这必然降低请求-响应事务的性能。推进模型与数据流协议(S卩,812-1至812-N) —起通常会将全局数据通信量最小化到可正确使用的数据流量,同时,还通常最小化全局数据流对本地节点使用的影响。通常对节点(即,808-1)性能有很小或没有影响,即便是大量的全局通信量。源将数据写入全局输出缓冲器(在以下讨论)并且继续操作而不要求传送成功的确认。数据流协议(即,812-1到812-N)通常使用在互连814上的单一传送确保首次尝试将数据移动到目标的传送成功。全局输出缓冲器(在以下讨论)可以保持高达16个输出(例如),使得节点(即,808-1)由于用于输出的瞬时全局带宽不足而挂起(stall)是不太可能的。而且,瞬时带宽不受请求-响应事务或不成功传送重新进行的影响。最终,推进模型更紧密地与编程模型匹配,即程序不“获取(fetch)”其自身的数据。相反地,它们的输入变量和/或参数在被调用前写入。在编程环境中,输入变量的初始化由源程序写入存储器。在处理集群1400中,这些写入被转换成缓冲写,缓冲写在节点上下文中产生变量的值。全局输入缓冲器(以下将讨论)用于从源节点接收数据。由于808-1到808-N每个节点的数据存储器是单端口的,因此输入数据的写入可能与本地单输入多数据(SIMD)的读取相冲突。这种争用可以通过将输入数据接受到全局输入缓冲器中来避免,这种方式下输入数据的写入会等待开放数据存储器周期(也就是说,不存在与SIMD访问的存储体冲突)。数据存储器可以具有32个存·储体(例如),所以缓冲区很可能被迅速释放。然而,由于不存在确认传送的握手,因此节点(即,808-1)应该具有空闲的缓冲条目。如果需要,全局输入缓冲器使本地节点(即,808-1 )挂起并且强制写入数据存储器以释放缓冲器位置,但是这种事件应该是极为罕见的。通常,全局输入缓冲器被实现为两个分离的随机访问存储器(RAM),使得一个存储器处于写全局数据状态,而另一个存储器处于被读入数据存储器的状态。消息互连与全局数据互连是分离的,但是两者都使用推进模型。在系统级,类似于SMP或者对称多处理,节点808-1到808-N在处理集群1400中被复制,节点的数量规模扩大至期望吞吐量。该处理集群1400的规模可扩大至非常大数量的节点。节点808-1到808-N被分组为分区1402-1到1402-R,每一个分区具有一个或更多个节点。通过增加节点之间的本地通信,并且通过允许较大型的程序计算较大量的输出数据,分区1402-1到1402-R有助于可扩展性,使得更可能满足所需的吞吐量需求。在分区(SP,1402-1)内,节点使用本地互连进行通信,不需要全局资源。分区(S卩,1402-1)内的节点还可以以任何粒度共享指令存储器(即,1404-1):从每个节点使用独占指令存储器到所有节点使用共同的指令存储器。例如,三个节点可以共享指令存储器的三个存储体,而第四个节点具有指令存储器的独占存储体。当节点共享指令存储器(即,1404-1)时,节点通常同步执行相同的程序。处理集群1400还可支持很大数量的节点(S卩,808-1)和分区(S卩,1402-1)。然而,每个分区的节点数通常被限制为4,因为每个分区具有4个以上节点通常类似于非一致性存储器访问(NUMA)架构。在这种情况下,分区通过具有大致恒定的横截面带宽的一个(或更多)横条(其将在下文关于互连814进行描述)连接。目前,处理集群1400的架构设计成每周期传送一个节点的数据宽度(例如,64个16位像素),将像素分为4次传送,每个周期传送16像素,在4个周期内传送。处理集群1400 —般是容许时延的,并且节点缓冲通常避免节点挂起即使当互连814接近饱和(注意:此条件很难实现,除了使用合成程序)。通常,处理集群1400包括在分区之间共享的全局资源:(I)控制节点1406,其实现系统范围的消息互连(在消息总线1420上)、事件处理和调度以及与主机处理器和调试器的接口(所有这些在下文详细描述)。(2) GLS单元1408,其含有可编程RISC处理器,该GLS单元1408使能系统数据移动,该系统数据移动可由C++程序描述,该C++程序可被直接编译为GLS数据移动线程。这使系统代码能够在交叉托管的环境中执行而不修改源代码,并且比直接存储器访问更普遍,因为其可以从系统中或者SMD数据存储器(下文描述)中的任何一组地址(变量)移动到任何其他组的地址(变量)。该GLS单元1408是多线程的,具有例如O周期的上下文切换,支持多达例如16个线程。(3)共享功能存储器1410,其是提供通用查找表(LUT)和统计收集工具(直方图)的大型共享存储器。其还支持使用大型共享存储器进行像素处理,诸如重采样和失真校正,而这种像素处理不能得到节点SMD (由于成本原因)的很好的支持。该处理使用(例如)6发射(i ssue ) RISC处理器(即,在以下文详细描述的SFM处理器7614 ),其将标量、向量和二维阵列实现为固有类型。(4)硬件加速器1418,其可以合并用于不需要可编程性的功能或用于优化功率和/或面积。对于子系统而言,加速器作为系统中的其他节点出现,其参与控制和数据流,可以创建事件并且可以被调度,并且对于调试器可见。(在适用的情况下,硬件加速器可以具有专用LUT和统计采集)。(5)数据互连814和系统开放核心协议(0CP)L3连接1412。这些连接管理数据总线1422上节点分区、硬件加速器·、系统存储器和外围设备之间的数据移动。(硬件加速器还可以具有到L3的私有连接。)(6)调试接口。这些接口未在图中示出,但是在本文中描述。GLS单元1408可以将数据类型、对象和变量赋值的通用C++模型映射到系统存储器1416、外围设备1414和诸如节点808-1的节点(如果适用,包含硬件加速器)之间的数据移动。这使能在功能上等同于处理集群1400的操作的通用C++程序,而不需要系统直接存储器访问(DMA)的仿真模型或近似。该GLS单元可以实现完全通用的DMA控制器,具有对系统数据结构和节点数据结构的随机访问,并且其为C++编译器的目标。该实现使得,即便数据移动由C++程序控制,就可用资源的利用率而言,数据移动的效率仍接近常规DMA控制器的效率。然而,通常避免在系统DMA和程序变量之间映射的要求,避免为将数据封装和解封装成DMA载荷而可能存在的多个周期。该实现还自动地调度数据传送,避免DMA寄存器设置和DMA调度的开销。在几乎不存在由于调度不匹配而导致的开销和效率低下的情况下,数据实现传送。现在转到图5,其更为详细地示出GLS单元1408。GLS单元1408的主要处理组件是GLS处理器5402,GLS处理器5402可以是类似于上面详细描述的节点处理器4322的通用32位RISC处理器,但是可以被定制以用于GLS单元1408。例如,可以定制GLS处理器5402为能够复制节点(即,808-1)的SMD数据存储器的寻址模式,使得已编译的程序可以根据需要生成节点变量的地址。GLS单元1408 —般还可以包括上下文保存存储器5414、线程调度机制(即,消息列表处理5402和线程包装器5404)、GLS指令存储器5405、GLS数据存储器5403、请求队列和控制电路5408、数据流状态存储器5410、标量输出缓冲器5412、全局数据IO (输入输出)缓冲器5406和系统接口 5416。GLS单元5402还可包括用于交错和去交错的电路,该电路将交错的系统数据转换为去交错的处理集群数据,反之亦然,GLS单元5402还可包括实现配置读线程的电路,其从存储器1416 (含有程序、硬件初始化,等)为处理集群1400获取配置(S卩,至少部分基于处理集群1400的用于并行化串行程序的计算和存储器资源的数据结构)并且将该配置分配给处理集群1400。对于GLS单元1408,可以有三个主接口(S卩,系统接口 5416、节点接口 5420和消息接口 5418)。对于系统接口 5416,通常存在到系统L3互连的连接,用于访问系统存储器1416和外围设备1414。此接口 5416—般具有两个缓冲区(采用乒乓布置),每个缓冲区足够大以存储(例如)128行256位L3包。对于消息接口 5418,GLS单元1408可以发送/接收操作消息(即,线程调度、收发信号终止事件和全局LS-单元配置),可以为处理集群1400分配所获取的配置,并且可以将传送标量值传送给目的上下文。对于节点接口 5420,全局IO缓冲器5406通常耦合到全局数据互连814。一般地,此缓冲器5406足够大以存储64行节点SMD数据(例如,每行可以含有64个16位的像素)。例如,此缓冲器5406还可以被组织为256x16x16位以匹配每周期16像素的全局传送宽度。现在,转到存储器5403、5405和5410,每个存储器含有通常与驻留线程相关的信息。不论线程是否激活,GLS指令存储器5405通常含有用于所有驻留线程的指令。GLS数据存储器5403通常含有所有驻·留线程的变量、临时值和寄存器溢出/填充值。GLS数据存储器5403还可具有线程代码无法发现的区域,该区域含有线程上下文描述符和目标列表(类似于节点中的目标描述符)。还存在含有到目标上下文的输出的标量输出缓冲器5412 ;通常保持该数据以将其复制到水平分组中的多个目标上下文,并且标量输出缓冲器5412流水处理标量数据的传送以匹配处理集群1400处理流水。数据流状态存储器5410通常含有从处理集群1400接收标量输入并根据该输入控制线程调度的每个线程的数据流状态。通常,GLS单元1408的数据存储器被组织成几个部分。数据存储器5403的线程上下文区域对于GLS处理器5402的程序可见,而数据存储器5403的剩余部分和上下文保存存储器5414保持私有。上下文保存/恢复存储器或者上下文保存存储器通常是对所有挂起线程的GLS处理器5402寄存器的拷贝(S卩,16x16x32位寄存器内容)。数据存储器5403中的两个其他私有区域包含上下文描述符和目标列表。请求队列和控制5408通常监控GLS数据存储器5403外部GLS处理器5402的加载和存储访问。这些加载和存储访问由线程执行以将系统数据移动到处理集群1400,并且反之亦然,但是数据通常不会物理流经GLS处理器5402,并且该GLS处理器一般不对数据执行操作。相反,请求队列5408在系统级将线程“移动”转换为物理移动,为该移动匹配加载与存储访问,并且使用系统L3和处理集群1400数据流协议执行地址和数据排序、缓冲区分配、格式化以及传送控制。上下文保存/恢复区域或上下文保存存储器5414通常是广泛的随机访问存储器或RAM,其可以保存和恢复GLS处理器5402的所有寄存器一次,支持零周期上下文切换。对每次数据访问,线程程序会需要几个周期用于地址计算、条件测试、循环控制等。因为有大量潜在的线程并且因为目标是保持所有线程足够活跃以支持峰值吞吐量,所以上下文切换以最小的周期开销发生是重要的。还应该注意到由于单线程“移动”为所有节点上下文(如,水平分组中每个上下文每个变量64像素)传送数据,所以线程执行时间会被部分抵消。这可以允许相当大量的线程周期,同时仍然支持峰值像素吞吐量。现在,转到线程调度机制,该机制一般包括消息列表处理5401和线程包装器
5404。线程包装器5404通常将输入消息接收到邮箱以为GLS单元1408调度线程。一般来说,每个线程存在一个邮箱入口,该邮箱入口可以含有线程的目标列表的信息(诸如,线程的初始程序计数和在处理器数据存储器(即,4328)中的位置)。该消息还可以含有在偏移O处开始写入线程的处理器数据存储器(即,4328)上下文区域的参数列表。在线程执行期间该邮箱还用于在该线程被挂起时保存线程程序计数,并用于定位目的信息以实现数据流协议。除了消息收发,GLS单元1408还执行配置处理。通常,此配置处理可以实现配置读线程,其从存储器获取处理集群1400的配置(包含程序、硬件初始化等)并且将该配置分配给处理集群1400的剩余部分。通常,此配置处理在节点接口 5420上执行。此外,GLS数据存储器5403通常会包括上下文描述符、目的列表和线程上下文的部分和区域。通常,线程上下文区域对GLS处理器5402可见,但是GLS数据存储器5403的剩余部分或剩余区域可能是不可见的。为了使GLS处理器5402的程序正确工作,应该具有通常与处理集群1400中的其他32位处理器一致并且通常还与节点处理器(即,节点处理器4322)和SFM处理器7614(在以下描述)一致的存储器的视图。一般来说,GLS处理器5402具有与处理集群1400共用的寻址模式是易懂的,因为GLS处理器是通用的32位处理器,其具有与其他处理器和外围设备(S卩,1414)相当/可比的对系统变量和数据结构的寻址模式。问题可能出现在使用数据类型和上下文组织恰当地操作、并使用C++编程模型恰当地执行数据传送的GLS处理器5402的软件上。从概念上说,GLS处理器5402可以视为特定形式的向量处理器(其中这些向量例如采用框架中扫描行上所有像素的形式或者例如采用节点上下文内水平分组的形式)。这些向量可以具有可变数量的元素,这取决于框架宽度和上下文组织。向量元素还可以具有可变尺寸和类型,并且相邻元素不必具有相同的类型,例如因为像素可以与同一行上的其他类型的像素交错。GLS处理器·5402的程序可以将系统向量转换为节点上下文使用的向量;这不是通用的操作集,而是通常涉及使用数据流协议移动和格式化这些向量,这有助于预定和保持从节点上下文组织抽象的GLS处理器5402的程序用于特定的使用情形。系统数据可以具有多种不同的格式,其可以反映不同的像素类型、数据大小、交错模式、封装方式等。在一个节点(即,808-1)中,SMD数据存储器像素数据,例如,是64像素宽的去交错格式,每个像素以16位排列。由于“系统访问”意在为水平分组的所有输入上下文提供输入数据,因此系统数据和节点数据之间的对应被进一步复杂化:该分组的配置及其宽度取决于应用程序之外的因素。通常很不期望向应用程序暴露这种级别的细节一无论是格式转换到特定节点格式和从特定节点格式进行格式转换,还是变量节点上下文组织。在应用程序级处理这些通常是非常复杂的,并且这些细节依赖实现。在GLS处理器5402的源代码中,系统变量到本地变量的赋值一般会要求系统变量的数据类型可以转换成本地数据类型,反之亦然。基本系统数据类型的示例是字符型和短整型,其可转换成8位、10位或12位像素。系统数据还可以具有采用交错或去交错格式的合成类型,诸如封装的像素阵列,并且像素可以具有诸如Bayer、RGB、YUV等各种格式。基础本地数据类型的示例为整型(32位)、短整型(16位)和成对短整型(两个16位数值封装为32位)。基础系统类型和本地数据类型的变量可以作为阵列、结构以及阵列和结构的组合的元素出现。系统数据结构可以含有结合其他C++数据类型的兼容的数据元素。本地数据结构通常可以含有本地数据类型作为元素。节点(即808-1)提供独特的阵列类型,其直接在硬件中实现环形缓冲区,支持垂直的上下文共享,包括顶部和底部边缘的边界处理。通常,GLS处理器被包括在GLS单元1408中,用于(I)使用C++对象类从用户抽象出上述细节;(2)提供往来系统的数据流,其映射到编程模型;(3)执行很通用且高性能的直接存储器访问的等效,其符合处理集群1400的数据依赖的框架;和(4)自动调度数据流以便于有效的处理集群1400操作。应用程序使用被称作框架的类的对象来代表交错格式的系统像素(实例的格式由属性指定)。框架被组织为具有阵列索引的行阵列,该阵列索引指定给定垂直偏移的扫描行的位置。框架对象的不同实例可以表示不同像素类型的不同交错格式,多个这些实例可用在相同的程序中。框架对象的赋值运算符根据数据是否正传送至处理集群1400或数据是否正从处理集群1400传送出执行适合于该格式的去交错或者交错操作。本地数据类型和上下文组织的细节通过引入类行的概念得以抽象(在GLS单元1408中,块数据被视为行数据的阵列,其使用显式迭代向块提供多行)。由GLS处理器5402的程序实现的行对象通常不支持除来自兼容系统数据类型的变量赋值或者向兼容的系统数据类型的赋值以外的任何操作。行对象通常封装系统/本地数据通信的所有属性,诸如:节点输入和节点输出两者的像素类型;数据是否被封装,以及数据如何被封装和解封装;数据是否被交错,以及交错和去交错图案;以及节点的上下文配置。转到图6,其示出用于GLS处理器5402的图像处理应用的读线程和写线程的概念操作的示例。在编程人员看来,在此示例中,框架通常由交错的Bayer像素的缓冲区构成。由节点(即,808-1)或共享的功能存储器1410内的SMD操作交错像素通常是低效的,因为在一般情况下,不同的操作针对不同的像素类型执行,所以单个指令通常无法应用到所有交错格式的像素。出于此·原因,图6中节点上下文中所示的行数据通过去交错获得。系统数据未必是交错的一例如,应用程序可以将系统存储器1416用于中间结果,这些中间结果保持处理集群1400使用的去交错格式。但是,大多数输入格式和输出格式是交错的,并且GLS单元1408应该在这些格式和去交错的处理集群1400表示之间进行转换。GLS处理器5402处理系统格式或节点上下文格式的像素向量。然而,在此例子中,GLS处理器5402的数据路径并不直接对这些向量执行任何操作。在此例子中,编程模型支持的操作是从框架到行或共享功能存储器1410块类型的赋值,反之亦然,执行任何所需的格式化以通过处理集群节点对行或块对象的操作来实现对框架对象的直接操作的等效。框架的大小由一些参数确定,包括像素类型的数目、像素宽度、至字节边界的填充、框架在每扫描行若干像素和若干扫描行中的宽度和高度,这些参数会随着分辨率而变化。框架被映射到处理集群1400上下文,一般被组织为宽度小于实际图像的水平分组,框架划分,其被交换到处理集群1400中用于作为行或块类型进行处理。此处理产生结果:当结果为另一框架时,此结果通常从处理集群1400操作框架划分的部分中间结果重构而来。在交叉托管(cross-host)的C++编程环境中,类行的对象被视为此示例中的图像的整个宽度,大体消除了在硬件中处理框架划分所需的复杂性。在此环境中,行对象的实例包括在水平方向上跨整个扫描行的迭代。框架对象的细节并未通过对象实现来抽象,而是利用框架对象的固有属性,以隐藏去交错和交错所需的位级别格式化并使能转换成GLS处理器5402的指令。这允许交叉托管的C++程序独立于处理集群1400的环境获得与处理集群1400的环境中的执行等价的结果。在处理集群1400的代码生成环境中,行是标量类型(一般等价于整型),除代码生成支持寻址属性的情形,该寻址属性对应于用于来自SMD数据存储器的访问的水平像素偏移。在此示例中的扫描行上的迭代由SMD中的并行操作、节点(S卩,808-1)上的上下文之间的迭代以及节点的并行操作的组合完成。框架划分可以由主机软件(其知道框架和框架划分的参数)、GLS软件(使用主机传递的参数)和硬件(使用数据流协议检测最右边的边界)的组合控制。如以下所述,除了大多数的类实现直接由GLS处理器5402的指令完成外,框架是GLS程序实现的对象类。为框架对象定义的访问功能具有将给定实例的属性加载到硬件的副作用,因此硬件可以控制访问操作和格式化操作。这些操作通常太低效而无法以期望的吞吐量在软件中实现,特别是在具有多个线程激活的情况下。由于存在一些激活的框架对象的实例,所以期望在任何给定的时间点在硬件中有一些起作用的配置。当对象被实例化时,构造器将属性关联到对象。给定实例的访问将该实例的属性加载到硬件中,在概念上类似于限定实例的数据类型的硬件寄存器。因为每个实例具有其自身的属性,所以可以有多个实例起作用,每个实例使用其自身的硬件设置控制格式化。读线程和写线程以独立程序写入,因此每个可以基于其各自的控制和数据流被独立地调度。以下两部分提供读线程和写线程的示例,其示出线程代码、框架类声明以及如何使用这些线程以非常复杂的像素格式化使用很小数量的指令实现很大的数据传送。读线程将表示系统数据的变量赋值给表示至处理集群1400程序的输入的变量。这些变量可以是任何类型,包括标量数据。从概念上说,读线程执行某种形式的迭代,例如,在垂直方向上固定宽度的框架划分内的迭代。在该循环内,框架对象内的像素赋值给行对象,框架的细节和框架划分(行的宽度)的组织对源代码隐藏。还存在其他向量类型或标量类型的赋值。在每个循环迭代结束时,使用Set_Valid调用(多个)目标处理集群1400程序。相对于硬件数据传送,循环迭代通常执行很快。循环执行配置硬件缓冲区和控制以执行所需的传送。在迭代结束时,线程执行被挂起(通过任务切换指令),而硬件继续传送。这将GLS处理器5402释放出来以执行其他线程,由于单个GLS处理器5402可能控制高达(例如)16个线程传送,因此这是很重要的。一旦硬件完成传送,则再次使能挂起线程的执行。向量输出通常由迭代队列尾部的条目控制,通过此条目和其他条目控制标量数据。其原因是为了支持标量参数到不直接从线程接收向量数据的程序的输出,如图7中所示。在此示例中,读线程将向量数据提供给程序A,并且将标量数据提供给程序A-D。这种类型的数据流引入串行化,其消除程序A-D并行执行的可能。在这种情况下,并行执行通过流水线执行实现,从而程序A从读线程的迭代N接收数据,执行并输出数据给程序B的相同迭代N,等等。在执行中的任何给定点,程序A-D正分别基于读线程迭代N到N-3执行。为了支持这种执行,读线程应该同时为迭代N到N-3输出数据。否则,读线程的迭代将与此迭代的所有输出互锁,然后读线程的迭代N将必须等待程序D接受迭代N的输入,在此间隔期间,其他程序将被挂起。可以通过将读线程输入到同一级别的处理流水(在上下文描述符中具有相同的OutputDelay值的程序)避免串行化,从而读线程在其输出的流水阶段操作。这需要额外读线程用于每个级别的输入:这对于向量输入是可接受的,因为其中向量输入从系统输入的阶段的数量通常是有限的。然而,每个程序可能要求为每次迭代更新标量参数,或者从系统更新或者由读线程计算(例如,在每个处理阶段控制环形缓冲区的垂直索引参数)。这要求每个流水线阶段有一个读线程,对于若干读线程安排过多命令。由于标量数据比向量数据要求更少的存储空间,因此GLS单元1408在标量输出缓冲器5412中存储来自每个迭代的标量数据,并且使用迭代队列可以根据需要提供此数据以支持处理流水线。对于向量数据,这通常是不可行的,因为所需的缓冲将为大约所有节点SMD存储器的尺寸。图8中图示来自GLS单元1408的标量输出的流水线。如所示,其中有GLS单元1408活动、程序执行和程序间的传送。在顶部的顺序示出GLS线程活动与程序A的执行交错。(简化起见,所示的向量和标量传送花费相同的时间量。实际上,向量传送花费更长时间,并且写入程序A的多个目的上下文,将标量数据连同向量数据拷贝到这些上下文。这具有未示出的对程序A的流水处理实例的效果)在首次迭代中,读线程触发程序A的向量数据和程序A-D的标量数据的输出:这由向量Al和标量Al-标量Dl表示。由于这是首次迭代,所以所有的目标上下文是空闲的,并且可以执行所有这些传送。因此,对于此迭代,在这些传送完成后,可以释放该迭代队列条目。此迭代的输出使得能够执行输出数据向量BI的程序A。当接收输入时,后续的程序执行,其在时间上偏斜以反映执行流水线。读线程不能向目标上下文输出标量数据,直到每个程序在第一迭代期间发出信号Releasejnput。为此,标量B2到标量D2保留在标量输出缓冲器5412中,直到目标上下文使能具有(源许可)SP的输入。该数据在标量输出缓冲器5412中的持续时间由灰色虚线箭头指示,其示出标量数据与来自源程序的向量输入同步。在此期间,其他迭代的数据也累积在标量输出缓冲器中,达到处理流水线的深度,在本例中大约为4次迭代。这些迭代的每个具有迭代队列条目,其记录对于相继迭代标量输出缓冲器中的标量数据的数据类型、目标和位置。当完成到每个目标的标量输出时,在迭代队列中记录该事实(通过将类型标志设置为00’ b — LSB将为I)。当所有类型标志为O时,这指示完成所有迭代的输出,并且可以释放迭代队列条目。此时,针对此迭代丢弃标量输出缓冲器5412的内容,并且存储器被释放用于后续线程执行的分配。GLS线程由调度读线程和调度写线程消息调度。如果该线程不依赖于标量输入(读线程或写线程)或向量输入(写线程),则当接收到调度消息时,该线程变为准备执行;否则,当针对依赖于标量输入的线程设置Vin时该线程变成准备就绪,或者直到在全局互连(写线程)上接收到向量数据时,该线程变成准备就绪。以轮询(round-robin)次序使能执行准备就绪线程。当线程开始执行时,其持续执行直到给定迭代的所有传送已经被启动,此时线程由显式任务切换指令挂起而硬件传送完成。任务切换由代码生成确定,这取决于变量赋值和流分析。对于读线程,至所有目标的所有向量和标量必须在线程挂起时刻已经赋值给处理集群1400 (其通常是在迭代内沿任何代码路径的最终分配之后)。对于到每个目标的最后传送(基于硬件获知传送的数量),任务切换指令使Set_Valid有效。对于写线程,分析是类似的,不同的是赋值给系统,并且Set_Valid不是显式地设置。当线程被挂起时,硬件为挂起线程保存所有上下文,并且如果有的话调度下一个准备就绪的线程。一旦线程被挂起,其可以保持被挂起,直到硬件已经完成线程启动的所有数据传送。这由几种不同的方式指示,取决于传送条件:一对于将扫描行输出到水平分组(多个处理节点上下文或单个SFM上下文)的读线程,数据传送的完成由至最右侧上下文或共享的功能存储器输入的最后传送指示,最后传送由Set_Valid标志传送至上下文指示,其使得SP中的Rt=I (使能传送)。一对于将块输出到SFM上下文的读线程,硬件提供水平维度(类似于行)中的所有数据,并且最后传送由Block_Width确定。在垂直维度中,显式的软件迭代提供块数据。一对于接收来自节点或SFM上下文的输入的写线程,最后数据传送由Set_Valid指示,该传送匹配水平分组大小或块宽度(HG_Size或Block_Width)。当线程被重新使能以执行时,其可以启动或终止另一组传送。读线程通过执行END指令终止,其使用初始目标ID产生到所有目标的OT信号,该信号使得0Te=l。因为写线程通常因为接收到来自一个或更多源的OT而终止,但是不被认为是完全终止,直到其执行END指令:while循环终止而程序继续是可能的,其中后续的while循环基于终止。在任一情况下,线程可以在其执行END之后发送线程终止消息,所有的数据传送完成,并且所有OT已经被传送。读线程可以具有两种形式的迭代:显式的FOR循环或其它显式迭代,或者来自处理集群1400的数据输入上的循环,这类似于写线程(循环不存在终止)。在第一种情况下,任何标量输入不视为是释放,直到所有的循环迭代已被执行一该标量输入适用于线程的整个跨度的执行。在第二种情况下,在每次迭代后,释放输入(Release_Input被发出),在线程可以被调度以执行之前,应该接收新的输入,设置Vin。像写线程一样,该线程在接收OT后终止数据流。GLS处理器5402可以包括专用接口用于支持基于读线程和写线程操作的硬件控制。此接口可以允许硬件区分特定访问或专门访问与GLS处理器5402对GLS数据存储器5403的常规访问。此外,还可以有用于控制此接口的GLS处理器5402的指令,这些指令如下:一加载系统(LDSYS)指令,其可以从指定系统地址加载GLS处理器5402的寄存器。这通常是虚拟加载,其目的是为了识别硬件的目标寄存器和系统地址。此指令还访问来自GLS数据存储器5403的属性字,该属性字包含将作为行或块传送给处理集群1400的系统框架的格式化信息。该属性访问不以GLS处理器5402寄存器为目标,而是以此信息加载硬件寄存器,使得硬件可以控制该传送。最终,该指令包含一个三位字段,其向硬件指示所访问的像素在交错框架格式中的相对位置。一标量和向量输出指令(OUTPUT,V0UTPUT),其可以将GLS处理器5402的寄存器存储到上下文中。对于标量输出,GLS处理器5402直接提供该数据。对于向量输出,这是虚拟存储,目的是为了识别源寄存器——其将输出与之前的LDSYS地址相关联——并且还为了指定在目标上下文中的偏移。行输出或块输出具有关联的垂直索引参数用于指定HG_Size或Block_Width,使得硬件获知传送给到行或块的(例如)32像素元素的数量。一向量输入指令(VINPUT),其将数据存储器5403位置加载到GLS处理器5402虚拟寄存器。这是从数据存储器5403虚拟加载虚拟行变量或虚拟块变量,目的为了识别目标虚拟寄存器和虚拟变量在数据存储器5403中的偏移。行输出或块输出具有关联的垂直索引参数用于指定HG_Size或Block_Width,使得硬件获知传送给到行或块的(例如)32像素元素的数量。一存储系统(STSYS)指令,其将虚拟GLS处理器5402寄存器存储到指定系统地址。这是虚拟存储,目的是为了识别虚拟源寄存器——其将存储与之前的VINPUT偏移相关联一并且还为了指定其将要存储到的系统地址(通常在与其他接收的输入交错之后)。此指令还从数据存储器5403访问属性字,该属性字包含要从处理集群1400行或块传送的系统框架的格式化信息。该属性访问不以GLS处理器5402为目标,而是以此信息加载硬件寄存器,使得硬件可以控制传送。最终,该指令包含一个三位字段,其向硬件指示所访问的像素在交错的框架格式中的相对位置。GLS处理器5402的数据接口可以包括以下信息和信号:一地址总线,其指定:1) LDSYS指令和STSYS指令的系统地址,2) OUTPUT指令和V0UTPUT指令的处理集群1400偏移,或者3)VINPUT指令的数据存储器5403偏移。这些地址由提供这些地址的指令进行区分。一指定传送的数量并控制行或块传送的地址排序的参数HG_Size/Block_Width。一虚拟寄存器标识符,其是加载类型指令或存储类型指令的虚拟目标或虚拟源。一来自OUTPUT指令和V0UTPUT指令的Dst_Tag的值。一将数据存储器5403的格式化属性加载到GLS硬件寄存器的选通信息(strobe)。—两位字段,对于OUTPUT指令,其用于指示标量传送的宽度;或者对于V0UTPUT指令,其用于区分节点行、SFM行和块输出。取决于数据类型,向量输出可以根据数据类型要求不同的地址排序和数据流协议操作。此字段还为向量输出编码Block_End以及为标量输出和向量输出编码Input_Done。—为SFM行输入指示环形缓冲区中最后一行的信号。当Pointer=Buffer_Size时,该信号基于环形缓冲区的垂直索引参数,并用作行阵列输出的信号填充。一到GLS处理器5402的输入,针对已接收Output_Terminate信号的线程在线程被激活时有效。其作为GLS处理器5402条件状态寄存器位被测试,并且该输入有效时,会引起线程终止。此示例的GLS单元1408可以具有任意下列特征:一同时支持高达8个读线程和写线程;一OCP连接1412可以具有用于读数据和写数据的128位连接(对于正常读、写线程操作,高达8节拍(beat),对于配置读取操作高达16节拍读取)—256位2节拍突发串互连主接口和256位2节拍突发串从接口用于发送和接收来自处理集群1400内的节点/分区的数据;—用于GLS单元1408的32位32节拍(至多)消息主接口,用于发送至处理集群1400的其余部分的消息;一用于GLS单元1408的32位32节拍(至多)消息主接口,用于接收来自处理集群1400的其余部分的消息;一互连监控块,用于在没有活动时监控互连814上的数据活动和到控制节点的信号,使得控制节点可以将处理集群1400的子系统断电;一分配并且管理系统接口 5416上的多个标签(多达32-标签)一在读线程数据路径中的去交错器;一在写路径中的去交错器;一对于读线程和写线程每行支持多达8种颜色(位置);一对于读线程最多支持8行(像素+数据);
一对于读线程最多支持4行(像素+数据)。转到图9,可以看到GLS单元1408的更详细示例。如图所示,GLS单元1408的核心是GLS处理器5402,其可以运行各种线程程序。这些线程程序可以作为指令被预加载在指令存储器5405 (其一般包括指令存储器RAM6005和指令存储器仲裁器6006)中的多个位置中,并且每当这些线程被激活时被调用。每当读线程或写线程被调度时,线程/上下文可以被激活。线程通过GLS单元1408经由消息接口 5418(其一般包括主消息接口 6003和从消息接口 6004)接收的消息被调度以运行。首先转到读线程数据流,当数据应该从OCP连接1412被传送到互连814上时,GLS单元1408处理读线程。读线程由调度读线程消息调度,并且一旦该线程被调度,GLS单元1408即可触发GLS处理器5402以获取该线程的参数(即,像素参数)并可以访问OCP连接1412以获取数据(即,像素数据)。一旦数据被获取,可以根据存储的配置信息(从GLS处理器5402接收),将数据去交错和上采样并通过数据互连814将其发送给合适的目标。该数据流使用源通知、源许可和输出终止消息来维持,直至线程被终止(当GLS处理器5420通知时)。标量数据流使用更新数据存储器消息来维持。另一数据流是配置读线程,当配置数据应该从OCP连接1412传送给GLS指令存储器5405或处理集群1400内的其他模块时,GLS单元1408处理配置读线程。配置读线程由调度配置读消息调度,并且一旦该消息被调度,则OCP连接1412被访问以获得基本配置信息。该基本配置信息被解码以获得实际配置数据并且被发送至合适的目标(通过数据互连814,如果目标是处理集群1400内的外部模块)。又一数据流是写线程。当数据应该从数据互连814传送到OCP连接1412时,写线程由GLS单元1408处理。写线程由调度写线程消息调度,并且一旦该线程被调度,GLS单元1408即触发GLS处理器5402以获得线程的参数(即,像素参数)。此后,GLS单元1408等待数据(即,像素数据)经由数据互连814到达,并且一旦来自数据互连814的数据已经被接收,则根据存储的配置信息(从GLS处理器5402接收)对数据进行交错和下采样并且将其发送给OCP连接1412。该数据流使用源通知、源许可和输出终止消息来维持,直至该线程被终止(当GLS处理器5420通知时)。标量数据流使用更新数据存储器消息来维持。现在,转向GLS数据存储器5403的组织(其一般包括数据存储器RAM6007和数据存储器仲裁器6008),该存储器5403被配置为存储所有常驻线程的各种变量、临时值、寄存器溢出/填充值。还可以具有对线程代码隐藏的区域,其包含线程上下文描述符和目标列表(类似于节点中的目标描述符)。具体而言,对此示例,数据存储器的RAM6007的前8个位置分配给上下文描述符用于保存16上下文描述符。此示例的目标列表占有数据存储器RAM6007的下16个位置。此外,每个上下文描述符指定线程是否依赖于来自其他处理节点(或其他线程)的标量值,并且,如果是的话,指定针对该标量数据存在多少个数据源。在此例中,GLS数据存储器5403的其余部分保存线程上下文(其具有可变的分配)。GLS数据存储器5403可以被多个源访问。这些多个源为GLS单元1408的内部逻辑(即,到OCP连接1412和数据互连814的接口)、GLS处理器5402的调试逻辑(其在操作的调试模式期间可以修改数据存储器5403内容)、消息接口 5418 (从消息接口 6003和主消息接口 6004两者)和GLS处理器5402。数据存储器的仲裁器6008能够仲裁对数据存储器RAM6007的访问。
现在转到上下文保存存储器5414 (其通常包括上下文状态RAM6014和上下文状态仲裁器6015),当在GLS单元1408中进行上下文切换时,GLS处理器5402可以使用此存储器5414用于保存上下文信息。上下文存储器具有针对每个线程的位置(即,共支持16个)。每个上下文保存行例如为609位,并且每行组织的示例在上文详述。仲裁器6015仲裁GLS处理器5402和GLS处理器5402的调试逻辑对上下文状态RAM6014为进行存取的访问(其可以在操作的调试模式期间修改上下文同一存储器RAM6014内容)。通常,每当GLS包装器调度读线程或写线程时,上下文切换发生。利用指令存储器5405 (其一般包括指令存储器RAM6005和指令存储器仲裁器6006),可以在每行中为GLS处理器5402存储指令。通常,仲裁器6006可以仲裁GLS处理器5402和GLS处理器5402的调试逻辑对指令存储器RAM6005为进行存取的访问(其可以在操作的调试模式期间修改指令存储器RAM6005内容)。指令存储器5405通常作为配置读线程消息的结果而被初始化,并且一旦指令存储器5405被初始化,则可以使用调度读线程或调度写线程中存在的目标列表基地址来访问程序。当发生上下文切换时,消息中的地址被用作该线程的指令存储器5405起始地址。现在转到标量输出缓冲器5412 (其一般包括标量RAM6001和仲裁器6002)中,该标量输出缓冲器5412 (尤其是标量RAM6001)存储GLS处理器5402和消息接口 5418通过数据存储器更新消息写入的标量数据,并且仲裁器6002可以仲裁这些源。作为标量输出缓冲器5412的一部分,还存在相关逻辑,并且在图10中可以看到此标量逻辑的架构。在图10中,可以看到读线程的标量逻辑后的步骤示例。在此例中,当读线程被调度时,发生两个并行过程。在一个过程中,GLS处理器5402被触发用于提取标量信息,并且所提取的标量信息被写入标量RAM6001。该标量信息通常包含数据存储器行、目标标签、标量数据和HI和LO信息,这些标量信息通常被线性地写入RAM6001。该线程的标量起始地址6028和标量结束地址6029也被锁存到邮箱6013中(考虑计数6026)。一旦GLS处理器5402完成写过程(如上下文切换所指示的),标量输出缓冲器5412将开始向标量RAM6001中的所有目标(如存储的目标标签所指示的)发送源通知消息。此外,标量逻辑包含标量迭代计数器6027(其针对每个线程被维持并且针对8次迭代维持该计数器)。当线程首次从调度状态移动到执行状态时,迭代计数器6027被初始化,并且每当GLS处理器5402被触发时,该迭代计数器被增加。在此示例的另一并行过程中(通常针对仅标量读线程发生)并且对于已调度的读线程接收到SRC许可时(响应于GLS单元1408之前发送的SRC通知),邮箱6013使用从消息中提取的信息进行更新。应该注意到源通知消息可以(例如)由用于读线程的标量输出缓冲器5412发送,该缓冲器已使能仅标量传送。对于使能标量和向量两者的读线程,不可发送源通知消息。之后,可以读取未决许可表以确定源许可消息中发送的DST_TAG是否与为该线程ID所存储的(之前的源通知消息已经写入DST_TAG)相匹配。一旦匹配,则标量有限状态机(FSM)6031中的该线程的未决许可表位被更新。然后,使用新目标节点和段ID连同线程ID更新GLS数据存储器5403。GLS数据存储器5403被读取以获得来自目标列表条目的PINCR值并且对该值进行更新。对于标量传送,假定目标发送的PINCR值为‘O’。之后,线程ID连同指示该线程是否是最左边线程的状态指示被锁存到线程ID先入先出存储器(FIFO) 6030 中。
现在,GLS单元1408具有向目标传送标量数据的许可。线程FIF06030被读取以提取所锁存的线程ID。所提取的线程ID连同目标标签被用作索引以从标量RAM6001获取合适的数据。一旦数据被读取,数据中存在的目标索引被提取并与请求队列中所存储的目标标签相匹配。一旦匹配,所提取的线程ID被用于索引到邮箱6013以获取GLS数据存储器5403目标地址。然后,匹配的DST_TAG被加入GLS数据存储器5403目标地址以确定到GLS数据存储器5403的最终地址。然后,GLS数据存储器5403被访问以获取目标列表条目。GLS单元1408使用来自标量RAM6001的数据向目标节点(通过从GLS数据存储器5403提取的节点id、段ID进行识别)发送更新GLS数据存储器5403消息,该过程被重复,直到整个迭代数据被发送。一旦到达线程数据的末端,GLS单元1408移动到下一线程ID (如果该线程已经以活跃状态推入FIFO中),并指示全局互连逻辑已经到达线程的末端。GLS处理器5402使用OUTPUT指令写入标量数据。在执行中含有的标量数据或者来自程序自身,或者在使能标量依赖的情形下经由OCP连接1412从外围设备1414或者经由更新数据存储器更新消息从处理集群1400中的其他块获取。当标量由GLS处理器5402从OCP连接1412获取时,GLS处理器5402将在其数据存储器地址行上发送来自0->1Μ的地址(例如)。GLS单元1408将该访问转换成OCP连接1412主读取访问(S卩,I个字·的突发串)。一旦GLS单元1408读取该字,GLS单元1408将该字传送给GLS处理器5402 (S卩,32位;这32位取决于GLS处理器5402发送的地址),GLS处理器将该数据发送给标量RAM6001。在标量数据应该从其他处理集群1400模块接收的情况下,将在其线程的上下文描述符中设置标量依赖位。当输入依赖位被设置时,将发送标量数据的源的数量也在相同的描述符中设置。一旦GLS单元1408接收来自所有源并存储在GLS数据存储器5403中的标量数据,标量依赖被满足。一旦依赖被满足,GLS处理器5402被触发。此时,在GLS处理器5402将读取所存储的数据并使用OUTPUT指令写入标量RAM6001 (通常用于读线程)。GLS处理器5402也可选择将数据(或任何数据)写入OCP连接1412。当数据应由GLS处理器1408写入OCP连接1412时,GLS处理器1408将在其GLS数据存储器5403地址线发送(例如)来自0->1Μ的地址。GLS单元1408将该访问转换成OCP连接1412主写访问(即,I个字的突发串)并且将该(例如)32位写入OCP连接1412。GLS单元1408中的邮箱6013可以被用于处理消息、扫描仪和数据路径之间的信息流。当GLS单元1408接收到调度读线程、调度配置读线程或者调度写线程消息时,从消息中提取的值被存储在邮箱6013中。然后相应的线程被设为调度状态(调度读线程或调度写线程),使得扫描仪可以将该线程移动到执行状态以触发GLS处理器5402。邮箱6013还锁存来自GLS单元1408将使用的源通知消息(对于写线程)、源许可消息(对于读线程)的值。GLS单元1408的各个内部块之间的交互在不同时间点更新邮箱6007 (例如,如图10中所示)。入口消息处理器6010处理从控制节点1406接收的消息,并且表I示出GLS单元1408接收的消息的列表。在处理集群1400子系统中可以分别使用Seg_ID、Node_ID如{3,1}访问 GLS。
权利要求
1.一种装置,其特征在于: 消息总线(1420); 数据总线(1422);以及 加载/存储单元(1408),其具有: 配置为与系统存储器(1416)通信的系统接口(5416); 耦合到所述数据总线(1422)的数据接口(5420); 耦合到所述消息总线(1420)的消息接口(5418); 指令存储器(5405); 数据存储器(5403); 耦合到所述数据接口(5420)的缓冲器(5406); 耦合到所述消息接口(5418)的线程调度电路(5401,5404);以及耦合到所述数据存储器(5403)、所述缓冲器(5406)、所述指令存储器(5405)、所述线程调度电路(5401,5404)和所述系统接口(5416)的处理器(5402)。
2.根据 权利要求1所述的装置,其中所述加载/存储单元(1408)的特征进一步在于保存/恢复存储器(5414),其耦合到所述处理器并且配置为存储挂起线程的寄存器状态。
3.根据权利要求1或2所述的装置,其中所述加载/存储单元(1408)的特征进一步在于所述处理器(5402)被配置为复制处理电路(1402-1至1402-R)的寻址模式,使得可以生成所述处理电路变量的地址。
4.根据权利要求1、2或3所述的装置,其中所述加载/存储单元(1408)的特征进一步在于耦合在所述消息接口(5418)和所述处理器(5402)之间的标量输出缓冲器(5412)。
5.根据权利要求1、2、3或4所述的装置,其中所述加载/存储单元(1408)配置为实现配置读线程,使得所述加载/存储单元(1408)从系统存储器(1416)重新获得所述处理电路(1402-1至1402-R)的数据结构,其中所述数据结构至少部分基于用于并行化的串行程序的处理电路(1402-1至1402-R)的计算资源和存储器资源。
6.一种系统,其特征在于: 系统存储器(1416);以及 耦合到所述系统存储器(1416)的处理集群;其中所述处理集群包括: 消息总线(1420); 数据总线(1422); 布置在分区(1402-1至1402-R)中的多个处理节点(808-1至808-N),每个分区具有耦合到所述数据总线(1422)的总线接口单元(4710-1至4710-R),其中每个处理节点(808-1至808-N)被耦合到所述消息总线(1420); 耦合到所述消息总线(1420)的控制节点(1406);以及 加载/存储单元(1408),其具有: 配置为与所述系统存储器(1416)通信的系统接口(5416); 耦合到所述数据总线(1422)的数据接口(5420); 耦合到所述消息总线(1420)的消息接口(5418); 指令存储器(5405); 数据存储器(5403);耦合到所述数据接口(5420)的缓冲器(5406); 耦合到所述消息接口(5418)的线程调度电路(5401,5404)以及耦合到所述数据存储器(5403)、所述缓冲器(5406)、所述指令存储器(5405)、所述线程调度电路(5401,5404)和所述系统接口(5416)的处理器(5402)。
7.根据权利要求6所述的系统,其中所述加载/存储单元(1408)的特征进一步在于耦合到所述处理器并且被配置为存储挂起线程的寄存器状态的保存/恢复存储器(5414)。
8.根据权利要求6或7所述的系统,其中所述加载/存储单元(1408)的特征进一步在于所述处理器(5402)配置为复制处理电路(1402-1至1402-R)的寻址模式,使得可以生成所述处理电路变量的地址。
9.根据权利要求6、7或8所述的系统,其中所述加载/存储单元(1408)的特征进一步在于耦合在所述消息接口(5418)和所述处理器(5402)之间的标量输出缓冲器(5412)。
10.根据权利要求6、7、8或9所述的系统,其中所述加载/存储单元(1408)被配置为实现配置读线程,使得所述加载/存储单元(1408)从所述系统存储器(1416)重新获得所述处理电路(1402-1至1402-R)的数据结构,其中所述数据结构至少部分基于用于并行化的串行程序的所述处理电路(1402-1至1402-R)的计算资源和存储器资源。
11.根据权利要求6、7、8、9或10所述的系统,其中所述系统的特征进一步在于耦合在所述数据总线(1422)和所述数据接口(5420)之间的数据互连(814)。
12.根据权利要求6、7、8、9、10或11所述的系统,其中所述系统的特征进一步在于: 耦合到所述控制节点(1406)和所述系统接口(5416)的系统总线(1326,1328); 耦合到所述系统存储器(1416)和所述系统总线(1326,1328)的存储器控制器(1304); 以及 耦合到所述系统总线(1326,1328)的主机处理器(1316)。
全文摘要
本发明提供一种用于执行并行处理的装置。该装置具有消息总线(1420)、数据总线(1422)和加载/存储单元(1408)。该加载/存储单元(1408)具有系统接口(5416)、数据接口(5420)、消息接口(5418)、指令存储器(5405)、数据存储器(5403)、缓冲器(5406)、线程调度电路(5401,5404)和处理器(5402)。系统接口(5416)被配置为与系统存储器(1416)通信。数据接口(5420)耦合到数据总线(1422)。消息接口(5418)被耦合到消息总线(1420)。缓冲器(5406)耦合到数据接口(5420)。线程调度电路(5401,5404)耦合到消息接口(5418),并且处理器(5402)耦合到数据存储器(5403)、缓冲器(5406)、指令存储器(5405)、线程调度电路(5401,5404)和系统接口(5416)。
文档编号G06F13/14GK103221937SQ201180055803
公开日2013年7月24日 申请日期2011年11月18日 优先权日2010年11月18日
发明者W·约翰森, J·W·戈楼茨巴茨, H·谢赫, A·甲雅拉, S·布什, M·琴纳坤达, J·L·奈, T·纳加塔, S·古普塔, R·J·尼茨卡, D·H·巴特莱, G·孙达拉拉彦 申请人:德克萨斯仪器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1