并行软件处理系统的制作方法

文档序号:6558697阅读:157来源:国知局
专利名称:并行软件处理系统的制作方法
本申请和标题为“用于并行软件的高性能无阻塞并行存储管理程序”的美国专利申请(代理人文档号FIS990318US)以及标题为“把计算控制的相异流用作为可再使用数据对象的方法”的美国专利申请(代理人文档号FIS990319US)中所说明的主题和权利要求有关,这二份申请由本申请的发明人提出并和本申请于同一日提交。
本发明涉及计算机处理,尤其涉及并行计算机编程和处理。
在利用分立、非并行处理的现有技术的计算中,各程序常常共享数据和其它部件。其的一个例子在

图1中示出,其中可以物理上分立在不同的存储器存储中的或者逻辑上分立在同一个存储器存储中的分立进程存储器19a、19b包含用于整个进程可见的数据项的全局变量存储器20a、20b,用于数据结构的堆存储器21a、21b,用于函数自变量和局部数据项的栈存储器23a、23b,以及可根据需要充当堆或栈存储器空间的自由存储器空间22a、22b。自由存储器空间的一部分可指定为可由二个分别在分立的进程存储器19a、19b中操作的程序A、24a和程序B、24b使用的公用存储器22c。每个程序A和B可访问进程存储器中指定的公用区22c,而不能访问程序之间的其它存储器。使用图1的系统的程序员因限于访问公用存储器的数据结果从该系统得到相对少的帮助。
并行处理在单个程序可以同时运行由程序管理的不同线程或独立控制流方面提供改进。可在并行方式下执行多个线程,并且这些线程可在松耦合或紧耦合方式下共享信息。在图2中示出并行处理方案的一个例子,其中具有一个公用全局存储器120和一个公用堆空间121的单个进程存储器119含有多个栈空间123a、123b和操作多个线程的单个程序124,其中每个程序线程具有一个栈。如所示,示出的进程存储器结构可以操作任何数量的线程1-N并且包含任何数量的对应栈1-N。
线程之间的协调的数据访问通常需要操作系统的协助(带有相关的代价),例如信号或锁定。然而,在典型并行处理应用中,使用系统服务产生的串行化,例如存储管理和对存储器的存取协调,经常明显地减少并行算法可达到的性能好处。当多于一个的线程访问或者请求一数据对象或其它系统资源时出现串行化。如果发生这种冲突,只有一个线程访问并且在该第一线程利用系统资源结束之前拒绝所有其它线程访问。例如,图2中示出的结构是易出错的,因为含有正由该程序操纵的信息的堆空间由于不同的线程试图在同一时刻访问相同的数据结构遭受冲突。当此发生时,在由另一个程序线程访问该数据结构时一个或多个线程必须等待。
在目前的实践中,并行软件中的存储器管理也是一个复杂和低效为其主要缺点的区域。当做出分配或释放存储器的调用时,并行执行的好处可能为零或者甚至降低到串行执行更快。这是由于目前的为防止二个或多个控制流即线程试图获得或释放存储器区时的冲突必须采用的串行化技术造成的。这可明显地降低并行程序的性能,并强制程序设计和实现中的非自然运用。这些曲解损害维护性、扩充性,并且是出错源泉。更坏的是,和这些问题关联的损失甚至会阻碍开发人员考虑否则为可行的并行解决办法。
在并行编程中,如上面所说明,对每个线程分配一个供执行,通常并行地,的具体工作单元,并且当该工作结束时,各线程停止以退出。存在着建立线程、结束线程和管理线程的代价。该代价具有机器周期分量和编程复杂性分量。编程复杂性分量是软件实现和设计中的出错源泉。线程使用中的主导范式是不同地对待线程和数据。存在着控制流(线程),并且存在着数据。所造成的二分形成一种趋向对各种预计的解决办法加以约束的环境,而且在实现期间形成复杂性从而易出错。
考虑到现有技术的问题和不足,从而本发明的一个目的是提供一种不太遭受出错的并行处理结构。
本发明的另一个目的是提供一种在访问公用系统服务例如数据结构时较少遭受串行化限制的并行处理结构。
本发明的再一个目的是提供一种在分配或释放存储器时较少遭受串行化限制的并行处理结构。
本发明的另一个目的是提供一种在不同线程之间存在较少交互的并行处理结构。
本发明的另一个目的是提供一种减少建立、管理和终止线程中的代价和错误的并行处理结构。
本发明的其它目的和优点中的一部分会从说明书变为清楚和明显。
本发明可以实现对业内人士是明显的上述的和其它的目的和优点,本发明在一个方面上指向一种用于并行计算的计算机存储器结构,其具有由一个平面构成的层次结构的第一层。该平面包括一个代表由程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,以及可由该程序结构的任何部分访问的局部变量和全局数据。该存储器结构还具有由一个空间构成的层次结构第二层。该空间包含二个或更多的平面,其中该空间中的各个平面含有该程序结构。该空间还包含可由各个平面之间的程序结构访问的公用数据。
该存储器结构最好还具有由二个或更多的空间构成的层次结构的第三层。这些空间含有相同或不同的程序结构,并含有可由各个空间之间的程序结构访问的公用数据。该程序结构包括一个程序库并且还包括一个用于每个空间的函数表,其中该函数表适应于和每个空间中的库交换服务。
在一相关方面,本发明提供一种用于并行计算的计算机程序产品,其包括在其中含有计算机可读代码的计算机可用介质。该计算机代码定义一种计算机存储器结构和包括上面说明的层次结构的第一层和第二层,并且最好还包括该层次结构的第三层。
本发明的另一个相关方面提供一种并行处理方法,其中首先提供一种具有上面说明的层次结构的第一层和第二层的计算机存储器结构。该方法接着包括使用由该空间中的第一平面里的程序结构管理的第一线程并访问该第一平面中的数据和各个平面之间的公用数据,以及使用由该空间中的第二平面里的程序结构管理的第二线程并访问该第二平面中的数据和各个平面之间的公用数据。除当由程序结构明确请求外第一和第二线程彼此避免交互。
该程序结构包括一个程序库并且还提供一个用于该空间的函数表,其中该函数表适应于和该空间中的该库交换服务。该方法可包括利用第一和第二线程对于该函数表进行函数调用以访问各个平面之间的公用数据和该空间中的公用数据。最好还提供层次结构的由二个或更多的空间构成的第三层,其中这些空间包含相同和不同的程序结构以及可由各个空间之间的程序结构访问的公用数据。该方法包括通过第一和第二线程访问各个空间之间的公用数据。
再一个相关方面提供一种可由机器读的程序存储部件,其有形地含有可由该机器执行的指令程序,以利用具有前面说明的层次结构的第一层、第二层以及最好具有第三层的计算机存储器结构实现这些所说明的用于并行处理的方法步骤。
在另一个方面,本发明提供一种在并行处理计算系统中分配存储器的方法,其中在该计算系统中首先设置一个可用于并行处理的系统存储器和第一、第二线程,每个线程代表由一程序结构管理的独立控制流并执行不同的程序任务。该方法包括利用第一线程对系统存储器请求存储器;向第一线程分配超过该请求的第一存储器池并关联该存储器池和第二线程;利用第二线程对系统存储器请求存储器;向第二线程分配超过该请求的第二存储器池并关联该存储器和第一线程;利用第一线程对第二线程请求更多的存储器;以及在不对系统存储器作出请求下从第二线程对第一线程分配第二存储器池的一部分。
第一和第二存储器池中的每一个最好包含由系统存储器标记为用于第一和第二线程的存储器部分。该方法因此包括由第二线程释放标记为用于第一线程的第一存储器池的一部分,以及包括把标记为用于第二线程的第二存储器池的一部分分配给第一线程。在第二线程释放预定的最少数量的这样的存储器之前可不对第一线程分配标记为用于第一线程的这部分的第二存储器池,并且在第一线程请求来自第二线程的更多存储器之前可不对第一线程分配标记为用于第一线程的这部分的第二存储器池。第一和第二存储器池中的每一个最好包括由系统存储器标记为用于第一和第二线程的存储器部分。该方法因此包括由第二线程释放标记为用于第一线程一段预定时间的第二存储器池的一部分,并且若第一线程在该预定时间之内不请求存储器为第二线程回收标记为用于第一线程的这部分第二存储器池。
在一相关方面中,本发明提供一种机器可读的程序存储部件,其有形地含有可由该机器执行的指令程序,以实现上述在并行处理计算系统中分配存储器的方法。
另一个相关方面提供一种在并行处理计算系统中使用的存储器结构,其包括一个可由并行处理使用的系统存储器;指定的第一存储器池并且可由第一线程使用,该第一线程代表由一程序结构管理的一个控制流;以及指定的并且可由第二线程使用的第二存储器池。第二线程代表一个独立于第一线程由一程序结构管理的控制流,并且第一和第二存储器池中的每一个具有标记为用于另一个线程的存储器池部分。第一和第二存储器池中的每一个最好包含由系统存储器标记为用于第一和第二线程的存储器部分。
另一个相关方面提供一种用于并行计算的计算机程序产品,其包括在其中含有计算机可读代码的计算机可使用的介质,其中该计算机代码定义上面说明的计算机存储器结构。
本发明的再一个方面提供一种并行处理方法,其中首先设置第一线程和第二线程,第一线程代表由一程序结构管理的一个独立的控制流,第一线程具有二个状态,第一状态为该程序结构处理工作而第二状态不调度地等待要处理的工作;第二线程代表一个和第一线程分立的由一程序结构管理的独立控制流。该方法包括利用第二线程为第一线程准备要处理的工作和把第二线程准备的工作放到由第一线程处理的队列中。若当把第二线程准备的工作放在该队列中时第一线程等待要处理的工作,该方法包括调度第一线程并利用它处理该队列中的工作。若当把第二线程准备的工作放在该队列中时第一线程正在处理别的工作,该方法包括利用第一线程完成该其它工作的处理、访问该队列中的该工作并且接着处理该队列中的该工作。
第二线程可持续把另外的工作置入该队列中,并且在完成处理前面的工作时第一线程序贯地处理该队列中的该另外的工作。第二线程最好把放到第一线程队列中的工作标记成是未完成的。若第二线程所准备的工作置入该队列时第一线程正处理其它工作,并且当第一线程完成处理该队列中的该工作时,该方法可包括利用第一线程把所完成的工作标记成是完成的。在第一线程中的前面的工作标记为完成的之前,使来自第二线程的后继工作等待。可重新使用第一线程处理其它工作,并且在第一线程完成所需数量的工作后该程序结构可破坏它。
一个相关方面提供一种可由机器读的程序存储部件,其有形地含有可由该机器执行的指令程序,以便利用i)代表由一程序结构管理的独立控制流的第一线程,第一线程具有二个状态,第一状态为该程序结构处理工作而第二状态不调度地等待要处理的工作;以及ii)代表和第一线程分立的由一程序结构管理的独立控制流的第二线程,来实现上述的并行处理的方法步骤。
本发明的特性确信是新颖的,并且在附属权利要求书中利用独特性叙述表征本发明的各要素。各图仅是示例目的的并且不是按尺度绘出的。然而,可通过连带着各附图参照下面的详细说明最好地从结构上和操作方法二方面上理解本发明,附图是图1是现有技术用于分立程序的存储器结构的示意图。
图2是现有技术用于并行程序的存储器结构的示意图。
图3是本发明的用于并行存储器结构的层次结构中的第一层的示意图,其称为一个平面并且把二个或更多的平面聚集到一个空间中。
图4是本发明的用于并行存储器结构的层次结构中的第二层的示意图,其描述图3中的示出的多个空间。
图5是描述图3中示出的该空间的语境或索引结构,以示出对一个平面内的默认全局数据和对公用(平面)存储器的数据的访问。
图6是把每个全局变量的整数标识链接到一个唯一标识上的语境索引结构的示意图。
图7是多个空间的示意图,每个空间具有通过公用(空间)存储器链接的多个平面和一个公用程序。
图8是链接公用(空间)全局数据对象的语境索引结构的示意图。
图9是由系统存储器分配给多个线程语境的分立的存储器池的示意图。
图10是图9的分立的存储器池的示意图,以示出回收未使用的为其它线程标记的存储器块。
图11是把线程实现为对其分配工作的抽象数据对象的示意流程图。
在对本发明的优选实施例进行说明中,将参照附图1-11,其中相同的号码表示本发明的相同特性。本发明的特性无需在各附图中按尺度示出。并行软件处理系统为了克服并行处理期间访问系统服务中的串行化限制,本发明在高级语言语法下定制一种编程方法,该方法隐式地从程序员的权限去掉这些考虑从而导致并行应用中的明显改进。具体地,在不同方面上,本发明提供一种自然分离数据空间和每个并行线程的协调系统,一种关联线程和数据空间的方法以及描述和管理这种分离的高级语言。含有后面进一步说明的结构的本发明的系统可存储在其它情况下是常规计算机程序或存储器存储部件中,例如半导体芯片、只读存储器或磁介质如软盘或计算机硬盘。
在本发明建立的结构中,每个线程具有它自己的数据空间,即和单个线程相关的存储器区,它和除明显地说明为公用的所有其它数据空间是分离的。利用本发明自然地能设计和实现带有最小的和良好定义的数据空间交互的并行算法,从而在程序员不必是并行化管理的专家时提供低成本高性能的并行化。
本发明的并行结构设置不同的栈,每个线程一个栈,并且对每个栈提供具有不同、分立的全局存储器、堆空间和自由区的外观和功能。图3描述用于本发明的并行存储器结构的层次结构的第一层,本文称之为“平面”,并且在一个空间中组合二个或更多的平面。把存储器划分到分立的平面225a、225b中。平面225a、225b具有不同的平面存储器区219a、219b。来自程序结构224的一个线程在每个平面中的一个栈里运行,并且多个线程1-N可分别在多个栈1-N里运行。尽管这些线程在该并行计算系统中同时运行,在任何给定时刻最多只有一个线程访问一个平面存储器。平面存储器219a、219b分别含有全局存储器220a、220b,堆空间221a、221b和自由空间222a、222b,它们是分别为每个平面225a、225b组织和设置的。从而每个平面由通过线程、全局存储器、堆存储器和栈存储器定义的一个语境构成。在任何给定时间只有一个线程使用一个语境。还明显地说明一个公用(平面)区222c,其由别的情况下分立的平面存储器219a、219b共享。从而,从程序员的角度,该平面存储器结构具有运行分立的程序的外观和功能性,如图1中所示,尽管实际中它是按多个并行线程操作的,因为对于栈223a、223b中的每个线程公用(平面)存储器222c中的所有数据结构是可使用的并且越过不同的平面堆221a、221b中的选定数据结构是可使用的。
在本文中把多个平面聚集到一种存储器结构中并且所有平面并行地运行单个程序结构的不同线程称之为一个“空间”。程序的集合在这种空间中构成单个相容的程序结构。空间230代表本发明的并行处理系统中的层次结构的第二层。在图4中描述多个空间230、230’、230”,其中每个空间含有一个或多个平面存储器结构。每个空间包含不同的程序224、224’、224”,彼此独立运行。以类似于公用(平面)存储器的方式,可在不同空间之间把自由存储器指定成为公用(空间)。在不同空间230、230’、230”上指定的公用(空间)存储器指定成为222d。多个空间代表本发明中的层次结构的第三层。
不显式地成为公用的全局或堆存储器对象是通过具体语言成分表示的。这些尽管在所有平面中是通过相同语言成分表示的对象通过每个平面中的分立存储器予以支持。这样,为每个线程自动例示各语言成分。这使程序员摆脱管理和分离这些存储器对象的繁重任务。本发明的存储器创立还提供在平面和空间之间共享信息的规定装置,从而使程序员摆脱设置这些规定的负担。
如图5中所示,在一指定空间中的每个平面包括语境(一个线程、堆、栈、全局数据)和相同的程序结构,其中后者使用相同的可执行程序代码。空间中的每个平面使用相同的程序结构。在不同的空间之间,程序结构可能相同或者可能不同。本文所使用的“语境”指的是索引结构,其实现全局变量的分离从而每个线程容易访问各个全局变量。使用本发明的存储器结构的程序员建立所需的具体语境并利用该语境调用在公用(平面)或公用(空间)存储器外部的该具体语境内操作的程序。
语境索引结构具体地把每个全局变量的整数标识链接到诸如存储器地址的唯一标识。例如如图6中所示,在平面1内存在全局变量G1、G2、G3,和在平面2内存在分立的全局变量G1,G2。指定成G4(平面1,语境1),G3’(平面2,语境2)和G5(平面1,语境1),G4’(平面2,语境2)的全局数据变量指定成驻留在空间内的公用(平面)中。第一平面中的每个语境1以及第二平面中的语境2能使用一个索引图把它自己的用于全局变量的整数ID转换这些全局变量的唯一ID。如所示,公用(平面)中G4和G3’以及G5和G4’是相同的对象。
图7描述通过公用(空间)存储器链接的多个空间,其中每个空间具有多个平面和一个公用程序。空间1包括各使用程序1的平面1和平面2。空间2包括各使用不同程序2的平面1和平面2。公用(空间)存储器对空间1和空间2中的每个是可使用的。以类似于图6的方式,图8示出如何利用不同的索引ID通过每个空间的语境访问公用(空间)全局数据对象G6。例如,语言成分可提供定义或语法从而各语境可访问公用(平面)或公用(空间)中的全局变量。在本发明的存储器结构中,公用(空间)存储器可包含可以由不同空间中的不同程序共享的信息。从而,数据可存储在可对特定平面访问的默认全局数据存储器、可在一个空间的不同平面上通过语境访问的公用(平面)存储器或可在不同空间上通过语境访问的公用(空间)存储器中的之一上。如所示,公用(空间)中的G6,G5’,G8”和G7’”是相同的对象。
最好在本发明的存储器结构中建立根据IEEE标准1481-1999建立的可交换函数表,其中为每个空间建立一个这样的函数表。在下面的表1和表2中描述函数表,其中为具体空间中使用的选定函数名(FCN名)建立一个函数指针(FCN指针)。
表1FCN指针FCN名* FCN1* FCN2* FCN3表2FCN指针FCN名* FCN4* FCN5* FCN6应用程序可在每个空间中装入一个程序。该应用和装入的程序各进行函数表交换。函数表交换代表在该应用和装入到一具体空间中的程序之间的服务交换。所有函数调用都具有一个语境自变量以便在公用(平面)或公用(空间)存储器中找到所请求的数据。语境传递索引结构位于何处。应用或装入程序的函数调用包含语境的标识以便定位数据,该数据或者是一平面内的被当作默认位置的数据或者是公用(平面)或公用(空间)存储器的位置。
DCL(延迟计算器语言)是许多专用集成电路(ASIC)供应商用来说明他们的技术的一种语言。这些DCL库是由应用动态装入的可执行模块。应用供应商和ASIC供应商都遵循严格定义的标准。可以使用DCL和该接口定义建立依据本发明的并行处理系统。DCL系统(其包括一个运行期环境、一个编译程序以及由它编译好的各模块)实现一个其中每个语境上最多执行一个线程的语境系统。在应用或库的请求时构建一个语境。响应新语境请求,DCL运行期环境建立每个状态变量的一份分离拷贝。状态变量包括由ASSIGN语句建立的变量、表和模块结构。每个状态是通过一个状态变量数组表示的,其中每个语境具有它自己的状态变量。系统为每个新语境执行该语境上的各初始化语句从而把各状态变量预置到已知值。
DCL的基本操作要求把当前语境变量(标准结构)传送到所有语句。语境变量对其执行时的控制流和数据空间、平面提供完整的说明。运行期支持程序将透明地选择支持应用请求以及DCL程序并行执行所需的适当存储器对象。使用DCL时,可利用ASSIGN语句建立全局变量。这允许在编译时刻通过语句类型(ASSIGN)识别全局变量,并且可通过单个函数集中更新全局变量。
本发明通过语境分离ASSIGN结果,例如其中每个数组元素和一个语境相关的ASSIGN变量数组的结果。这会允许不必串行化地并行读和写ASSIGN变量值。DCL中的TABLEDEF语句读入并且搜索信息表。本发明通过前面说明的语境系统分离这些表,这允许在真正并行方式下读、搜索和更新这些表,无须串行化。
尽管DCL允许应用把其它模块的调用子规则添加到已存在的系统中,本发明还把添加到一个空间上的子规则和添加到另一个空间上的子规则分离开。这会允许应用保持对装入的各个库的独立观察。本发明还提供允许在库开发员的请求下在多个语境上存在相同状态变量的结构以及在这些点上强制串行化的结构。除了库开发员的明确请求之外,各语境典型地假定状态变量独立性。由于只需要推敲必要的公用点,开发并行算法的方便性得到明显改进。
在操作中,通过自然地分开与线程相关的所有活动和语境,本发明获得优点。除了明确请求之外,不同线程在不同语境上操作并且从而彼此不变换。这消除掉并行处理中典型的串行化限制,从而本发明既简化思维过程又简化具体实现。
高性能无阻塞并行存储管理器本发明还通过使用线程语境提供并行环境中使用的无阻塞、有效存储管理。该存储管理器为每个语境保持分离的可使用的存储器池,并且只从这些池对所考虑的语境分配存储器。许多线程(如前面说明那样每个语境一个线程)同时访问该存储管理器以在不会在多半时间内阻塞执行下得到或释放存储器。每当多于一个的线程同时请求一个要分配或释放的存储器区现有技术实施阻塞执行,然而本发明仅当多于一个的语境同时耗尽存储器池并且必须调用分配存储器的系统服务时才阻塞执行。本发明最好从系统得到一些大的存储器区,并且根据各线程的需要划分存储器区。由于仅当为一线程试图得到这一些大区域的同时另一个线程也从系统得到它的大的区域时才出现线程的阻塞,通常本发明的性能远远超过常规方法。即使因一个线程调用系统以分配另一个大块而阻塞,本发明仍能为其它线程对存储器的请求服务只要它们的相关存储器池仍在其中具有存储器区的话。在常规情况下,可能性是并行应用只承受部分执行阻塞,而且即使如此,它也是很少出现的。
在释放存储器上存在二个方面,若一语境只释放它分配的存储器区,在不阻塞需要该区的线程或任何其它线程下进行释放操作。为了使当一个语境释放由另一个语境分配的存储器出现的串行化为最小,建立一个“延迟释放”表。当一语境释放一个不是它分配的存储器区时,本发明把该区放在“延迟表”中。每个语境具有一组延迟表,并且每组延迟表具有用于每个其它线程的延迟表。接着把该存储器放在识别释放该区的语境以及另一个要对其临时释放的语境的延迟表中。这些表增长直至它们超过可由应用程序设置的一个尺度。当超过该尺度时,以不阻塞的方式把用于每个其它语境的延迟表传送另一个现在拥有它的接收方语境。每个存储器区中具有一个标记,该标记指示哪个语境分配该区。一旦完成传送,发送方语境在接收方语境的已知点中不阻塞地设置一个标记。
当一语境必须分配存储器区时,在它向系统请求空间之前,它检查它是否已经从其它语境接收任何延迟释放。若是,它回收这些存储器区并试图从它们满足请求以代替调用系统服务。这更多地消除掉阻塞。
接收方语境以不阻塞的方式回收被延迟的块,并且这可以是异步的以避免阻塞。这种控制数据结构布局以及操作次序为在异步环境中成功回收创造了条件,其唯一可能的代价是错过处理过程中添加的一些回收。这些错过的回收不会丢失,而是在下个回收周期内收回。
如图9中所示,并行处理下操作的第一线程的语境1在对系统堆存储器300的初始要求下得到包括存储器块310a、310b、310c、310d的自由存储器310的一部分或池,其充当用于该具体语境的堆。任何数量的多个语境1-N可得到它们自己拥有的分立的存储器池,例如线程N的语境N得到它自己的带有存储器块320a、320b、320c、320d的存储器池320。在分配存储器之前用预定的语境标识符预标记池310、320中的每个块。每个存储器池310、320具有的存储器块多于它在对系统堆300作出初始要求时所需要的块。图10更详细地示出对不使用的存储器块的回收。
在第一种情况下,若某具体语境释放一个它不需要的存储器块,并且若该存储器块曾预标识为分配给该相同语境,简单地把该块标识为仍可由该具体语境使用。在第二种情况下,若某具体语境释放一个它不需要的存储器块,并且若该存储器块曾预标识为分配给另一个不同的语境,在和该另一个不同的语境对应的回收表上把该块收集到该具体语境的相同的存储器池中。图10描述这样的情况,其中用于语境1的存储器池310释放不需要的存储器块310e-h。由于这些存储器块310e-h事先用语境2的标识标记,块310e-h保持在和语境2对应的语境1回收表312a中。当回收表312a上的块的尺寸和/或内容超过应用规定的尺度,语境1把开关314从314b置到314a,以指示各语境可回收回收表312a中的存储器。语境1会把开关313置到313b。从而在语境2回收表312a中存储器之前,把标记成属于语境2的相继自由的存储器块放在回收表312b中。当语境2用光堆存储器320时,替代从系统存储器寻找可使用的存储器,它检查是否已把某个回收表做成是可使用的并且定位可使用的存储器块310e-h,接着它释放这些块并包含到它自己的堆存储器池320中。接着语境2把开关314置到314b,以表示语境2已处理该回收表并且现在能处理另一个回收表。类似地,当语境1需要比它自己存储器池中的更多的存储器时,它从其它语境,例如语境2,建立的回收表寻找存储器,定位可使用的存储器320e-h,释放它们并把它们包含到存储器池310中,全都不必从主系统存储器中寻找存储器。当回收表312b超过应用规定的尺度时,出现类似的操作,其中语境1把开关314从314b置到314c以指示语境2可回收表312b中的存储器而且语境1把开关313置到313a,从而在语境2回收312b中的存储器之前把标记为属于语境2的相继自由的存储器块放到表312a中。当语境2回收回收表312b中的存储器时,它把开关314置到314b,以指示语境2已处理该表并且现在可处理其它回收表。本发明对每对语境允许任意数量的回收表。
从一个语境可得到的对另一个标记的存储器块最好实际上在该另一个语境寻找附加的存储器块之前不被释放和由该另一个语境回收。若在预定的时间周期后该另一个语境不回收这些存储器块,这个语境可回收它们供使用,同时仍在这些块上保持该另一个语境的标识。在每个语境对主系统存储器寻找存储器之前,这些操作都可出现。
对本发明的这个方面的测试已示出,和常规现有方法相比,本并行处理存储器存取要快20.7倍。把计算控制的相异流用作为抽象数据流和不同地对待语境和数据的现有技术不同,本发明实现一种在并行环境中使用语境的新范式。本发明实质建立语境并且捕获它,把它和从程序员观点为抽象的数据对象相捆绑。这使得软件把线程(或控制流)对待成数据对象。这具有一些优点。一个优点是线程建立一次并根据需要再使用。这避免流行方法中的建立并破坏线程的成本。另一个优点是线程是数据对象,这消除掉控制和数据之间流行的二分,并且赋予程序员更大的想象问题的解决办法的思维空间。另一个优点是,由于线程是数据对象,软件开发员可使用以前不可能的操作。这些操作包括但不限于把线程附着到其它数据对象上(供以后的执行中使用)。作为参数传送线程(控制流)等等。
本发明的这个方面实现具有在其上等待的线程的抽象数据对象。如任何传统数据对象那样,这种数据对象可在到处传送并且可编入到程序的数据结构中。在需要时,软件向数据对象分配具体工作,接着等待的线程醒来并进行工作,在完成该工作后,线程再次等待以后的工作。可从应用的任何部分、从任何需要的时间分配工作。在应用程序作出决定之前不摧毁线程。
这种方法大大简化需要控制通过线程使用的并行操作的软件的操作。通过线程的抽象,从程序员的视角中去掉繁重的细节。通过把等待线程封装成数据对象,由于越过控制流和数据之间的二分,程序员具有更多的自由度和更大的解决办法范围。
图11是把线程实现为对其分配工作的抽象数据对象的示意流程图。第一线程指定成为一个数据对象(“bottle”),对于执行程序结构指定给它的工作它常规地是不调度地和不可用的。这种工作可以是通常能由并行处理中各线程实现的任何工作单元,例如要使用的函数、收集参数、关于把结果放在何处的指令等等。“bottle”和单个语境相关并且只能通过别的语境激励以完成它的工作。在本发明中,每个bottle最好不能通过它自己的语境激励。bottle具有二个状态,第一状态为程序结构处理工作,在第二状态在不消耗执行时间的暂停状态下不调度地等待要处理的工作。bottle具有一个关联队列(Q),其中可通过一个或多个其它语境放置所请求的工作。在操作中,bottle为工作请求检查该队列,并且若在该队列中存在等待的工作,bottle锁定该队列、移出一个工作单元、解锁队列并执行该请求的工作。当在该工作单元中完成该请求的工作时,它把结果标记成是完成的并再次检查该工作队列。bottle顺序地处理等待的工作,并且只要队列中有等待执行的工作实质上在无尽的循环下操作。若该队列是空的,bottle进入死锁、不调度状态以等待某个其它语境在该队列中放入工作并进而使bottle是调度的和重新检查工作队列。
代表由该程序结构管理的与第一或“bottle”线程分离的一个独立控制流的第二线程在图11中用“launcher”标识。launcher用于为“bottle”准备要处理的工作。通过锁定工作队列,在工作队列上设置工作单元和接着解锁队列,launcher把工作放在由“bottle”处理的队列中。若“bottle”是暂停的,launcher使它受到调度。launcher可继续向bottle队列增加其它工作。当把工作置入bottle队列时,它把该工作标记为是未完成的。任何其它语境(bottle语境外面)可检查某具体结果是否完成(假定每个其它语境访问结果结构)。
这样,代替在完成单个任务后摧毁它,根据需要由程序结构再次使用第一线程。
本文说明的并行软件系统可建立并存储在机器中,最好是利用常规计算机可读代码在计算机可使用介质上的常规计算机,在其它情况下为常规程序存储部件上,例如半导体芯片、只读存储器、光读介质如CD-或DVD-ROM或者磁介质如软盘或计算机硬盘机。
因此,本发明提供一种比起现有技术更少遭受出错的并行处理结构。在访问公用系统服务例如数据结构中,本发明的并行处理结构较少遭受串行化限制。在分配或释放存储器中它也较少遭受串行化限制。另外,不同线程之间存在较少的交互。本发明提供一种在建立、管理和终止线程中减少代价和错误的并行处理结构。软件还可把每个线程当成数据对象。
尽管连带一特定的优选实施例具体地说明了本发明,根据上面的说明许多更替、修改和改变对于业内人士是明显的。从而预期附属权利要求书包含属于本发明的真正范围和精神的任何这样的更替、修改和改变。
从而,在说明本发明后我们的权利要求是
权利要求
1.一种用于并行计算的计算机存储器结构,包括由一个平面构成的层次结构的第一层,该平面包括一个代表由一程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,以及可由该程序结构的任何部分访问的局部变量和全局数据;以及由一个空间构成的层次结构的第二层,该空间包含二个或更多的平面,该空间中的这些平面含有所述程序结构,该空间还包括每个平面之间的可由所述程序结构访问的公用数据。
2.权利要求1的存储器结构还包括由二个或更多的所述空间构成的层次结构的第三层,这些空间包含相同或不同的程序结构,并包含每个空间之间的可由程序结构访问的公用数据。
3.权利要求2的存储器结构,其中层次结构的第三层包含不同的程序结构。
4.权利要求2的存储器结构,其中层次结构的第三层包含相同的程序结构。
5.权利要求2的存储器结构,其中程序结构包括一个程序库并且还包括一个用于每个空间的函数表,该函数表适用于在每个空间中和该库交换服务。
6.一种用于并行计算的计算机存储器结构,包括由一个平面构成的层次结构的第一层,该平面包括一个代表由一程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,以及可由该程序结构的任何部分访问的局部变量和全局数据;由一个空间构成的层次结构的第二层,该空间包含二个或更多的平面,该空间中的这些平面含有所述程序结构,该空间还包括每个平面之间的可由所述程序结构访问的公用数据;以及由二个或更多的所述空间构成的层次结构的第三层,这些空间包含相同或不同的具有程序库的程序结构,并包含每个空间之间的可由程序结构访问的公用数据。
7.权利要求6的存储器结构,其中层次结构的第三层包含不同的程序结构。
8.权利要求6的存储器结构,其中层次结构的第三层包含相同的程序结构。
9.一组包含计算机可使用介质的用于并行计算的计算机程序产品,所述介质在其中含有计算机可读代码,所述计算机代码定义包括如下的计算机存储器结构由一个平面构成的层次结构的第一层,该平面包括一个代表由一程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,以及可由该程序结构的任何部分访问的局部变量和全局数据;以及由一个空间构成的层次结构的第二层,该空间包含二个或更多的平面,该空间中的这些平面含有所述程序结构,该空间还包括每个平面之间的可由所述程序结构访问的公用数据。
10.权利要求9的计算机程序产品,其中存储器结构还包括由二个或更多的所述空间构成的层次结构的第三层,这些空间包含相同或不同的程序结构,并包含每个空间之间的可由程序结构访问的公用数据。
11.一种并行处理的方法,包括设置一种计算机存储器结构,其具有由一个平面构成的层次结构的第一层,该平面包括,一个代表由一程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,以及可由该程序结构的任何部分访问的局部变量和全局数据;以及由一个空间构成的层次结构的第二层,该空间包含二个或更多的平面,该空间中的这些平面含有所述程序结构,该空间还包括每个平面之间的可由所述程序结构访问的公用数据;在所述空间的第一平面中使用由所述程序结构管理的第一线程并且访问第一平面中的数据和每个平面之间的公用数据;以及在所述空间的第二平面中使用由所述程序结构管理的第二线程并且访问第二平面中的数据和每个平面之间的公用数据,除明确地由所述程序结构请求外第一和第二线程彼此避免交互。
12.权利要求11的方法,其中该程序结构包括一个程序库并且还为该空间设置一个函数表,该函数表适用于和该空间中的库交换服务并且包括利用所述第一和第二线程对所述函数表进行函数调用以访问每个平面之间的公用数据以及该空间内的公用数据。
13.权利要求11的方法,其中还设置由二个或更多的所述空间构成的层次结构的第三层,这些空间包含相同或不同的程序结构,和包含每个空间之间的可由程序结构访问的公用数据,并包含可由所述第一和第二线程访问的每个所述空间之间的公用数据。
14.权利要求13的方法,其中该程序结构包括一个程序库并且还为该空间设置一个函数表,该函数表适用于和每个空间中的库交换服务并且包括利用所述第一和第二线程对所述函数表进行函数调用以访问每个平面之间的公用数据以及每个空间之间的公用数据。
15.一种机器可读的程序存储部件,其有形地含有可由该机器执行的指令程序以利用一种计算机存储器结构实现用于并行处理的方法步骤,所述计算机存储器结构具有由一个平面构成的层次结构的第一层,该平面包括,一个代表由一程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,局部自变量,以及可由所述程序结构的任何中分访问的全局数据;以及由一个空间构成的层次结构的第二层,该空间包含二个或更多的平面,该空间中的这些平面含有所述程序结构,该空间还包括每个平面之间的可由所述程序结构访问的公用数据,所述方法步骤包括在所述空间的第一平面中使用由所述程序结构管理的第一线程并且访问第一平面中的数据和每个平面之间的公用数据;以及在所述空间的第二平面中使用由所述程序结构管理的第二线程并且访问第二平面中的数据和每个平面之间的公用数据,除明确地由所述程序结构请求外第一和第二线程彼此避免交互。
16.权利要求15的程序存储部件,其中该程序结构包括一个程序库并且还为该空间设置一个函数表,该函数表适用于和每个空间中的库交换服务并且包括利用所述第一和第二线程对所述函数表进行函数调用以访问每个平面之间的公用数据以及每个空间中的公用数据。
17.权利要求15的程序存储部件,其中还设置由二个或更多的所述空间构成的层次结构的第三层,这些空间包含相同或不同的程序结构和包含每个空间之间的可由程序结构访问的公用数据,并包含可由所述第一和第二线程访问的每个所述空间之间的公用数据。
18.权利要求17的程序存储部件,其中该程序结构包括一个程序库并且还为该空间设置一个函数表,该函数表适用于和每个空间中的库交换服务并且包括利用所述第一和第二线程对所述函数表进行函数调用以访问每个平面之间的公用数据以及每个空间之间的公用数据。
全文摘要
一种用于并行计算的计算机存储器结构具有由一个平面构成的层次结构的第一层。该平面包括:一个代表由一程序结构管理的一个独立控制流的线程,一个用于数据结构的堆部分,一个用于函数自变量的栈部分,以及可由该程序结构的任何部分访问的局部变量和全局数据。该存储器结构还具有由一个空间构成的层次结构的第二层。该空间包含二个或更多的平面,其中该空间中的这些平面包含该程序结构。该空间还包括每个平面之间的可由该程序结构访问的公用数据。
文档编号G06F9/48GK1330314SQ0112105
公开日2002年1月9日 申请日期2001年6月18日 优先权日2000年6月20日
发明者哈里·J·比迪三世, 彼得·C·阿尔门德福 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1