将区别属性的存储器分配给共享数据对象的系统和方法

文档序号:6517787阅读:143来源:国知局
将区别属性的存储器分配给共享数据对象的系统和方法
【专利摘要】用于将区别属性的共享存储器分配给共享数据对象的系统和方法以及混合堆栈数据结构。在一个实施例中,系统包括:(1)混合堆栈创建器,配置为在共享存储器中创建具有较低部分和较高部分的混合堆栈数据结构,该较低部分具有较多有利属性,该较高部分具有较少有利属性,以及(2)数据对象分配器,与混合堆栈创建器相关联并配置为如果较低部分具有充足剩余容量以包含共享数据对象那么将用于共享数据对象的存储分配在较低部分中,以及如果较低部分具有不足的剩余容量以包含共享数据对象那么可替代地将用于共享数据对象的存储分配在较高部分中。
【专利说明】将区别属性的存储器分配给共享数据对象的系统和方法
[0001]相关申请的交叉引用
[0002]本申请要求于2012年11月5日由Lin等人所提交的、序列号为61/722,661的、标题为 “EXECUTING SEQUENTIAL CODE USING A GROUP OF THREADS” 的美国临时申请以及于2012年12月21日由Lin等人所提交的、序列号为13/724,089的、标题为“SYSTEM ANDMETHOD FOR ALLOCATING MEMORY OF DIFFERING PROPERTIES TO SHARED DATA OBJECTS”的美国申请的优先权,在先申请与本申请共同受让,并在本文通过援引的方式对二者加以合并。
【技术领域】
[0003]本申请总地指向并行处理器,并且,更具体地,指向用于将区别属性的存储器分配给共享数据对象的系统和方法。
【背景技术】
[0004]如相关领域技术人员意识到的,可并行地执行应用以增加其性能。数据并行应用在不同数据上并发实行相同进程。任务并行应用在相同数据上并发实行不同进程。静态并行应用是具有可在其执行之前被确定的并行度级别的应用。相反,由动态并行应用可达到的并行度仅可随着其执行而被确定。无论应用是数据或任务并行、或静态或动态并行,其可在管线中执行,这通常是用于图形应用的情况。
[0005]某些计算系统,诸如单指令、多数据(SMD)处理器,尤其擅长执行数据并行应用。SMD处理器中的管线控制单元创建执行的线程组并调度其用于执行,在执行期间组中的所有线程并发执行相同指令。在一个特定处理器中,每个组具有32个线程,与SMD处理器中的32个执行管线或通道(lane)相对应。
[0006]考虑实现在并行处理计算系统上的交叉-合并(fork-join)并行编程模型诸如OpenMP或OpenACC。在该模型中,程序代码的一些部分仅由一个线程(“主”线程)所执行,而其他部分由并行的多个线程(“工作者”线程)所执行。执行以仅主线程活动而开始。在工作创建构造处,当主线程激活工作者线程并对每个工作者指派“执行任务”诸如循环的某个数目的迭代时,执行被分叉。工作者线程随后典型地并行执行其被指派的任务。一旦工作者线程结束,则它们停用,并且当主线程恢复其余程序代码的执行时执行被合并。当仅一个线程活动时的程序执行期在本文将称为顺序区或阶段,并且当多于一个线程活动时的程序执行期在本文将称为并行区或阶段。
[0007]在包括OpenMP和OpenACC的许多交叉-合并模型中,可在并行区中访问被分配在顺序区中的数据对象。因此,并行处理器架构提供存储器用于存储数据对象,多个线程在它们的执行期间可获得对该数据对象的访问权限。可由许多属性来表征该存储器,包括大小、时延、易失性和其他,以及它们的伴随的优点和缺点。

【发明内容】
[0008]一个方面提供用于将区别属性的共享存储器分配给共享数据对象的系统和混合堆栈(hybrid stack)数据结构。在一个实施例中,系统包括:(I)混合堆栈创建器,配置为在共享存储器中创建具有较低部分和较高部分的混合堆栈数据结构,该较低部分具有较多有利属性,该较高部分具有较少有利属性,以及(2)数据对象分配器,与混合堆栈创建器相关联并配置为如果较低部分具有充足剩余容量以包含共享数据对象那么将用于共享数据对象的存储分配在较低部分中,以及如果较低部分具有不足的剩余容量以包含共享数据对象那么可替代地将用于共享数据对象的存储分配在较高部分中。
[0009]另一方面提供将区别属性的共享存储器分配给共享数据对象的方法。在一个实施例中,方法包括:(I)在共享存储器中创建混合堆栈数据结构,该数据结构具有较低部分和较高部分,该较低部分具有较多有利属性,该较高部分较少有利属性,(2)当线程要求共享数据对象时,(2a)如果较低部分具有充足剩余容量以包含共享数据对象那么将用于共享数据对象的存储分配在较低部分中,以及(2b)如果较低部分具有不足的剩余容量以包含共享数据对象那么可替代地将用于共享数据对象的存储分配在较高部分中,以及(3)当没有线程进一步要求共享数据对象时,释放存储。
[0010]又一方面提供混合堆栈数据结构。在一个实施例中,数据结构包括:(I)共享存储器中的具有较多有利属性的较低部分,以及(2)共享存储器中的具有较少有利属性的较高部分。
【专利附图】

【附图说明】
[0011]现在结合附图对下面的描述加以参考,其中:
[0012]图1是并行处理器的框图,并行处理器可操作以包含或实行用于将区别属性的存储器分配给共享数据对象的系统或方法;
[0013]图2是混合堆栈的一个实施例的图示;以及
[0014]图3是用于将区别时延的存储器分配给共享数据对象的系统的一个实施例的框图;以及
[0015]图4是将区别属性的存储器分配给共享数据对象的方法的一个实施例的流程图。【具体实施方式】
[0016]如上文所阐明的,由许多属性来表征并行处理器架构。例如存储器可分层成具有较高时延的较大存储器和具有较低时延的较小(可能在数量级上)的存储器。架构通常包括数个具有各种属性和用途的存储器块。多个线程通常需要获得对该存储器的访问权限以共享数据对象。
[0017]在许多交叉-合并编程模型中,可在并行区中访问被分配在顺序区中的数据对象。然而,在一些执行平台上,线程本地存储器不可由其他线程访问。例如,在一些市场上可买到的图形处理单元(GPU)中,驻留在一个线程的本地存储器中的数据对象对不同线程是不可访问的。因此将软件程序转译成可执行形式的编译器或运行时系统,被分派负责将存储器分配给潜在共享的对象使得其可由并行区中的活动线程访问。
[0018]在顺序区期间所分配的、本地于函数的数据对象可方便地置于堆栈数据结构上。然而,本文认识到的是,针对在仅一个类型的存储器(例如,仅全局共享存储器,或仅块共享存储器)中的共享数据对象实现堆栈数据结构有缺点。如果堆栈数据结构要全部置于趋向于更小的块共享存储器中,那么栈可能容易溢出,并且程序将需要终止。另一方面,如果堆栈数据结构要全部置于趋向于更高时延的全局共享存储器中,那么如果对共享对象的访问很繁重则程序的性能将降低,因为平均访问时延将增加。如果程序几乎不具有小的共享对象那么这可能尤其有害。
[0019]本文所引入的是用于将区别属性的存储器分配给共享数据对象的系统和方法的各种实施例。系统和方法实施例一般指向构造混合堆栈数据结构,也就是说,采用多个类型的物理存储器所实现的堆栈数据结构。系统和方法实施例利用每个类型的存储器的强项,得到与当仅使用一个类型的存储器所可能得到的相比限制性较小并达到较高性能的机制。例如,在某些实施例中,当在通常情况下相对较少对象被分配在堆栈上时,混合堆栈提供使用块共享存储器的时延优点。然而,如果许多大的对象被分配在堆栈上,混合堆栈通过巧妙的“落回(falling back)”到使用较高时延的全局共享存储器来提供鲁棒性。
[0020]在任何常规或以后所开发的并行编程系统中,在共享对象由多个线程访问并且执行衬底提供具有区别资源限制和性能特性的多个物理存储器的情况下,可采用系统和方法的各种实施例。
[0021]在一些实施例中,存储器片段(segment)可配置为例如编译时(compile-time)或运行时(run-time)参数。这允许用户决定如何最好地平衡存储器资源使用和程序性能。例如,在块共享存储器片段中分配较多对象典型地减少平均访问时延并因此增加程序性能。类似地,在某些实施例中,混合堆栈的每一层的大小可配置为,最低层最小,下一层较大,而最闻层最大。
[0022]下文将示出并描述数个实施例。所示出和描述的实施例中的许多实施例表现为特定于具有位于两个不同存储器中的片段的混合堆栈。然而,相关领域技术人员将理解,这些实施例中的许多实施例与其他实施例一起指向具有多于两个片段并因此位于多于两个存储器中的混合堆栈。本发明不针对混合堆栈可容纳的不同存储器的数目加以限制。
[0023]在描述系统和方法的某些实施例之前,将描述并行处理器,其可操作以包含或实行用于将区别属性的存储器分配给共享数据对象的系统和方法。
[0024]图1是并行处理器100的框图。并行处理器100包括被组织成线程组104或“线程束(warp)”的多个线程处理器或核心106。并行处理器100包含J个线程组104-1到104-J,每组具有K个核心106-1到106-K。在某些实施例中,线程组104-1到104-J可进一步被组织成一个或多个线程块102。某些实施例包括每线程组104三十二个核心106。其他实施例可包括少如每线程组中四个核心或多如数万核心。某些实施例将核心106组织成单线程组104,而其他实施例可具有数百或甚至数千个线程组104。并行处理器100的替代实施例可将核心106仅组织成线程组104,省略线程块组织级别。
[0025]并行处理器100进一步包括管线控制单元108、块共享存储器110和与线程组104-1到104-J相关联的本地存储器112-1到112-J的阵列。管线控制单元108通过数据总线114将任务分布到各个线程组104-1到104-J。线程组106-j内的核心106相互并行地执行。线程组104-1到104-J通过存储器总线116与块共享存储器110进行通信。线程组104-1到104J通过本地总线118-1到118-J分别与本地存储器112-1到112-J进行通信。例如线程组104-J以通过总线118-J进行通信来利用本地存储器112-J。并行处理器100的某些实施例将块共享存储器110的共享部分分配到每个线程块102,并允许由线程块102内的所有线程组104访问块共享存储器110的共享部分。某些实施例包括仅使用本地存储器112的线程组104。许多其他实施例包括平衡本地存储器112和块共享存储器110的使用的线程组104。
[0026]图1的实施例包括主线程组104-1。其余线程组104-2到104-J中的每一个被视为“工作者”线程组。主线程组104-1包括许多核心,其中的一个是主核心106-1,该主核心106-1最终执行主线程。在并行处理器110上所执行的程序被构造为内核的序列。典型地,每个内核在下一内核开始之前完成执行。在某些实施例中,并行处理器100可并行执行多个内核,这取决于内核的大小。每个内核被组织为要在核心106上所执行的线程的层级。
[0027]在下面的示例中,并且不损失普遍性,将使用可从市场上买到的来自加利福尼亚州圣塔克拉拉市的Nvidia公司的GPU作为执行平台并且将使用OpenACC作为用于程序的交叉-合并并行编程模型。如先前所描述的,Nvidia GPU提供二者均可由作为相同线程块的一部分的所有线程所访问的全局和共享存储器。全局共享存储器访问时延比块共享存储器访问时延高多于一个数量级。全局共享存储器的大小比块共享存储器的大小大多于一个数量级。下文的表I阐述了 OpenACC程序的示例,其中并行区中的线程访问被分配在顺序区中的共享变量。
[0028]
【权利要求】
1.一种用于将区别属性的共享存储器分配给共享数据对象的系统,包括: 混合堆栈创建器,配置为在所述共享存储器中创建具有较低部分和较高部分的混合堆栈数据结构,所述较低部分具有较多有利属性,所述较高部分具有较少有利属性;以及 数据对象分配器,与所述混合堆栈创建器相关联并配置为如果所述较低部分具有充足剩余容量以包含共享数据对象那么将用于所述共享数据对象的存储分配在所述较低部分中,以及如果所述较低部分具有不足的剩余容量以包含所述共享数据对象那么可替代地将用于所述共享数据对象的存储分配在所述较高部分中。
2.根据权利要求1所述的系统,其中所述较多有利属性是较低时延,并且所述较少有利属性是较高时延。
3.根据权利要求2所述的系统,其中具有较低时延的所述较低部分是块共享存储器,具有较高时延的所述较高部分是全局共享存储器,并且所述系统在具有本地存储器的并行处理计算系统中可操作。
4.根据权利要求1所述的系统,其中所述较低部分最多比所述较高部分小一个数量级。
5.根据权利要求1所述的系统,其中所述较低和较高部分的大小是可软件配置的。
6.根据权利要求1所述的系统,其中所述混合堆栈创建器和所述数据对象分配器可在从包括下面各项的组中所选择的一个中实现: 编译器,以及 运行时系统。
7.根据权利要求1所述的系统,其中所述数据对象分配器仅在程序执行的顺序区期间可操作。
8.一种混合堆栈数据结构,包括: 共享存储器中的具有较多有利属性的较低部分,以及 所述共享存储器中的具有较少有利属性的较高部分。
9.根据权利要求8所述的数据结构,其中所述较多有利属性是较低时延,并且所述较少有利属性是较高时延。
10.根据权利要求9所述的数据结构,其中具有较低时延的所述较低部分是块共享存储器,具有较高时延的所述较高部分是全局共享存储器,并且所述系统在具有本地存储器的并行处理计算系统中可操作。
【文档编号】G06F9/38GK103885751SQ201310538409
【公开日】2014年6月25日 申请日期:2013年11月4日 优先权日:2012年11月5日
【发明者】杰迪普·马拉蒂, 林 源, 高塔姆·查克拉瓦蒂, 权冠, 阿米特·萨布尼 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1