用于在不同种类的体系结构中创建和执行集成可执行程序的方法和装置的制作方法

文档序号:6419865阅读:138来源:国知局
专利名称:用于在不同种类的体系结构中创建和执行集成可执行程序的方法和装置的制作方法
技术领域
本发明通常涉及多重处理,更具体地说,涉及多个处理器间信息传递的标准化。
背景技术
通常包括采用耦合到同一计算机系统的多个微处理器同时处理一批数据的并行处理在计算机行业中是很重要的。通常,有三种主要类型的并行处理。分别是采用共享存储器或采用分布式存储器或采用二者组合的并行处理系统。典型地,共享存储器是能在单个操作诸如“载入”或“读取”命令中,可由多个处理器存取的存储器。分布式存储器是定位到各个处理器中的存储器。换句话说,在分布式系统中,在单个存取操作中,每个存储器只能存取与它自己相关的存储器,但通常在单个操作中不能存取与其他处理器有关的存储器。最后一种是混合的或“异类的”并行处理,其中某个系统存储器可由一个或多个处理器存取,而某个存储器则对至少一个处理器而言是分布式或局部的存储器。
一个这样的混合并行处理器系统的例子包括至少一个精简指令集(RISC)主处理器单元(MPU),诸如PowerPCTM处理器,以及至少一个专用的或“附属”处理器单元(APU),诸如SynergisticTMAPU(SPU)。典型地,采用MPU来执行通用码,其中通用码包括复杂的控制流并协调整个混合并行处理功能。MPU可以存取系统存储器的整个范围。APU通常面向执行数据流操作。换句话说,APU计算高重复性的由高级计算机识别以控制决策率(decision ratio)的多媒体、图形、信号或网络处理的工作量。在传统的混合系统中,APU不对系统存储器进行存取,并且其自身存储器,即局部存储器,通常小于共享存储器。
通常,当采用混合系统提供较高的计算性能时,对程序设计模型提出了相当大的挑战。一个这样的问题与APU相关,即APU不能直接寻址系统存储器。因此,任何将在APU上运行的代码在能在APU上执行之前,必须传送到一个与APU相关的本地存储器。另外,APU和MPU可以具有不同的指令集。
然而,在程序设计过程中,传统的编译器通常不指定将在混合系统中的MPU或APU上运行的信息序列,诸如专用码序列或数据。相反,程序员决定如何将代码按功能分配给APU或MPU。这种对处理器的代码分配通常带来程序设计过程的低效。另外,没有用于在附属处理器和主处理器之间传递信息的标准程序设计“工具箱”所述信息为正文(即,代码)或数据。因此,程序员通常没有标准的格式来传递这种信息序列,这也导致了程序设计过程的低效。
因此,需要一种克服传统系统的缺陷的程序设计环境,该环境允许MPU和APU的系统化程序设计以及在MPU和APU之间传送代码和数据。

发明内容
本发明提供编译和使用用在分布式计算系统中的代码。将该代码划分成多个模块,其中模块包括至少一个主处理器代码模块和至少一个附属处理器代码模块。选择代码以便被封装在至少一个主处理器代码模块中,其中将所选择的代码目标化为由至少一个附属处理器采用。编译至少一个主处理器代码模块和至少一个选定的附属处理器代码模块。由选定的至少一个附属处理器模块生成存根函数(stubfunction)。将目标化为用于主处理模块的所编译的处理器代码链接到至少一个存根函数。创建所链接的对象集成可执行程序。


为更全面地理解本发明及其优点,现在将参考下述结合附图的详细描述,其中图1示意性地描述用于执行集成可执行程序的包括存根函数的分布式处理系统环境;图2示例说明用于编译和使用指定用于分布式计算系统中的多个执行环境的代码的方法;图3A描述用于可采用来从MPU向APU传送数据的存根函数的“C”程序设计语言伪代码;以及图3B描述用于可采用来从MPU向APU传送数据的存根函数的“C++”程序设计语言伪代码。
具体实施例方式
在下述讨论中,阐述了多个详细说明以提供对本发明的全面理解。然而,本领域的技术人员将意识到没有按这些详细说明,也可实施本发明。在其他实例中,以示意性或框图的形式示例说明了公知的元件以便不会在不必要的细节方面难以理解本发明。另外,对大多数零件来说,已经省略了有关网络通信、电磁信令技术等等的详细说明,因为认为这些详细说明对获得全面理解本发明不是必要的,并且认为是在相关技术的普通技术人员的理解之内。
进一步提出除非指出,否则在此描述的所有功能可用硬件或软件,或它们的一些结合来执行。然而,在优选实施例中,由处理器,诸如计算机或电子数据处理器,根据代码,诸如计算机程序代码、软件和/或集成电路来执行这些功能,除非另外指出,将集成电路代码化来执行这些功能。
参考图1,标记100通常表示不同种类的并行处理体系结构,该体系结构通过采用存根函数而提供用于传递信息的一个环境。体系结构100包括分布式计算环境110和共享系统存储器160,二者由接口150电耦合。环境110包括多个APU120,每个APU具有其各自的本地存储器125。环境110进一步包括MPU130,诸如RISC处理器,以及它同速的超高速缓存135。在一个实施例中,通过信号通道145,将MPU130耦合到系统存储器160。在一个实施例中,APU包括SPU。在一个实施例中,采用单个MPU130。而在另一实施例中,采用多个MPU130。
环境110进一步包括一个存储流控制器(MFC)140。通常,MFC140能够进行数据传送以及MPU130和APU120处理器间的同步能力,并用于主系统存储器160和局部存储器125间的数据传送。在图1中,通过接口150,将MFC140耦合到系统存储器160。
通常,当主处理器130或APU120请求时,MFC140允许系统存储器160和APU120的局部存储器125间的传送信息,包括文本(即,代码)和数据。因为APU120不能直接存取系统存储器160,在请求在APU120或MPU130上运行的传送函数,诸如存根函数时,MFC140在系统存储器160和APU120的局部存储器125间传送信息。在一个实施例中,MFC140包括一个直接存储存取(DMA)设备。
体系结构100是一个在其中运行可执行程序的环境,其中可执行程序具有嵌入其中的一个存根函数或多个存根函数。在该存根函数中,将由APU120采用的代码和数据封装为一个软件“对象”。通常,存根函数命令MFC140在两个独立的执行环境,诸如系统存储器160和局部存储器125间传送信息。存根函数使得MPU130将代码和数据流向APU120的局部存储器125以便处理,以便APU120执行该处理,以及以便APU120之后将处理过的数据流回MPU120。由APU120执行的数据和代码的该处理对MPU130是不可见的,并同时允许MPU130执行其他数据处理或程序流控制任务。
典型地,存根函数命令MFC140将代码和数据从系统存储器160的指定地址流向一个选定的APU120的局部存储器125内的一个指定地址。存根函数也命令MFC140以指令APU120处理该数据。由存根函数向APU120发出的命令是远程命令。通常,远程命令是从第一执行环境发送到第二执行环境的命令。典型地,存根函数是APU120的单个入口点。换句话说,APU120或其相关的局部存储器125通常仅可通过该存根函数来存取。
在另一实施例中,被传送的代码在其中还包含另一存根函数。当APU120完成数据处理时,该被传送的存根函数使得APU120命令MFC140将处理过的数据发送回共享存储器160。在该实施例中,MPU130中的存根函数轮询APU125来确定APU120是否完成了处理。如果APU120完成了处理,那么由MPU130执行的存根函数命令MFC140将处理过的数据发送回系统存储器160。在另一实施例中,当所有存根函数驻留在系统存储器160中时,由MPU130执行所有存根函数。然而,并非所有MFC命令必定需要与存根函数关联。
现在转到图2,所示的是用于编译和使用代码,从而创建具有嵌入存根函数的集成可执行程序的方法200。在步骤210中,将源代码划分成将在该一个或多个APU120以及该MPU130上运行的模块,从而产生APU120代码模块和MPU130代码模块。可以由编译器或通过编程人员的干预,或两种方法的结合来执行该划分。划分可基于诸如所需的数据操作、数据操作的重复性等等的考虑。将在选定的APU120上运行的模块的例子是三角函数、矩阵运算、平方根计算等等。
在步骤220中,编译器(或程序员)选择将封装在MPU130代码模块或多个代码模块中的至少一个单独的APU120代码模块。在步骤230中,用程序设计语言编写的划分模块由编译器编译。程序设计语言的一些例子是“C”、“C++”或“Assembler”,但是其他程序设计语言也在本发明的范围之内。该编译产生多个适合于在一个或多个单独的处理体系结构,诸如APU120的局部存储器125和耦合到该MPU140或多个MPU140的系统存储器160中执行的多个目标代码模块。
指定用于一个或多个APU120或一个或多个MPU130的所编译的目标代码模块可是源自几个不同源文件的代码或数据的结合结果。同样,多于一个的目标代码部分能包括同样的代码或数据。通常,步骤230将能在一个操作中载入到选定的APU120的相应局部存储器125的所有代码或数据结合成一个相连区中。另外,步骤230将编译的任何文件结合到用于MPU130的目标模块中。
在步骤240,连接器通过将步骤220中选定的至少一个编译过的模块进行封装作为存根函数来生成存根函数,其中该存根函数进一步包括在APU120和MPU130间传送代码和数据的装置。存根函数包括“对象”,其中代码、数据以及用于存取代码和数据的装置均包含在存根函数中。用于在MPU130和目标化APU120间流动数据的装置通常包括对MFC140的命令。
在步骤250中,连接器将指定用于该APU120的、已经封装为将在MPU130上执行的该模块内的存根函数的至少一个模块捆绑到指定用于该APU120或多个APU120的任何其它编译过的模块。连接器将连接的APU120编译模块捆绑到指定用于MPU130的编译模块。在一个实施例中,连接器首先连接所有目标化为附属存储器120的模块,然后进一步将这些被连接的模块连接到目标化为MPU130的模块。
现在转到图3A,所公开的是以“C”编程语言编程的用于存根例程(stub routine)的伪代码,该存根例程用于将信息从系统存储器160传送到局部存储器125。该存根例程包括头文件“apu_xfer.h”,其表示影响MFC操作,诸如移动数据块、启动执行等等所必要的系统级操作的接口标准。
通常,存根函数包括一个软件“对象”,该对象进一步包括将要流入APU120的嵌入代码和数据,以及将代码和数据从系统存储器160传送到APU120的软件装置。在图3A中,该代码和数据分别为apu_text[]和apu-data[]数组。另外,在图3A中,存根函数包括两个子函数。这两个子函数是涉及由该示例性实施例中的头文件“apu_xfer.h”定义的系统级操作的apu_transfer_block()子函数和apu_start-exec()子函数调用。
通常,apu_transfer_block()子函数命令MFC140向选定的APU120发送信息,诸如代码和数据。apu_transfer_block()子函数在其头部内包括四个字段的信息。在图3A中,第一字段的信息,“apuno”是文本或数据将流向其中的APU120的标记。信息的第二字段包括在其中存储信息的APU120的局部存储器125内的存储器地址。在图3A中,对第一apu_transfer_block()子函数,该示例性值为“116”,对第二apu_transfer_block()子函数,该示例性值为“32768”。第三字段包括将发送的文本或数据的标记。在图3A中,分别为apu_text[]和apu_data[]。最后,信息的长度被发送到第四字段中。这些示例性值对apu_text和apu_data分别为“172”和“16”。
图3A的存根函数进一步包括启动选定的APU120处理数据的子函数。该子函数,“apu_start_exec()”包括两个字段。第一字段是启动处理的选定APU120的标记。第二字段是选定的存储器120的局部存储器125内文本或可执行代码的地址。可执行代码的文本的地址传送到选定的APU120,在此搜索存储器以便启动执行流入的代码。
简单地转到图3B,所示的为能用作基类以导出用于不同模块的存根的“C++”代码类,这些不同的模块提供公用元函数以便载入、传送参数、启动执行以及检索结果。在一个示例性实施例中,定义了公用类函数,该函数具有virtual int spu_load()子函数、virtualint spu_load_data()子函数和virtual int spu_load_text()子函数。在一个实施例中,spu_load()执行spu_load_data()子函数和spu_load_text()子函数的功能。还有一个virtual spu_xfer_parm()子函数。
在该示例性实施例中,由用户定义型parm_descriptor表示参数,该parm_descriptor已被充分定义以容纳可传递给一个存根的不同参数集。在其他实施例中,可使用不同的约定,诸如,通过使用c/c++“stdarg”工具来传递参数。如本领域的技术人员将理解的,“stdarg”是用于处理向一个函数传递一个可变调用定义的参数(关于数量和数据类型方面的变量)的C语言标准的一部分。在另一实施例中,从基类apu_root_function导出的每个子类可具有其自身的、也用于提供参数的调用元函数。然后这些函数可直接影响到向选定的APU传送参数,或调用一个元函数,诸如spu_xfer_parm(),或其他函数来将一个或多个数据项拷贝到一个局部APU存储器。还有一个子函数,virtual int spu_start(),用于起动APU120处理数据,或另一子函数,virtual int spu_retrieve(),用于从该APU120提取处理过的数据。
应当理解本发明能采用各种形式和实施例。因此,在不脱离本发明的精神或范围的情况下,在上文中可做出几种改变。在此略述的能力考虑到各种程序设计模式的可能性。不应当将该公开的内容错误地当作推荐任何具体的程序设计模型,而是针对在其上建立这些程序设计模型的基本机制。
通过引用某些其优选的实施例,由此描述了本发明,注意到所公开的实施例实际上是示例性的而不是限制以及在上述公开的内容中考虑到大范围的变化、修改、改变和取代,以及在某些实例中,可采用本发明的一些特征而不必相应的使用其他特征。基于回顾优选实施例的上述描述,许多这些变化和修改对本领域的技术人员来说是显而易见和所希望的。因此,概括和用与本发明的范围一致的方式构造附加权利要求书是适当的。
权利要求
1.一种用于在分布式计算系统中编译和使用代码的方法,所述方法包括将源代码划分成多个模块,其中所述模块包括至少一个主处理器代码模块和至少一个附属处理器代码模块;选择将被封装在所述至少一个主处理器代码模块中的代码,其中所述选定代码被目标化为由至少一个附属处理器采用;编译所述至少一个主处理器代码模块以及至少一个选定的附属处理器代码模块;根据所述选定的至少一个附属处理器模块生成至少一个存根函数;链接所述至少一个主处理器编译代码模块和所述至少一个存根函数;以及创建一个链接对象集成可执行程序。
2.如权利要求1所述的方法,进一步包括采用所述存根函数来将信息从一个共享存储器传送到所述附属处理器的步骤。
3.如权利要求1所述的方法,进一步包括轮询所述至少一个附属处理器有关它是否已经完成采用与所述存根函数有关的信息的步骤。
4.如权利要求1所述的方法,进一步包括创建可用来在由所述附属处理器执行的数据处理结果中检索与所述存根函数相关的信息的步骤。
5.如权利要求1所述的方法,其中所述编译步骤进一步包括确定用于将数据从至少一个系统存储器传送到至少一个附属处理器单元的调用子程序。
6.如权利要求1所述的方法,进一步包括采用存储流控制器将与所述存根函数有关的信息从一个系统存储器传送到所述至少一个附属处理器的局部存储器的步骤。
7.如权利要求1所述的方法,进一步包括将所述链接存根对象存储在共享存储器中的步骤。
8.如权利要求1所述的方法,进一步包括采用网络上的节点,所述节点包括单独的执行空间。
9.如权利要求1所述的方法,其特征在于所述划分步骤基于来自程序员的指导。
10.如权利要求1所述的方法,其特征在于所述划分步骤基于来自编译器的指导。
11.一种用于在单独的执行环境中执行计算机程序的方法,包括在第一执行环境中调用一个存根函数;以及调用第二函数,其中在第二执行环境中编码所述第二函数,以及其中所述调用包括由所述存根函数进行远程调用。
12.如权利要求11所述的方法,其特征在于由所述存根函数进行远程调用的步骤包括将封装的编译文本传递给所述至少一个附属处理器。
13.如权利要求11所述的方法,其特征在于由所述存根函数进行远程调用的步骤包括将数据传递给所述至少一个附属处理器。
14.如权利要求11所述的方法,其特征在于所述远程调用的步骤包括传送一个地址,通过所述地址,将所述信息存储在所述局部存储器中。
15.如权利要求11所述的方法,其特征在于所述远程调用的步骤包括传送多个附属处理器单元中的一个选定单元的标记。
16.如权利要求11所述的方法,其特征在于所述远程调用的步骤包括传送将被传送的信息大小的标记。
17.如权利要求11所述的方法,其特征在于所述远程调用的步骤包括从一个共享存储器存取将被传送的信息的相应地址作为包含在所述存根函数中的共享存储器地址标记。
18.一种适于利用一个可执行文件的并行处理器系统,所述并行处理器系统包括至少一个主处理器;至少一个附属处理器;所述可执行文件,其中所述文件适合采用所述至少一个主处理器和所述至少一个附属处理器,所述可执行文件进一步包括至少一个嵌入的存根函数。
19.如权利要求18所述的并行处理器系统,其特征在于所述至少一个附属处理器采用其自己的单独的执行环境。
20.如权利要求18所述的并行处理器系统,其特征在于所述至少一个主处理以及所述至少一个附属处理器包括多个节点。
21.如权利要求18所述的并行处理器系统,进一步包括至少一个存储流控制器,其中所述存根函数可用于控制所述存储流控制器以便在一个共享存储器和一个局部存储器间传送标记。
22.如权利要求18所述的并行处理器系统,进一步包括一个局部存储器,其与至少一个附属处理器中的每一个相关联。
23.如权利要求18所述的并行处理器系统,其特征在于所述存储流控制器可进一步用于一个主存储器和一个局部存储器间的数据传送。
24.如权利要求23所述的并行处理器系统,其特征在于所述存储流控制器包括一个直接存储存取装置。
25.如权利要求18所述的并行处理器系统,其特征在于所述主处理器采用精简指令集体系结构。
26.如权利要求18所述的并行处理器系统,其特征在于所述主处理器和所述附属处理器采用不同的指令集。
27.一种计算机程序产品,用于在分布式计算系统中编译和使用代码,所述计算机程序产品具有其上嵌入有一个计算机程序的介质,所述计算机程序包括计算机代码,用于将源代码划分成多个模块,其中所述模块包括至少一个主处理器代码模块和至少一个附属处理器代码模块;计算机代码,用于选择将被封装在所述至少一个主处理器代码模块中的代码,其中所述选定代码被目标化为由所述至少一个附属处理器采用;计算机代码,用于编译所述至少一个主处理器代码模块以及至少一个选定的附属处理器代码模块;计算机代码,用于根据所述选定的至少一个附属处理器模块生成至少一个存根函数;计算机代码,用于链接所述至少一个主处理器编译代码模块和至少所述至少一个存根函数;以及计算机代码,用于创建一个链接对象集成可执行程序。
28.一种用于在分布式计算机系统中编译和使用代码的处理器,所述处理器包括一个计算机程序,所述计算机程序包括计算机代码,用于将源代码划分成多个模块,其中所述模块包括至少一个主处理器代码模块和至少一个附属处理器代码模块;计算机代码,用于选择将被封装在所述至少一个主处理器代码模块中的代码,其中所述选定代码被目标化为由所述至少一个附属处理器采用;计算机代码,用于编译所述至少一个主处理器代码模块以及至少一个选定的附属处理器代码模块;计算机代码,用于根据所述选定的至少一个附属处理器模块生成至少一个存根函数;计算机代码,用于链接所述至少一个主处理器编译代码模块和至少所述至少一个存根函数;以及计算机代码,用于创建一个链接对象集成可执行程序。
全文摘要
本发明提供用于在不同种类的体系结构中创建和执行集成可执行程序的方法和装置。编译器和链接器编译用于第一和第二处理器体系结构的源代码的不同段,并生成针对将代码和数据加载到远程节点以便使它们执行由数据上的传送码描述的操作的适当存根函数。编译器和链接器生成表示远程执行能力的存根对象,并生成用于封装在这种环境中执行代码所必需的传送的存根对象。
文档编号G06F9/45GK1499369SQ200310101079
公开日2004年5月26日 申请日期2003年10月15日 优先权日2002年10月24日
发明者迈克尔·K·克施温德, 凯瑟琳·M.·奥布莱恩, 约翰·K.·奥布莱恩, 瓦伦蒂纳·萨拉普罗, M. 奥布莱恩, K. 奥布莱恩, 纳 萨拉普罗, 迈克尔 K 克施温德 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1