跨越多核心系统动态分布多维工作集的制作方法

文档序号:6351759阅读:226来源:国知局
专利名称:跨越多核心系统动态分布多维工作集的制作方法
技术领域
本发明一般涉及多处理器数据处理系统,并且具体涉及配置有多个处理单元的数据处理系统上的操作。更具体地,本发明涉及用于跨越多核心数据处理系统的多个处理处理单元的分布式工作的竞争并行处理的方法和系统。
背景技术
先进的计算处理实现作为多维工作集的工作竞争。例如,在设计用于执行对于2或3维对象的操作的计算标准(例如,OpenCL )中提供N维(ND)范围命令,其使得要调度的多维工作集能够使用等于N维的索引空间,其中工作因而在该N维空间上重复(OpenCL是苹果公司的商标)。在这些用于跨越多维空间竞争工作的传统方法的情况下,存在固有的复杂性,使得非常难以有效地调度工作和/或有效地通信(跨越多维)调度和竞争哪个工作。

发明内容
从一个方面来看,本发明提供一种方法、计算机系统架构和计算机程序产品,用于数据处理系统中N维(ND)范围命令的有效分派/完成。所述方法包括编译器从接收的程序指令生成一个或多个命令,其中所述一个或多个命令由运行时间调度程序利用,以便调度工作用于在数据处理系统内的一个或多个处理单元上执行;与编译器相关联的ND范围工作处理(WP)逻辑确定由编译器生成的命令何时将在ND范围的操作数上实施,以N维配置安排该ND范围的操作数,其中N大于一(I);当N大于一(I)时,将ND范围的操作数自动分解为包括P个顺序排序的工作项目的一(I)维工作元素,P个顺序排序的工作项目每个代表一维工作元素中ND范围的操作数之一;将单维工作元素放置在数据处理系统的命令队列的一个或多个条目内,其中一个或多个条目的每个以排序的顺序保持工作项目的ID阵列;以及实现来自命令队列的工作项目的ID阵列到一个或多个处理单元的顺序分派,其中分派工作项目的ID阵列用于以排序的顺序执行;并且通过将单维工作输出结果映射到对应于由单维工作项目代表的ND范围操作数的原始位置的ND位置,生成ND范围输出。在检查以下附图和详细的书面描述时,要求保护的主题的其他系统、方法、功能、特征和优点将或将变得对于本领域的技术人员明显。


参照附图,现在将仅作为示例描述本发明的实施例,附图中图I图示示例多节点、具有多个节点的分布式数据处理系统架构,每个节点具有多个处理器核心和本地存储器,其中可以实施描述的实施例的一个或多个特征;图2图示具有两个处理节点的非统一存储器访问(NUMA)系统的现有技术实施,处理节点具有工作的预分布部分的本地工作队列,本地工作队列使用工作队列重新平衡算法周期性地重新平衡;图3图示根据一个实施例的多核心、多节点处理系统的第一示例,该系统配置有具有与每个工作条目相关联的核准处理器单元(APU)掩码和与每个处理器核心相关联的处理器单元(PU)掩码的共享全局命令队列(GCQ),以便实现通过系统内的核准处理器核心的工作的选择性检索;图4图不根据一个实施例的处理器核心的F1U掩码与GCQ内工作兀素的APU掩码的逻辑比较,以便确定允许哪些处理器核心检索来自工作元素的工作项目;图5图示根据一个实施例的工作请求操作,其中通过其掩码匹配工作元素的APU掩码的处理器核心,从工作元素顺序检索工作项目;图6A-6D提供根据一个实施例的框图的序列,其表现具有APU掩码的示例全局命 令队列,并且图示随着由一个或多个预先选择的处理器核心从用于处理的工作元素检索工作项目,对于全局命令队列内的计数变量的修改;图7是根据一个实施例的方法的流程图,通过该方法分配选择的处理器核心用于分派工作元素和相应的APU掩码,并且生成和分配计数变量到GCQ内的工作元素;图8是根据一个实施例的方法的流程图,通过该方法验证处理器核心用于利用APU掩码和计数变量的来自GCQ内工作元素的工作项目的分配,以便跟踪工作项目和工作元素的执行的完成;图9是根据本发明的一个实施例的多节点处理系统架构,其具有一个或多个处理节点与GCQ之间的高等待时间,其中通过在每个处理节点提供的本地工作队列支持工作元素的有效处理;图10图示根据一个实施例的混合多核心数据处理系统架构,其具有仅为具有到GCQ的高访问等待时间的那些处理节点提供的本地工作队列;图11图示根据一个实施例的,通过具有到GCQ的低访问等待时间的第一处理器核心和具有到GCQ的高访问等待时间的第二处理器核心从工作元素的工作检索;图12图示根据一个实施例的,经由本地工作队列在具有到GCQ的高访问等待时间的处理节点的工作完成处理;图13是根据一个实施例的方法的流程图,通过该方法从GCQ检索工作,并且在具有到GCQ的低访问等待时间的第一处理节点和具有到GCQ的高访问等待时间的第二处理节点执行工作;图14是根据一个实施例的方法的流程图,通过该方法高等待时间处理器节点的处理器核心执行来自本地工作队列的工作项目,跟踪本地工作队列内剩余的工作项目的量,并且发出请求以从GCQ检索额外工作用于处理器节点;图15是根据一个实施例的方法的流程图,通过该方法GCQ逻辑动态计算工作的块大小,以便转发到从工作元素请求工作的高等待时间处理节点;图16A图示根据一个实施例的,通过编译器/ND范围分解逻辑(逻辑)将4X4、二
(2)维(2D)范围工作集分解为单(一)维工作元素(阵列);图16B图示根据一个实施例的,通过编译器/逻辑利用剩余工作项目计数器和块大小以及随后的重新配置,将单维工作元素(阵列)顺序处理为2D范围输出;图17A图示根据一个实施例的,通过编译器/逻辑将4 X 2 X 2、三(3 )维(3D )范围工作集分解为单(一)维工作元素(阵列);图17B图示根据一个实施例的,通过图17A的单维工作元素的处理单元和通过编译器/逻辑的随后重新配置/重新合成处理为3D范围输出;图18是根据一个实施例的流程图,其将多维范围工作集分解为代表性的一维工作元素,用于工作项目到多处理器核心的有效分派;图19A-19F提供根据一个实施例的图的序列,图示(a)将3X3X3、三(3)维(3D)范围工作集分解为顺序安排的工作项目的单维(ID)阵列(工作元素),以及(b)虽有利用剩余工作项目计数器和块大小的单维工作元素的随后的顺序处理;以及图20是根据一个实施例的流程图,其从相应的单维工作元素的执行生成的单维工作输出生成/重新合成多维范围输出。
具体实施例方式说明性实施例提供一种方法、多节点、多核心系统架构和计算机程序产品或制造的商品,其实现数据处理系统(DPS)中N维(ND)范围命令的有效分派/竞争。方法实施其中包括步骤编译器从接收的程序指令生成一个或多个命令;ND范围工作处理(WP)逻辑确 定由编译器生成的命令何时将在操作数的ND配置上实施,其中N大于一(I);将操作数的ND配置自动分解为一(I)维(ID)工作元素,其包括每个代表操作数之一的P个顺序排列的工作项目;在DPS的命令队列内放置ID工作元素;从命令队列到一个或多个处理单元实现以排列序列的ID工作项目的顺序分派;并且通过将ID工作输出结果映射到对应于由ID工作项目代表的操作数的原始定位的ND位置,生成ND范围输出。在本发明的示例性实施例的以下详细描述中,足够详细描述可以实践本发明的示例性实施例,使得本领域的技术人员能够实践本发明,并且要了解的是,可以利用其他实施例,并且可以进行逻辑的、架构的、程序的、机械的、电子的和其他改变而不背离本发明的范围。因此,以下详细描述不取为限制意义,并且本发明的范围仅由权利要求限定。在附图的描述中,类似的元件与之前(各)附图的那些元件提供类似的名称和参考标号。在之后附图利用不同背景或具有不同功能的元件的情况下,为该元件提供代表附图号的不同引导标号(例如,对于图I的Ixx和对于图2的2xx)。分配给各元件的具体标号仅提供来辅助描述,而不旨在意味着对于本发明的任何(结构或功能)限制。要理解的是,具体组件、设备和/或参数名称的使用仅仅用于示例,而不意味着对于本发明的任何限制。本发明因此可以用在此非限制性地用来描述组件/设备/参数的不同命民法/术语实施。在此利用的每个术语考虑利用该术语的背景给出其最宽的解释。具体地,在此利用的以下术语定义如下(I)核准处理单元(Approved Processing Unit, APU):具有代表链接到全局命令队列(GCQ)中的具体工作元素的全局位掩码(APU掩码)中的位掩码(即,设为I)的处理器核心。APU是允许处理来自全局命令队列中的特定工作集的处理工作的总体系统中的所有处理器核心中的处理器核心。(2)内核(kernel)/工作元素要执行的功能以及在输入数据的特定集上执行该功能的次数的组合。对于唯一数据的每个功能的执行在此称为“工作项目”,并且假设每个功能元素包括可以通过多个不同的处理单元跨越多个不同处理节点执行的多个工作项目。(3)工作项目数据集的基本元素(例如,字节、串、整数、浮点数、像素、阵列、数据结构等)。
(4)工作组一组工作项目,当置于全局命令队列的单个条目时,该组在此称为“工作元素”。(5) ND范围大小索引空间中的工作项目的数目。(6)工作组大小工作组中工作项目的数目,其中该数目分为ND范围大小而没有余数。(7)内核处理工作项目以产生结果的功能,其中通过可由处理器核心执行的一个或多个指令实施该功能。(8)内核对象内核以及当执行内核时使用的(多个)变量。(9)工作项目剩余(WIR)计数器跟踪工作元素内工作项目的数目的计数器,并且每次由处理器核心移除一个或多个工作项目就减少该计数器。(10)看见计数器跟踪已经看见/询问用于工作的工作元素的核准处理单元的数 目的计数器。看见计数器初始设为分配给工作元素的APU的总数,并且在WIR计数器值处于或低于零时每次不同一个APU检查用于工作的工作元素,就连续减少该计数器。只要看见计数器到达零就从GCQ移除工作元素。在以下描述中,标题或部分标签提供到具体部分中提供的本发明的各部分的个别功能描述。提供这些标题以实现说明性实施例的呈现中的更好流程,并且不意味着对于本发明或对于特定部分中描述的任何一般功能的任何限制。在任一部分中呈现的材料可以应用于下一个部分,并且反之亦然。A.系统架构如在此提供的,本发明可应用于这种多核心系统的任何数目的不同配置,包括配置为大规模并行处理系统的一个,或者配置为非唯一存储器访问(NUMA)处理系统的一个,或者其他类型的多核心处理系统,包括并行处理系统。在此提供的描述除了多核心架构外不假设具体架构。然而,假设在多节点架构(例如,具有多个处理节点的系统)中实施特定特征,其中一个或多个处理节点在访问全局/共享存储器结构时展现低等待时间,同时假设在多节点架构中实施其他特征,其中一个或多个处理节点在访问全局/共享存储器结构时展现闻等待时间。如下面进一步描述的,在处理节点内提供本发明的功能特征的实施,并且涉及使用硬件、固件、以及若干软件级结构的组合。呈现的附示示例分布式、多节点计算环境中的硬件和软件组件,其中经由一般系统互连和/或网络接口设备(NID)和/或主机构造接口(HFI)和/或一个或多个其他形式的互连(例如,交换机等)互连的多个物理上分离处理节点提供分布式数据处理系统,其经由多个处理器核心执行一个或多个ND工作集。图示和描述的实施例假设系统架构可以按比例缩放到非常大量的处理节点。现在转向附图,并且特别转向图1,其图示示例多节点、分布式数据处理系统(DPS)架构,其中可以有利地实施描述的实施例。如所示的,DPS架构100包括本地处理系统101,其经由诸如网络结构或交换机的互连165耦合到远程计算设备170。本地处理节点101包括多个处理节点,其中图示处理节点0110A和处理节点N IlOB0处理节点0110A和处理节点N IlOB耦合到系统互连140,其用作并且可以可交替地称为数据总线。系统互连140提供处理系统101到各种设备(包括但不限于存储器控制器150A、150B和输入/输出(I/O)控制器156)的连接性。存储器控制器150AU50B控制对于各个系统存储器设备152AU52B的访问。取决于系统设计,存储器控制器150AU50B可以分配到各个处理节点IlOA或110B,和/或可以物理地位于处理器芯片或总体系统架构内的一些其它位置。要理解的是多个存储器控制器150AU50B的存在是设计参数,并且在替代实施例中本地处理系统101可以配置有单个存储器控制器。在一个实施例中,I/O控制器156提供对于一个或多个I/O设备158 (诸如指示设备、显示监视器等)的控制。除了总体系统的系统存储器设备152AU52B外,每个处理节点IlOA和IlOB具有相关联的节点本地存储器154AU54B,其允许处理节点的工作的分级保持(stage),而不要求处理节点必须个别地从系统存储器152A、152B或其它远程(或高等待时间)位置检索每条工作。每个处理节点110A、IlOB具有多个处理器核心,尽管可能对于每个节点是单核心节点。如所示的,处理器节点IlOA包括N+1个核心,编号core_0到core_N,其中N是大于0的整数。同样地,处理器节点IlOB包括M+1个核心,编号core_0到core_M,其中M是大于0的整数。为了简化实施例的描述,N和M都假定为整数三(3),使得处理节点IlOA具有四个(4)处理器核心111-114,并且处理器IlOB具有四个(4)处理器核心115-119。在这里利用的情况下,术语处理单元假设为与处理器核心同义。 使用整数变量“N”和“M”以覆盖各个处理节点IlOA和IlOB中处理器的数目仅仅指示每个处理节点可以包括可变数目的分离处理器核心,其中N和M是任何大小大于0的整数(假设用于各个处理节点的多核心实施)。在给定系统架构中采用的处理核心的数目是取决于实施方式的,并且可以广泛地变化。要理解的是,在此描述的实施例使得能够缩放到更大数目的处理节点以及甚至再大数目的处理核心。在描述的实施例中,本地处理系统101假设为由DPS架构100中的处理器核心生成和处理的ND范围工作集的源。如进一步图示的,本地处理系统101还包括存储120,其中存储实现工作以及用于由一个或多个处理单元执行的ND范围工作集的生成的若干固件和软件组件。存储120内提供若干操作系统(0S)122-124、应用126-127、编译器125、GCQ调度程序130、ND范围工作调度(WS)逻辑131、以及ND范围参数133 (其也可以存储在系统存储器152中)。在一个实施例中,GCQ调度程序130是由处理单元执行的逻辑,以便从编译器接收工作内核,并且调度工作用于分派到DPS架构100中的多个处理器核心/调度工作用于由DPS架构100中的多个处理器核心分派。在一个实施例中,由编译器125从一个或多个应用125-126和/或0S122-124、或从一些其它源(在此未示出)检索操作的工作集。此外,本地处理系统101包括全局命令队列(GCQ) 320,其可以存储在存储120中或系统存储器152A中。当处理器核心(诸如核心O-N和0-M)寻找要完成的工作时,GCQ 320的本地存储实现通过这些处理器核心对于GCQ的低等待时间访问。在一个实施例中,编译器125包括准时生产(JIT)编译器,其根据与处理工作相关联的方法或处理产生一个或多个内核。例如,应用126可以实施与处理工作相关联的方法或处理,并且响应于应用126的执行,JIT编译器可以产生一个或多个内核以处理数据集或工作。尽管通常图示为软件实施的组件,但是GCQ逻辑、WS逻辑、编译器和其它在此一般地描述的其它功能逻辑(例如,LCQ逻辑)的功能性在一些实施例中可以实施为硬件或硬件与软件的组合。本地处理系统101包括或耦合到交换机或其它全局互连(例如,互连165),多个其它处理节点可以连接到该交换机或其它全局互连。如所图示的,本地处理系统101经由互连165通信地连接到远程计算设备170,互连165可以是网络结构或交换机。经由网络接口控制器(NIC)160提供到互连165的连接,网络接口控制器160可以是主机结构接口(HFI)。在若干替代配置之一中,互连165可以是所有节点连接到的单个一般互连,或者可以包括将处理节点的子集相互连接和/或连接到本地处理系统101的一个或多个子网(未示出)。远程计算设备170提供DPS架构100中的额外计算资源,诸如远程处理节点IlOC和相关联的本地存储器154C。远程处理节点IlOC包括至少一个处理器核心,提供其Core0171。在处理节点IlOC是多核心处理节点的情况下,处理节点IlOC可以包括P+1个核心,图示其C0RE_P 172。在该多核心配置的情况下,“P”是大于等于I的整数。为了描述说明性实施例的目的,P假设为一(1),使得处理节点IlOC具有两个(2)处理核心。此外,因为远程计算设备170与来自本地处理系统101中工作分级保持区域的特定处理节点IlOC之间的相对距离,core_0171和core_P 172在一些实施例中描述为在共享的工作检索和/或平衡期间展现高等待时间的核心,如在随后的描述中将变得清楚。仅为了说明的目的,在此呈现图示的多节点DPS架构多处理节点的配置。因此,在此描述的实施例的功能特征适用于不同配置的数据处理系统。本领域的技术人员将理解, 图I的DPS架构100可以包括许多额外组件,诸如互连桥、用于连接到网络或附接设备的端口等(没有在此示出)。因为这样的额外组件对于本发明的理解不是必须的,所以它们没有在图I中示出或在此进一步讨论。B.用于通过处理单元的低等待时间工作检索的架构描述的实施例的某些特征可以适用于N维(ND)范围处理/执行范式,诸如由OpenCL 提供的以及在多核心数据处理系统上执行的类似构成的应用,在多核心数据处理系统中执行命令包含有效执行和平衡命令的工作负荷所需的信息,该命令可能包括数据或任务并行处理要求。每个命令包括对应于要执行的命令中工作组的总数的信息。处理系统的编译器接收命令并且生成工作的内核,在处理系统的一个或多个可用处理核心上调度工作的内核。在传统的多核心处理系统的情况下,利用如图2所示的本地节点队列,与每个内核相关联的工作项目的调度可以作为整个工作组完成。图2图示多核心处理系统200的传统配置,其中通过将数据集分割到工作组,并且任意和静态分配工作组到物理上位于每个节点内分离的结构化命令队列(即,预先设置大小的队列),由命令生成的工作由不同处理节点210A、210B上的处理器核心执行。如所示的,处理节点210A包括命令队列225A、而处理节点210B包括命令队列225B。调度程序215可能基于节点本地存储器254A、254B的寻址方案相对于工作内的数据元素的存储器关联(memory affinity),在没有完全考虑跨越各节点的负荷平衡的情况下,分配整个工作的不同部分。为了完成工作的分派并且对于依赖关系负责等,各节点必须相互通信,并且可能必须围绕不同命令队列移动工作。当工作在它们各自本地命令队列外执行时,存在相当大量的节点之间的交叉谈话(cross chatter)以提供相互的协作。该配置导致系统互连140上的工作竞争,由于处理核心以不同速度运行并且通常必须在各节点中间重新平衡工作负荷,随着各节点试图在不同工作队列(225A、225B)之间移动工作,导致大量的节点间谈话。现在参照图3,提供多节点处理系统架构300的一个实施例,其包括软件和硬件构造以允许有效的和高效的到处理节点以及(在这些处理节点上的)具体处理器核心(当处理器核心展现与其上正分派工作的本地处理系统300的系统存储器的低等待时间通信时)的工作分配,并且通过该处理节点以及(在这些处理节点上的)具体处理器核心完成。除了之前已经描述的在图I的系统架构(100)中呈现的硬件结构外,图3提供图I中引入的若干软件和固件组件的不同配置和功能性以及两个新的结构,其一起实现描述的实施例的功能特征。多节点处理系统架构300图示有三个处理节点,处理节点A 310A和处理节点B310B (每个具有四个(4)处理器核心(节点A核心111-114和节点B核心115-118))以及处理节点C (具有两个处理器核心(节点C核心171-172))。系统架构300内的每个处理核心(即处理核心111-114、处理核心115-118和处理核心171-172)提供唯一位掩码标识符(MB),其与每个处理器核心关联/链接/编码,并且唯一地从总体系统架构300内的其他处理器核心标识具体处理器核心。因此,例如,coreOlll用第一位掩码(MB) 311标记,corel112用第二位掩码(MB) 312标记,coreN 114用第四位掩码(MB) 314标记,core2116用第六位掩码(MB) 316标记等。为了简化,位掩码在此指处理单元(PU)掩码,使得每个处理单元/处理器核心具有唯一掩码标识符。示例PU掩码以及他们的功能性提供在下面描述的图4中。在一个实施例中,每个处理器节点(310A、310B、310C)也提供节点级位掩码(节点A掩码(NM)360A、节点B掩码360B和节点C掩码360C),以实现节点级调度,如下面进一步讨论的。

现在转向该图上部中的功能块,示例应用126的可执行/执行代码转发到编译器305,其处理指令/代码以生成命令。这些命令提供划分为工作组的工作,每个工作组称为内核310。将内核310转发到GCQ调度程序315。GCQ调度程序是动态地执行以下功能的增强运行时间调度程序(I)将工作元素调度(放置)到全局命令队列(GCQ) 320 ; (2)选择性分配/指派工作元素到来自可用处理器节点或处理单元的整个集中的特定选择的处理器节点或处理单元(核心);生成对应于被分配/指派工作元素的特定选择的处理器核心的APU掩码(330);并且通过将APU掩码转发到GCQ 320,将APU掩码(330)附加/链接或另外关联到工作元素。上面的调度程序功能在运行时间执行,并且当工作元素置于GCQ 320中时在运行时间生成与命令相关联的工作项目用于分派。在一个实施例中,工作元素到选择的处理器核心的选择性分配涉及和/或基于调度标准,该调度标准考虑跨越系统架构的工作负荷分配和工作平衡、不同类型的处理单元(例如,CPU、GPU、SPU)的处理性能、以及可以由GCQ调度程序的设计者预先设计程序的其他因素。在GCQ的工作元素的实际调度然后涉及仅分派来自GCQ中的工作元素的工作项目到选择的特定处理结点或处理单元,其中分派响应于在GCQ接收来自多个处理结点或处理单元的每个的工作请求。APU掩码320代表全局位掩码,并且是I和0的字段,其中I代表可以向其转发特定工作元素的(多个)结点的处理单元,而0指示没有为该工作元素选择特定处理单元以处理工作。APU掩码320的实际大小基于在通过GCQ调度程序315的工作分配期间可用于考虑的处理结点和处理器核心的总数按比例缩放。在每个处理结点划分工作的实施方式中,不同于处理器核心的粒度,APU掩码代表结点掩码,其是识别特定处理器核心的位掩码。在该选择的处理结点的任何处理器核心然后可以消耗来自工作元素的工作项目。在一个实施例中,调度程序分配不同APU掩码到每个工作元素。然而,构思单个命令(工作)的多个工作元素可以提供有相同的APU掩码,导致其中单个APU掩码可以用于GCQ放置的多个顺序工作元素的替代实施例。由图6A-6D提供示例GCQ 320,下面将描述图6A-6D。GCQ 320还可以包括GCQ逻辑335,其使得选择的处理器核心能够检索工作元素,并且实现下文描述的功能的其它方面。重要的是注意在此描述的工作的类型可以是在N维(ND)范围的数据上执行的工作,该工作经由作为ND范围工作指令的GCQ传送到计算结点。在ND范围指令中,提供N维范围的工作用于由处理器核心中特定/选择的处理器核心在计算结点中执行,如由APU掩码标识的。ND范围中的N的值以及维数是可变的,并且可以是大于一(I)的任何整数值。根据描述的实施例,每个核心调用执行ND范围指令,其设置执行的特性。在描述的GCQ 320的实施方式的情况下,APU掩码330和其他执行特性(和/或工作元素的属性)附加到工作项目本身。图6A图示示例GCQ 320,其包括多个队列条目,其中示出具有入列的工作元素(WE_0、WE_1和WE_2)的三个条目。如由图6A提供的,除了实际工作元素外,每个条目具有多个变量和/或属性或特性,其关联(或链接到)特定工作元素,并且存储在GCQ条目的预先建立的字段之一中。GCQ的第一行指示为每个GCQ条目的每个字段提供的命名。因此每个占据/填充的GCQ条目包括以下信息字段ND范围工作元素625 ;看见计数器627 ;工作项目剩余(WIR)计数器629 ;APU掩码330 ;以及属性631。为了描述的目的,最后/底部条目是 GCQ 320中的第一条目,并且保持工作元素零(WE_0)与其相关特性、属性和/或变量。如由GCQ 320的WIR计数器629中的WIR计数提供的,当WE_0初始置于GCQ条目中时,WE_0包括由编译器315生成的(并且在GCQ内排列的)工作集/组内的16个工作条目,编译器315保持由选择的处理单元执行。此外,如由看见计数器627内的看见计数指示的,16个工作项目可以由四个(4)不同的选择处理单元/核心执行,四个(4)不同的选择处理单元/核心在GCQ中放置工作元素之前已经由调度程序标识。特定选择的处理器核心由APU掩码320标识,APU掩码320是提供总体系统内的N个处理器核心的已经分配来处理WE_0内的16个工作项目的处理器核心的顺序标识的位序列。在描述的实施例中,看见计数器的开始值呈现为特定工作元素的工作项目可以分派或调度到的分配的处理器单元的数目。然而,在替代实施例中,看见计数器用等于总体系统内处理单元的总数的开始值开始。例如,在图3的系统架构300的情况下,假设已经考虑所有处理节点和相应的处理单元,那么用十(10)的值开始看见计数器。在该替代实施例中,对于进入GCQ用于工作的每个处理器核心触发看见计数器的递减,而不管处理器核心实际是否是核准用于分派/调度来自工作元素的工作项目的选择处理器核心之一。可以实施任一实施例;然而,描述的实施例假设前一实施方式,其中仅仅核准的处理器核心由看见计数器考虑,并且仅仅那些核准处理器触发对于特定工作元素有看见计数器的GCQ逻辑的递减。现在参照图4,图示了 WE_0内的工作项目以及相关APU掩码330的扩展视图,相关APU掩码330通过选择示例系统架构300内的处理器核心之一提供对于工作项目的访问。如所示的,WE_0包括从工作项目零(WI_0)401到工作WI_15416的16个个别工作项目。工作项目以特定分派顺序分派到请求处理器核心,为了图示的目的,特定分派顺序假设为降序(WI_15416、WI_14415等),直到最后工作项目WI_0分配到处理器核心。与WE_0相关联的是APU掩码320,其具有10010101的掩码值。本示例假设APU掩码内仅表现处理节点A310A (图3)和处理节点B 310B (图3),使得来自这两个处理节点的最大八个(8)处理器核心可以分配来处理WE_0。处理节点C310C不包括任何核准处理器(并且相应的掩码位为在APU掩码的末端的00)。如由图4中的示例位掩码所示,在三个节点实施方式的情况下,节点A和B每个具有4个处理单元/核心,并且节点C具有2个处理单元/核心,APU掩码330包括10位,一位用于每个处理核心,使得如果GCQ内的工作元素意图由节点A (具有核心0到3)处理,那么APU掩码330中的头四位之一将设为I。相反,如果工作元素不意图由节点C (具有核心8和9)中的任何处理器核心处理,那么APU掩码330中最后两位都将是零(即,各位不设为I)。在图4的示例中,APU掩码330提供系统内总共十个(10)可能核心中的四个处理器核心被选择和/或分配来处理用于WE_0的工作。在APU掩码330的情况下,每个对应于每个选择的处理器核心的位设为一(1),而对应于其他处理器核心的位保持零(O)。因此,在总体系统中10个处理器核心的情况下,例如,1001010100的APU掩码值指示已经选择处理器核心0、3、5和7来处理WE_0。在处理系统300的处理节点A、B和C的情况下(图3),这些掩码位对应于处理节点A 310A的coreOlll和core3114以及处理节点B310B的corel 116和C0re3118。为了说明的目的,这些处理器核心也示出为属于处理组,其在一个替代实施例中使得工作在处理组级别(或节点级别)分派/攫取(grab),而不是通过每个处理器核心的工作的独立攫取。应该注意到,在替代实施例中,工作项目的节点级分配可以通过特定节点中的所有处理器核心共享相同节点掩码并且APU掩码仅仅跟踪选择的处理器节点来实施。在上面示例的情况下,总体系统内的三个可用节点中的节点A和节点B时选择的处理器节点,并且APU掩码的值将是110,其中每个位代表分离的节点。执行APU掩码针对节点掩码的比较的效率从必须由GCQ逻辑335跟踪的位数的显著减小来看是清楚的。图4还图示各个处理器核心试图从GCQ 320 (并且具体地为WE_0) “攫取”工作的一部分处理。当处理器核心需要工作时,该核心发布工作请求(诸如工作请求440/441)到GCQ 320。由GCQ 320接收和处理工作请求(440/441)(图3)。工作请求440/441包括请求处理器核心的PU掩码,以及块(chunk)大小参数,指示处理器核心想要用该请求攫取的工作量(例如,工作项目的数目)。GCQ逻辑335和/或请求处理器核心的工作请求逻辑比较处理器核心的PU掩码与APU掩码,以便确定该处理器核心是否可以从WE_0攫取工作项目。图5提供完成该比较的一个方法的图示。如图5所提供的,每个处理器核心具有相关联的I3U掩码。当处理器核心发出对于工作的请求到GCQ时,GCQ逻辑335执行处理器核心的PU掩码与APU掩码330的逻辑AND以生成结果(即,I或0),其中结果(如果I)指示该处理器核心核准从相应的工作元素攫取工作。根据图4和5的示例,利用APU掩码330的第一操作数(具有10010101的值)与来自示例系统的八个处理器核心的不同I3U掩码(311-318)的第二操作数的AND操作对于处理节点A 310A的coreO 111和core3114以及处理节点B310B 的 corel 116 和 core3118 产生“I”输出 / 结果。因此,如由图4所提供的,这些核准的/分配的处理核心然后能够以工作项目分派顺序攫取工作项目,用于由各个处理器核心执行。为了说明的目的,处理器节点A 310A的一个或多个处理器核心攫取第一组工作项目,而处理器节点B 310B的一个或多个处理器核心攫取下一组工作项目。然而,处理器核心攫取工作项目的顺序不是决定性的,只要工作项目以由调度程序和/或编译器保持的抑制顺序攫取,以便实现输出的重新创建。在根据描述的实施例的上述工作调度和分派方法和系统中,执行单元处理来自包括多个队列条目的单个GCQ的命令。在GCQ中,每个条目保持包括多个工作项目的工作元素(或工作组),分派该多个工作项目用于由通过分配/链接到工作元素的APU掩码330标识的特定处理单元执行。如由所述实施例提供的,执行/处理单元是可以位于跨越分布式网络的处理核心。然而,尽管贯穿描述和图示的实施例采用处理器核心作为执行单元的示例,但是执行单元可以是执行命令的任何设备,包括但不限于处理代码、CPU、线程以及甚至完整的计算系统。一旦命令在GCQ 335可用,允许参与命令的执行的每个处理器核心(如由APU掩码标识的)就将命令的工作项目剩余(WIR)计数器自动递减与处理器核心相关联的工作保留大小(或块大小)。处理器核心在工作组范围内保持相应数目的工作项目用于处理。一旦处理器核心已经执行请求的工作项目,处理器核心就试图保留更多工作项目。通过多个处理器核心的这种给定保留大小的工作项目的保留和分派继续,直到已经处理(多个)命令队列的一个条目内的工作项目的总数。在利用GCQ、APU掩码和PU掩码分配工作到处理核心的上述功能的情况下,用于调度和完成所有工作的处理涉及一个或多个方法,其涉及各种参数的生成和跟踪,以便实现有效的工作调度、分派和执行。图7和8提供用于完成上面的处理的示例方法的流程图。当在上述图3-5的图示的背景下阅读,并且参照同时描述的图6A-6D时,最好地理解图7和8的方法。要理解,方法可以自然递归;然而,为了简化描述,仅仅图示和描述每个方法的单 个重复。通过处理单元执行用于执行任务/线程的指令代码,执行(多个)方法的各个部分,而其他部分可以由与处理器相关联的固件/逻辑或在处理器上执行的固件/逻辑来执行。(多个)方法通常从处理器操作的观点描述,尽管要理解例如可以由GCQ逻辑335和GCQ调度程序(逻辑)315执行方法的替代实施例。在附图中的流程图和框示了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。在这一点上,流程图或框图中的每个块可以代表模块、段或代码的部分,其包括用于实施(多个)指定逻辑功能的一个或多个可执行指令。还应该理解,在一些替代实施方式中,框中标注的功能可以以附图中标注的顺序外的顺序出现。例如,连续示出的两个框实际可以基本同时执行,或者取决于涉及的功能,各框有时可以以相反顺序执行。还要注意,框图和/或流程示的每个框、以及框图和/或流程示的各框的组合可以由执行指定功能或动作的基于专用硬件的系统、或专用硬件和计算机指令的组合实施。图7的方法在块720开始,并且进到块704,编译器在块704从由源程序提供的指令代码生成工作元素(内核或命令)。编译器305将命令/内核转发到GCQ调度程序315。在运行时间期间,调度程序(逻辑)315从可用处理单元的全局组选择一组一个或多个可用处理单元(处理器核心)以执行命令/内核310,如在块706所示。GCQ调度程序315还在块708生成对应于选择的该组可用处理单元的APU掩码。如在块710所示,GCQ调度程序315还(a)基于选择的处理单元的数目分配看见计数值,以及(b)基于与工作元素相关联的工作项目的数目分配工作项目剩余值。在替代实施例中,可能基于工作元素内调度的实际工作项目的检测,由GCQ逻辑335生成和更新WIR计数。最终,如在块712提供的,当条目变得在GCQ 320中可用时,GCQ调度程序315将APU掩码330、看见计数和WIR值转发到GCQ320。处理然后在块714结束。在上述处理的终止处,GCQ 320包括由工作元素和相关特性、参数和属性构成的条目。再次参照图6A,WE_0位于GCQ 302的第一条目,并且准备用于通过由APU掩码标识的四个核准处理单元的16个工作项目的分派。现在转向图8,其描述由系统的处理器核心通过其分派WE_0的工作项目的方法。该方法在初始块802开始。在块804,第一处理单元(例如,处理器核心COTe_0311)发出请求到GCQ以检查工作的可用性。由第一计算单元提供的请求包括转发到GCQ逻辑335的其I3U掩码和块大小。在块806,处理单元(或GCQ逻辑)比较I3U掩码与第一工作元素(以及随后的工作元素,如果在调度工作中不成功)的APU掩码,并且在决定块808确定PU掩码与APU掩码的比较是否指示核准/授权/预先选择来从该工作元素攫取工作项目。根据一个实施例,并且如由图5所示,处理单元通过其确认是选择的处理单元之一以执行特定工作项目的处理涉及执行工作元素的APU掩码和处理器核心的掩码的逻辑AND。如果没有核准/授权/预先选择该处理单元来执行工作元素的工作项目,那么GCQ逻辑335将请求转发到GCQ中的下一个工作元素,如在块710所示。因此,来自处理器核心的请求将GCQ继续前进到下一个条目,并且针对下一个工作元素的APU掩码与请求中的掩码执行相同的检查。以此方式,当处理器核心已经由调度程序预先选择来执行工作元素的工作时,处理器核心仅仅移除来自该工作项目的工作。如由图6D进一步图示的,没有核准用于处理WE_0的处理单元还可以同时调度来自与核准的处理单元不同的工作元素的工作。例如,在首先在WE_0被拒绝之后,处理节点A 310A的处理单元2可以调度来自GCQ 320内的WE_1的工作。当在处理器核心I上调度工作项目时,WE_1的WIR计数器和看见计数器递减。如所示的,由于在处理单元2上调度十个工作项目,WE_1的WIR计数器递减10,并且WE_1的看见计数也递减一(I)。当处理器核心已经确认为核准/授权/选择的处理单元时,GCQ逻辑335然后检查WIR计数器的值,并且在块812确定WIR计数是否大于零(O)。当WIR计数不大于零时,GCQ逻辑335将看见计数递减一(I ),如在块718提供的。当WIR计数大于零(0)时,GCQ逻辑335允许处理器核心请求从工作元素抽出/攫取直到在请求中标识的块大小的工作项目 量,如在块814指示的。GCQ逻辑335监控工作项目从队列条目的移除/分派,并且将WIR计数器递减移除的工作项目的数目,如在块816所示。处理然后进到块817,当对于之前检索的工作项目的命令执行已经完成时,发出新的请求。相同的处理器核心因此可以继续发出请求到GCQ,并且从相同的工作元素检索工作,直到已经分配该工作元素的所有工作。重要的是注意剩余分派用于执行的工作项目的数目可能小于处理器核心请求的块大小。在此情况下,将所有剩余工作项目提供到请求处理器核心,并且WIR计数器减小到零(O)。此外,在替代实施例中,在GCQ中预先设置块大小,使得(a)允许所有处理器核心取得相同块大小的工作,或者(b)可以请求更大块大小但是按比例缩放为预先设置的块大小的整数倍。在目前描述的实施例中,块大小是由处理器核心(或处理节点)设置并且在请求内编码的参数。利用WIR计数器的值来确定何时更多工作项目可用于攫取,并且每次工作项目分配到请求、核准的处理器就递减WIR计数器的值。如由图6A-6D的序列所指示的,随着每个核准的处理器从工作元素移除其块大小的工作,GCQ逻辑将WIR计数器递减移除的个别工作项目的数目(例如,块大小)。为了图示的目的,单个块大小假设有四个(4)工作项目。因此(参照图4的WE_0),由第一处理器单元发出的请求(例如,来自处理器COre0311的请求440)从WE_0移除工作项目15到12。GCQ逻辑335将WIR计数器从16递减到12 (图6B)。类似地,当来自处理器corel316的第二处理器单元请求442从WE_0移除工作项目11到8时,GCQ逻辑335将WIR计数器递减到8,诸如此类,直到WIR计数器等于或低于零(0)(图6C)。上面的方法处理描述了 GCQ调度程序和/或GCQ逻辑排列GCQ内的工作元素,并且处理元素从工作元素顺序移除工作用于执行。这些处理包括/涉及GCQ逻辑335 (或其他逻辑)更新/修改与工作元素相关的特定参数/属性,以使得由提交对于工作的请求的每个核准的处理单元顺序检索不同的工作项目。提供额外的机制,以便还跟踪何时已经完成分派来自工作元素的所有工作,以便允许从GCQ移除/丢弃该工作元素。当总体系统内的所有核心或者选择来分派工作元素的所有核心(取决于实施方式)已经看见工作元素并且不需要从进一步处理工作元素时,从命令队列释放工作元素。通过看见计数器的自动递减提供已经看见工作元素的处理单元的数目的跟踪,看见计数器开 始有处理器核心的总数,并且每次不同的一个处理单元“看到”工作元素(即,试图调度来自工作元素的工作),递减看见计数器。当最后的处理器核心已经看见工作元素,看见计数器递减到零,那么最后的处理器核心通知GCQ调度程序315或GCQ逻辑335已经完成工作元素的执行。现在返回图8的块812,当工作元素的WIR计数器值是零(或小于零)时,指示没有工作项目剩余来分派,并且接收来自核准的处理单元的请求,GCQ逻辑335将看见计数器递减一(1),如由块818提供的。在流程图的块820,进行看见计数是否等于零(0)的确定。如果不是,则GCQ逻辑335监控从每个其他核准的处理单元接收随后的请求,并且对于从不同的、核准的处理单元接收的每个请求递减看见计数。一旦所有核准的处理单元已经提交因为不存在要分派的工作而被拒绝的请求,看见计数就最终递减到零。由图6C-6D图示看见计数对于WE_0的递减。一旦看见计数变为零,就从GCQ320移除工作项目或在GCQ 320中重写工作项目,如在块822所示。处理然后在块824结束。提供的实施例的特征可以有利地在多节点处理系统中实施,该多节点处理系统展现处理器核心和本地节点的存储器位置之间的低数据传送等待时间和低交叉通信等待时间。假设处理节点从中央/公共GCQ检索工作,对于不同节点到GCQ的等待时间相对短,使得总体工作检索处理对于从GCQ 320攫取工作的处理核心导致总体出来时间中可接受的等待时间惩罚。在单个命令队列的实施方式的情况下,基本消除跨越多个节点的多个命令队列同步的需要。描述的实施例适于在跨越计算节点同步时展现小惩罚(等待时间)的多处理器计算系统(或系统架构)的实施方式。例如,在经由“本地”结构(诸如在单个物理设备(例如,本地处理系统300))连接的NUMA节点的情况下,当跨越多个节点同步单个核心(工作元素)的分布式工作时,存在相对小的等待时间惩罚。这进一步实现用低交叉节点等待时间完成N维工作和在NUMA系统上/到NUMA系统的数据密集操作。此外,在描述的实施例的情况下,不再存在对于多个个别命令队列的需要,个别命令队列每个绑定到分离的节点以便支持NUMA共用性(affinity)。在单个GCQ实施方式的情况下,单个GCQ内的每个工作元素包括掩码字段,其包括N位,特定位设置来标识哪个执行节点和/或哪个处理单元(或处理器核心)链接到工作元素用于其完成。N位掩码提供每个分离节点和/或处理器核心的唯一标识,使得可以跨越多个节点利用相同的单个命令队列,同时允许节点/核心从GCQ正确地攫取分配到特定节点/核心的工作。因为目前一个实施例的描述包括对于NUMA系统架构的具体参照,所以也可以在该实施例内参照N位掩码作为NUMA掩码,并且每个可执行元素(例如,core_0311)分配对于特定节点或特定处理单元(取决于描述的粒度级别)唯一的NUMA掩码。当新的命令放置在单个GCQ条目中时,新的命令作项目)经由NUMA掩码标记/加标签/分配/加入或另外与特定NUMA共用性相关联。上面的实施例可应用于具有足够近的NUMA区域使得它们可以有效地共享GCQ的系统。这对于公共功能执行多个独立次的工作量特别正确。GCQ中的每个工作元素包含APU掩码、工作剩余计数(在处理的多次重复的情况下)和看见计数。在这些功能变量和系统配置的情况下,GCQ内的工作元素调度如下(a)处理单元检查处理单元的NUMA位是否设置 在下一个工作元素的APU掩码中;(b)如果处理单元的NUMA位没有设置在APU掩码中,那么处理单元递减看见计数,指示该单元已经完成工作元素,并且处理单元进到下一个元素;(c)如果设置处理单元的NUMA位,那么基于由处理单元从工作元素接收的实际工作量,处理单元将工作项目剩余(WIR)计数递减可调的“块大小” ;(d)如果递减的结果是指示不再存在工作(例如,0个剩余工作项目)的值,那么处理单元递减看见计数,其指示该处理单元已经完成该元素。处理单元然后进到下一个工作元素;(e)如果处理单元是看见元素的最后处理器核心(即,看见计数等于零),指示所有处理器核心已经看见至少一个工作项目,那么处理器单元将全局队列中的位置标记为“空闲”。在处理单元(处理器核心),处理单元执行检索的块中的每个工作项目,直到完成工作的块的执行。处理单元然后发出下一个请求到队列以得到更多工作。描述的实施例的某些特征可以使自身适于N维(ND)范围处理/执行范例,诸如由OpenCL 和在多核心数据处理系统上执行的类似结构的应用提供的,在多核心数据处理系统中执行命令包含有效执行和平衡命令的工作负荷所需的信息,其可以包括数据或任务并行处理要求。每个命令包括对应于要执行的命令内的工作组的总数、剩余要计算的工作组的数目、已经处理的工作组的数目、一次处理(保留大小)的工作组的数目的信息。由命令提供的其他信息可以包括在命令中处理的执行线程的数目以及已经看见命令的执行线程的数目。在该ND范围执行范例中,根据目前描述的实施例,执行单元处理来自包括多个队列条目的单个全局命令队列的命令。在GCQ内,每个条目保持包括命令和多个工作项目的工作元素,分派多个工作项目用于通过由分配/链接到工作元素的APU掩码标识的特定处理单元执行。如由描述的实施例提供的,执行单元是处理核心,其可以位于跨越分布式网络。然而,尽管贯穿描述和图示的实施例采用处理器核心作为执行单元的示例,但是在其他实施例中,执行单元可以是执行命令的任何设备,包括但不限于处理代码、CPU、线程以及甚至完整的计算系统。一旦命令在全局命令队列上可用,参与命令的执行的每个处理器核心(如由APU掩码标识的)就将命令的工作项目剩余(WIR)计数器自动递减与处理器核心相关联的工作保留大小(或块大小)。处理器核心在工作组范围内保持相应数目的工作项目用于处理。一旦处理器核心已经执行请求的工作项目,处理器核心就试图保留更多工作项目。通过多个处理器核心的这种给定保留大小的工作项目的保留和分派继续,直到已经处理(多个)命令队列的一个条目内的工作项目的总数。C.用于高等待时间处理节点的架构上述实施例对于低等待时间处理节点操作良好,其中在处理器核心和GCQ之间展现低等待时间的本地节点组的相同节点上处理所有工作项目。因此,在这些实施例的情况下,需要核准的处理节点位掩码(例如,代表哪个节点已经分配对于特定工作元素的处理许可的I和0的8个位)。在低等待时间操作的情况下,每个节点以块(或者4个工作项目的组)处理,直到已经处理子元素的总数(例如,16),并且所有节点(8)已经看见工作元素。在用于节点的看见计数器的情况下,如果在工作元素不存在剩余要做的工作,那么逻辑将看见计数从8递减到7、然后6等等,直到看见计数=0。如果存在要分配的工作,那么GCQ逻辑分配有4的块,并且为分配属性/计数器已经从16变为12、然后到8、然后到4、然后到O。一旦未处理的元素计数的值到达0,就不再存在与该工作项目相关联的工作。处理节点然后进入并且检查命令队列,并且每一个将计算单元计数器从8递减到7,并且直到O。一旦看见计数器到达0,主管该工作元素的命令队列的条目就释放用于新的工作元素的分配。 对于其中至少一个处理节点在与其他处理节点和到一般系统存储器结构(诸如GCQ)通信时展现更大等待时间惩罚的系统,提供额外的机制,高等待时间处理器核心通过该机制能够从GCQ有效地检索和分派工作,而不在系统结构上提供大量请求。对于这种高等待时间处理节点与系统内的低等待时间节点的工作竞争,即使有,其他高等待时间节点也基本减少。在GPU的现有技术系统中,整个工作完成等待最慢的GPU完成处理。在采用PPU和SPU的系统的情况下,PTO通常更慢,导致随着更长等待时间PPU缺乏处理许多工作而由SI3U窃取(steal)工作。在图示的下述实施例的情况下,每个处理节点共享单个全局命令队列,并且每个处理节点还保持“分级保持队列”。分级保持队列的大小等于全局队列的大小。分段抽出工作到分级保持队列,其中本地分级保持工作由单个处理节点中的所有处理器核心共享。在一个实施例的情况下,该系统基础设施提供单个GCQ和多个(直到Y个)LCQ,其中Y代表处理节点的总数。每个节点可以是NUMA节点,但是本发明当然可应用于其他类型的多节点、分布式处理系统。所有队列具有相同数目的工作元素,并且全局队列中的工作元素X对应于NUMA队列中的工作元素X。调制程序将工作置于全局队列中进行。在本地执行期间,所有工作首先由处理器核心从分级保持队列(LCQ)取得,并且仅当LCQ内不存在工作时从GCQ取得工作。现在参照图9,图示了具有与之前已经描述的图3的配置有些类似配置的示例分布式处理系统架构900。因为两个附图中的重叠,图3中的共同组件对于图9不再详细描述。然而,图9提供某些结构和功能差别,现在将进行描述。除了多节点处理系统架构900内GCQ 320、以及每个节点唯一节点掩码位和/或每个执行单元唯一执行单元掩码位(取决于实施的粒度)的实施方式外,多节点处理系统架构900还包括处理节点C 910内的本地命令队列(LCQ) 375。在该配置的情况下,处理节点C900假设相对于预定阈值等待时间值展现到GCQ 320的高等待时间,在预定阈值等待时间值之下的由处理单元到GCQ的访问识别为低等待时间操作。LCQ 375使得高等待时间处理节点能够在本地存储区域(LCQ 375)中分级保持更大块的从GCQ 315检索的工作项目。在本地分级保持更大块的工作项目的情况下,高等待时间处理节点花费显著较少时间与其他节点的全局互连和/或在GCQ对于工作竞争,并且高等待时间处理节点能够花费更多时间对于检索的工作项目进行有用的工作。在该图示实施例的情况下,假设其他处理节点是低等待时间节点,并且不要求LCQ用于处理从GCQ 315检索的工作项目。支持从GCQ 320更大块的工作项目的检索的是GCQ逻辑935,其为了本公开的目的假设为提供额外逻辑以支持可变块大小的工作分配。根据一个实施例,GCQ逻辑935还基于历史等待时间数据、之前工作分配数据、当前请求的块大小、对于工作元素的剩余工作量、以及分配更大块大小到高等待时间节点的效率的分析,提供分配到高等待时间处理器节点(910)的块大小的动态修改。图10提供多节点处理系统1000的第二代表图示,其中每个处理节点提供LCQ。因此,处理节点A 1010A具有LCQ 1022,而处理节点B 1010B具有LCQ 1024,并且处理节点C 1010C具有LCQ 975。在该配置的情况下,假设总体多节点处理系统1000内的所有 处理节点具有高等待时间,因此每个节点包括用于分级保持从GCQ 320检索的工作项目的LCQ0 LCQ逻辑因此操作为各个处理器节点内的工作调度逻辑。重要的是尽管图示为各个处理节点内的分离组件,但是每个LCQ可以是各个处理节点(1010A-1010C)的本地存储器库(154A-154C)内特定范围的地址空间。不管位于何处,LCQ的定位认为对于特定处理节点为“本地”,由于该处理节点内的处理单元能够用相对低等待时间访问LCQ。在图示和描述的实施例中,本地处理单元和LCQ之间的操作的等待时间是小于利用GCQ 320的类似操作的等待时间的基本因素。此外,如下面将变得更加清楚的,在一个实施例中,对于LCQ内分级保持的工作项目的访问与其他节点的处理单元不存在竞争。然而,在替代实施例中,形成本地处理组的节点的簇对于不必位于与每个执行单元相同处理节点的LCQ,可能展现低访问等待时间(低于第二阈值等待时间值)。在该替代实施例的情况下,每个这种本地处理组分配LCQ,使得跨越多个节点分配LCQ,但是提供对那些节点内的所有执行单元的低访问等待时间。因为从处理组内的这些执行单元对于GCQ320的访问展现高访问等待时间,所以在该交叉节点、共享LCQ分级保持更大块的工作项目,用于由本地处理组内的不同执行单元访问和分派。一般意义上说,提供LCQ 375以减少跨越高等待时间节点的处理命中单个存储器位置(例如,GCQ)的次数,而不管可能或不可能访问相同LCQ的系统内低等待时间节点的存在。在一个实施方式中,并且如由图10进一步图示,系统架构1000可能提供网络级GCQ1020和相关逻辑1035。在该配置的情况下,GCQ相对于处理节点(包括在其生成工作的节点)的实际位置不重要,由于GCQ 1020因而提供网络分级保持区域用于放置跨越网络互连/结构分派的工作项目。类似地,同样,GCQ 1020可以仅仅容易地是网络可访问的LCQ,而不是物理上位于访问LCQ的处理单元的处理器节点上。根据一个实施例,在处理器节点中保持工作项目剩余(LWIR)计数的本地副本,以便跟踪剩余用于分派到本地执行单元之一的LCQ内的工作项目。因此在处理器节点的操作期间,操作涉及从LCQ检索工作,更新(递减)LWIR直到LWIR计数到达零(O)。在该时段期间,不需要或不执行全局计数的更新。然而,一旦最后的执行单元执行LWIR计数值的更新,并且随后将LCQ内的LWIR计数减少到零(0),该最后执行单元就转发更新到GCQ。因此,对于头部队列的更新仅在本地节点已经完成所有工作时出现。此外,因为仅仅最后执行单元执行GCQ WIR计数值的更新,所以仅仅需要对于LWIR计数的一个节点更新,并且仅仅在执行LWIR计数的所有本地更新之后执行GCQ更新。因此,实施例实现本地计数的自动递减,并且将计数递减到零的最后计算单元由此知道其负责提供对于全局计数的自动更新。通过仅需要递减计数值的最后执行单元与GCQ通信,所以节点逻辑减少互连结构上的交叉谈话,因为GCQ仅必须每个区域更新一次而不是每个工作组更新一次。描述的实施例在具有跨越各处理器核心的高惩罚的示例系统的情况下非常有效地工作。如上面参照图6A-6D描述的GCQ 320内的操作的情况,LCQ中的每个工作元素跟踪计算机单元的数目(例如,在图示的实施例中为4),并且工作元素可以包括用于完成的多个可执行处理/任务/元素(例如,在图示的实施例中具有16个元素的4,4维空间)。在该示例系统的情况下,并且假设高等待时间处理器节点1010C,至少一个执行单元(例如,处理器核心171)不能及时到达GCQ以从调度给所有三个处理器节点的工作元素WE_0攫取工作,而处理器核心171和173实际上缺乏工作,导致总体处理的低效。然而,在LCQ的情况下,高等待时间处理器节点能够从GCQ—次攫取更大的单块工作。高等待时间处理器节点的第一请求处理单元发出请求更大块工作的工作请求。当更大块返回处理节点时,工作项目存 储在请求处理器的LCQ (或与请求处理单元相关联的LCQ)中。工作项目然后由从LCQ攫取工作的不同预先核准本地处理单元执行,直到完成所有工作。同时,低等待时间处理节点和/或处理单元继续从GCQ攫取较小块大小的工作,但是更频繁地进行。因此,高等待时间处理器核心自动保留比单个工作项目(或由低等待时间节点保留的标准块)更大块的工作。在上面的实施方式的情况下,充分减少在高等待时间路径上的竞争,并且高等待时间节点也接收足够工作以保持处理,同时本地节点继续以较低等待时间打击(Pound)LCQ并且更迅速但是以较低块大小消耗新的工作。由图10提供的示例假设所有处理节点具有与GCQ操作的相当足够的等待时间,用于设立整个系统架构以便一次攫取多个块的工作,并且在LCQ分级保持工作,以便减少在请求总线上对于工作项目的跨节点请求竞争。现在参照图11和12,图示了指示混合工作分配方案中多个不同块大小的示例工作元素的请求和检索的序列图,混合工作分配方案基于节点的访问等待时间将可变的块大小分配到不同的处理节点。在对于来自工作元素的工作的初始分派期间,低等待时间处理器核心1110AU110B和高等待时间处理器核心1110C分别发出工作请求1140、1141。工作请求由GCQ逻辑1030接收,其处理请求用于匹配I3U掩码与工作元素的APU掩码。如由这些附图进一步示出的,以工作项目的降序分派工作如下处理组I 1110A响应于GCQ逻辑核准处理节点或请求执行单元(利用APU掩码对PU掩码比较)为用于工作项目WE_01122的核准处理节点,接收第一标准块的四个(4)工作项目。标准块大小的分配可以基于以下的一个或多个(a)工作请求1140内编码的实际块大小;或者(b)可以用于特定工作元素或通用于GCQ的所有工作元素的GCQ逻辑内编码的预先设置的块大小;或者(c)基于一个或多个因素计算的块大小,所述因素包括对于请求节点的等待时间、已知块大小的完成速度、历史因素、对于特定处理节点预先编程的块大小、剩余用于分派的工作项目的量、预先核准并且可用于处理WE_01122的处理单元的数目;或者(d)上面因素(a-c)的列表的组合。当GCQ逻辑处理高等待时间处理组(处理组III1110C)的工作请求1140时,并且随后针对WE_01122的APU掩码330比较的处理组的I3U掩码的核准,GCQ逻辑分配更大块大小到处理组III IllOC0在图示的实施例中,GCQ逻辑分配常规/标准块大小的两倍的块大小(或八个(8)工作项目)。GCQ逻辑基于上面因素的一个或多个执行分配。然而,在一个或多个实施例中,源自与处理节点分派分配的工作的历史速度耦合的高等待时间处理节点的操作的等待时间可能是以下一个或两者的主要因素Ca)由处理节点III请求的块大小,该大小在工作请求1141内编码并且代表当在GCQ逻辑没有执行额外计算时由GCQ逻辑返回的块大小;或者(b)当这种计算出现时,由GCQ逻辑计算的块大小。当由GCQ逻辑执行计算时,基于高等待时间处理节点的工作分派的实际等待时间和速度,较大的块大小可以是预先选择或动态选择的倍数,诸如2X、3X等等。图11和12还示出来自处理组II 1110B的工作请求1142,处理组II 1110B响应于工作请求接收标准块大小的工作项目。工作请求的处理的顺序和/或工作项目的分派的顺序在上述序列中不重要。此外,尽管图示的实施例仅呈现了 16个工作项目,但是实施例可以构思为在具有几百或几千或更多工作项目的工作元素的情况下执行,其中块大小范围从一(I)到X,其中X是小于工作项目的总数的某个整数。在仅仅一个节点处理特定工作元 素的极端情况下,对于工作元素不存在竞争,并且因此块大小即使对于高等待时间节点也是任意的。此外,假设存在两个节点,该两个节点都是高等待时间节点,工作元素可以放置在GCQ的副本或位于分布式多节点处理系统架构内不同可访问位置的GCQ内,该架构减少对于两个处理节点的总体等待时间。具体参照图12,从GCQ检索的工作项目放置在请求处理节点的LCQ内。每个处理节点/组1110A/1110C具有相应的块大小(例如,CS 1142和CS 1144),相应的块大小可以对于每个节点不同并且可以(特别对于高等待时间节点)动态可变。因此,标准/第一块大小的工作项目WE_15到WE_12存储在处理节点A 1010A的LCQ 922内,而更大/第二块大小的工作项目WE_11到WE_4存储在处理节点C 1010C的LCQ 924内。在一个实施例中,从GCQ检索工作的处理可以从在处理节点上的逻辑执行以及控制LCQ (S卩,LCQ逻辑)的操作的观点描述。在工作请求周期期间,处理节点C 1010C的一个执行单元(例如,core0171)生成并且发出工作请求(1141)到系统互连结构,工作请求(1141)包括执行单元和/或节点(再次取决于掩码实施方式的粒度)的PU掩码。具体的工作请求1141攫取更大块大小(具体地,两个块大小)的八个(8)工作项目,并且当工作项目到达处理节点1010C时将工作项目放置在LCQ中。根据一个实施例,块大小属性可以存储为特定节点的预先设置或动态计算的参数,并且每个节点可以具有预先设置的默认块大小和适当大小的LCQ以保持该块大小的工作项目。在另一实施例中,LCQ的大小可变,由于当要求LCQ用于分级保持来自远程(高等待时间)GCQ的工作时,在本地节点存储器内或其他低等待时间存储内创建和保持LCQ0 LCQ的大小的可变性然后可以约束到块大小计算的动态属性。返回图示的实施例,处理节点C具有比处理节点A 1010A更高的(高于预先设置的阈值)对于GCQ的访问等待时间,因此处理节点C 1010C比处理节点A 1010A检索/攫取更大块大小的工作用于在其LCQ 124中的存储。在工作请求/分派周期期间,处理节点C1010C或处理节点1010C的执行单元攫取包含工作项目15到12的一块四个(4)工作项目,并且将这些工作项目存储在节点A的LCQ 1122中。有些类似地,处理节点C 1010C或处理节点1010C的执行单元攫取包含工作项目十一(11)到八(8)的以及七(7)到四(4)的两块工作项目,并且将这些工作项目存储在节点C的LCQ 1124中。如图示所示,经由本地WIR(LWIR)计数器跟踪每个处理节点的LCQ内剩余放置的工作项目的数目。因此,LCQ 1122分配LWIR计数器1132,而LCQ 1124分配LWIR计数器1134。在GCQ 1120,对于处理节点C的请求的块大小可以由(GCQ逻辑的)块大小倍数或基于预先建立的高等待时间块大小修改,其提供检索八个(8)工作项目而不是标准块大小的四个(4)工作项目。尽管块大小在此描述为四个(4)工作项目的倍数,但是该数目是任意的,并且完全为了图示而提供。在响应于每个工作请求分派的每块工作内,可以提供任何数目的工作项目。因此,例如,第一工作请求可以提供三个(3)工作项目,第二工作请求提供10个工作项目,并且第三工作请求提供七个(7)工作项目,提供到不同请求节点的工作项目的数目之间没有联系。那些数目可以简单地预先编程到各个节点中作为从GCQ请求的工作项目的块大小,其中对于在系统互连结构和本地处理节点的操作的等待时间给出一些考虑。一旦工作项目返回到处理节点,就将工作项目存储在LCQ内。然后每个节点负责跟踪它们各自本地队列内特定工作元素的完成。特别地,尽管图示的实施例的描述指向LCQ的单个条目内单个工作元素上的操作,但是其它实施例提供每个LCQ可以包括多个条目,其中每个条目反映GCQ的那些,但是仅包括从GCQ检索的工作项目的子集。在LCQ的这种 多条目配置的情况下,空闲处理单元可以继续前进到LCQ中的下一个工作元素,而不是不得不在LCQ的第一工作元素的所有工作项目已经分派时才进到GCQ用于工作。该实施例还允许当来自处理节点已经核准用于执行的GCQ内的其它工作元素的额外工作可用时,处理单元不变为空闲。通过从GCQ检索多个工作元素的部分,并且将那些工作元素部分分级保持在LCQ内,在用来自GCQ的新的工作项目替代LCQ的完成条目时涉及的等待时间不导致本地处理单元变为空闲,除非在GCQ不存在更多工作可用。当分配的处理单元的单个架构包括低等待时间处理节点以及高等待时间处理节点时,在一个实施例中可以实施混合模式的工作分派。因此,两个不同机制同时实施用于调度工作到单个处理系统内的处理节点,其中高等待时间节点在LCQ中标记它们分配的工作项目,而低等待时间的处理单元在不需要本地分级保持的情况下执行直接从GCQ检索的工作项目。在该混合模式的情况下,低等待时间节点的处理单元攫取工作用于它们自身,而高等待时间节点的单个处理单元攫取工作用于在相同高等待时间节点上的多个其它预先选择的处理单元。现在参照图13,提供根据一个实施例的方法的流程图,通过该方法可以实施具有到GCQ的不同访问等待时间的处理单元之间的混合模式的工作分派。处理在块1302开始,并且进到块1304,本地节点逻辑(或LCQ逻辑)在块1304评估工作竞争和检索期间处理器节点和GCQ之间交换的等待时间。在决定块1306,节点逻辑确定等待时间是否大于为低等待时间操作预先建立的阈值等待时间。该预先建立的阈值等待时间可以是为总体系统或为特定处理节点和/或具体为GCQ工作分派操作提供的设计值。如果等待时间不大于阈值等待时间,那么节点逻辑对于来自GCQ的工作请求操作用常规块大小编码节点,如在块1308所示。该编码的块大小然后提供在每个发送到GCQ的实际发出的工作请求内,并且使得低等待时间处理单元能够直接从GCQ检索和处理作为常规块的工作项目,如在块1310所示。返回到决定块1306,当等待时间大于为低等待时间操作预先设置的阈值等待时间时(即,处理节点是高等待时间处理节点),节点逻辑开始本地命令队列的建立和/或设置,用于从GCQ检索的工作项目的临时存储,如在块1312提供的。到GCQ的等待时间的本地化确定可以基于到总体系统架构内不同位置的预先确定和/或预先存储的等待时间值。因此,处理节点C IOlOC可以预先编程以处理从位于资源的不同本地化分组内的GCQ检索的任何工作,如要求对于GCQ操作的较高等待时间。相反,处理节点C 1010C也可以预先编程以处理从位于资源的相同本地化分组内的GCQ检索的任何工作,如具有低于阈值等待时间的等待时间并且不要求LCQ的建立。返回到流程图,高等待时间处理节点的节点逻辑在处理节点中编码比对于到GCQ的低等待时间访问更大的块大小,如在块1314所不。建立的实际块大小可以基于如上提供的多个因素,并且可以动态地改变。然而,块大小还可以由系统设计者预先设置(静态分配),在此情况下LCQ也可以预先建立或可以具有预先建立的大小(例如,预先设置数目的条目用于工作存储)。一旦建立/设置块大小,从GCQ请求工作的节点逻辑和/或处理单元在工作请求内编码更大的块大小,以便检索更大量的工作到高等待时间处理节点,如在块1316所示。在块1318,高等待时间处理节点内的处理单元然后处理从LCQ内检索的工作项目,直到LCQ的LWIR到达零(0)计数。特别地,对于其中块大小可以动态更新的实施例,该方法进一步提供在块1320记录从LCQ的工作分派的速度,并且然后数据提供回到更大块大 小的评估和编码(块1314),用于在对于高等待时间处理节点检索额外的工作项目时使用。由高等待时间处理节点以块检索工作以及在从LCQ的本地分派结束将工作完成通知GCQ的方式,影响在对于GCQ内的工作元素跟踪工作项目时通过GCQ逻辑的处理。因此,在GCQ,当请求和分派更大块到高等待时间处理节点时,GCQ逻辑对于每个更大块大小递减一次剩余用于分派的工作项目的总量,而不是如在初始可能由编译器在调度工作元素时考虑的更小大小(标准)块的情况下要求的每次递减。此外,对于在处理单元的粒度(而不是在节点级别)出现的工作分派,工作元素的GCQ看见计数递减在高等待时间处理节点的处理单元的总数而不是递减单一的缩减量。返回到图6A-6D的序列,并且现在具体看图6E-6F,图示了这样的处理过程,核准高等待时间处理单元通过该处理过程从GCQ (具体地WE_1)移除其块大小的工作。WE_1初始具有用于调度/分派的100个工作项目和APU掩码,该APU掩码假设系统中存在10个个别处理单元,其中七个单元是工作项目可以分配到其(或其上可以调度工作项目)的核准单元。在七个核准处理单元中有高等待时间处理节点1010C的处理单元671和673。如由图6E提供的,没有核准用于处理WE_0的处理单元也可以同时调度来自在其核准该处理单元的不同工作元素的工作。在图6E,第一本地处理单元(例如,在低等待时间处理节点A 1010A的处理单元Ixxx)请求工作项目,并且接收10个工作项目的块大小用于分派。递减与WE_1相关联的WIR计数器,以便反映来自WE_1的10个工作项目的调度,并且看见计数递减1(从七(7)到六(6))。当由GCQ逻辑处理来自高等待时间处理节点1010C的处理单元的工作请求时,调度并且分派更大块大小的40个工作项目到高等待时间处理节点的LCQ。GCQ逻辑随后将WIR计数器从90递减到50。然而,WE_1的看见计数没有递减,直到调度的工作从LCQ内分派,如下面参照图15的方法描述的。根据一个实施例,LCQ跟踪高等待时间处理结点内各种处理单元的掩码,使得LCQ代表表现所有本地处理单元的组合掩码。一旦完成LCQ内的40个工作项目的执行,即,LWIR计数等于或小于零(0),LCQ逻辑就发出完成通知,其触发GCQ逻辑将WE_1的看见计数递减二(2),其对应于LCQ上40个调度的工作项目执行时共享的处理单元的数目。
一旦工作项目存储在LCQ内,本地处理单元就可以开始执行来自LCQ内的工作项目。当高等待时间处理结点的第二处理单元开始执行时,第二处理单元查看LCQ以检查是否存在本地存储的工作用于分派。因此,胜于在涉及GCQ的竞争的情况下采用更长等待时间方法从GCQ检索工作,每个本地处理单元首先查看LCQ,并且如果LCQ内存在工作则从LCQ取得工作项目。本地处理单元请求一个或多个工作项目(直到内部/本地块大小)用于执行,并且LCQ逻辑分派顺序工作项目中的下一个到本地处理单元,并且将LWIR自动递减提供到本地处理单元的工作项目的本地块大小。当本地处理单元完成本地存储的工作时,LCQ逻辑转发通知到GCQ逻辑以递减看见计数。此外,如果LCQ检测到下一个本地处理单元发出对于额外工作的请求,同时LWIR计数小于或等于零(对于对其核准请求的处理单元的工作元素的每个本地存储的部分),LCQ将新的请求转发到GCQ。当LCQ中的工作完成时,将提交新的工作请求以再次从GCQ抽出大块的工作到LCQ0再次,仅从处理单元对其是预先选择的执行单元的工作元素分派工作,在预先选择的执行单元上调度来自工作元素的工作项目。工作请求因此前进到序列中的下一个队列元素,直到特定处理单元的I3U掩码匹配工作元素的PAU掩码。

如在上述GCQ跟踪机制的情况下,LCQ逻辑实施本地跟踪机制,以便跟踪通过高等待时间处理器节点处的不同核准执行单元的来自LCQ的工作消耗。图14的流程示通过其出现这种本地跟踪的方法的某些特征,并且从执行各种操作的处理单元和/或LCQ逻辑的观点描述该方法。处理在块1402开始,并且进到块1404,处理单元(例如,处理器coreO1171)在块1404将用于工作的工作请求转发/传输到GCQ。工作请求包括I3U掩码以及更大的块大小。在块1406,处理单元(或者处理节点的一般工作分派逻辑)从GCQ接收更大块大小的工作,并且将工作项目存储在LCQ中。第一请求处理单元在块1408开始来自LCQ的工作的完成。在块1410进行确定第一处理单元或高等待时间处理节点上的另一 /第二处理单元是否需要工作。如果高等待时间处理节点上的处理单元之一需要工作,并且工作分配的粒度在处理单元级别(相对于处理节点级别),那么LCQ逻辑针对APU掩码(或部分APU掩码)比较PU掩码,用于在LCQ匹配,如在块1412所示。在决定块1414,LCQ逻辑确定是否核准请求的第二执行单元处理正在执行的当前工作元素的工作项目。当(PU相对于APU比较的)结果是否定时,第二处理单元可以保持空闲(或处理本地工作),直到在对其核准第二执行单元的LCQ内提供后一组工作项目。如在块1414确定的,如果请求的处理节点在LCQ核准处理LCQ内存储的工作项目,那么LCQ逻辑在决定块1416检查在LCQ内是否存在任何剩余的工作项目(即,LffIR是否大于零(O))。在一个实施例中,进行LWIR计数是否等于零的周期性确定,LWIR等于零指示分级保持的工作项目已经全部从LCQ分派。当仍存在要执行的剩余工作项目时,LCQ逻辑将工作项目提供到请求的处理单元,如在块1418所示。此外,随着工作项目转发到处于高等待时间处理节点的核准处理单元,LCQ逻辑递减LWIR计数器,如在块1420所示。由执行单元处理的工作项目的量可以是大于I的块大小,并且LWIR计数的递减纳入从LCQ移除的项目的精确数目。重要的是要注意可以通过确保在高等待时间处理节点完成LCQ内存储的之前接收的工作项目的执行之前,用充分时间(考虑工作项目的返回的等待时间)将下一个工作请求转发到GCQ以便重新储备LCQ,人为地避免“LWIR计数=0”情况。LWIR计数器因此可以如上提供的递减,但是也随着从具有更新的块大小的第二、随后发出的工作请求接收新一批工作项目而递增。因此,如在决定块1422提供的,LCQ逻辑确定LWIR计数何时小于预先建立(或动态计算的)LffIR阈值(TH.)。当LWIR计数小于TH_时,处理进到块1428,其在下面描述。返回决定块1416,如果LWIR计数不大于零(S卩,LWIR计数器保持小于或等于零的值),那么LCQ逻辑在块1424检查本地看见计数是否等于零。当看见计数不等于零时,LCQ逻辑将本地看见计数递减1,如在块1426提供的。本地看见计数代表高等待时间处理节点内处理单元的总数。在一个实施例中,随着每个处理单元被LCQ逻辑看见,递减看见计数,以便避免处理单元不利地检索不同工作元素的新工作项目,而不知道该新工作项目不再是之前处理的一组工作项目的一部分。因此,当LCQ为空时,节点确保所有处理单元知道特定工作集已经完成的事实。当本地看见计数等于零(0)或当LWIR计数小于THum时,LCQ逻辑在块1428确定是否需要块大小的修改,并且根据需要修改(增加或减少)块大小。块大小的修改部分基于检测到的处理节点分派LCQ内工作项目的性能。然后,在块1430,用修改的块大小生成新的/第二工作请求,并且将新的/第二工作请求转发到GCQ。此外,LCQ逻辑将看见计数更 新通知转发到GCQ逻辑,以便更新GCQ内工作项目的看见计数。由GCQ逻辑展现的功能使得某些描述的功能能够动态实施。图15提供一种方法的流程图,通过该方法,在到高等待时间处理节点的LCQ的工作分派期间执行GCQ操作,包括适当的块大小的确定,以及随着在高等待时间处理节点完成工作,随后工作元素变量的更新。处理在块1502开始,并且进到块1504,块1504示出GCQ逻辑从处理节点的执行单元接收工作请求,并且确认执行单元是对于分派和/或调度的特定工作元素核准的执行单元。在块1506,GCQ逻辑评估在从GCQ请求和分派工作时,与系统互连上的处理节点操作相关联的等待时间。在一个实施例中,GCQ逻辑依赖于存储的历史数据,并且从存储位置检索对应于该处理节点的存储的历史数据。GCQ逻辑比较操作的等待时间与预先设置的低阈值等待时间,并且在决定块1508确定处理节点的等待时间是否大于预先设置的阈值等待时间。如果等待时间不大于该阈值等待时间,则GCQ逻辑响应于来自处理节点的工作请求,提供标准(或请求的)块大小的工作,如在块1510所示。GCQ逻辑然后实现通过处理节点从GCQ检索工作作为常规块的工作,如在块1512提供的。然而,如果在决定块1508,处理节点的等待时间大于阈值等待时间,那么GCQ逻辑动态地增加响应于工作请求,用于调度返回处理节点的工作的块大小,如在块1514提供的。GCQ逻辑然后在块1516提供/调度更大块大小的工作到高等待时间处理节点。在块1518,GCQ逻辑然后将调度的块大小、分派时间和其他参数记录在等待时间跟踪历史数据库中。该数据库可以包括用于访问GCQ以检索工作用于本地消耗/执行的多个处理节点的信息。根据一个实施例,调度工作如下(1)执行单元检查LCQ以查看工作元素是否存在于LCQ内。如果LCQ内不存在剩余的工作项目,那么执行单元接下来检查以查看工作是否正由本地执行单元中的另一个提取。如果工作正通过另一执行单元发出的到GCQ的工作请求提取,那么该执行单元在提取工作的同时等待。然而,如果没有从处理节点发出工作请求以提取额外/新的工作,那么执行单元发出工作请求以触发从GCQ提取额外工作。当LCQ中存在工作,并且该工作分配到请求的执行单元时,LCQ内的WIR计数器递减由请求的执行单元攫取的工作大小。当WIR计数器在该递减之后仍为正时,将继续顺序调度/分派每个剩余的工作项目。在一个实施例中,提取工作的处理涉及以下方法执行单元在LCQ或通常在处理节点内设置位以标记该工作正在被提取。GCQ逻辑将GCQ中工作元素的剩余工作项目递减分配的工作的量/大小。分配到LCQ的块大小大于执行单元的工作大小,因此确保在分配到LCQ的工作量内提供大于一个执行周期。如果GCQ中工作项目剩余计数器在递减之后仍为正,那么LCQ中的本地工作项目剩余(LWIR)计数递增块大小。另外,如果GCQ的WIR计数为负,那么看见计数递减I (对于节点级APU掩码实施方式)和递减高等待时间处理节点的本地处理单元的数目(对于处理单元级APU掩码实施方式)。根据第一实施例,本地看见计数从高等待时间处理节点内本地处理单元的总数递减到零(O)。在替代的第二实施例中,本地看见计数从零(0)递增到本地处理单元的总数。前者/第一实施例提供当LCQ逻辑转发指示所有本地单元已经看到特定工作元素的信号时,GCQ逻辑将GCQ的看见计数递减处理单元的预定总数。在后者第二实施例的情况下,当本地看见计数等于高等待时间处理节点中执行单元的数目时,GCQ内工作元素的看见计数 递减相关的本地看见计数。当GCQ内工作元素的看见计数到达零(0),即整个系统中预设数目的(核准)核心已经看到一次工作元素时,保持工作元素的GCQ条目条件为空闲用于使用。调度程序然后可以在GCQ条目中调度下一个工作元素。描述的实施例实现ND范围工作元素的OpenCL执行,其中每个节点能够完成工作而不用更新其他节点。为了提供“远”离的多个处理节点(即,具有高交叉同步访问等待时间的节点)上LCQ的跨ND范围调度,处理简化为跟踪包含全局队列计数的“头部元素”。然后,替代仅仅标记元素为完成,描述的实施例提供进行额外的检查以查看是否存在“头部元素”。D.用于到(多个)处理单元的有效工作分派的ND范围多维工作集的分解上述实施例的某些特征在初始表现为N维(ND)范围工作集的工作上实施,N维(ND)范围工作集包括命令和操作数的ND范围配置。上面的实施例因此将涉及管理该ND范围处理方案(诸如由OpenCL 提供的和其他类似结构的语言/框架)中工作集的调度和执行,其允许在多节点异类(或同类)数据处理系统架构内的多个执行单元上执行。OpenCL例如使得程序员能够写计算内核以及用于创建和管理这些内核的API。用运行时间编译器编译计算内核,运行时间编译器在对于目标处理单元的主机应用执行期间编译空闲的内核。在ND范围处理方案的情况下,一个或多个执行命令执行在ND范围(例如,二(2)或三(3)维配置)中安排的操作数(例如,数据)的结构集上的递归功能。在一个实施例中,命令本身包含有效地执行和平衡由命令生成的工作负荷所需的信息,并且每个命令包括执行作为单维工作元素的ND范围工作集所要求的信息,同时实现来自单维工作元素的个别工作项目的ND范围输出的重新构造。如在此利用的,ND范围操作数指位于ND范围工作集内索引位置的特定一个(例如,在三维范围工作集中3,2,2的条目)的单个位置实体(其可以时一个或多个数据点),在该单个位置实体上由处理单元执行命令以产生结果工作输出。ND范围操作数每个由在相对于其他工作项目的特定排序序列中安排的个别工作项目在GCQ的一维工作元素中表现。ND范围命令的执行要求导航(navigate)命令功能通过多维的操作数,该多维的操作数分解为包含对于每个操作数的一个工作项目的单维工作项目。单个命令的ND范围操作数可以包含在单个GCQ条目内保持的单个工作元素内,如在图示的实施例中提供的。然而,替代实施例允许单个工作元素的工作项目经由GCQ的多个条目而不是在单个条目内调度。每个工作元素因此包含命令和从ND范围工作集分解的工作项目的阵列。要理解的是,当原始工作集是单维工作集时不出现分解。在该ND范围执行方案中,根据目前描述的实施例,执行单元处理对应于ND范围操作数从GCQ(或对于高等待时间处理节点从LCQ)检索的命令。在GCQ/LCQ内,每个条目保持工作元素(或工作组)或一部分工作元素,其包含分派用于由通过分配/链接到工作元素的APU掩码识别的特定处理单元执行。根据图示的实施例,GCQ内的条目提供单维阵列,相应的工作元素的所有工作项目从该单维阵列以排序的序列分派或调度。此外,如由上述实施例提供的,执行单元是处理器核心,其可以位于跨越包括多个处理器节点的分布式网络。然而,尽管贯穿描述和图示的实施例采用处理器核心作为执行单元的示例,但是在其他实施例中,执行单元可以是能够执行命令的任何设备或执行结构,包括但不限于处理代码、CPU、线程、加速器以及甚至完整的计算系统。为了有效地调度和分派ND范围命令,并且特别对于多维(超过一(I))范围命令(即,在操作数的多维配置上运行的命令),在此提供方法使得多维工作集能够分解和“重新 配置”或“重新安排”维单维工作元素。单维工作元素实现单维(ID)范围中工作的有效调度和/或保留和分派,而不用处理单元必须考虑每个操作数的多维索引。如由图16A和17A的图示所提供的,由编译器和/或ND范围工作调度(WS)逻辑1600将多维工作集重新安排维代表性单维阵列1620/1720,其具有以降序或升序序列安排的可确定总数的工作项目。为了简化描述图示的实施例,ND范围工作调度(WS)逻辑简称为“WS逻辑”。如所利用的WS逻辑包括用于将ND范围工作集分解为单个工作集的第一逻辑,以及用于从由执行工作元素的工作项目的处理单元提供的工作输出结果生成ND范围输出的第二逻辑。在描述的实施例中,工作项目的总数等于ND范围操作数的总数,并且通过将每个维的大小相互相乘来计算。因此,对于具有X和Y维的两维范围,工作项目的总数计算为X*Y (X乘以Y),而在除了 X和Y维还具有Z维的3D范围的情况下,工作项目的数目计算为X*Y*Z。该计算的结果(R)然后用作总数(TN),其存储并且稍后在调度操作以及ND范围输出的生成期间利用。在各种图示及其描述内,个别的工作项目标记从0到TN-1(例如,16个项目,标号0到15)。具体参照图16A,图示分解为由工作项目的ID阵列构成的工作元素的2D工作空间。两维工作集1610包括16个工作项目,标记为工作项目_0 (WI_0)到WI_15。原始的2D工作集1610包含以4X4 (索引位置0,0开始到索引位置3,3的两维安排)安排的操作数。尽管图示为4X4安排,但是要理解2D安排中的16个工作项目的另一实施例可以提供个别工作项目的2X8或8X 2 (分别在位置0,0到1,7或位置0,0到7,I的情况下)安排。为了讨论的目的假设在此描述2D范围和直到(例如,3D、4D)工作集(S卩,非ID工作集),在大多数实施例中,对于ID范围工作集不要求分解。此外,尽管提示和描述的实施例提供ND范围内操作数项目的对称和完整分布,即相同数目的操作数用于每维空间中的每行/列,但是在此描述的特征完全可应用于ND范围内操作数的非对称分布。例如可以提供2D (X*Y)工作元素,其中14个工作项目安排维沿着第一维(X)的8个工作项目的第一行,以及沿着相同维(X)的6个工作项目的第二行,使得Y维相对于X维具有不等数目的工作项目(在一些位置为I,并且在其他位置为2)。返回图16A,编译器/WS逻辑1600接收用于生成ND范围命令的程序指令,该命令在操作数1610的2D (4X4)配置上运行。向下指示箭头指示由编译器/WS逻辑1600执行的处理的方向流程。当接收指令时,编译器/WS逻辑1600生成(多个)ND范围命令/ (多个)内核,并且WS逻辑执行操作数1610的2D配置到单维工作元素1630的分解,单维工作元素1630具有多个顺序排序的工作项目。如所示的,单维(ID)工作元素1630具有从WI_0到WI_15 (其中15等于TN-I)线性排列的16个工作项目。这些工作项目与WE_0相关联,WE_0在上面引入作为占据GCQ的第一条目(320,图3)。

图17A图示具有4X2X2的原始ND索引的操作数的3D范围配置的类似分解。箭 头指示由编译器/WS逻辑1600执行以生成ND范围命令和单维工作元素的处理的方向流程。编译器1600接收程序指令,并且生成相应的(多个)ND范围命令/ (多个)内核。WS逻辑1600然后将3D范围的操作数1710分解为相应的ID工作元素1730。如在工作元素1630的情况下,工作元素1730包括从WI_0到WI_15 (其中15等于TN-I)线性排列的16个工作项目。这些工作项目再次与WE_0相关联,WE_0在上面引入作为占据GCQ的第一条目(320 )。在ND范围命令/操作数的分解,WS逻辑1600存储每一维的大小,即对于2D沿着X和Y维的操作数的数目,以及对于3D沿着X、Y和Z维的操作数的数目。WS逻辑1600还计算并且存储从分解生成的个别工作项目的总数(TN)。这些值与各值对应于的工作元素(WE_0)的唯一标识(ID) 一起存储。ND范围命令的这些和其他参数的存储使得编译器能够稍后从个别工作项目重新配置/重新组合/生成ND范围输出。图18的流程图提供一个示例方法,通过该示例方法编译器/WS逻辑1600在与ND范围命令相关联的接收的程序指令上运行,以生成(多个)单维工作元素。方法在块1802开始,并且进到块1804,块1804图示编译器从本地运行时间源(例如,应用126)接收程序指令,并且从接收的程序指令生成用于ND范围工作集的ND范围命令。在决定块1803,编译器/WS逻辑1600确定工作集的各维的数目(N)是否大于一(I)(例如,2D或3D…工作集)。如果ND范围命令中的各维的数目大于一(I ),那么WS逻辑1600将ND范围工作集分解为单维工作元素,如在块1808提供的。然后,如在块1809所示,WS逻辑1600确定/计算对应于原始ND范围工作集的具体参数,其包括标记生成的工作元素的唯一标识(ID)、ND范围的维度(S卩,跨越每一维的操作数的数目)、以及工作集内操作数的总数(TN)。WS逻辑1600然后将参数存储在本地存储内,如在块1810提供的。本地存储在一个实施例中可以是永久存储,而在另一实施例中可以是内存。在块1812,编译器/WS逻辑1600(或运行时间调度程序)识别与生成的ND范围命令相关联的其他属性和/或功能参数,例如包括核准执行从ND范围命令生成的(多个)工作元素的处理单元(或处理器节点)的APU掩码。如在此描述的,由编译器/运行时间调度程序用掩码位组生成APU掩码,该掩码位组对应于从系统内可用于选择来分派工作元素的所有处理单元/资源中选择、核准的处理单
J Li o当条目变得在GCQ内可用时,编译器/WS逻辑/调度程序逻辑然后在块1847将生成的单维工作元素放置在GCQ中,并且调度程序将工作元素的若干相关参数或属性转发到GCQ,包括用于分派的工作项目的总数的初始计数(即,初始WIR计数)以及APU掩码和看见计数。在GCQ接收新工作元素时,GCQ逻辑将工作元素存储在可用的GCQ条目中,并且GCQ逻辑然后初始化与特定工作元素相关联的看见计数器值、WIR计数器和APU掩码,如在块1816提供的。WS逻辑/调度程序还转发与命令相关联的唯一 ID,并且将该唯一 ID链接到工作元素。处理然后在块1820结束。在工作元素安排为独立执行的工作项目的单维阵列的情况下,预先选择分块/块大小的工作那么可以以工作元素内工作项目的安排的序列顺序,迅速地分配到不同处理单元。然后通过该ID范围工作元素中的顺序工作项目的块/分块调度工作,并且工作项目每个标记有其在包含该项目元素的工作项目的序列中的编号位置。以特定块分配工作,使得容易计算分配的工作的范围和用于分配的剩余工作。与工作项目的调度/分派同步,并且随着工作项目的分块/块大小分配到处理单元,从WIR计数器自动减去分块内工作项目的数目。处理单元然后通过进行ID工作空间中的单个递减,知道从剩余序列的哪个工作维攫取工作。相对于在传统系统的情况下ND区域的更复杂标记和多维索引的跟踪,单维空间内的这种处理使得调度或工作更加有效。单维工作空间还实现从GCQ和/或LCQ的工作调度/分派的更容易实施,如在此描述的。通过在单维阵列中安排的顺序工作项目的选择组(块大小)上执行命令,完成低等待时间处理器和高等待时间处理器中的工作处理。本发明的实施例进一步允许来自工作项目的执行的工作输出结果的重新组合,以 生成对应于ND范围工作集的ND范围输出。为了实现工作输出结果的后一处理,调度程序逻辑、GCQ逻辑或WS逻辑中的一个或多个分配唯一 ID (从内核/命令)到工作元素和用于单维阵列内每个工作项目的唯一位置号。唯一 ID和位置号都链接到分派到处理单元的工作项目,并且保持链接到由处理单元执行工作项目时生成的相应的工作输出结果。此外,每个工作元素提供有WIR计数值和总数(TN)值以使得GCQ逻辑和/或处理单元能够识别用于分派到处理单元的每个工作项目的唯一位置号。在用该唯一 ID和工作输出结果相对彼此的唯一位置号标识工作输出结果的情况下,WS逻辑那么能够识别工作输出结果属于哪个原始ND范围命令,并且还确定ND范围操作数的原始ND范围配置内的特定ND索引位置。因此,可以从单维工作输出结果生成具有与ND范围工作集(操作数的配置)类似ND配置的ND范围输出。进一步由WS逻辑支持ND范围输出的重新组合/生成,WS逻辑还存储由分解原始ND范围工作集时第一算法利用的方法。因此,所有相关ND范围分解参数存储在永久本地存储或本地处理系统的存储器中(见图I)。现在参照图16B和17B以及图19A-19F,提供了图示在此描述的一个或多个实施例的分解、工作项目分派和重新组合处理的一系列图。首先在图16B和17B开始,其分别一般地示出处理单元的来自2D范围命令和3D范围命令的单维工作输出结果的生成,以及随后单维输出到各个2D和3D范围输出的重新组合。在图16B的2D实施例以及图17B的3D实施例的情况下,WE_0的工作项目调度用于在三个处理单元(即处理器coreJUll、处理器COre_0115以及处理器core_0171 (图I))上完成。在通过处理节点的工作分配/分派/攫取期间,特定块或分组大小提供到节点,并且从单维工作元素的一端简单移除该块大小的工作项目,在最后剩余工作项目开始并且继续进行直到分配块大小。该示例提供四个(4)工作项目的块大小用于本地(低等待时间)处理节点,并且八个(8)工作项目的更大块大小用于远程(高等待时间)处理节点。使用WIR/LWIR计数和块大小的组合,在每个处理器核心上从GCQ/LCQ以序列顺序调度块大小的工作项目。在每个处理单元对于特定工作项目的命令的处理/执行之后,处理单元将工作输出结果1630/1730转发到WS逻辑1600。使用唯一 ID,WS逻辑1600确定哪些存储的参数与工作输出结果1630/1730相关联,并且WS逻辑1600检索其他相关参数,包括个别操作数/工作项目的总数、原始ND范围(索引)配置、以及用于执行初始分解的特定算法。这些参数然后提供到WS逻辑1600的第二算法,该第二算法从单维工作输出结果1630/1730生成作为结果的ND范围输出1650/1750。图19A-19E提供根据一个实施例的图的序列,示出3D范围操作数的初始配置到顺序排序的单维工作项目的分解,以及随后以安排序列分派到请求的处理单元。在图19A开始,图示了以x,y,z配置卿,具有x、y和z方向索弓丨)安排的3X3X3的三(3)维工作集。3D工作集包括总共27个操作数,其在图19B中编号I到26以图示操作数从3D空间1902到26个工作项目的ID阵列1904的映射。如由图19B进一步提供的,每个工作项目对应于特定3D索引空间(即,具有索引空间0,0,0的工作项目0到具有索引空间2,2,2的工作项目26)。图19B因此图示z, y, x的3D工作集(或操作数000到2,2,2)到26个顺序排序的工作项目的单维工作元素(阵列)1902的分解。图19C-19E然后图示工作项目以序列顺序分派到请求的处理器。如所示的,按块分派工作项目。GCQ逻辑跟踪每个分派之后的WIR计数,并且将该WIR计数提供到处理单元。 在图19C中,保留第一组的工作项目用于由单个处理单元执行,其保留来自工作集(或工作元素)的10个工作项目的块。可用工作项目的数目(S卩,WIR计数)从27减少到17,并且WIR计数指示17个工作项目仍可用于由处理单元保留。一旦第一组工作项目已经分派用于完成,就由单个处理单元保留第二组用于执行,如由图19D图示的。处理单元保留来自工作元素的另外10个工作项目,该10个工作项目开始于17个剩余工作项目的下一个顺序工作项目的位置。GCQ逻辑然后减少WIR计数,其显示可用工作项目的数目从17到7。如由图19E提供的,剩余的七个(7)工作项目然后保留用于由单个处理单元执行。处理单元可能试图保留来自工作集的另外10个工作项目,但是仅仅七个(7)可用于保留。因此,从工作分派观点和/或工作调度观点看,跨越所有处理单元,以相同的升序或降序顺序分派相同工作元素的所有工作项目和/或工作项目的块。此时在工作集执行时,所有可用的工作项目已经消耗。取决于核准处理单元的数目,上面的保留可以以顺序或接近同时的方式发生。例如,在单个处理单元执行所有27个工作项目的情况下,仅仅在单个处理单元已经完成执行之前块的工作项目,才可能出现工作项目的第二和第三保留。在替代实施例中,其中多个处理单元同时运行并且竞争来自GCQ的工作,GCQ可能调度三块保留的工作项目,用于在保留一块工作项目的每个处理单兀上同时完成。在上述ND范围分解处理期间,多处理器实施方式中的所有处理单元利用相同的排序序列/方案,用于跨越多个处理节点调度工作。根据一个实施例,使用ND范围的维度(例如,3 X 3 X 3 )和单维(ID)序列号(例如,26 )计算排序。当从GCQ中工作元素内重新配置的工作项目的单维阵列检索工作项目用于处理时,每个处理单元仅需要保持跟踪工作剩余(WIR)计数,该工作剩余(WIR)计数为从工作元素递减特定处理单元需要执行的元素的数目(即,处理单元的块大小)。GCQ逻辑然后仅需要为每个工作元素保持WIR计数。取决于静态特性或收集的试探,块大小可以适应目标处理单元。通过使用来自GCQ中单维工作元素的保留范围,更有效地管理通信和调度。
现在参照图20,图示了一个方法的流程图,WS逻辑1600通过该方法执行来自如上所述由一个或多个处理单元执行的一系列个别工作项目的单维工作输出结果的生成/重新组合。方法在初始块2000开始,并且进到块2004,处理单元在块2004从来自GCQ内的工作元素的工作项目的执行生成工作输出结果。在块2006,执行从GCQ检索的工作项目的处理单元将工作输出/结果转发到WS逻辑,其以非特定顺序从处理单元接收个别单维工作输出/结果。因为若干不同处理单元执行工作项目,并且跨越不同的核准处理单元以彼此相对的非特定顺序完成工作项目,所以工作输出/结果返回的顺序可能是脱离它们分派顺序的序列。因此,工作/输出结果的返回不必遵循分派工作项目的序列顺序。在块2008,WS逻辑检索唯一工作ID (唯一 ID)以及与特定工作输出/结果相关联的分派顺序序列号(例如,26、25、24…或O)。在一个实施例中,这些参数嵌入工作输出/结果。WS逻辑然后通过比较(和匹配)来自工作输出/结果内的工作ID与ND范围命令的唯一 ID,定位存储中ND范围参数的匹配组,如在块2010指示的。工作ID与唯一 ID的匹配识别分解来创建工作项目的单维阵列的特定ND范围工作集。在块2012,WS逻辑从与永久存储检索与命令/工作元素相关的所有其他参数,从该命令/工作元素生成工作输出/结果。在图示的实施例中,使用来自工作输出/结果序列顺序,WS逻辑按(工作项目的)序列顺序 重新排列工作输出结果,如在块2014所示。在以正确的排序序列安排工作输出/结果的情况下,WS逻辑开始第二算法,其提供工作输出/结果的一维阵列到相应的3D范围输出的反向映射,如在块2016所指示的。第二算法因此是用来分解ND范围工作集的第一算法的反向算法。现在提供根据一个实施例的第二算法的一个示例,其中安排具有32个3D范围操作数的4X4X2配置的3D范围的操作数。当分解3D范围工作集时,WS逻辑跟踪分解各维的顺序(例如,x,然后y,然后z),并且存储该排序信息用于稍后在重新组合处理期间使用。在X,y和z索引遵循传统的几何方向的实施例中,X维代表第一平面中的行,y维代表相同的第一平面中的列,并且z方向代表垂直于第一平面的垂直/水平方向。z方向的每个xy平面在此描述为片,使得在本示例中z方向提供片0和片I。当接收工作输出/结果(例如,工作输出22)时,WS逻辑从该工作输出检索序列号(22),该号码指示生成该工作输出的工作项目是工作元素的工作项目号22。当放置在GCQ中时该工作元素包含编号从零(0)到31的工作项目,以该序列顺序分派工作项目。然后用其特定序列号标记每个工作项目,并且该号码嵌入相应的工作输出/结果。为了将工作输出22索引到来自原始3D配置的适当3D位置,算法首先确定分解期间使用的最后块的方向(即,哪个维最后用于将索引的操作数(x,y,z)分离出3D配置)。在确定z方向的情况下,算法然后将每个其他方向的大小相互相乘以生成第一自变量。因此,例如假设在x、然后y、然后z方向分解4X4X2工作集(顺序分配操作数),其中z具有大小2,并且X和y具有大小4。然后,在重新组合期间,WS逻辑或第二算法将序列号(22)除以16 (4乘以4),以发现映射特定工作输出(对应于生成具有序列号22的工作项目的操作数的块)到z操作数的哪个块(块0或块I)。因此,z块确定为22除以16,其得到整数结果一(I)和余数6。结果的整数部分(即,I)指示z块是块I。余数然后除以下一个分解维(y)的大小,以发现z方向的块I中的y列。因此,算法计算y列为六(6)除以四(4),其得到第二整数结果一(1),以及余数二(2)。一(I)指示y位置是第二 Z块中的第二 y列。此外,余数二(2)然后指示特定列中的X行位置。因此,利用第二算法,WS逻辑能够重新组合ND范围输出,其中工作输出22映射到所有索引2,I, I(在行、列、块方面)的位置。要理解的是可以提供不同算法或方法来实现重新组合处理,并且所有这种算法/方法落入描述的实施例的等价物内。在一个替代实施例中,不是首先以序列顺序重新安排工作输出/结果,WS逻辑经由第三算法自动确定对应于每个接收的工作输出/结果内的分派顺序序列号的ND范围索引(例如,x,y,z)。WS逻辑利用存储的ND范围索引、序列排序信息、以及初始生成的工作项目的总数,生成相应的ND范围输出。当接收工作结果时,WS逻辑跟踪接收的工作结果的数目,并且将该数目与之前存储的工作项目计数比较,如在决定块2018所示的。当WS逻辑已经接收工作结果的总数(即,从ND范围操作数和/或相应的分派工作项目生成的预期数目的工作结果)时,WS逻辑停止对于特定工作元素/ND范围命令监控额外的输出/结果。WS逻辑能够停止进一步监控和映射结果,因为操作数的数目和分派的工作项目的数目相对于生成的工作输出/结果的数目之间存在确定的关系(一对一或其他已知比率)。当接收到每个工作输出/结果时,WS逻辑也检测该工作结果的序列号,其对应于分派工作项目的序列中的号码。例如,在具有16个工作项目的工作元素中,工作结果16对应于首先分派的工作 项目16,而工作结果七(7)对应于顺序分派的工作项目7,其在工作项目8之后并且在工作项目6之前分派,或者如果相同块的工作项目分派到处理节点或处理单元,则与其他工作项目一起分派。尽管在此描述为一对一映射,但是其他实施例提供单个操作数和/或工作项目每个生成多个工作输出/结果。在这些替代实施例中,WS逻辑对于每个工作项目将应用预先确定的乘数(M,对于一到M输入对输出关系)。M与操作数/工作项目的总数的相乘的结果提供第二“用于映射的输出的总数”参数,用于跟踪实施来生成ND范围输出的反向映射功能的完成。可替代地,WS逻辑还可能存储乘数(M)作为ND范围命令(或工作元素)的参数之一,然后仅在重新组合处理期间应用该乘数以确定ND范围输出的重新组合何时完成。在考虑工作结果的总数的情况下,WS逻辑能够重新构造ND范围输出,好像处理单元已经在ND范围数据集上而不是实质更简单的单维数据阵列上操作。返回到决定块2018,当工作输出/结果的总数已经映射到ND范围输出时,WS逻辑将ND范围输出传递到提供工作结果的应用空间,如在块2020所示。特别地,呈现的ND范围输出是与使用传统的ND范围执行范例生成的输出完全相同,在传统的ND范围执行范例中贯穿整个执行序列跟踪实际的ND范围索引,以考虑(a)每个操作数以及(b)ND范围中的每个相应结果的特定个别位置。然而,由目前描述的实施例提供的ND范围输出在充分减少处理和存储器资源的使用的情况下生成,其将以不同的方式要求跟踪具有(a)每个操作数和(b)每个操作以及(c)每个生成的工作结果的N维索引,如由传统的ND范围处理所要求的。图20的处理在块2022结束。在上面的每个流程图中,一个或多个方法可以体现在包含计算机可读代码的计算机可读介质中,使得当在计算设备上执行计算机可读代码时,执行一系列步骤。在一些实施方式中,组合、同时或以不同顺序执行、或可能省略方法的某些步骤,而不背离本发明的精神和范围。因此,尽管方法步骤以特定序列描述和图示,但是步骤的特定序列的使用不意味着暗示对于本发明的任何限制。可以对于步骤的序列进行改变,而不背离本发明的精神和范围。因此,在不没有限制意义的情况下使用特定序列,并且本发明的范围仅由权利要求限定。在此已经描述了用于N维(ND)范围命令的有效分派/完成的方法、计算机系统和制造的商品(或计算机程序产品)。所述方法包括编译器从接收的程序指令生成一个或多个命令,其中所述一个或多个命令由运行时间调度程序利用,以便调度工作用于在数据处理系统内的一个或多个处理单元上执行;与编译器相关联的ND范围工作处理(WP)逻辑确定由编译器生成的命令何时将在ND范围的操作数上实施,以N维配置安排该ND范围的操作数,其中N大于一(I);当N大于一(I)时,将ND范围的操作数自动分解为包括P个顺序排序的工作项目的一(I)维工作元素,P个顺序排序的工作项目每个代表一维工作元素中ND范围的操作数之一;将单维工作元素放置在数据处理系统的命令队列的一个或多个条目内,其中一个或多个条目的每个以排序的顺序保持工作项目的ID阵列;以及实现来自命令队列的工作项目的ID阵列到一个或多个处理单元的顺序分派,其中分派工作项目的ID阵列用于以排序的顺序执行。 根据一个实施例,将ND范围的操作数自动分解为一(I)维工作元素还包括选择第一映射次序,用于重新安排ND范围的操作数,由用于分解ND范围的操作数的第一逻辑/算法提供该次序,其中所述第一映射次序是预先编程的第一次序;利用第一映射次序,将每个操作数动态从ND范围动态映射到工作元素的单维阵列内的ID索引位置;用第一映射次序的指示标记工作元素,所述第一映射次序利用来从ND范围创建单维阵列。将ND范围的操作数自动分解为一(I)维工作元素还包括确定ND范围内每一维的数字大小,其中第一数字大小代表N维的第一维中操作数的总数;以具有顺序呈现的每个数字大小的索引格式表现每一维的数字大小;计算ND范围的操作数内操作数的总数;以及将总数和索引格式存储在数据处理系统的永久存储内。根据另一个实施例,计算ND范围的操作数内操作数的总数包括将每一维的数字大小相互相乘,并且减去不包括操作数的ND范围内的任何索引空间。此外,在一个实施例中,所述方法还包括为命令提供唯一标识(ID);将唯一 ID与命令的一个或多个存储的参数相关联,所述参数包括总数、索引格式和映射次序;连同一个或多个存储的参数存储唯一ID ;将唯一 ID分配给工作元素的每个工作项目;从对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果内,检测唯一 ID ;从永久存储检索与唯一 ID相关联的ND范围参数;以及利用把来自第一算法的总数、索引格式和第一映射次序计算在内的第二算法,从多个单维工作输出结果生成ND范围输出。根据另一个实施例,所述方法包括响应于从一个或多个处理单元接收对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果,ND范围WS逻辑通过将接收的单维工作输出结果映射到对应于由单维工作项目代表的ND范围操作数的原始位置的ND位置,生成ND范围输出。命令队列是多节点、数据处理系统的全局命令队列。所述方法还包括为每个处理单元提供用工作项目的唯一 ID分派的单维工作元素的工作项目;使得每个处理单元能够以正确的顺序次序检索单维工作元素的顺序排序的工作项目,以便保持排序的分派和相对于来自ND范围操作的映射的跟踪顺序;使得每个处理单元能够用唯一 ID和识别正确的顺序次序的信息,标记通过执行工作项目生成的每个工作输出结果;顺序分派每个工作项目作为顺序工作项目的块内的一个项目,其中分派顺序工作项目的块,作为用于低等待时间处理节点的第一大小块,以及用于高等待时间处理节点的更大第二块大小;自动跟踪工作元素内剩余的工作项目的数目;以及将剩余的工作项目的第一计数转发到分派第一块的工作项目的第一处理单元,连同第一块大小利用剩余的工作项目的第一计数确定哪些工作项目分派到第一处理单元;将剩余的工作项目递减第一块大小以生成第二计数,该第二计数转发到分派第二块的工作项目的下一个处理单元;以及将命令的唯一 ID转发到分派工作项目的第一处理单元和随后的处理单元。如将进一步理解的,本发明的实施例中处理可以使用软件、固件或硬件的任何组合实施。作为以软件实践本发明的准备步骤,编程代码(不管软件或固件)将典型地存储在一个或多个机器可读存储介质中,诸如固定(硬盘)驱动器、磁盘、光盘、磁带、诸如R0M、PR0M等的半导体存储器,从而制造根据本发明的制造商品。通过直接从存储设备执行代码、或将代码从存储设备复制到诸如硬盘、RAM等的另一存储设备、或者使用诸如数字和模拟通信链路的传输型介质传输用于远程执行的代码,使用包含编程代码的制造商品。可以通过组合一个或多个包含根据本发明的代码的机器可读存储设备与用于执行其中包含的代码的适当的处理硬件,实践本发明的方法。用于实践本发明的装置可以是一个或多个处理设备,以及包含根据本发明编码的(多个)程序或具有对其的网络访问的存储系统。 因此,重要的是尽管在具有安装的(执行的)软件的全功能计算机(服务器)系统的背景下描述本发明的说明性实施例,本领域的技术人员将理解本发明的说明性实施例的软件方面能够作为各种形式的程序产品分发,并且本发明的说明性实施例同样地应用而不管用于实际携带分发的介质的特定类型。尽管已经参照示例性实施例描述了本发明,但是本领域的技术人员将理解的是可以进行各种改变,并且等价物可以替代其元件而不背离本发明的范围。此外,可以进行许多修改以适应特定系统、设备或其组件,而不背离其实质范围。因此,旨在本发明不限于公开用于执行本发明的特定实施例,而是本发明将包括落入权利要求范围内的所有实施例。此夕卜,术语第一、第二等的使用不代表任何顺序或重要性,而是术语第一、第二等用于将一个元件与另一个进行区分。在此使用的术语仅仅为了描述特定实施例的目的,而不旨在限制本发明。如在此使用的,单数形式“一(a)”、“一(an)”和“该(the)”旨在也包括复数形式,除非上下文清楚地另外指示。将进一步理解的是当在说明书中使用时术语“包括”和/或“包含”指定所述特征、整数、步骤、操作、元件和/或组件存在,而不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其分组的存在或添加。下面权利要求中相应的结构、材料、动作、以及所有装置或步骤的等价物加上功能元件旨在包括用于结合如具体要求保护的其它元件执行功能的任何结构、材料或动作。为了图示和描述的目的已经呈现了本发明的描述,但是不旨在穷举或限制本发明为公开的形式。许多修改和变化将对于本领域的技术人员显而易见,而不背离本发明的范围。选择并且描述了实施例,以便最好地说明本发明的原理和实际应用,并且使得本领域的技术人员能够理解对于具有各种修改的各种实施例,本发明适于构思的特定使用。
权利要求
1.在一种数据处理系统中,一种用于N维(ND)范围命令的有效分派/完成的方法,所述方法包括 依靠编译器,从接收的程序指令生成一个或多个命令,其中所述一个或多个命令由运行时间调度程序利用,以便调度工作用于在数据处理系统内的一个或多个处理单元上执行; 依靠与编译器相关联的ND范围工作调度(WS)逻辑,确定由编译器生成的命令何时将在ND范围的操作数上实施,以N维配置安排该ND范围的操作数,其中N大于I ; 当N大于I时,将ND范围的操作数自动分解为包括P个顺序排序的工作项目的一(I)维工作元素,P个顺序排序的工作项目每个代表一维工作元素中ND范围的操作数之一;将单维工作元素放置在数据处理系统的命令队列的一个或多个条目内,其中一个或多个条目的每个以排序的顺序保持工作项目的ID阵列;以及 实现来自命令队列的工作项目的ID阵列到一个或多个处理单元的顺序分派,其中分派工作项目的ID阵列用于以排序的顺序执行。
2.如权利要求I所述的方法,其中所述将ND范围的操作数自动分解为一维工作元素还包括 选择第一映射次序,用于重新安排ND范围的操作数,由用于分解ND范围的操作数的第一逻辑/算法提供该次序,其中所述第一映射次序是预先编程的第一次序; 利用第一映射次序,将每个操作数从ND范围动态映射到工作元素的单维阵列内的位置; 用第一映射次序的指示标记工作元素,所述第一映射次序利用来从ND范围创建单维阵列。
3.如权利要求I所述的方法,其中所述将ND范围的操作数自动分解为一维工作元素还包括 确定ND范围内每一维的数字大小,其中第一数字大小代表N维的第一维中操作数的总数; 以具有顺序呈现的每个数字大小的索引格式表现每一维的数字大小; 计算ND范围的操作数内操作数的总数;以及 将总数和索引格式存储在数据处理系统的永久存储内。
4.如权利要求3所述的方法,其中所述计算ND范围的操作数内操作数的总数包括将每一维的数字大小相互相乘,并且减去不包括操作数的ND范围内的任何索引空间。
5.如前述任一权利要求所述的方法,还包括 为命令提供唯一标识(ID); 将唯一 ID与命令的一个或多个存储的参数相关联,所述参数包括总数、索引格式和映射次序; 连同一个或多个存储的参数存储唯一 ID ;以及 将唯一 ID分配给工作元素并且分配给从工作元素分派的每个工作项目。
6.如权利要求5所述的方法,还包括 从对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果内,检测唯一 ID ;从永久存储检索与唯一 ID相关联的ND范围参数;以及 利用把来自第一算法的总数、索引格式和第一映射次序计算在内的第二算法,从多个单维工作输出结果生成ND范围输出。
7.如前述任一权利要求所述的方法,还包括 响应于从一个或多个处理单元接收对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果,ND范围WS逻辑通过将接收的单维工作输出结果映射到对应于由单维工作项目代表的ND范围操作数的原始位置的ND位置,生成ND范围输出。
8.如前述任一权利要求所述的方法,其中 命令队列是多节点、数据处理系统的全局命令队列;并且 所述方法还包括 为单维工作元素的工作项目分派到的每个处理单元提供工作项目的唯一 ID ; 使得每个处理单元能够以正确的顺序次序检索单维工作元素的顺序排序的工作项目,以便保持排序的分派和相对于来自ND范围操作的映射的跟踪顺序; 使得每个处理单元能够用唯一 ID和识别正确的顺序次序的信息,标记通过执行工作项目生成的每个工作输出结果。
9.如权利要求8所述的方法,还包括 顺序分派每个工作项目作为顺序工作项目的块内的一个项目,其中分派顺序工作项目的块,作为用于低等待时间处理节点的第一大小块,以及用于高等待时间处理节点的更大第二块大小; 自动跟踪工作元素内剩余的工作项目的数目;以及 将剩余的工作项目的第一计数转发到第一块的工作项目分派到的第一处理单元,连同第一块大小利用剩余的工作项目的第一计数确定哪些工作项目分派到第一处理单元; 将剩余的工作项目递减第一块大小以生成第二计数,该第二计数转发到第二块的工作项目分派到的下一个处理单元;以及 将命令的唯一 ID转发到工作项目分派到的第一处理单元和随后的处理单元。
10.一种数据处理系统,包括 一个或多个处理单元; 耦合到一个或多个处理单元的存储器; 从接收的程序指令生成一个或多个内核/命令的编译器;其中由运行时间调度程序利用所述一个或多个内核/命令调度工作,用于在数据处理系统内的一个或多个处理单元上执行; 与编译器相关联的ND范围工作调度(WS)装置,用于执行以下功能 确定由编译器生成的命令何时将在ND范围的操作数上实施,以N维配置安排该ND范围的操作数,其中N大于I ; 当N大于I时,将ND范围的操作数自动分解为包括P个顺序排序的工作项目的一维工作元素,P个顺序排序的工作项目每个代表一维工作元素中ND范围的操作数之一;以及调度程序用于执行以下功能 将单维工作元素放置在数据处理系统的命令队列的一个或多个条目内,其中一个或多个条目的每个以排序的顺序保持工作项目的ID阵列;并且 实现来自命令队列的工作项目的ID阵列到一个或多个处理单元的顺序分派,其中分派工作项目的ID阵列用于以排序的顺序执行。
11.如权利要求10所述的数据处理系统,其中所述将ND范围的操作数自动分解为一维工作元素还包括 选择第一映射次序,用于重新安排ND范围的操作数,由用于分解ND范围的操作数的第一逻辑/算法提供该次序,其中所述第一映射次序是预先编程的第一次序; 利用第一映射次序,将每个操作数从ND范围动态映射到工作元素的单维阵列内的位置; 用第一映射次序的指示标记工作元素,所述第一映射次序利用来从ND范围创建单维阵列。
12.如权利要求10或11所述的数据处理系统,其中所述将ND范围的操作数自动分解为一维工作元素还包括 确定ND范围内每一维的数字大小,其中第一数字大小代表N维的第一维中操作数的总数; 以具有顺序呈现的每个数字大小的索引格式表现每一维的数字大小; 计算ND范围的操作数内操作数的总数;以及 将总数和索引格式存储在数据处理系统的永久存储内。
13.如权利要求12所述的数据处理系统,其中所述计算ND范围的操作数内操作数的总数包括将每一维的数字大小相互相乘,并且减去不包括操作数的ND范围内的任何索引空间。
14.如权利要求10到13的任一所述的数据处理系统,还包括执行以下功能的处理装置 为命令提供唯一标识(ID); 将唯一 ID与命令的一个或多个存储的参数相关联,所述参数包括总数、索引格式和映射次序; 连同一个或多个存储的参数存储唯一 ID ;以及 将唯一 ID分配给工作元素并且分配给从工作元素分派的每个工作项目。
15.如权利要求14所述的数据处理系统,其中处理装置还包括执行以下功能的逻辑 从对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果内,检测唯一 ID ; 从永久存储检索与唯一 ID相关联的ND范围参数;以及 利用把来自第一算法的总数、索引格式和第一映射次序计算在内的第二算法,从多个单维工作输出结果生成ND范围输出。
16.如权利要求14所述的数据处理系统,其中处理装置还包括执行以下功能的逻辑 响应于从一个或多个处理单元接收对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果,ND范围WS逻辑通过将接收的单维工作输出结果映射到对应于由单维工作项目代表的ND范围操作数的原始位置的ND位置,生成ND范围输出。
17.如权利要求14所述的数据处理系统,其中 命令队列是多节点、数据处理系统的全局命令队列;并且 所述调度程序还执行以下功能 为单维工作元素的工作项目分派到的每个处理单元提供工作项目的唯一 ID ; 使得每个处理单元能够以正确的顺序次序检索单维工作元素的顺序排序的工作项目,以便保持排序的分派和相对于来自ND范围操作的映射的跟踪顺序; 使得每个处理单元能够用唯一 ID和识别正确的顺序次序的信息,标记通过执行工作项目生成的每个工作输出结果。
18.如权利要求10所述的数据处理系统,其中所述调度程序包括执行以下功能的逻辑 顺序分派每个工作项目作为顺序工作项目的块内的一个项目,其中分派顺序工作项目的块,作为用于低等待时间处理节点的第一大小块,以及用于高等待时间处理节点的更大第二块大小; 自动跟踪工作元素内剩余的工作项目的数目;以及 将剩余的工作项目的第一计数转发到第一块的工作项目分派到的第一处理单元,连同第一块大小利用剩余的工作项目的第一计数确定哪些工作项目分派到第一处理单元; 将剩余的工作项目递减第一块大小以生成第二计数,该第二计数转发到第二块的工作项目分派到的下一个处理单元;以及 将命令的唯一 ID转发到工作项目分派到的第一处理单元和随后的处理单元。
19.如权利要求14所述的数据处理系统,其中 用于生成由一个或多个处理单元执行的工作的处理逻辑包括编译器和与编译器相关联的ND范围WS逻辑; 用于分派工作元素到一个或多个处理单元的工作调度逻辑包括调度程序;以及用于从单维工作元素的单维工作项目重新创建ND范围输出的处理逻辑包括ND范围WS逻辑。
20.一种体现为计算机程序产品的制造商品,包括 计算机可读存储介质;以及 计算机可读存储介质上的程序代码,其由数据处理系统的第一处理单元执行以提供包括以下的方法功能 触发编译器从接收的程序指令生成一个或多个内核/命令,其中所述一个或多个内核/命令由运行时间调度程序利用,以便调度工作用于在数据处理系统内的一个或多个处理单元上执行; 与编译器相关联的ND范围工作调度(WS)逻辑确定由编译器生成的内核/命令何时将在ND范围的操作数上实施,以N维配置安排该ND范围的操作数,其中N大于I ; 当N大于I时,将ND范围的操作数自动分解为包括P个顺序排序的工作项目的一维工作元素,P个顺序排序的工作项目每个代表一维工作元素中ND范围的操作数之一; 将单维工作元素放置在数据处理系统的命令队列的一个或多个条目内,其中一个或多个条目的每个以排序的顺序保持工作项目的ID阵列;以及 实现来自命令队列的工作项目的ID阵列到一个或多个处理单元的顺序分派,其中分派工作项目的ID阵列用于以排序的顺序执行。
21.如权利要求20所述的制造商品,其中将ND范围的操作数自动分解为一维工作元素的方法功能还包括 选择第一映射次序,用于重新安排ND范围的操作数,由用于分解ND范围的操作数的第一逻辑/算法提供该次序,其中所述第一映射次序是预先编程的第一次序; 利用第一映射次序,将每个操作数从ND范围动态映射到工作元素的单维阵列内的位置; 用第一映射次序的指示标记工作元素,所述第一映射次序利用来从ND范围创建单维阵列; 确定ND范围内每一维的数字大小,其中第一数字大小代表N维的第一维中操作数的总数; 以具有顺序呈现的每个数字大小的索引格式表现每一维的数字大小; 通过将每一维的数字大小相互相乘,并且减去不包括操作数的ND范围内的任何索引空间,计算ND范围的操作数内操作数的总数;以及 将总数和索引格式存储在数据处理系统的永久存储内。
22.如权利要求21所述的制造商品,其中所述方法还包括 为内核/命令提供唯一标识(ID); 将唯一 ID与命令的一个或多个存储的参数相关联,所述参数包括总数、索引格式和映射次序; 连同一个或多个存储的参数存储唯一 ID ; 将唯一 ID分配给工作元素并且分配给从工作元素分派的每个工作项目。
从对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果内,检测唯一 ID ; 从永久存储检索与唯一 ID相关联的ND范围参数;以及 利用把来自第一算法的总数、索引格式和第一映射次序计算在内的第二算法,从多个单维工作输出结果生成ND范围输出。
23.如权利要求20所述的制造商品,其中所述方法还包括 响应于从一个或多个处理单元接收对应于分派给一个或多个处理单元用于执行的单维工作元素的单维工作项目的单维工作输出结果,ND范围WS逻辑通过将接收的单维工作输出结果映射到对应于由单维工作项目代表的ND范围操作数的原始位置的ND位置,生成ND范围输出。
24.如权利要求22所述的制造商品,其中 命令队列是多节点、数据处理系统的全局命令队列(GCQ);并且 所述方法还包括 为单维工作元素的工作项目分派到的每个处理单元提供工作项目的唯一 ID ; 使得每个处理单元能够以正确的顺序次序检索单维工作元素的顺序排序的工作项目,以便保持排序的分派和相对于来自ND范围操作的映射的跟踪顺序; 使得每个处理单元能够用唯一 ID和识别正确的顺序次序的信息,标记通过执行工作项目生成的每个工作输出结果。
25.如权利要求24所述的制造商品,其中所述方法还包括 顺序分派每个工作项目作为顺序工作项目的块内的一个项目,其中分派顺序工作项目的块,作为用于低等待时间处理节点的第一大小块,以及用于高等待时间处理节点的更大第二块大小; 自动跟踪工作元素内剩余的工作项目的数目; 将剩余的工作项目的第一计数转发到第一块的工作项目分派到的第一处理单元,连同第一块大小利用剩余的工作项目的第一计数确定哪些工作项目分派到第一处理单元; 将剩余的工作项目递减第一块大小以生成第二计数,该第二计数转发到第二块的工作项目分派到的下一个处理单元;以及 将命令的唯一 ID转发到工作项目分派到的第一处理单元和随后的处理单元。
26.一种计算机程序,包括当所述程序在计算机上运行时,适于执行权利要求I到9的所有步骤的程序代码装置。
全文摘要
一种提供数据处理系统(DPS)中N维(ND)范围命令的有效分派/完成的方法。所述方法包括编译器从接收的程序指令生成一个或多个命令;ND范围工作处理(WP)逻辑确定由编译器生成的命令何时将在ND配置的操作数上实施,其中N大于1;将ND配置的操作数自动分解为包括P个顺序排序的工作项目的一(1)维(1D)工作元素,P个顺序排序的工作项目每个代表操作数之一;将1D工作元素放置在DPS的命令队列内;实现1D工作项目按排序顺序到一个或多个处理单元的顺序分派;并且通过将1D工作输出结果映射到对应于由1D工作项目代表的操作数的原始位置的ND位置,生成ND范围输出。
文档编号G06F9/48GK102792271SQ201080060260
公开日2012年11月21日 申请日期2010年12月13日 优先权日2009年12月30日
发明者B.米诺, B.霍顿, G.H.贝洛斯, J.马德鲁加 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1