存储器管理方法、信息处理装置、程序的生成方法以及程序的制作方法

文档序号:6476363阅读:156来源:国知局
专利名称:存储器管理方法、信息处理装置、程序的生成方法以及程序的制作方法
技术领域
本发明涉及通过多个处理器核心构成的多处理器系统中的存储器的管理
方法,特别涉及根据编译器(compiler)所取得的信息将被处理器访问的数据
分配到存储器的被分割后的区域中的方法。
背景技术
将多个处理器核心集成到一个芯片上而成的多核处理器(芯片多处理器) 不断被各个微处理器厂家发布。除了超级计算机、服务器、台式计算机以及 PC服务器领域之外,信息家电以及装置组装领域(例如,移动电话机、游戏 机、车辆导航系统、数字影像接收机、HDD/DVD记录器.播放器等)中,也 看到了微处理器的多核化的趋势。
这样,当前在从信息家电到超级计算机几乎所有的信息设备中,都使用多 核处理器,并且认为今后会有更多的信息设备组装多核处理器。
不仅是细粒度命令级(fine grain instruction level)的并4亍性,即使是并行 性更大的循环(loop)级的并行性、粒度更粗的循环间的并行性、以及函数间 的粗粒度任务并行性也能够应用多核处理器。这样,多核处理器在通过利用更 大的并行性能够提高处理器的处理性能这一点上很有利。另外,多核处理器能 够使用n台处理器核心来实现同一性能,因此,使时钟频率为n分之一,施加 的电压也降低,由此,能够将耗电(以电压的平方增大)抑制得较低,多核处 理器在这一方面也是有利的。
另外,在软件方面,多处理器用的并行程序设计(programing)的调试 (tuning)通常需要大量的时间,因此,应用软件的开发非常困难。但是,在 集成了比较少的处理器的当前时期,通过逐次使程序自动并行化的自动并行化 编译器能够获得高性能。在信息家电领域,应用程序的质量和数量决定了在市 场上的竟争力,因此,如果能够通过编译器实现4核、8核、16核的多处理器 用的程序的自动并行化,则多核的优越性会升高。另夕卜,在多粒度并行(multi-grain parallelizing )化中,将语句级 (sentence-level )、循环级(loop-level )、更粗级别(例如,循环间、子程序 (subroutine)间、基本块(basicblock)间)的所有的并行性组合起来,通过
可最早执行条件解析来提取并行性的技术已经在特开2001-175619号公报中公开。

发明内容
以往就进行了这种局部存储器(local memory )的最佳化。但是,以往的 局部存储器的最佳化只是在并行循环连续的情况下,通过连续地执行能够并行
的循环,来循环使用存储器上的数据。
但是,在一个循环中使用的数据大小比局部存储器的大小要大的情况很 多,在循环中产生了数据的装载以及存储。此时,处理器需要等待处理直到接 下来使用的数据准备好,从而产生了处理器的处理的系统开销(overhead)。
另外,根据一边使用局部存储器上的数据一 边执行程序的数据局部化 (localization),为了仅使用局部存储器来进行处理,必须将时序(sequential) 的循环以及基本块中使用的大的数据也存储在局部存储器中。没有载入局部存 储器中的数据保存在共享存储器中。因此,希望在整个程序中对数据应用局部 化。
另外,在静态调度(static scheduling)时和生成动态调度码时,也使用用 于将各处理器上的局部存储器或者分散共享存储器有效地进行利用、将处理器 间的数据转发量最小化的数据局部化(data localization )。
另夕卜,当处理器的集成度变高、一个芯片中包含的处理器核心数量增多时, 即使将程序并行化也几乎不会提高处理性能。之所以这样说是因为产生了如下 的存储墙(memory wall)的问题处理器的动作变快,处理器的处理速度与 存储器的存储器存取速度的差变大,因此无法将处理器使用的数据在适当的定 时提供给存储器。
因此,需要很好地使用与处理器接近地设置的存储器。即,由于与处理器 接近的存储器的存储容量较小,因此,在需要大型数据的情况下,需要将数据 分割开装载到存储器中。而且,由于存储器之间的数据转发需要时间,因此, 要求进行对处理器的程序顺序进行了设计的调度,以便循环使用装载于存储器中的数据。并且,当在存储器之间转发数据时,需要使用DMA控制器来隐藏 系统开销。编译器在对通过处理器执行的程序的并行性进行解析时,取得程序内的任 务的执行顺序的信息,还解析任务之间的数据的依存关系(定义、参照的关系)。 另外,当决定分支(branch)时,可知使用相同数据的程序。这样,通过编译 器所取得的信息,可知使用存储在存储器中的数据的定时,从而能够在多个任 务之间循环使用数据。即,在本发明中,为了在持续进行处理时尽可能连续地长时间保持在配置 于处理器附近的高速存储器中保存的数据,而高效率地配置数据。具体来说, 将需要的数据保存在处理器附近的高速存储器中,将不需要的数据依次转发到 虽然低速但是容量大的存储器中。而且,在本发明中,对数据进行分割后分配 给局部存储器。另外,为了能够长时间使用存储在局部存储器中的数据,根据 编译器所带有的信息(数据在何时在何处使用的信息),来决定将哪个数据逐 出。另外,调度DMA以便先装载需要的数据。另外,本发明不仅能够应用于同一种类的处理器中的存储器的管理,还能 够应用于不同种类的异种'多处理器中的存储器管理。根据本发明,存储器的存储区域的管理变得容易,因此,能够使数据在局 部存储器以及分散共享存储器中的配置最佳化。由此,能够循环使用存储器中 装载的数据,能够减少存储器之间的数据转发。


图l是本发明实施方式的单芯片多核处理器的结构图。图2是本发明实施方式的多粒度并行处理的说明图。图3是本发明实施方式的宏流程图的说明图。图4是本发明实施方式的的局部存储器管理的概要的说明图。图5是本发明实施方式的存储器的存储区域的分割状态的说明图。图6是本发明实施方式的存储器的清除优先度的说明图。图7是本发明实施方式的存储器中装载的变量的推移的说明图。图8是本发明实施方式的循环的分割步骤的具体示例的说明图。图9是本发明实施方式的循环的分割步骤的具体示例的说明图。图10是本发明实施方式的循环的分割步骤的具体示例的说明图。 图11是本发明实施方式的循环的分割步骤的具体示例的说明图。图12是本发明实施方式的块大小的决定步骤的具体示例的说明图。 图13是本发明实施方式的块大小的决定步骤的具体示例的说明图。 图14是本发明实施方式的局部存储器管理宏任务的生成的具体示例(分 配前)的i兌明图。图15是本发明实施方式的局部存储器管理宏任务的生成的具体示例(分配后)的i兌明图。图16表示本发明实施方式的模板的生成步骤的示例。 图17是本发明实施方式的模板被映射后的局部存储器的状态的说明图。 图18是本发明实施方式的模板被映射后的局部存储器的状态的说明图。 图19A和图19B是本发明实施方式的编码图像的生成示例(状态1)的说明图。图20A和图20B是本发明实施方式的编码图^^的生成示例(状态2)的 说明图。图21A和图21B是本发明实施方式的编码图像的生成示例(状态3)的 说明图。图22A和图22B是本发明实施方式的编码图像的生成示例(状态4)的 说明图。图23A和图23B是本发明实施方式的编码图像的生成示例(状态5)的 说明图。图24A和图24B是本发明实施方式的编码图像的生成示例(状态6)的 说明图。图25A和图25B是本发明实施方式的编码图像的生成示例(状态7)的 说明图。图26A和图26B是本发明实施方式的编码图像的生成示例(状态8)的 说明图。图27A和图27B是本发明实施方式的编码图像的生成示例(状态9)的 说明图。9图28A和图28B是本发明实施方式的编码图像的生成示例(状态10)的 说明图。图29A和图29B是本发明实施方式的编码图像的生成示例(状态11 )的 说明图。图30A和图30B是本发明实施方式的编码图像的生成示例(状态12)的 说明图。图31A和图31B是本发明实施方式的编码图像的生成示例(状态13)的 说明图。图32A和图32B是本发明实施方式的编码图像的生成示例(状态14)的 说明图。图33A和图33B是本发明实施方式的编码图像的生成示例(状态15)的 说明图。图34A和图34B是本发明实施方式的编码图像的生成示例(状态16)的说明图。
具体实施方式
首先对本发明的概要进行说明。本发明根据由编译器通过程序解析获得的信息来管理存储器的存储区域。 在编译器编译程序时,获取程序的信息。具体来说,编译器通过程序解析能够 获得上述程序中使用的数据的信息、接下来使用上述数据的定时的信息、以及 使用上述数据的处理器的信息。即,能够通过程序获得使用数据的定时。本发 明的第一特征在于,根据解析程序而获得的信息,来管理存储器的存储区域的 分配。具体来说,编译器具有程序(例如嵌套(nest)的各层处理)的执行调度 的信息,因此能够获得数据什么时候被访问的信息。于是,能够根据程序的执 行调度将存储器的存储区域最佳地分配给数据,所以能够使数据的转发最小 化。另外,能够获得哪个处理器什么时候需要分配给存储器的数据的信息。由 此,能够在不影响处理器的处理的情况下通过DMA控制器将数据连续地提供 给(装载到)存储器。由此,处理器并不为了等待数据被提供给存 器而停止。另外,编译器能够获得数据被程序什么时候访问的信息,因此,能够确定已经不需要的数据或者不被立即访问的数据,从而能够通过DMA控制器将不需要的数据或者不被立即访问的数据从存储器的存储区域清除(存储)。,基于该将来信息的数据的清除与以往使用的LRU ( Least Recently Used)不同,不 将最近没有使用但是可能马上使用的数据清除,使存储器的利用最佳化,能够 减少存储器之间的数据转发。即,本发明的第二特征在于,根据解析程序而获取的信息,来决定向存储 器和/或从存储器转发数据的定时。为了如上所述地管理存储器的存储区域,将存储器的存储区域分割成固定 大小的块(block),并对每个块分配数据。关于割存储区域的块的大小,根据 编译时获取的程序的特性(程序中使用的数组的大小、数组的形状、程序的执 行模式等)来确定适当的大小。另外,块的大小可以为整数倍(例如,2的倍 数)的关系。即,本发明的第三特征在于,根据解析程序而获取的信息,将存储器的存 储区域分割成适当大小的块,来分配数据。根据程序的特性将存储区域分割成 固定大小的块通过硬件或OS (操作系统)无法实现。这是因为通过硬件或OS 来分割存储区域时,总是以确定的大小进行分割。另外,根据要访问的数据的种类和范围,程序中使用的数据的大小有时不 同,于是要准备多个大小的块以便适合程序中使用的数据的大小。并且,改变 所分配的块的大小以适合数据的大小。另外,与程序执行时所必需的数据(将在某个瞬间必须装载到存储器上的 数据称为"工作组"(working set))的分割相一致地,也分割程序。例如,将 循环分割成二分之一时,使用的数据也成为二分之一。本发明的第四特征在于,根据解析程序获取的信息,来决定程序的分割数以便将工作组装载于存储器的 存储区域。例如,程序的分割是对一个大的循环进行分割然后反复执行细小单 位的循环。另外,在多重循环中,通常使用多维数(dimension)数组变量。在对具 有一维数地址空间的固定大小的块分配多维数组变量时,对一维数的块分配多 维数组模板(template )。该多维数组模板的形状以及大小根据程序中使用的数组变量的形状以及大小而决定。本发明的第五特征在于,根据解析程序获取的信息,来决定分配给块的模板。由此,能够在避免转换数组变量的索引(index) 的麻烦以及程序的复杂化的同时将任意数组分配到存储器上的任意的地址。另夕卜,在以下的本发明的实施方式中,对数据的使用进行具体说明,但是, 除了处理器对数据的使用(参照)之外,数据的定义(计算数据然后保存到存 储器中)中的存储器管理也在本发明的范畴之内。即,本发明能够应用于包含 数据的使用以及定义两者的数据访问。下面,参照附图对本发明的实施方式进行-说明。图l是本发明的实施方式的单芯片多核处理器的结构图。本发明的实施方式的单芯片多核处理器10具备包括多个处理器核心(PC0、 PC1.....PCn) 16的多核芯片(CMP0.....CMPm) 10;多个集中共享存储器(CSMO.....CSMj) 14;进行输入输出控制的多个输入输出用芯片(I/OCSP0..... I/OCSPk) 18;以及芯片间结合网(InterCCN) 12。芯片间结合网12通过现有的连接技术(交叉开关(crossbar switch)、总 线、多级网络等)实现,其将多个处理器核心16、多个集中共享存储器14以 及输入输出用芯片18连接起来。集中共享存储器14由系统中的所有处理器核 心16共享,是可以从各处理器核心16进行访问的存储器。集中共享存储器 14补充多核芯片10内具有的集中共享存储器28。各多核芯片IO具有多个处理器核心(PC) 16、集中共享存储器(CSM/L2 Cache) 28以及芯片内结合网(IntraCCN) 34。各处理器核心16具有CPU20、 分散共享存储器(DSM:distributed shared memory) 22、局部程序存储器 (LPM/I-Cache ) 24、局部数据存储器(LDM/D-cache ) 26、数据转发控制器 (DTC) 30、网络接口 (NI) 32以及电力控制寄存器(FVR) 36。CPU20只要能够进行整数运算以及浮动小数点运算即可,没有特别限定。 例如,可以使用数据的装载(Load)以及存储(Store)的体系结构(architecture ) 为单纯的单片(single issue) RISC体系结构的CPU。'另外,也可以使用超标 量处理器(superscalarprocessor)、 VLIW处理器等。分散共享存储器(DSM) 22用双口存储器构成,能够从其他处理器核心 16经过数据转发控制器30对分散共享存储器22直接进行数据读写,从而用。局部程序存储器(LPM) 24按照由调度程序(scheduler)决定的任务的 执行顺序先从其他存储器读取应该执行的命令并进行高速緩冲存储。另外,根 据程序的特征还能够用作通常的数据高速緩沖存储器,还用作用于减少命中错 误(hit miss )的高速緩沖存储器。局部数据存储器(LDM) 26是仅能够在各处理器核心16内进行访问的存 储器,其保存分配给各处理器核心16的任务中使用的数据(例如,数组变量)。 另外,局部数据存储器26能够切换成L1数据高速缓冲存储器。数据转发控制器(DTC) 30由公知的DMA控制器构成,其按照由调度程 序决定的定时,在存储器之间转发应该执行的命令或使用的数据。具体来说, 在自身或其他的处理器核心16上的局部存储器26、自身以及其他处理器核心 16上的分散共享存储器22、自身以及其他处理器核心IO上的集中共享存储器 28、以及设于其他芯片的集中共享存储器14之间转发数据。另外,局部数据存储器26与数据转发控制器30之间的虚线表示可以构成 为能够根据单芯片多核处理器的用途由数据转发控制器30来访问局部数据存 储器26。在该情况下,CPU20能够将转发指示经局部数据存储器26提供给数 据转发控制器30。另外,CPU20能够在转发结束后将对所转发的数据进行检 查。CPU20经过局部数据存储器26、分散共享存储器22或者专用的缓沖器(省 略图示)来对数据转发控制器30发出数据转发指示。另外,数据转发控制器 30经过局部数据存储器26、分散共享存储器22或者专用的緩冲器(省略图示) 向CPU20报告数据转发结束。此时,使用哪个存储器或者緩冲器根据处理器 的用途在处理器的设计时决定。或者也可以准备多个硬件上的方法,根据程序 的特性由编译器或者用户在软件方面灵活使用。关于发给数据转发控制器30的数据转发指示(例如,从哪个地址将几字 节的数据存储或装载到哪里,以及数据转发的模式(连续数据转发、进展 (stride )转发等)),理想的是,编译器将数据转发命令保存到存储器或者专 用緩冲器,在程序执行时仅发出执行哪个数据转发命令的指示,从而削减用于 驱动数据转发控制器30的系统开销(overhead )。13网络接口 (NI)32为了能够在各单芯片多核处理器10内的处理器核心16 之间机进行通信而与芯片内结合网34连接。芯片内结合网34与芯片间结合网 12连接。处理器核心16通过芯片间结合网12能够与其他单芯片多核处理器 10内的处理器核心16进行通信。处理器核心16经过芯片内结合网34与集中共享存储器14连接。集中共 享存储器14与芯片间结合网12连接。另外,网络接口 32能够不经过芯片内结合网34而直接与芯片间结合网 12连接。这样的结构能够使系统中的所有处理器核心16对分散配置在各芯片 上的集中共享存储器28以及分散共享存储器22进行平等的访问。另外,通过 设置直接连接的总线,即使在芯片间的数据转发量多的情况下,也能够提高系 统整体的数据转发能力。电力控制寄存器(FVR) 3 6被设定了提供给处理器核心16的电源电压和 时钟频率,以便控制处理器核心16的工作频率以及工作电压。另外,如图所 示,电力控制寄存器不仅设置于处理器核心16,还设置于单芯片多核处理器 10、芯片间结合网12、集中共享存储器14、输出输出用芯片18、集中共享存 储器28以及芯片内结合网34,用于控制这些各结构的工作频率以及工作电压 的数据保存在电力控制寄存器中。图2是说明本发明的实施方式的多粒度并行处理的图。所谓多粒度并行处理,是指分层地利用粗粒度并行性、中粒度并行性、以 及近细粒度并行性的并行处理方式。所谓粗粒度并行性是子程序(subroutine) 之间、循环之间、以及基本块之间的并行性,所谓中粒度并行性是循环的迭代 (iteration)之间的并行性,近细粒度并行性是语句(statement)之间以及命 令之间的并行性。通过该多粒度并行处理,与以往进行的局部且单一粒度的并 行化(循环的并行化以及命令级的并行化等)不同,能够进行覆盖整个程序的 全面且多粒度的柔性并行处理。在多粒度并行处理中,按照以下步骤进行并行化处理。1) 从源程序生成宏任务。2) 解析宏任务之间的控制流程以及数据依存生成宏流程图表。3) 通过可最早执行条件解析生成宏任务图表。下面具体说明该步骤。在利用单一程序中的子程序、循环、基本块之间的并行性的多粒度并行处理中,将成为源的例如FORTRAN程序作为粗粒度任务(宏任务)分解为重复 块(RB: repetition block )、子程序块(SB: subroutine block)以及伪赋值语句 块(BPA:block of pseudo assignment statements )三种宏任务(MT )。重复块是 各层中的最外层的循环。另外,伪赋值语句块是考虑到调度系统开销以及并行性来进行结合和/或 分割的基本块。这里,伪赋值语句块基本上是通常的基本块,但是也可以为了 并行性提取而将单一的基本块分割成多个。另外,在一个伪赋值语句块的处理 时间短、无法忽略动态调度时的系统开销的时候,结合多个伪赋值语句块来生 成一个伪赋值语句块。在作为最外侧循环的重复块是Doall循环的情况下,通过分割循环索引 (loop index)来分割成多个部分Doall循环,将分割后的Doall循环新定义为 重复块。在重复块为non-Doall循环的情况下,也可以将分层的宏数据流程处 理应用于重复块内的并4亍性。子程序块尽可能地内联(inline)展开即可。但是,考虑到编码长度,将 无法有效地内联展开的子程序直接作为子程序块。在该情况下,可以将分层的 宏数据流程处理应用于子程序块内的并行性。接下来,解析宏任务之间的控制流程以及数据依存,生成如图3所示的宏 任务图表(MTG)。在宏流程图表中,表示宏任务(MT)之间的控制流程。 在生成宏任务图表时,同时解析宏任务之间的控制依存以及数据依存,以各宏 任务能够最早地执行的条件(可最早执行条件)的形式检测宏任务之间的并行 性。另外,以图表表现该可最早执行条件的是宏任务图表。并且,编译器将宏任务图表上的宏任务分配给处理器集群(processor cluster)(由编译器或者用户定义的处理器的组)。在该任务的分配时,有编译 时分配的静态调度和执行时分配的动态调度,在动态调度的情况下,使用动态 CP算法来生成动态调度码,将生成的动态调度码植入到程序中,另外,在动 态调度时,在到执行时为止,并不知道哪个宏任务被那个处理器执行,因此, 在宏任务之间共享的数据分配到从所有处理器都能够等距离地看到的集中共15享存储器14中即可。在多粒度并行化中,关于通过宏数据流程处理而分配给处理器集群的循环块,在该循环块为Doall循环或者Doacross循环的情况下,以由处理器集群内 的多个处理器核心16进行处理的方式,在迭代级分割循环,使循环并行化。在循环的重建时,可以直接利用语句的执行顺序的变更、循环分配(loop distribution), 节点戈'J分才示量(node splitting scalar)、 ^广展(expansion),循环 互换(loop interchange ),循环展开(loop unrolling )、剥离开采(strip mining )、 阵列私有化(Array Privatization)以及单模(unimodular)变换(循环倒换(loop reversal )、排列(Permutation)、排队(queuing))等现有才支术。另外,在不能应用循环并行处理的循环中,应用近细粒度并行处理或者将 循环的主体部分层地分割成宏任务的粗粒度任务并行处理。在分配给处理器集群的宏任务是伪赋值语句块、或者是循环并行化和分层 的宏数据流程处理都无法应用的循环块的情况下,将伪赋值语句块内的语句或 者命令作为近细粒度任务在处理器集群内的处理器中并行进行处理。在多处理器系统的近细粒度并行处理中,将近细粒度任务调度到处理器中实现高效率的并行处理。另外,在该近细粒度并行处理中所要求的调度中,由 于在近细粒度任务之间存在基于数据依存的执行顺序的限制,因此,任务的执 行顺序成问题。将这样生成的近细粒度任务图表静态地调度到各处理器中。此时,作为调 度算法,为了考虑数据转发系统开销而使执行时间最小.,使用公知的试探 (heuristics)算法(CP/DT/MISF法,CP/ETF/MISF法、ETF/CP法、或者DT/CP 法)来确定最佳的调度。在调度结束后,编译器按顺序排列分配给处理器核心的任务的命令列,并 将数据转发命令或同步命令插入到必要的地方,由此,生成各处理器用的机器 代码。此时,所插入的数据转发命令根据宏任务之间的控制依存和数据依存, 来确定在局部存储器6中保存数据和从局部存储器26中清除数据的定时。在近细粒度任务之间的同步中可以使用版本号(version number)法通过 接收侧处理器核心的忙等待(busywait)来进行同步标记的接收。这里,数据16转发指示以及同步标记的设定可以通过由发送侧的处理器直接写入到接收侧的处理器核心16上的分散共享存储器22上来以较低的系统开销进行。 <局部存储器管理>图4是说明本发明的实施方式的局部存储器管理的概要的图。程序一般通过子程序和多重循环而划分为多层。于是,考虑在程序的执行 时将所需要的数据在哪个定时转发是非常重要的,例如,在循环中,可以在循 环的前后转发数据。具体来说,在循环的执行前将数据转发到局部存储器,在 循环的执行后将数据从局部存储器进行转发。然后,在循环内将数据装载于局 部存储器的状态下,以能够执行循环的方式配置数据即可。这样,将在数据装 载于局部存储器的状态下可执行的程序的单位称为"局部存储器管理宏任务"。即,在局部存储器管理宏任务中处理的数据一定是装载于局部存储器上的 大小的数据。另夕卜,局部存储器管理宏任务的执行所需要的数据在局部存储器 管理宏任务的执行前或者执行后的适当的定时转发(装载、存储)。另外,将 局部存储器管理宏任务决定成在任务内不会产生数据的转发。而且,关于无法将所需要的全部数据装载到局部存储器上的循环,在该循 环中,将使用的所有数据装载到局部存储器上的部分定义为局部存储器管理宏 任务。即,将程序分割成将所需要的全部数据装载到局部存储器上,并决定局 部存储器管理宏任务。这样决定局部存储器管理宏任务后,将局部存储器管理 宏任务的执行所需的数据在宏任务的执行前后进行转发(装载到局部存储器、 从局部存储器存储到集中共享存储器)。因此,在宏任务内,不产生数据的转 发。以上对循环进行了说明,而程序中的基本块以及子程序也是相同的。另外,对于子程序存在后述的例外情况。另外,在本说明书中,对局部存储器的管理进行说明,但是只要是容量有 限(存储容量小于使用的数据)的存储器,都能够应用本发明。例如除了局部 存储器26之外,处理器核心16内的分散共享存储器22、芯片内(on-chip) 的集中共享存储器28以及芯片外(off-chip)的集中共享存储器14也能够应 用本发明。参照图4对分割以上所说明的程序并生成局部存储器 理宏任务的方法进行说明。假定在局部存储器上装载有1000个数组变量的要素。另夕卜,如图4所示,该程序包含基于变量i、 j的双重循环。在循环中,数组变量A[l:30,l:20]使用 600要素,数组变量B[1:30]使用30要素,数组变量C[l:30,l:20]使用600要素, 合计在该循环中使用1230个数组要素。于是,无法将所有的数据装载到局部 存储器来执行该循环。因此,本发明的实施方式的编译器将变量i的循环分割为i=l~10以及 i-ll 20两个循环,这时,在各循环中访问的数据变成630要素,因此,能够 在将所有数据装载于局部存储器的情况下将循环从最开始执行到最后。该分割 后的循环是局部存储器管理宏任务。并且,在该宏任务执行前后装载和存储需 要的数据。也可以不是在宏任务的即将执行之前执行数据向局部存储器的转发(装 载),而是考虑到其他数据向块的分配而在更靠前的时刻执行。将像这样在到 开始执行使用数组变量(数据)的宏任务之前为止的任意定时把该宏任务中使 用的数组变量装载到存储器中称为"预装载(preload)"。该预装载即使是在其 他宏任务的执行过程中,只要应该装载该数据的块为空,就能够通过DMA来 转发数据。这样,根据块的空闲状态,即使是宏任务的执行前也能够装载数据, 能够在程序执行前准备数据。因此,能够削减由于需要的数据没有装载于存储 器而导致的处理器等待的时间。(存储),而是考虑到其他数据向块的分配而在更靠后的时刻执行。将像这样 在使用数组变量(数据)的宏任务结束后的任意定时把该宏任务中使用的数组 变量装载到存储器中称为"后存储(poststore)"。该后存储即使是在其他宏任 务的执行过程中,也能够通过DMA将数据从局部存^fr者器中转发到集中共享存 储器中。这样,通过在任意的定时存储数据,能够避免DMA的负荷集中于宏 任务的执行前后。下面,对上述子程序中的例外进行说明。如上所述, 一般在局部存储器管理宏任务内不会发生数据的转发。但是, 在子程序为局部存储器管理宏任务的情况下,以及,在内部调用子程序的循环为局部存储器管理宏任务的情况两种情况下,在子程序内需要转发(装载和/ 或存储)数据。具体来说,在子程序的开始时,装载子程序调用源中使用的数组变量。例如,当使用FORTRAN中的保存、共有(common)以及数据变量、C语言中 的静态变量以及全局变量时,这些变量在调用源中无法进行管理。于是,需要 在宏任务内的子程序的处理结束后将使用的变量转发到共享存储器中。在子程 序结束时,如果不将变量从局部存储器中读出并写入到共享存储器中,则无法 获取数据的匹配性。另外,宏任务通过一个物理处理器来执行,因此,即使在 宏任务内装载和存储数据,也可以保证正确的值。 <存储区域的分割>图5是说明本发明的实施方式的存储器的存储区域的分割状态的图。 在本发明中,成为存储区域的管理对象的存储器是局部存储器以及分散共 享存储器。这些管理对象存储器的存储区域被分割成多个块(还包括子块等) 101~104。图5表示将局部存储器的存储区域分割而得的块。块101是将局部存储器 的存储区域分割成2的幂数分之一 (图示的状态为八分之一 )的固定程度的区 域。另外,块4~7被分割成块大小的一半的子块(subblock) 8-15 (102)。 而且,子块12~15被分割成子块大小的一半的子子块(subsubblock) 24-31(103)。而且,子子块28~31被分割成子子块大小的一半的子子子块(subsubsubblock) 56 ~ 63 ( 104 )。块101、子块102、子子块103以及子子子块104被独立地进行管理。编 译器能够在存储器的各地址空间中设定任意大小的块。编译器根据被编译的程 序来设定适当大小的块等。即,在处理大的数据的程序中,准备大尺寸的块, 在处理小数据的程序中准备小尺寸的块,由此,能够无浪费且高效率地使用局 部存储器。另外,为了使块的管理容易,对子块等也从存储区域的开头地址赋予序列 号。因此,通过一个地址表示的区域包含在多个块、子块中。例如,块0、子 块0~1、子子块0~3、以及子子子块0~7表示相同的存储器空间(地址0~ 127)。这样,通过将多种块设定为存储器空间的相同地址,能够将存储器管理成随时使用适当种类的块等。这样设定的子块的大小为块的大小的1/2,子子块的大小为块的大小的1/4,子子子块的大小为块的大小的1/8。即,存储器的存储区域被分割成大小 为2的幂数的关系(相邻的大小的块为2倍的关系)的多个大小的块,分割出 的多个大小的块被作为存储区域提供。另外,块大小根据编译器编译程序时获取的程序的信息来决定,因此,在 从程序执行开始到结束为止期间内不发生变更。但是,当编译器编译别的程序 时,块的数量以及大小是不同的,以适应编译对象的程序的特性。即,成为本 发明的局部存储器的存储区域的管理单位的块不是完全固定的大小,根据编译 器解析程序而获得的信息,能够决定与在程序中使用的数据大小最适合的块大 小。块大小在程序内是固定的,但是根据每个程序选择最佳的块大小。另外,也可以在程序执行过程中改变块大小。具体来说,在到程序的某步 骤为止使用较大的数组数据,而在某步骤以后使用较小的标量数据( 一维变量) 时,也可以在数组数据的使用结束时分割块来形成子块。另夕卜,通过改变模板 的分配,能够变更装载在块中的数组变量的大小。模板向块的的分配将在后面 叙述。在本发明中,将块大小决定成使得在一个局部存储器管理宏任务中使用的 所有数据能够保存在一个块中。换言之,根据块的大小来确定局部存储器管理 宏任务的大小。另外,关于在所确定的块大小存取数据的定时,之后根据宏任 务的执行定时由调度程序确定。这样,通过将局部存储器的存储区域分割成多个大小的块,在与局部存储 器管理宏任务中使用的数据最相适合的大小的块中装载需要的数插。另夕卜,通 过以固定大小的区域管理局部存储器的存储区域,能够避免以可变大小的区域 进行管理时的产生的碎片化(fragmentation)的问题。在图4所示的分割后的循环的示例中,数组变量A收纳在局部存储器的 一个块中。并且,数组变量B收纳在一个子块中。换言之,块的大小由编译 器根据程序的性质决定。更具体来说,以数组变量A收纳在局部存储器的一 个块中的方式来决定块大小并分割循环。并且,通常块的大小从编译对象的程 序的开始时到结束时为止是不变的。20<数据的装载以及存储>接下来,对数据向块中的写入(装载)、读出(存储)以及块的分配进行 说明。在如图5所示的分割了存储区域的存储器中,装载局部存储器管理宏任务 中使用的数据。首先,调度程序决定装载数据的存储器是局部存储器还是分散 共享存储器。此时,将由多个处理器核心共享的数据装载到分散共享存储器中 即可。接下来,调度器在存在已经装载了需要的数据的块的情况下,直接使用在 该块中装载的数据。另一方面,在需要的数据没有装载在任何一个块中的情况 下,将空的块分配给该要装载的数据,将需要的数据装载到所分配的块中。另外,如果没有空的块,则从局部存储器26中读出清除优先度最高的数据,并 写入到集中共享存储器28或者14中,将所需要的数据装载到成为了空闲块的 存储区域中。图6是说明本发明的实施方式的存储器的清除优先度的图,横轴表示时间 的经过。在本发明的实施方式中,清除优先度按照以下顺序确定。1) 以后不访问的数据。2) 通过其他处理器访问,^f旦是自身的处理器不访问的数据。3) 自身的处理器会再次使用,但是在靠后的时间使用的数据。4) 在自身处理器中马上使用的数据。以后不访问的数据例如是新再次计算出来的变量。这种已经死掉的变量不 需要留下,因此,清除优先度最高。通过其他处理器访问、但是自身的处理器 今后不再访问的数据转发到需要该数据的处理器核心16的分散共享存储器22 中即可,因此,清除优先度第二高。虽然通过其他处理器访问的数据立即转发 到分散共享存储器22即可,但是根据其他处理器核心16的存储器的状况,在无法马上转发的情况下,稍微使时间错开后转发到分散共享存储器22,或者 转发到集中共享存储器28或14。这样,为了使从局部存储器26转发数据的 定时具有自由度,将清除优先度比不访问的数据设定得低。最后,对于通过自身处理器再次访问的凝:据,才艮据到下一次使用为止的时间来确定优先度。使用该数据的时间越靠后,清除优先度越高,使即将使用的 数据的清除优先度低,尽量将其以装载在存储器中的状态下保留。参照图6随着时间的经过对存储器的清除优先度进行说明。在图6中,当前,在处理器核心0 (PC0)中执行的局部存储器管理宏任务中,考虑将数组 变量A、 B、 C以及D装载在局部存^f渚器中的状态(1001)。在该局部存储器管理宏任务中,开始,通过处理器核心0 (PC0)定义数 组变量A(DefA),并使用数组变量(A) ( 1002)。接下来,在处理器核心1 (PC1)中,定义别的数组变量A( 1003 )。这时, 装载在PCO的局部存储器中的数组变量A已经改变,因此今后不会再访问。 因此,其清除优先度最高。这是因为,与高速緩冲存储器的连贯性(coherence) 控制一样,无法取得一致性的数据被判断为不需要的数据。接下来,研究后面应该执行的宏任务。数组变量B由其他的处理器(PC1 ) 使用(1004)。数组变量C和D由自身的处理器(PCO)使用(1005、 1006)。 因此,数组变量B的清除优先度比数组变量C和D的清除优先度高。对数组变量C和数组变量D进行比较,数组变量D比数组变量C先使用。 因此,数组变量C的清除优先度比数组变量D的清除优先度高。另外,数组 变量C和D在以后利用,因此,临时写回到集中共享存储器CSM中,在下一 次需要时进行装载即可。因此,清除优先度为A、 B、 C、 D的顺序。图7是说明本发明的实施方式的存储器中装载的变量的推移的图。 图7表示在一个处理器核心上,在一个层执行包含两个局部存储器管理宏 任务(MT1、 MT2)的程序的情况下,程序执行开始前的存储器状态、宏任务 (MT1 )的执行结束时的存储器状态、宏任务(MT2)的执行开始时的存储器 状态、以及宏任务(MT2)的执行结束时的存储器状态。另外,局部存储器的 存储区域如图5所示那样分割。在宏任务(MT1 )的执行开始前,所有的存储器的存储区域(块)为空的 状态(1011 )。然后,在宏任务1的开始时,对宏任务1中需要的数据(数组 变量A、 B、 C、 D、 E、 F)分配块,各数组变量被装载到存储器中。然后, 开始基于宏任务l的处理。具体来说,根据声明语句(declaration statement)def A将数组变量A分配给块O。同样地,将数组变量B分配给块l,将数组 变量C分配给块2,将数组变量D分配该块3,将数组变量E分配给块8,将 数组变量F分配块9。在宏任务l的执行结束时,将各数组变量装载到块中(1012)。 在宏任务2 (MT2)的执行开始时,需要使在宏任务2中使用的所有数据 都装载在存储器中。在宏任务2中,使用数组变量A、 B、 C、 G、 E、 H、 I 以及J,因此需要四个块和四个子块。需要的数组变量中的数组变量A、 B、 C 和E由于已经装载在局部存储器中,因此,在宏任务2的执行时应该新装载 的数组变量为数组变量G、 H、 I和J。其中,数组变量H在宏任务2的执行 开始前装载在子块10中。并且,子块ll是空的。因此,在宏任务2的执行开 始的阶段,需要空出一个块和一个子块。所以,为了确保装载所需要数据的块,按照清除优先度将数组变量D从 块3中清除,将数组变量F从子块9中清除。由此,确保了一个空的块和一个 空的子块(1014)。因此,在宏任务l的执行结束后,在宏任务2的执行前,需要将数组变量 D和F转发到集中共享存储器,以及将数组变量H转发到局部存储器(1013 )。在宏任务2的执行开始前,数组变量G被分配给块3,数组变量I被分配 给子块9,数组变量J被分配给块ll。然后,执行宏任务2,在宏任务2中使 用数组变量G、 I和J ( 1014)。这样,根据所述的优先度从存储器将数据存储到分散共享存储器或者集中 共享存储器,因此,与以往的LRU不同,能够使存储器的利用最佳,能够减 少存储器间的数据转发。即,根据以往的LRU,最近不使用但是有可能马上 使用的数据也从存储器转发出去。但是,如本发明那样,根据编译器获取的信 息,可知该数据下一次使用的定时,能够使存储器最优地使用。 <循环的分割>接下来,参照图8到图ll对循环的分割步骤的具体示例进行说明。 循环的分割是纵观多个循环进行匹配分割。解析在多重化的循环中访问的 最广范围,作为全局索引范围(globe index range )。即,由于具有访 局部存 储器即可的范围和必须与相邻的处理器进行通信的范围,因此,解析数据的访问范围,对其进行划分。因此,解析程序的结构、选择目标循环组(targetloop group )。在本实施方式中,与用于连续地执行基于以往的编译器的并行的循环 的解析不同,解析在多个循环的范围内如何访问存^f渚器。 这里,两个循环匹配是指满足以下所有条件。1 )各循环是Doall循环、Reduction循环、以及基于循环传递(loop-carried ) 数据依存(递归)的S叫uectial循环中的某一个。2) 在循环之间存在数组变量的数据依存。3) 各循环的循环控制变量在同一数组的相同维数的索引式中使用,维数 的数组索引用循环控制变量的一次式表示。4) 对于将数据依存导向循环之间的各数组,数组索引中的循环控制变量 系数的循环之间的比是固定的。此时,没有选择的单一的循环也全部作为目标循环组,容许目标循环组的 嵌套,还选择包括间接参照的循环。即,在被选为目标循环组的循环的内侧也 存在循环的情况下,对于内侧的循环也生成目标循环组。并且,关于无法与其 他循环匹配的循环,《义在该循环中生成目标循环组。所谓目标循环组,是在宏任务上能够应用循环匹配分割的重复块(RB) 的集合,是在宏任务标记上具有直接数据依存在先、后续关系的重复块的集合。 这是因为,执行时的花费(存储器以及处理器等资源的消耗)大的重复块和在 该重复块上具有直接数据依存在先、后续关系的重复块处理大的数据,所以分 割的效果高。由此,当在循环之间使用相同数据时,循环使用相同的区域,能 够防止高速緩沖错误。具体来说,在图8所示的程序中,基于变量i的两个循环为TLG1,各TLG1 内的基于变量j的循环为TLG1-1和TLGl-2。并且,TLG1-1内的基于变量k 的循环为TLG1-1-1, TLG1-1内的基于变量k的循环为TLGl-l-2。接下来,如图9所示,生成TLG集合。在TLG满足以下的所有生成条件 的情况下生成TLG集合。1 )具有至少一个以上共享数组(还考虑依存关系)。2) 共享数组的匹配维数全部一致。3) 在跨子程序的情况下,共享数组的形状一致。24下面如图10所示生成分割候补TLG集合。这是在具有成为嵌套的TLG 的情况下选择花费最大的TLG集合,将所选择的TLG集合作为分割候补。然 后,针对每个分割候补TLG集合计算GIR。这样,能够覆盖程序中的所有的 编码。具体来说,TLG集合l成为分割候补TLG集合l, GIR为[1:30]。接下来,确定分割基准区域。分割基准区域是必须收纳在各TLG集合中 使用的数据的存储区域。具体来说,计算在分割候补TLG集合中使用的数据 大小的比。这里,有三个分割候补TLG,若在集合1中使用的数据大小为300k, 在集合2中使用的数据大小为200k,集合3中使用的数据大小为100k,则数 据大小的比为3:2:1。根据该比,将最小存储器区域(局部存储器和分散共享存储器中的容量小 的一方)分配给各分割候补TLG集合。具体来说,将分割候补TLG集合分割 成使在分割候补TLG集合中使用的数据收纳在比最小存储器区域要小的区域 中。另外,实际上,此时在除了所分配的区域以外的区域中也能够装载在分割 候补TLG集合中使用的数据,但是,作为分割用的粗略估计,进行这样的处 理。由此,能够将在分割后的分割候补TLG集合中使用的数据同时装载到局 部存储器中。另外,实际上是否将数据装载到存储器中由调度以及存储器管理 例程(routine)确定。下面确定块大小。首先,将花费最大的分割候补TLG集合作为决定块大小的基准。其中, 在需要多重分割的情况下,在分割候补TLG集合中采用最大分割数。这里, 所谓最大分割数,是在考虑到了分配的处理器循环(PG)内的处理器核心(PC ) 的结构以及基于并行处理的系统开销的情况下的最大分割数。CPU的数量为 一个时,最大分割数为循环的迭代数。以后,需要多重分割的TLG集合不选 择为分割候补TLG集合。然后再次生成分割候补TLG集合。具体来说,如图11所示,由于TLG集合1以最大分割数被分割,因此, 下一 TLG集合2被选为分割候补TLG集合。成为了分割候补的TLG集合2 的GIR为[1:20]。下面,对块大小的决定步骤进行说明。首先,执行块大小确定前处理。计算使被成为基准的分割候补TLG集合访问的数据成为比分割基准区域要小的大小的分割数。这里,仅考虑要访问的 数据大小,对于间接参照的数据的访问不予考虑。分割数选择成处理器组的数量的整数倍。利用所求出的分割数对TLG集合内的各循环试行分割。具体来说,在最外循环(i的循环)试行4分割。被访问的数组变量A和B的大小为[k,j,ih[l:30,l:20,l:3]。总数据大小为30 x 20 x 3 x 2 = 3600。 接下来,确定块大小。根据分割后的数组访问范围,生成TLG集令中的所有局部数组的模板, 将生成的模板的大小作为临时块大小。模板的生成的详细情况将在后文叙述。 这里,也不考虑间接参照的数组数据的访问。在模板的生成失败的情况下,增 大分割数,从块大小确定前处理开始重新进行。使用所确定的临时块大小,判断能否分配给各分割基准区域。在该步骤中, 在间接地参照了数据的情况下,关于下一维数,使用数组的声明大小来判定。 在间接参照的数组没有收纳在块中的情况下,可以决定放置到共享存储器中。在TLG集合中使用的数据能够分配成临时块大小时,采用生成模板时的 分割数(即,不进一步分割)。然后,将临时块大小确定为块大小。另一方面,当在TLG集合中使用的数据无法分配成临时块大小时,增大 分割数,从块大小确定前处理开始重新进行。另外,在即使用最大分割数也无 法分配的情况下,采用最大分割数,以后,无法分配的TLG集合不会被选为 分割候补TLG集合。然后再次生成分割候补TLG集合。接下来,确定分割数。针对每个分割候补TLG集合,根据先前确定的块大小,计算通过分割基 准区域确定而确定的区域中能够确保几个块,求出能够分配的分割数。其结果 为,在某一分割候补TLG集合的分配失败的时候,再次生成分割候补TLG集 合。此时,无法分配的分割候补TLG集合采用最大分割数,以后,无法分割 的TLG集合不会被选为分割候补TLG集合,块大小不再计算。从局部存储器 的大小减去已经确定了分割数的分割候补TLG集合的数据大小,根据还剩下 的分割候补TLG集合的数据大小的比,再次分配TLG集合。然后,将确定了分割数的分割候补TLG集合内的各循环作为局部存储器管理宏任务候补。具体来说,考虑在TLG集合1中使用的数据大小为300k,在TLG集合2 中使用的数据大小为200k,在TLG集合3中使用的数据大小为100k的示例。 设能够以TLG集合1为基准确定块大小。在即使用最大分割数分配TLG集合 2也失败的情况下,当在TLG集合2中有TLG集合4、 TLG集合5以及TLG 集合6时,将它们加到下一分割候补TLG集合中。在确定了使所有的数据都能够配置在局部存储器中的循环的分割数的情 况下,为了将数据分配给局部存储器,预先存储假定哪个数据用哪个模式访问、 以及哪个数据使用多大的块等进行分割的信息。接下来,进行宏任务的分割以及循环的重建。这里进行的处理使宏任务的 分割、循环分配、循环融合(loopflision)以及循环的重建。这里,所谓循环分配(Loop distribution),具体来说将在图14和图15中 叙述,但是其是在进行多重分割时用于循环使用数据的处理。所谓循环融合是 用于循环使用寄存器的处理。并且,在循环的重建(Loop restructuring)之后,从外侧层的循环起依次 寻找分割数已经确定的宏任务,并将发现的宏任务作为局部存储器管理宏任 务。在设定成局部存储器管理宏任务的宏任务的内侧不进行宏任务的寻找。 <^莫纟反的生成>接下来说明模板的生成步骤。在本实施方式中,所谓模板是将数组变量分配给局部存储器的单位。编译 器对应程序访问数据的模式来准备模板。所提供的模板的大小与块或者子块的 大小相同。此外,按维数(1维数组、2维数组、3维数组......)来准备模板,才莫;〖反的大小为^皮程序访问的大小以上的大小。在使用块来管理局部存储器的情况下,需要向同一地址区域的块载入各种 数据(形状、维数不同的数组等)。即,即使数据大小是收纳在块中的大小, 也可以是声明为1维数的标壹变量、或2维数、3维数的数组变量的情况。此 外,还存在是相同维数的数据但各维数的大小不相同的情况。为了将这些装载 到相同地址空间的块中,将所有的数据变换成1维数据从而可以使其与存储器 地址相一致。但是,在数组变量的情况下,需要索引变换,成为与用户写入的程序不同。若进行这样的索引变换,则程序变得难以理解,难以进行程序调试(debugger),并行性的解析变得难以理解。因此,为了在保持程序的可读性的情况下管理局部存储器,而使用和块等 的大小相同大小的模板。所谓模板是存储数组变量的模板。通过在模板中存储 所需要的数据可以实现向局部存储器上的任意块装载数据。 通过以下步骤来生成模板。首先,关于TLG集合内的所有数组,求出比各维数的访问大小大、并且 最小的2的幂数。然后,生成求出各维数后的大小的临时模板。在上述例子中,用最外的变量i的循环来试行4分割。例如,如果分割成 i=l~3、 4~6、 7~8、 9 10四个循环,则得到转3圈的两个循环、转2圈的 两个循环。分割后的循环内的数组变量A和B的访问大小都是[k, j, i] = [1:30, 1: 20, 1:3]。此外,第3维数选择循环圈数中较大的一方,为3圈。接下来,计算临时模板的大小。由于模板的各维数为比数组变量的各维数 的大小大的2的幂数,所以模板大小成为32 x 32 x4-4k要素。然后,将最大 的临时模板的大小作为块大小。在前述的例子中,块大小成为4k要素。然后,将分割基准区域大小除以块大小并求出商(分割基准区域大小/块 大小)。在所求出的商为1以上时,通过舍弃按除法运算而求出的商的小数点 以下,来求出能够准备的块数(Block—num)。另一方面,在所求出的商不足l 时,由于在该模板大小中一个块也不能生成,所以判断为才莫板的生成失败。此外,将块大小除以各模板的大小(块大小/各模板的大小),将其商作为 子块的数量。在前述的例子中,由于要分割的局部存储器区域为12k要素,所以应该准 备的块数求出为12k/4k-3个。最终,准备4k要素大小的3个模板[1:32, 1:32, 1:4, 0:2]。由于决定了模板大小和模板数量,所以循环的分割数确定为4。即,在该处理中,观察程序整体来决定最合适的块大小。由此,决定用于 将在宏任务中使用的数据(工作组)装载到局部存储器的程序的分割数。然后, 将分割数选择为比分割后的数据大小大的块大小。 <局部存储器管理宏任务的决定例1>接下来,参照图12~13来说明块大小的决定步骤的其它具体例子。为了决定块大小,首先解析在循环内要访问的数据,生成2的幂的大小的 模板。在本例中,假设局部存储器的大小(除标志区域外)为2kB,各数组要素 的大小为4B/要素,不考虑分散共享存储器的存在。 首先,考虑用最大分割数来分割最外循环的情况。如图12所示,有基于变量i的最外循环1020,在循环1020中基于变量j 的内侧循环1021。以及在循环1021中基于变量k的最内循环1022这样的3 重循环构造。具体而言,在不考虑循环分割的情况下,最内循环1022中使用的数组变 量A、 B以及C的大小为[k, j, i] = [l:10, 1:10, 1:10]。通过前述的步骤来生 成临时模板。所生成的临时模板的大小为[k, j, i] = [l:16, 1:16, 1:16]。该临 时模板所需要的块大小为16x I6x 16x4= 16kB。由于局部存储器的大小为 2kB,所以一个块也无法准备。因此,考虑分割最外循环1020。如图13所示,用最大分割数来分割(IO分割)最外循环(变量i) 1020。 最大分割数为循环的迭代数。此外,在即使将外侧循环分割到极限也无法确保 所需要的块数时,考虑分割内侧的循环。此时,在最内循环1022中使用的数组变量A、 B和C的大小为[k, j, i] =[1:10, 1:10, l:l]。通过前述的步骤而生成的临时模板的大小为[k,j,i]-[l:16, 1:16, l:l]。该临时才莫板所需要的块大小为16x 16x l x4-lkB。由于局部存 储器的大小为2kB,所以能够准备的块数为分割基准区域大小(2kB)/块大小 (lkB) =2个。由于在该循环中使用3个数组变量,所以在该状态下无法确 保所需要的块。因此,接下来考虑分割内侧循环1021。在将内侧循环1021分割成2份(2等分)时,在最内循环1022中使用的 数组变量A、 B和C的大小为[k, j, i]-[l:10, 1:5, l:l]。通过前述的步骤而 生成的临时模板的大小为[k, j, i] = [l:16, 1:8, l:l]。该临时模板所需要的块 大小为16x8x 1 x4 = 512B。由于局部存储器的大小为2kB,所以通过分割基 准区域大小(2kB) /块大小(512B)求出能够准备的块数,能够准备的块数 为4个。由此,因为能够确保分割在该循环中使用的3个数组变量的块,所以决定块的大小以及个数。生成的^^板为[1:16, 1:8, 1:1, 0:3]。
然后,将内侧循环1021分成j-1:5、」=6:10的循环成为局部存储器管理
宏任务。
同样地分割循环1030、 1031。
这样,在分割外侧循环失败时,通过在内侧(其它维数)循环中也进行分 割(多维数分割)可以决定适合于局部存储器大小的局部存储器管理宏任务。 <局部存储器管理宏任务的决定例2> ,
接下来参照图14~ 15来说明局部存储器管理宏任务的生成的其它具体例子。
本例中与上述例子一样,假设局部存储器的大小(除标志区域外)为2kB, 各数组要素的大小为4B/要素,不考虑分散共享存储器的存在。
如图14所示该程序具有基于变量i、 j、 k的三重循环。基于变量i的最外 循环1041内含有内侧循环1042 (j = 1:10)和内侧循环1043 (j = 11:20)。同样 地,在基于变量i的最外循环1051内含有内侧循环1052 (j = l:10)和内侧循 环薦(j = 11:20)。
在循环1041后执行循环1051。此外,循环1042和循环1052使用相同的 数据(数组变量A[1:30, 1:10, l:l]和数组变量B[l:30, 1:10, l:l]),循环1043 和循环1053使用相同的数据(数组变量A[1:30, 11:20, l:l]和数组变量B[l:30, 11:20, 1:1])。
但是,在该程序中由于按照循环1042、循环1043、循环1052、循环1053 的顺序来执行,所以无法在将数据装载到局部存储器的情况下来循环使用相同 数据。因此,如图15所示,将最外循环1041分割成内侧循环1042 (j = 1:10) 和内侧循环1043 (j = 11:20)。同样地,将最外循环1051分割成内侧循环1052 (j = l:10)和内侧循环1053 (j = 11:20)。
通过该分割,能够按顺序执行分割后的最外循环1041A和最外循环1051A (即,按顺序执行内侧循环1042和内侧循环1052)。因此,能够在循环1052 中直接使用在循环1042中所使用的数组数据。即,在循环1041A的执行结束 时和循环1051A的执行开始时之间,不产生数据(数组变量)的转发。
同样地,能够按顺序执行分割后的最外循环1041B和最外循环1051B(即,
30按顺序执行内侧循环1043和内侧循环1053 )。因此,能够在循环1053中直接 使用在循环1043中所使用的数组数据。即,在循环1041B的执行结束时和循 环1051B的执行开始时之间,不产生数据(数组变量)的转发。
这样,在程序的执行顺序和该程序中使用的数据不匹配时,通过执行循环 分配,连续地执行处理相同数据的循环。由此,可以在循环执行时不产生数据 的转发。
<^莫板的生成步骤的例子>
图16表示本发明的实施方式的模板的生成步骤的例子。
模板(template)是为了在宏任务上处理局部存储器而对局部存储器分配
数组变量的单位。
模板准备有1维数组、2维数组、3维数组......等,其形式根据在宏任务
中使用的数组变量而有多种形式。例如,在设为2维数组时,准备有数组变量 的各索引最大值相等的正方形、索引最大值不同的长方形(纵长、横长),以 便与在宏任务中使用的数组变量的大小相匹配。
模板的大小大于局部存储器管理宏任务中使用的数据大小。进而,模板的 各维数的索引的最大值大于局部存储器管理宏任务中使用的数组变量的各维 数的索引的最大值,并且选择最小的2的幂数。因此,即使模板的形式改变, 模板的大小也与块以及子块等中的某一个的大小相等。
由此,模板的大小成为与块大小相等或者块大小的2的幂大小分之一。由 此,生成收纳数据的最小大小的模板,并将程序(循环)分割成在这样生成的 模板中收纳数据。并且,当对局部存储器分配数组变量时,能够分配成相同大 小的块等,可以没有浪费地使用局部存储器的存储容量。
通过使用分配后的模板,分配给块O的模板使用块O的存储器空间,分配 给块1的模板使用块1的存储器空间。
准备块数个形状相同的模板。然后,根据块序号改变要使用的模板数组。 为此,所准备的模板就成为实际上生成并列了多个相同模板的形态(装载数据 而使用的数组变量的维数+ 1维数)的模板。新生成的维数为块指定用的维数, 要素数量为块数。
即,模板的维数比数组变量的维数大l维数。这是由于,通过模板的追加后的维数的索引值,来切换多个数组变量,改变要访问的块。此外,对局部存 储器的不同块分配(不同的地址)分配各模板。当数组变量的形状以及大小相 同时,可以使用相同模板。例如,分割成等分的模板,由于使用相同的形状以 及大小的数组变量,所以准备这样的模板是有效的。
例如,在块数为8个、各个块的大小为[1:2,1:16,1:4]的情况下,将 tempA[l:2,l:16,l:4,0:7]的模板分配给局部存储器。此外,在这时候,在程序中 出现的数组变量为5个的情况下,作为tempA[l:2,l:16,l:4,0:4],仅对块0到4 分配模板。其它块可以进一步分割后作为子块来利用。
图17表示模板被映射后的局部存储器的状态。
在模板的映射中,例如在FORTRAN中,使用EQUIVALENCE语句。具 体而言,通过声明为EQUIVALENCE(LM(l),tempA(l,l,l,O)),可以将模板A 分配给局部存储器的块O。
模板A是3维数组用的模板,各维数是tempA[l:2,l:16,l:4,0:7]。因此, 对块0 (地址0~127)分配tempA[l,l,l,O],对块1 (地址128-255)分配 tempA[l,l,l,l]。
即,如上所述,模板的最外侧的第4维数不是模板自身的维数,而是表示 模板被分配的块序号。
若更具体地举例,则通过执行 do dim3 = 1 , 4 dodim2=l, 16 do diml = 1 , 2
tempA (diml, dim2, dim3, 2) -GA(diml, dim2, dim3) enddo enddo enddo
将数组变量GA的数据存储在局部存储器的块2中。 图18表示其它模板被映射后的局部存储器的状态。 与上述例子不同,在程序中表示出现的数組大小为[1:2,1:8,1:4]的情况下, 将适合于子块大小的模板temp—subA[l:2,l:8,l:4,0:15]分配给局部存储器。这样,通过最外侧的要素值可以改变要访问的子块。
与上述 一 样地使用 EQUIVALENCE , 通过声明为 EQUIVALENCE(LM(l),temp—subA(l,l,l,O)),可以将模板(子块)A分配给局 部存储器的子块0。
模板A是3维数组用的模板,其大小为temp—subA[l:2,l:8,l:4,0:15]。因 此,.对子块0 (地址0 ~ 63 )分配temp_subA [l,l,l,O],对子块1 (地址64 ~ 127 ) 分配temp—subA [1,1,1 ,l]。
若更具体地举例,则通过执行
do dim3 = 1 , 4 do dim2 =1,8 do diml = 1, 2
temp—sub A (dim 1, diml, dim3, 4) FGA(diml, dim2, dim3 ) enddo enddo enddo
将数组变量GA的数据存储在局部存储器的子块4中。 这样,根据由编译器解析程序而取得的信息,确定在程序中使用的数组变 量的形式来生成模板,并决定对哪个模板分配该变量。由此,可以将存储器的 1维数的地址空间看作多维数,并能够将程序中使用过的多维数组以原有的形 式分配给存储器。
使用了模板数组的编码图像(code image )的生成
接下来,参照图19到图34来说明使用了模板数组的编码图像的生成的具 体例子。图19到图34的说明表示,在将局部存储器大小分割为1024、设块 大小为128、将局部存储器的区域分割为4个块101、 4个子块102、 4个子子 块103、 8个子子子块104的情况下,编译器改写编码的情形以及程序执行时 的局部存储器的状态。
图19表示编译前的原始编码以及局部存储器的状态(状态1)。在该原始 编码中包含三个循环以及两个子程序调用,这些循环以及子程序调用为局部存 储器管理宏任务。图20表示将模板设定成块等的状态(状态2 )。定义LM区域以及模板数 组,通过EQUIVALENCE语句将模板分配给局部存储器的地址空间。通过该 分配,局部存储器和模板指示相同的区域。并且,通过改变模板的索引(0~7) 来改变对应的区域。此外,通过模板数组来进行声明,但由于tempi (1, 4) 以后为被分配给子块等的区域,所以不作为块来使用。
具体而言,将以下语句插入到程序中。 -
Integer a (128), b(128), c ( 128 ), d(128), e ( 128 )
Integer LM ( 1024)
Integer tempi ( 128, 0:7)
EQUIVALENCE (LM, tempi)
由此,将冲莫板分配给局部存储器。
图21表示变换成模板数组的状态(状态3)。将想要装载到局部存储器中 来使用的数组变换成新定义的模板数组。通过使原始编码中的数组为模板数 组,来使用局部存储器。通过改变用于指定块的维数的值(索引),可以改变 要使用的块(局部存储器的地址)。
具体而言,将原始编码中的数组名a (i), b (i), c (i)改写成tempi (i, 0), tempi (i, 1 ), tempi (i, 2)。
图22表示从块中清除数据的状态(状态4)。在第二个宏任务中,由于使 用四个数组b、 c、 d以及e所以需要四个块。在第一个宏任务结束的时刻,在 没有空出接下来要执行的宏任务中所需要的块数的情况下,按照清除优先度空 出所需数量的块。具体而言,三个数组a、 b以及c被装载在局部存储器上, 但数组b和c继续被使用。因此,为了装载数组e而将数组a清除。要清除的 块中所存储的数据被转发到集中共享存储器28或14。由此,将在模板数组中 所存储的数据转发到集中共享存储器28或14的数组的命令被插入到原始编码 中。
图23表示变换成模板数组的状态(状态5 )。与状态3 (图21 )所示的状 态相同,将想要装载到局部存储器中来使用的数组变换成新定义后的模板数 组。将数组a从块0中清除,存储数组d。
图24表示解析子程序的状态(状态6 )。解析子程序的自变量和子程序内的处理所需要的块数。在图示的例子中,在子程序SUbl中使用自变量数组X
和作为自动变量的数组y。即,自变量用需要一个块,内部处理用需要一个块。
总计需妾两个块。
图25表示变换成在子程序内使用了块指定变量的模板数组的状态(状态 7)。这里,如上所述,由于有可能从多个地方调用子程序,所以当通过常数来 指定才莫板数组的块指定维数时,存储器管理上的限制变强。因此,使用块指定 变量block一nol来变换模板数组以便将模板置于任意的位置。
图26表示确保子程序处理用的块的状态(状态8)。由于子程序内的解析 已经结束、已经知道在子程序中所需要的块数,所以在子程序调用时空出所需 数量的块,来确保子程序处理用的块。在没有空出所需数量的块的情况下,清 除已经装载的数据。按照清除优先度来决定要清除的数据。
具体而言,在该子程序中,需要一个自变量块和一个内部处理用块。在存 储器上装载有数组b、 c、 d,但将数组e用作自变量。因此,需要为了内部处 理用而空出l个块。若考虑到清除优先度,则由于数组c和d将立即被使用, 所以清除数组b。
图27表示设定块指定变量的状态(状态9)。在子程序内使用的内部处理 用的数组通过块指定变量block—nol可以使用任意的块。由此,将分配给内部 处理用的数组变量的块序号设定成指定变量。
图28表示执行子程序的状态(状态10)。通过子程序调用时设定的块指 定变量来决定要使用的块。即,块l被分配给内部处理用的数组y,块3被分 配给自变量用的数组x。在子程序中使用所指定的块来进行子程序的处理。
图29表示子程序的执行结束时的状态(状态11 )。若子程序的处理结束, 则内部处理用的块为NULL。自变量用块返回到作为自变量而收到的原来的数 组。
图30表示变换成才莫板数组的状态(状态12 )。与状态3 (图21)和状态5 (图23)所示的状态相同,将想要装载到局部存储器中来使用的数组变换成 新定义了的模板数组。
图31表示确保子程序处理用的块的状态(状态13)。由于子程序内的解 析已经结束、已经知道在子程序中所需要的块数,所以在子程序调用时空出所
35需数量的块,来确保子程序处理用的块。在没有空出所需数量的块的情况下, 清除已经装载的数据。按照清除优先度来决定要清除的数据。
具体而言,在下一宏任务(子程序调用)中,为了子程序的内部处理用而
需要空出一个块。在装载到局部存储器中的数组d、 a、 c和e中,数组a被用 作子程序的自变量。由于数组d、 c和e的清除优先度相同,所以清除块序号 最小的块0中存储的数组d。此外,由于已经知道接下来的宏任务中需要数组 a,所以通过数据转发单元将数组a转发到局部存储器的空闲的块1中。
图32表示设定块指定变量的状态(状态14)。在子程序内使用的内部处 理用的数组通过块指定变量block—nol可以使用任意的块。由此,在子程序调 用时,将分配给内部处理用的数组变量的块序号设定成指定变量。能够设定与 前面的子程序调用时(图27所示的状态9)不同的块序号。
图33表示执行子程序的状态(状态15)。通过子程序调用时设定的块指 定变量来决定要使用的块。即,块O被分配给内部处理用的数组y,块l被分 配给自变量用的数组x。在子程序中使用所指定的块来进行子程序的处理。在 与前面的子程序调用时(图28所示的状态10)不同的区域进行处理。
图34表示子程序的执行结束时的状态(状态16)。图34所示的编码是编 译结束时的编码。若子程序的处理结束,则内部处理用的块为NULL。自变量 用的块返回到作为自变量而接收到的原来的数组。 产业上的可利用性
本发明可以应用于由处理器使用的存储器存储区域的管理中,尤其是适用 于由多任务处理器使用的存储器存储区域的管理中。
权利要求
1.一种存储器管理方法,用于管理由处理器使用的存储器的存储区域,其特征在于,所述处理器与保存任务执行时访问的数据的存储器连接,将所述存储器的存储区域分割成多个不同大小的块,选择与所述任务执行时访问的数据相适合的大小的块,在所述选择的块中,保存所述任务执行时访问的数据。
2. 才艮据权利要求1所述的存储器管理方法,其特征在于, 将所述块分割成才艮据解析包含所述任务的程序所获取的信息而确定的大小。
3. 根据权利要求1所述的存储器管理方法,其特征在于, 所述块包括多个大小的块,所述块的多个大小为整数倍的关系。
4. 根据权利要求1所述的存储器管理方法,其特征在于,在确定了将所述数据分配给所述选择的块之后,通过数据转发单元将所述 数据保存在所述选择的块中,在所述块的释^L定时以前,通过所述数据转发单元来读出在所述选择的块 中保存的数据,并保存到其他储器中。
5. 根据权利要求1所述的存储器管理方法,其特征在于, 在所述任务中访问的数据中含有n维数的数组数据的情况下,将为了与所述任务中访问的数组数据匹配而选择出的n+l维数的模板分配给所述块,在指定保存数据的块的情况下,根据所述相加而得到的维数的值来将维数 的值不同的所述模板分配给所述各块,以使访问的块不同。
6. —种存储器管理方法,是处理器管理存储器的存储区域的方法,其特 征在于,所述处理器与保存程序执行时访问的数据的存储器连接, 在所述方法中,将所述存储器的存储区域分割成块,将根据解析所述程序获得的信息而确定的多个形状和大小的模板分配给合适大小的块,将形状和大小与所述分配的模板相适合的数据保存到所述模板中。
7. 根据权利要求6所述的程序的生成方法,其特征在于, 在分配所述模板的步骤中,从能够分配给各块的多种模板中,分配如下模板该模板具有在通过所述 程序访问的数组数据的维数上加上1而得的维数,并且各维数的最大值比通过 所述程序访问的数组数据的各维数的最大值要大,根据所述相加而得到的维数的值,将多个所述模板分配给多个所述块,以 使访问的块不同。
8. —种信息处理装置,其具有处理器以及保存被所述处理器访问的数据 的存储器,其特征在于,所述存储器的存储区域被分割成多个大小的块,所述多个大小根据解析由 所述处理器执行的程序而获得的信息来确定,分配给所述块的模板的形状以及大小,根据解析所述程序而获得的信息来 确定,所述处理器将所述存储器的存储区域分割成多个大小的块,该多个大小的 块根据解析由所述处理器执行的程序而获得的信息来确定,所述处理器将形状以及大小根据解析所述程序所获得的信息而确定的模 板分配给合适大小的块,所述处理器将形状和大小与所述分配的模板相适合的数据保存到所述模 板中。
9. 根据权利要求8所述的信息处理装置,其特征在于, 分配如下模板该模板具有在通过所述程序访问的数组数据的维数上加上1而得的维数,并且除了相加而得维数以外的各维数的最大值在通过所述程序 访问的数组数据的各维数的最大值以上,根据所述相加而得到的维数的值,将多个所述模板分配给多个所述块,以 使访问的块不同。
10. —种程序的生成方法,是能够通过处理器执行的程序的生成方法,其 特征在于,由编译器解析程序的信息,确定执行所述程序中包含的各任务所需要的数据,按照所迷任务的执行定时确定将需要的数据读写到存储器中的定时, 将在所迷确定的数据写入定时以前分配所述存储器的区域的命令,追加到 编译的程序中。
11. 根据权利要求IO所述的程序的生成方法,其特征在于,根据解析所述程序而获得的信息来确定释放的所述区域以及释放所述区 域的定时,为了释放所述分配的区域,将在所述确定的定时以前读出写入在所述存储 器中的数据的命令,追加到所述编译的程序中。
12. 根据权利要求11所述的程序的生成方法,其特征在于, 将下述两个命令追力口到所述编译的程序中,该两个命令是在分配所述存储器的区域之后,通过数据转发单元将所述数据保存到所述存储器中的命令; 以及在所述存储器的区域的释放定时以前,通过所述数据转发单元读出保存在 所述存储器中的数据并保存到其他存储器中的命令。
13. 根据权利要求IO所述的程序的生成方法,其特征在于, 解析所述程序而获得的信息包括通过所述程序访问的数据的信息、所述数据下一次被访问的定时的信息、以及访问所述数据的处理器的信息中的至少一 个。
14. 根据权利要求IO所述的程序的生成方法,其特征在于, 所述处理器是具有多个处理器核心的多处理器,在所述方法中,确定使哪个处理器何时执行所述任务,并将向所述确定的 处理器分配所述任务的命令追加到所述编译的程序中。
15. 根据权利要求IO所述的程序的生成方法,其特征在于,所述存储器的区域是所述存储器的存储区域被分割成固定大小的块而得 到的区域。
16. 根据权利要求15所述的程序的生成方法,其特征在于, 所述存储器的区域是被分割成多个不同大小的块而得到的区域, 关于所述多个大小,所述块的多个大小为整数倍的关系。
17. 根据权利要求15所述的程序的生成方法,其特征在于, 根据所述编译器解析程序而获得的信息来确定所述块的大小。
18. 根据权利要求15所述的程序的生成方法,其特征在于, 对所述程序进行分割,以便将所述任务中访问的数据收纳到所述一个块中。
19. 根据权利要求18所述的程序的生成方法,其特征在于, 所述程序包含多重循环,判断通过外侧循环的分割而生成的任务中访问的数据是否收纳在所述块述块内,则通过进一步分割内侧的循环来变更所述凄t据的大小。
20. 根据权利要求IO所述的程序的生成方法,其特征在于, 在所述程序中访问的数据中含有n维数的数组数据的情况下,分配为了与通过所述程序访问的数组数据匹配而选择出的n+l维数的模板,在指定保存数据的区域的情况下,通过所述相加而得到的维数的值,将多 个所述模板分配给多个区域,以指定被访问的区域。
21. —种程序,是能够由处理器执行的程序,其特征在于, 所述程序由编译器通过以下步骤而生成 解析程序的信息;确定所述程序中包含的各任务的执行所需要的数据;按照所述任务的执行定时确定将需要的数据读写到存储器中的定时;以及 追加在所述确定的数据的读写定时以前分配所述存储器的区域的命令。
全文摘要
本发明提供一种存储器管理方法、信息处理装置、程序的生成方法以及程序。所述存储器管理方法是管理由处理器使用的存储器的存储区域的方法,所述处理器与保存任务执行时使用的数据的存储器连接,将所述存储器的存储区域分割成多个不同大小的块,选择与所述任务的执行时使用的数据相适合的大小的块,并在所述选择的块中保存所述任务的执行时使用的数据,从而能够高效地在存储器中配置数据。
文档编号G06F12/06GK101601017SQ200880003780
公开日2009年12月9日 申请日期2008年2月27日 优先权日2007年2月28日
发明者三浦刚, 中野启史, 丸山贵纪, 仁藤拓实, 木村启二, 田川友博, 笠原博德 申请人:学校法人早稻田大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1