CN101601017B - 存储器管理方法以及程序的生成方法 - Google Patents

存储器管理方法以及程序的生成方法 Download PDF

Info

Publication number
CN101601017B
CN101601017B CN2008800037808A CN200880003780A CN101601017B CN 101601017 B CN101601017 B CN 101601017B CN 2008800037808 A CN2008800037808 A CN 2008800037808A CN 200880003780 A CN200880003780 A CN 200880003780A CN 101601017 B CN101601017 B CN 101601017B
Authority
CN
China
Prior art keywords
data
piece
program
size
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2008800037808A
Other languages
English (en)
Other versions
CN101601017A (zh
Inventor
笠原博德
木村启二
中野启史
仁藤拓实
丸山贵纪
三浦刚
田川友博
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Waseda University
Original Assignee
Waseda University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Waseda University filed Critical Waseda University
Publication of CN101601017A publication Critical patent/CN101601017A/zh
Application granted granted Critical
Publication of CN101601017B publication Critical patent/CN101601017B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5033Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种存储器管理方法、信息处理装置、程序的生成方法以及程序。所述存储器管理方法是管理由处理器使用的存储器的存储区域的方法,所述处理器与保存任务执行时使用的数据的存储器连接,将所述存储器的存储区域分割成多个不同大小的块,选择与所述任务的执行时使用的数据相适合的大小的块,并在所述选择的块中保存所述任务的执行时使用的数据,从而能够高效地在存储器中配置数据。

Description

存储器管理方法以及程序的生成方法
技术领域
本发明涉及通过多个处理器核心构成的多处理器系统中的存储器的管理方法,特别涉及根据编译器(compiler)所取得的信息将被处理器访问的数据分配到存储器的被分割后的区域中的方法。
背景技术
将多个处理器核心集成到一个芯片上而成的多核处理器(芯片多处理器)不断被各个微处理器厂家发布。除了超级计算机、服务器、台式计算机以及PC服务器领域之外,信息家电以及装置组装领域(例如,移动电话机、游戏机、车辆导航系统、数字影像接收机、HDD/DVD记录器·播放器等)中,也看到了微处理器的多核化的趋势。
这样,当前在从信息家电到超级计算机几乎所有的信息设备中,都使用多核处理器,并且认为今后会有更多的信息设备组装多核处理器。
不仅是细粒度命令级(fine grain instruction level)的并行性,即使是并行性更大的循环(loop)级的并行性、粒度更粗的循环间的并行性、以及函数间的粗粒度任务并行性也能够应用多核处理器。这样,多核处理器在通过利用更大的并行性能够提高处理器的处理性能这一点上很有利。另外,多核处理器能够使用n台处理器核心来实现同一性能,因此,使时钟频率为n分之一,施加的电压也降低,由此,能够将耗电(以电压的平方增大)抑制得较低,多核处理器在这一方面也是有利的。
另外,在软件方面,多处理器用的并行程序设计(programing)的调试(tuning)通常需要大量的时间,因此,应用软件的开发非常困难。但是,在集成了比较少的处理器的当前时期,通过逐次使程序自动并行化的自动并行化编译器能够获得高性能。在信息家电领域,应用程序的质量和数量决定了在市场上的竞争力,因此,如果能够通过编译器实现4核、8核、16核的多处理器用的程序的自动并行化,则多核的优越性会升高。
另外,在多粒度并行(multi-grain parallelizing)化中,将语句级(sentence-level)、循环级(loop-level)、更粗级别(例如,循环间、子程序(subroutine)间、基本块(basic block)间)的所有的并行性组合起来,通过可最早执行条件解析来提取并行性的技术已经在特开2001-175619号公报中公开。
发明内容
以往就进行了这种局部存储器(local memory)的最佳化。但是,以往的局部存储器的最佳化只是在并行循环连续的情况下,通过连续地执行能够并行的循环,来循环使用存储器上的数据。
但是,在一个循环中使用的数据大小比局部存储器的大小要大的情况很多,在循环中产生了数据的装载以及存储。此时,处理器需要等待处理直到接下来使用的数据准备好,从而产生了处理器的处理的系统开销(overhead)。
另外,根据一边使用局部存储器上的数据一边执行程序的数据局部化(localization),为了仅使用局部存储器来进行处理,必须将时序(sequential)的循环以及基本块中使用的大的数据也存储在局部存储器中。没有载入局部存储器中的数据保存在共享存储器中。因此,希望在整个程序中对数据应用局部化。
另外,在静态调度(static scheduling)时和生成动态调度码时,也使用用于将各处理器上的局部存储器或者分散共享存储器有效地进行利用、将处理器间的数据转发量最小化的数据局部化(data localization)。
另外,当处理器的集成度变高、一个芯片中包含的处理器核心数量增多时,即使将程序并行化也几乎不会提高处理性能。之所以这样说是因为产生了如下的存储墙(memory wall)的问题:处理器的动作变快,处理器的处理速度与存储器的存储器存取速度的差变大,因此无法将处理器使用的数据在适当的定时提供给存储器。
因此,需要很好地使用与处理器接近地设置的存储器。即,由于与处理器接近的存储器的存储容量较小,因此,在需要大型数据的情况下,需要将数据分割开装载到存储器中。而且,由于存储器之间的数据转发需要时间,因此,要求进行对处理器的程序顺序进行了设计的调度,以便循环使用装载于存储器中的数据。并且,当在存储器之间转发数据时,需要使用DMA控制器来隐藏系统开销。
编译器在对通过处理器执行的程序的并行性进行解析时,取得程序内的任务的执行顺序的信息,还解析任务之间的数据的依存关系(定义、参照的关系)。另外,当决定分支(branch)时,可知使用相同数据的程序。这样,通过编译器所取得的信息,可知使用存储在存储器中的数据的定时,从而能够在多个任务之间循环使用数据。
即,在本发明中,为了在持续进行处理时尽可能连续地长时间保持在配置于处理器附近的高速存储器中保存的数据,而高效率地配置数据。具体来说,将需要的数据保存在处理器附近的高速存储器中,将不需要的数据依次转发到虽然低速但是容量大的存储器中。而且,在本发明中,对数据进行分割后分配给局部存储器。另外,为了能够长时间使用存储在局部存储器中的数据,根据编译器所带有的信息(数据在何时在何处使用的信息),来决定将哪个数据逐出。另外,调度DMA以便先装载需要的数据。
另外,本发明不仅能够应用于同一种类的处理器中的存储器的管理,还能够应用于不同种类的异种·多处理器中的存储器管理。
根据本发明,存储器的存储区域的管理变得容易,因此,能够使数据在局部存储器以及分散共享存储器中的配置最佳化。由此,能够循环使用存储器中装载的数据,能够减少存储器之间的数据转发。
附图说明
图1是本发明实施方式的单芯片多核处理器的结构图。
图2是本发明实施方式的多粒度并行处理的说明图。
图3是本发明实施方式的宏流程图的说明图。
图4是本发明实施方式的的局部存储器管理的概要的说明图。
图5是本发明实施方式的存储器的存储区域的分割状态的说明图。
图6是本发明实施方式的存储器的清除优先度的说明图。
图7是本发明实施方式的存储器中装载的变量的推移的说明图。
图8是本发明实施方式的循环的分割步骤的具体示例的说明图。
图9是本发明实施方式的循环的分割步骤的具体示例的说明图。
图10是本发明实施方式的循环的分割步骤的具体示例的说明图。
图11是本发明实施方式的循环的分割步骤的具体示例的说明图。
图12是本发明实施方式的块大小的决定步骤的具体示例的说明图。
图13是本发明实施方式的块大小的决定步骤的具体示例的说明图。
图14是本发明实施方式的局部存储器管理宏任务的生成的具体示例(分配前)的说明图。
图15是本发明实施方式的局部存储器管理宏任务的生成的具体示例(分配后)的说明图。
图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)的说明图。
图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)的麻烦以及程序的复杂化的同时将任意数组分配到存储器上的任意的地址。
另外,在以下的本发明的实施方式中,对数据的使用进行具体说明,但是,除了处理器对数据的使用(参照)之外,数据的定义(计算数据然后保存到存储器中)中的存储器管理也在本发明的范畴之内。即,本发明能够应用于包含数据的使用以及定义两者的数据访问。
下面,参照附图对本发明的实施方式进行说明。
图1是本发明的实施方式的单芯片多核处理器的结构图。
本发明的实施方式的单芯片多核处理器10具备:包括多个处理器核心(PC0、PC1、...、PCn)16的多核芯片(CMP0、...、CMPm)10;多个集中共享存储器(CSM0、...、CSMj)14;进行输入输出控制的多个输入输出用芯片(I/O CSP0、...、I/O CSPk)18;以及芯片间结合网(InterCCN)12。
芯片间结合网12通过现有的连接技术(交叉开关(crossbar switch)、总线、多级网络等)实现,其将多个处理器核心16、多个集中共享存储器14以及输入输出用芯片18连接起来。集中共享存储器14由系统中的所有处理器核心16共享,是可以从各处理器核心16进行访问的存储器。集中共享存储器14补充多核芯片10内具有的集中共享存储器28。
各多核芯片10具有多个处理器核心(PC)16、集中共享存储器(CSM/L2Cache)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。另外,也可以使用超标量处理器(superscalar processor)、VLIW处理器等。
分散共享存储器(DSM)22用双口存储器构成,能够从其他处理器核心16经过数据转发控制器30对分散共享存储器22直接进行数据读写,从而用于任务之间的数据转发。
局部程序存储器(LPM)24按照由调度程序(scheduler)决定的任务的执行顺序先从其他存储器读取应该执行的命令并进行高速缓冲存储。另外,根据程序的特征还能够用作通常的数据高速缓冲存储器,还用作用于减少命中错误(hit miss)的高速缓冲存储器。
局部数据存储器(LDM)26是仅能够在各处理器核心16内进行访问的存储器,其保存分配给各处理器核心16的任务中使用的数据(例如,数组变量)。另外,局部数据存储器26能够切换成L1数据高速缓冲存储器。
数据转发控制器(DTC)30由公知的DMA控制器构成,其按照由调度程序决定的定时,在存储器之间转发应该执行的命令或使用的数据。具体来说,在自身或其他的处理器核心16上的局部存储器26、自身以及其他处理器核心16上的分散共享存储器22、自身以及其他处理器核心10上的集中共享存储器28、以及设于其他芯片的集中共享存储器14之间转发数据。
另外,局部数据存储器26与数据转发控制器30之间的虚线表示可以构成为能够根据单芯片多核处理器的用途由数据转发控制器30来访问局部数据存储器26。在该情况下,CPU20能够将转发指示经局部数据存储器26提供给数据转发控制器30。另外,CPU20能够在转发结束后将对所转发的数据进行检查。
CPU20经过局部数据存储器26、分散共享存储器22或者专用的缓冲器(省略图示)来对数据转发控制器30发出数据转发指示。另外,数据转发控制器30经过局部数据存储器26、分散共享存储器22或者专用的缓冲器(省略图示)向CPU20报告数据转发结束。此时,使用哪个存储器或者缓冲器根据处理器的用途在处理器的设计时决定。或者也可以准备多个硬件上的方法,根据程序的特性由编译器或者用户在软件方面灵活使用。
关于发给数据转发控制器30的数据转发指示(例如,从哪个地址将几字节的数据存储或装载到哪里,以及数据转发的模式(连续数据转发、进展(stride)转发等)),理想的是,编译器将数据转发命令保存到存储器或者专用缓冲器,在程序执行时仅发出执行哪个数据转发命令的指示,从而削减用于驱动数据转发控制器30的系统开销(overhead)。
网络接口(NI)32为了能够在各单芯片多核处理器10内的处理器核心16之间机进行通信而与芯片内结合网34连接。芯片内结合网34与芯片间结合网12连接。处理器核心16通过芯片间结合网12能够与其他单芯片多核处理器10内的处理器核心16进行通信。
处理器核心16经过芯片内结合网34与集中共享存储器14连接。集中共享存储器14与芯片间结合网12连接。
另外,网络接口32能够不经过芯片内结合网34而直接与芯片间结合网12连接。这样的结构能够使系统中的所有处理器核心16对分散配置在各芯片上的集中共享存储器28以及分散共享存储器22进行平等的访问。另外,通过设置直接连接的总线,即使在芯片间的数据转发量多的情况下,也能够提高系统整体的数据转发能力。
电力控制寄存器(FVR)36被设定了提供给处理器核心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循环的情况下,也可以将分层的宏数据流程处理应用于重复块内的并行性。
子程序块尽可能地内联(inline)展开即可。但是,考虑到编码长度,将无法有效地内联展开的子程序直接作为子程序块。在该情况下,可以将分层的宏数据流程处理应用于子程序块内的并行性。
接下来,解析宏任务之间的控制流程以及数据依存,生成如图3所示的宏任务图表(MTG)。在宏流程图表中,表示宏任务(MT)之间的控制流程。在生成宏任务图表时,同时解析宏任务之间的控制依存以及数据依存,以各宏任务能够最早地执行的条件(可最早执行条件)的形式检测宏任务之间的并行性。另外,以图表表现该可最早执行条件的是宏任务图表。
并且,编译器将宏任务图表上的宏任务分配给处理器集群(processorcluster)(由编译器或者用户定义的处理器的组)。在该任务的分配时,有编译时分配的静态调度和执行时分配的动态调度,在动态调度的情况下,使用动态CP算法来生成动态调度码,将生成的动态调度码植入到程序中,另外,在动态调度时,在到执行时为止,并不知道哪个宏任务被那个处理器执行,因此,在宏任务之间共享的数据分配到从所有处理器都能够等距离地看到的集中共享存储器14中即可。
在多粒度并行化中,关于通过宏数据流程处理而分配给处理器集群的循环块,在该循环块为Doall循环或者Doacross循环的情况下,以由处理器集群内的多个处理器核心16进行处理的方式,在迭代级分割循环,使循环并行化。
在循环的重建时,可以直接利用语句的执行顺序的变更、循环分配(loopdistribution),节点划分标量(node splitting scalar)、扩展(expansion),循环互换(loop interchange),循环展开(loop unrolling)、剥离开采(strip mining)、阵列私有化(Array Privatization)以及单模(unimodular)变换(循环倒换(loopreversal)、排列(Permutation)、排队(queuing))等现有技术。
另外,在不能应用循环并行处理的循环中,应用近细粒度并行处理或者将循环的主体部分层地分割成宏任务的粗粒度任务并行处理。
在分配给处理器集群的宏任务是伪赋值语句块、或者是循环并行化和分层的宏数据流程处理都无法应用的循环块的情况下,将伪赋值语句块内的语句或者命令作为近细粒度任务在处理器集群内的处理器中并行进行处理。
在多处理器系统的近细粒度并行处理中,将近细粒度任务调度到处理器中以使不仅是处理期间的负荷平衡而且还有处理期间的数据转发最少,由此,来实现高效率的并行处理。另外,在该近细粒度并行处理中所要求的调度中,由于在近细粒度任务之间存在基于数据依存的执行顺序的限制,因此,任务的执行顺序成问题。
将这样生成的近细粒度任务图表静态地调度到各处理器中。此时,作为调度算法,为了考虑数据转发系统开销而使执行时间最小,使用公知的试探(heuristics)算法(CP/DT/MISF法,CP/ETF/MISF法、ETF/CP法、或者DT/CP法)来确定最佳的调度。
在调度结束后,编译器按顺序排列分配给处理器核心的任务的命令列,并将数据转发命令或同步命令插入到必要的地方,由此,生成各处理器用的机器代码。此时,所插入的数据转发命令根据宏任务之间的控制依存和数据依存,来确定在局部存储器6中保存数据和从局部存储器26中清除数据的定时。
在近细粒度任务之间的同步中可以使用版本号(version number)法通过接收侧处理器核心的忙等待(busy wait)来进行同步标记的接收。这里,数据转发指示以及同步标记的设定可以通过由发送侧的处理器直接写入到接收侧的处理器核心16上的分散共享存储器22上来以较低的系统开销进行。
<局部存储器管理>
图4是说明本发明的实施方式的局部存储器管理的概要的图。
程序一般通过子程序和多重循环而划分为多层。于是,考虑在程序的执行时将所需要的数据在哪个定时转发是非常重要的,例如,在循环中,可以在循环的前后转发数据。具体来说,在循环的执行前将数据转发到局部存储器,在循环的执行后将数据从局部存储器进行转发。然后,在循环内将数据装载于局部存储器的状态下,以能够执行循环的方式配置数据即可。这样,将在数据装载于局部存储器的状态下可执行的程序的单位称为“局部存储器管理宏任务”。
即,在局部存储器管理宏任务中处理的数据一定是装载于局部存储器上的大小的数据。另外,局部存储器管理宏任务的执行所需要的数据在局部存储器管理宏任务的执行前或者执行后的适当的定时转发(装载、存储)。另外,将局部存储器管理宏任务决定成在任务内不会产生数据的转发。
而且,关于无法将所需要的全部数据装载到局部存储器上的循环,在该循环中,将使用的所有数据装载到局部存储器上的部分定义为局部存储器管理宏任务。即,将程序分割成将所需要的全部数据装载到局部存储器上,并决定局部存储器管理宏任务。这样决定局部存储器管理宏任务后,将局部存储器管理宏任务的执行所需的数据在宏任务的执行前后进行转发(装载到局部存储器、从局部存储器存储到集中共享存储器)。因此,在宏任务内,不产生数据的转发。
以上对循环进行了说明,而程序中的基本块以及子程序也是相同的。另外,对于子程序存在后述的例外情况。
另外,在本说明书中,对局部存储器的管理进行说明,但是只要是容量有限(存储容量小于使用的数据)的存储器,都能够应用本发明。例如除了局部存储器26之外,处理器核心16内的分散共享存储器22、芯片内(on-chip)的集中共享存储器28以及芯片外(off-chip)的集中共享存储器14也能够应用本发明。
参照图4对分割以上所说明的程序并生成局部存储器管理宏任务的方法进行说明。
假定在局部存储器上装载有1000个数组变量的要素。另外,如图4所示,该程序包含基于变量i、j的双重循环。在循环中,数组变量A[1:30,1:20]使用600要素,数组变量B[1:30]使用30要素,数组变量C[1:30,1:20]使用600要素,合计在该循环中使用1230个数组要素。于是,无法将所有的数据装载到局部存储器来执行该循环。
因此,本发明的实施方式的编译器将变量i的循环分割为i=1~10以及i=11~20两个循环,这时,在各循环中访问的数据变成630要素,因此,能够在将所有数据装载于局部存储器的情况下将循环从最开始执行到最后。该分割后的循环是局部存储器管理宏任务。并且,在该宏任务执行前后装载和存储需要的数据。
也可以不是在宏任务的即将执行之前执行数据向局部存储器的转发(装载),而是考虑到其他数据向块的分配而在更靠前的时刻执行。将像这样在到开始执行使用数组变量(数据)的宏任务之前为止的任意定时把该宏任务中使用的数组变量装载到存储器中称为“预装载(preload)”。该预装载即使是在其他宏任务的执行过程中,只要应该装载该数据的块为空,就能够通过DMA来转发数据。这样,根据块的空闲状态,即使是宏任务的执行前也能够装载数据,能够在程序执行前准备数据。因此,能够削减由于需要的数据没有装载于存储器而导致的处理器等待的时间。
另外,也可以不是在宏任务的刚执行之后就执行数据从局部存储器的转发(存储),而是考虑到其他数据向块的分配而在更靠后的时刻执行。将像这样在使用数组变量(数据)的宏任务结束后的任意定时把该宏任务中使用的数组变量装载到存储器中称为“后存储(poststore)”。该后存储即使是在其他宏任务的执行过程中,也能够通过DMA将数据从局部存储器中转发到集中共享存储器中。这样,通过在任意的定时存储数据,能够避免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收纳在局部存储器的一个块中的方式来决定块大小并分割循环。并且,通常块的大小从编译对象的程序的开始时到结束时为止是不变的。
<数据的装载以及存储>
接下来,对数据向块中的写入(装载)、读出(存储)以及块的分配进行说明。
在如图5所示的分割了存储区域的存储器中,装载局部存储器管理宏任务中使用的数据。首先,调度程序决定装载数据的存储器是局部存储器还是分散共享存储器。此时,将由多个处理器核心共享的数据装载到分散共享存储器中即可。
接下来,调度器在存在已经装载了需要的数据的块的情况下,直接使用在该块中装载的数据。另一方面,在需要的数据没有装载在任何一个块中的情况下,将空的块分配给该要装载的数据,将需要的数据装载到所分配的块中。另外,如果没有空的块,则从局部存储器26中读出清除优先度最高的数据,并写入到集中共享存储器28或者14中,将所需要的数据装载到成为了空闲块的存储区域中。
图6是说明本发明的实施方式的存储器的清除优先度的图,横轴表示时间的经过。
在本发明的实施方式中,清除优先度按照以下顺序确定。
1)以后不访问的数据。
2)通过其他处理器访问,但是自身的处理器不访问的数据。
3)自身的处理器会再次使用,但是在靠后的时间使用的数据。
4)在自身处理器中马上使用的数据。
以后不访问的数据例如是新再次计算出来的变量。这种已经死掉的变量不需要留下,因此,清除优先度最高。通过其他处理器访问、但是自身的处理器今后不再访问的数据转发到需要该数据的处理器核心16的分散共享存储器22中即可,因此,清除优先度第二高。虽然通过其他处理器访问的数据立即转发到分散共享存储器22即可,但是根据其他处理器核心16的存储器的状况,在无法马上转发的情况下,稍微使时间错开后转发到分散共享存储器22,或者转发到集中共享存储器28或14。这样,为了使从局部存储器26转发数据的定时具有自由度,将清除优先度比不访问的数据设定得低。
最后,对于通过自身处理器再次访问的数据,根据到下一次使用为止的时间来确定优先度。使用该数据的时间越靠后,清除优先度越高,使即将使用的数据的清除优先度低,尽量将其以装载在存储器中的状态下保留。
参照图6随着时间的经过对存储器的清除优先度进行说明。在图6中,当前,在处理器核心0(PC0)中执行的局部存储器管理宏任务中,考虑将数组变量A、B、C以及D装载在局部存储器中的状态(1001)。
在该局部存储器管理宏任务中,开始,通过处理器核心0(PC0)定义数组变量A(DefA),并使用数组变量(A)(1002)。
接下来,在处理器核心1(PC1)中,定义别的数组变量A(1003)。这时,装载在PC0的局部存储器中的数组变量A已经改变,因此今后不会再访问。因此,其清除优先度最高。这是因为,与高速缓冲存储器的连贯性(coherence)控制一样,无法取得一致性的数据被判断为不需要的数据。
接下来,研究后面应该执行的宏任务。数组变量B由其他的处理器(PC1)使用(1004)。数组变量C和D由自身的处理器(PC0)使用(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)分配块,各数组变量被装载到存储器中。然后,开始基于宏任务1的处理。具体来说,根据声明语句(declaration statement)def A将数组变量A分配给块0。同样地,将数组变量B分配给块1,将数组变量C分配给块2,将数组变量D分配该块3,将数组变量E分配给块8,将数组变量F分配块9。
在宏任务1的执行结束时,将各数组变量装载到块中(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中。并且,子块11是空的。因此,在宏任务2的执行开始的阶段,需要空出一个块和一个子块。
所以,为了确保装载所需要数据的块,按照清除优先度将数组变量D从块3中清除,将数组变量F从子块9中清除。由此,确保了一个空的块和一个空的子块(1014)。
因此,在宏任务1的执行结束后,在宏任务2的执行前,需要将数组变量D和F转发到集中共享存储器,以及将数组变量H转发到局部存储器(1013)。
在宏任务2的执行开始前,数组变量G被分配给块3,数组变量I被分配给子块9,数组变量J被分配给块11。然后,执行宏任务2,在宏任务2中使用数组变量G、I和J(1014)。
这样,根据所述的优先度从存储器将数据存储到分散共享存储器或者集中共享存储器,因此,与以往的LRU不同,能够使存储器的利用最佳,能够减少存储器间的数据转发。即,根据以往的LRU,最近不使用但是有可能马上使用的数据也从存储器转发出去。但是,如本发明那样,根据编译器获取的信息,可知该数据下一次使用的定时,能够使存储器最优地使用。
<循环的分割>
接下来,参照图8到图11对循环的分割步骤的具体示例进行说明。
循环的分割是纵观多个循环进行匹配分割。解析在多重化的循环中访问的最广范围,作为全局索引范围(globe index range)。即,由于具有访问局部存储器即可的范围和必须与相邻的处理器进行通信的范围,因此,解析数据的访问范围,对其进行划分。因此,解析程序的结构、选择目标循环组(target loopgroup)。在本实施方式中,与用于连续地执行基于以往的编译器的并行的循环的解析不同,解析在多个循环的范围内如何访问存储器。
这里,两个循环匹配是指满足以下所有条件。
1)各循环是Doall循环、Reduction循环、以及基于循环传递(loop-carried)数据依存(递归)的Sequectial循环中的某一个。
2)在循环之间存在数组变量的数据依存。
3)各循环的循环控制变量在同一数组的相同维数的索引式中使用,维数的数组索引用循环控制变量的一次式表示。
4)对于将数据依存导向循环之间的各数组,数组索引中的循环控制变量系数的循环之间的比是固定的。
此时,没有选择的单一的循环也全部作为目标循环组,容许目标循环组的嵌套,还选择包括间接参照的循环。即,在被选为目标循环组的循环的内侧也存在循环的情况下,对于内侧的循环也生成目标循环组。并且,关于无法与其他循环匹配的循环,仅在该循环中生成目标循环组。
所谓目标循环组,是在宏任务上能够应用循环匹配分割的重复块(RB)的集合,是在宏任务标记上具有直接数据依存在先、后续关系的重复块的集合。这是因为,执行时的花费(存储器以及处理器等资源的消耗)大的重复块和在该重复块上具有直接数据依存在先、后续关系的重复块处理大的数据,所以分割的效果高。由此,当在循环之间使用相同数据时,循环使用相同的区域,能够防止高速缓冲错误。
具体来说,在图8所示的程序中,基于变量i的两个循环为TLG1,各TLG1内的基于变量j的循环为TLG1-1和TLG1-2。并且,TLG1-1内的基于变量k的循环为TLG1-1-1,TLG1-1内的基于变量k的循环为TLG1-1-2。
接下来,如图9所示,生成TLG集合。在TLG满足以下的所有生成条件的情况下生成TLG集合。
1)具有至少一个以上共享数组(还考虑依存关系)。
2)共享数组的匹配维数全部一致。
3)在跨子程序的情况下,共享数组的形状一致。
下面如图10所示生成分割候补TLG集合。这是在具有成为嵌套的TLG的情况下选择花费最大的TLG集合,将所选择的TLG集合作为分割候补。然后,针对每个分割候补TLG集合计算GIR。这样,能够覆盖程序中的所有的编码。具体来说,TLG集合1成为分割候补TLG集合1,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,i]=[1:30,1:20,1:3]。总数据大小为30×20×3×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集合中。
在确定了使所有的数据都能够配置在局部存储器中的循环的分割数的情况下,为了将数据分配给局部存储器,预先存储假定哪个数据用哪个模式访问、以及哪个数据使用多大的块等进行分割的信息。
接下来,进行宏任务的分割以及循环的重建。这里进行的处理使宏任务的分割、循环分配、循环融合(loop fusion)以及循环的重建。
这里,所谓循环分配(Loop distribution),具体来说将在图14和图15中叙述,但是其是在进行多重分割时用于循环使用数据的处理。所谓循环融合是用于循环使用寄存器的处理。
并且,在循环的重建(Loop restructuring)之后,从外侧层的循环起依次寻找分割数已经确定的宏任务,并将发现的宏任务作为局部存储器管理宏任务。在设定成局部存储器管理宏任务的宏任务的内侧不进行宏任务的寻找。
<模板的生成>
接下来说明模板的生成步骤。
在本实施方式中,所谓模板是将数组变量分配给局部存储器的单位。编译器对应程序访问数据的模式来准备模板。所提供的模板的大小与块或者子块的大小相同。此外,按维数(1维数组、2维数组、3维数组......)来准备模板,模板的大小为被程序访问的大小以上的大小。
在使用块来管理局部存储器的情况下,需要向同一地址区域的块载入各种数据(形状、维数不同的数组等)。即,即使数据大小是收纳在块中的大小,也可以是声明为1维数的标量变量、或2维数、3维数的数组变量的情况。此外,还存在是相同维数的数据但各维数的大小不相同的情况。为了将这些装载到相同地址空间的块中,将所有的数据变换成1维数据从而可以使其与存储器地址相一致。但是,在数组变量的情况下,需要索引变换,成为与用户写入的程序不同。若进行这样的索引变换,则程序变得难以理解,难以进行程序调试(debugger),并行性的解析变得难以理解。
因此,为了在保持程序的可读性的情况下管理局部存储器,而使用和块等的大小相同大小的模板。所谓模板是存储数组变量的模板。通过在模板中存储所需要的数据可以实现向局部存储器上的任意块装载数据。
通过以下步骤来生成模板。
首先,关于TLG集合内的所有数组,求出比各维数的访问大小大、并且最小的2的幂数。然后,生成求出各维数后的大小的临时模板。
在上述例子中,用最外的变量i的循环来试行4分割。例如,如果分割成i=1~3、4~6、7~8、9~10四个循环,则得到转3圈的两个循环、转2圈的两个循环。分割后的循环内的数组变量A和B的访问大小都是[k,j,i]=[1:30,1:20,1:3]。此外,第3维数选择循环圈数中较大的一方,为3圈。
接下来,计算临时模板的大小。由于模板的各维数为比数组变量的各维数的大小大的2的幂数,所以模板大小成为32×32×4=4k要素。然后,将最大的临时模板的大小作为块大小。在前述的例子中,块大小成为4k要素。
然后,将分割基准区域大小除以块大小并求出商(分割基准区域大小/块大小)。在所求出的商为1以上时,通过舍弃按除法运算而求出的商的小数点以下,来求出能够准备的块数(Block num)。另一方面,在所求出的商不足1时,由于在该模板大小中一个块也不能生成,所以判断为模板的生成失败。
此外,将块大小除以各模板的大小(块大小/各模板的大小),将其商作为子块的数量。
在前述的例子中,由于要分割的局部存储器区域为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]=[1:10,1:10,1:10]。通过前述的步骤来生成临时模板。所生成的临时模板的大小为[k,j,i]=[1:16,1:16,1:16]。该临时模板所需要的块大小为16×16×16×4=16kB。由于局部存储器的大小为2kB,所以一个块也无法准备。因此,考虑分割最外循环1020。
如图13所示,用最大分割数来分割(10分割)最外循环(变量i)1020。最大分割数为循环的迭代数。此外,在即使将外侧循环分割到极限也无法确保所需要的块数时,考虑分割内侧的循环。
此时,在最内循环1022中使用的数组变量A、B和C的大小为[k,j,i]=[1:10,1:10,1:1]。通过前述的步骤而生成的临时模板的大小为[k,j,i]=[1:16,1:16,1:1]。该临时模板所需要的块大小为16×16×1×4=1kB。由于局部存储器的大小为2kB,所以能够准备的块数为分割基准区域大小(2kB)/块大小(1kB)=2个。由于在该循环中使用3个数组变量,所以在该状态下无法确保所需要的块。因此,接下来考虑分割内侧循环1021。
在将内侧循环1021分割成2份(2等分)时,在最内循环1022中使用的数组变量A、B和C的大小为[k,j,i]=[1:10,1:5,1:1]。通过前述的步骤而生成的临时模板的大小为[k,j,i]=[1:16,1:8,1:1]。该临时模板所需要的块大小为16×8×1×4=512B。由于局部存储器的大小为2kB,所以通过分割基准区域大小(2kB)/块大小(512B)求出能够准备的块数,能够准备的块数为4个。
由此,因为能够确保分割在该循环中使用的3个数组变量的块,所以决定块的大小以及个数。生成的模板为[1:16,1:8,1:1,0:3]。
然后,将内侧循环1021分成j=1:5、j=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=1:10)和内侧循环1053(j=11:20)。
在循环1041后执行循环1051。此外,循环1042和循环1052使用相同的数据(数组变量A[1:30,1:10,1:1]和数组变量B[1:30,1:10,1:1]),循环1043和循环1053使用相同的数据(数组变量A[1:30,11:20,1:1]和数组变量B[1:30,11:20,1:1])。
但是,在该程序中由于按照循环1042、循环1043、循环1052、循环1053的顺序来执行,所以无法在将数据装载到局部存储器的情况下来循环使用相同数据。因此,如图15所示,将最外循环1041分割成内侧循环1042(j=1:10)和内侧循环1043(j=11:20)。同样地,将最外循环1051分割成内侧循环1052(j=1:10)和内侧循环1053(j=11:20)。
通过该分割,能够按顺序执行分割后的最外循环1041A和最外循环1051A(即,按顺序执行内侧循环1042和内侧循环1052)。因此,能够在循环1052中直接使用在循环1042中所使用的数组数据。即,在循环1041A的执行结束时和循环1051A的执行开始时之间,不产生数据(数组变量)的转发。
同样地,能够按顺序执行分割后的最外循环1041B和最外循环1051B(即,按顺序执行内侧循环1043和内侧循环1053)。因此,能够在循环1053中直接使用在循环1043中所使用的数组数据。即,在循环1041B的执行结束时和循环1051B的执行开始时之间,不产生数据(数组变量)的转发。
这样,在程序的执行顺序和该程序中使用的数据不匹配时,通过执行循环分配,连续地执行处理相同数据的循环。由此,可以在循环执行时不产生数据的转发。
<模板的生成步骤的例子>
图16表示本发明的实施方式的模板的生成步骤的例子。
模板(template)是为了在宏任务上处理局部存储器而对局部存储器分配数组变量的单位。
模板准备有1维数组、2维数组、3维数组......等,其形式根据在宏任务中使用的数组变量而有多种形式。例如,在设为2维数组时,准备有数组变量的各索引最大值相等的正方形、索引最大值不同的长方形(纵长、横长),以便与在宏任务中使用的数组变量的大小相匹配。
模板的大小大于局部存储器管理宏任务中使用的数据大小。进而,模板的各维数的索引的最大值大于局部存储器管理宏任务中使用的数组变量的各维数的索引的最大值,并且选择最小的2的幂数。因此,即使模板的形式改变,模板的大小也与块以及子块等中的某一个的大小相等。
由此,模板的大小成为与块大小相等或者块大小的2的幂大小分之一。由此,生成收纳数据的最小大小的模板,并将程序(循环)分割成在这样生成的模板中收纳数据。并且,当对局部存储器分配数组变量时,能够分配成相同大小的块等,可以没有浪费地使用局部存储器的存储容量。
通过使用分配后的模板,分配给块0的模板使用块0的存储器空间,分配给块1的模板使用块1的存储器空间。
准备块数个形状相同的模板。然后,根据块序号改变要使用的模板数组。为此,所准备的模板就成为实际上生成并列了多个相同模板的形态(装载数据而使用的数组变量的维数+1维数)的模板。新生成的维数为块指定用的维数,要素数量为块数。
即,模板的维数比数组变量的维数大1维数。这是由于,通过模板的追加后的维数的索引值,来切换多个数组变量,改变要访问的块。此外,对局部存储器的不同块分配(不同的地址)分配各模板。当数组变量的形状以及大小相同时,可以使用相同模板。例如,分割成等分的模板,由于使用相同的形状以及大小的数组变量,所以准备这样的模板是有效的。
例如,在块数为8个、各个块的大小为[1:2,1:16,1:4]的情况下,将tempA[1:2,1:16,1:4,0:7]的模板分配给局部存储器。此外,在这时候,在程序中出现的数组变量为5个的情况下,作为tempA[1:2,1:16,1:4,0:4],仅对块0到4分配模板。其它块可以进一步分割后作为子块来利用。
图17表示模板被映射后的局部存储器的状态。
在模板的映射中,例如在FORTRAN中,使用EQUIVALENCE语句。具体而言,通过声明为EQUIVALENCE(LM(1),tempA(1,1,1,0)),可以将模板A分配给局部存储器的块0。
模板A是3维数组用的模板,各维数是tempA[1:2,1:16,1:4,0:7]。因此,对块0(地址0~127)分配tempA[1,1,1,0],对块1(地址128~255)分配tempA[1,1,1,1]。
即,如上所述,模板的最外侧的第4维数不是模板自身的维数,而是表示模板被分配的块序号。
若更具体地举例,则通过执行
do dim3=1,4
 do dim2=1,16
  do dim1=1,2
   tempA(dim1,dim2,dim3,2)=GA(dim1,dim2,dim3)
  enddo
 enddo
enddo
将数组变量GA的数据存储在局部存储器的块2中。
图18表示其它模板被映射后的局部存储器的状态。
与上述例子不同,在程序中表示出现的数组大小为[1:2,1:8,1:4]的情况下,将适合于子块大小的模板temp_subA[1:2,1:8,1:4,0:15]分配给局部存储器。这样,通过最外侧的要素值可以改变要访问的子块。
与上述一样地使用EQUIVALENCE,通过声明为EQUIVALENCE(LM(1),temp_subA(1,1,1,0)),可以将模板(子块)A分配给局部存储器的子块0。
模板A是3维数组用的模板,其大小为temp_subA[1:2,1:8,1:4,0:15]。因此,对子块0(地址0~63)分配temp_subA[1,1,1,0],对子块1(地址64~127)分配temp_subA[1,1,1,1]。
若更具体地举例,则通过执行
do dim3=1,4
 do dim2=1,8
  do dim1=1,2
   temp_subA(dim1,dim1,dim3,4)=GA(dim1,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)来改变对应的区域。此外,通过模板数组来进行声明,但由于templ(1,4)以后为被分配给子块等的区域,所以不作为块来使用。
具体而言,将以下语句插入到程序中。
Integer a(128),b(128),c(128),d(128),e(128)
Integer LM(1024)
Integer templ(128,0:7)
EQUIVALENCE(LM,templ)
由此,将模板分配给局部存储器。
图21表示变换成模板数组的状态(状态3)。将想要装载到局部存储器中来使用的数组变换成新定义的模板数组。通过使原始编码中的数组为模板数组,来使用局部存储器。通过改变用于指定块的维数的值(索引),可以改变要使用的块(局部存储器的地址)。
具体而言,将原始编码中的数组名a(i),b(i),c(i)改写成templ(i,0),templ(i,1),templ(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)。解析子程序的自变量和子程序内的处理所需要的块数。在图示的例子中,在子程序sub1中使用自变量数组x和作为自动变量的数组y。即,自变量用需要一个块,内部处理用需要一个块。总计需要两个块。
图25表示变换成在子程序内使用了块指定变量的模板数组的状态(状态7)。这里,如上所述,由于有可能从多个地方调用子程序,所以当通过常数来指定模板数组的块指定维数时,存储器管理上的限制变强。因此,使用块指定变量block_nol来变换模板数组以便将模板置于任意的位置。
图26表示确保子程序处理用的块的状态(状态8)。由于子程序内的解析已经结束、已经知道在子程序中所需要的块数,所以在子程序调用时空出所需数量的块,来确保子程序处理用的块。在没有空出所需数量的块的情况下,清除已经装载的数据。按照清除优先度来决定要清除的数据。
具体而言,在该子程序中,需要一个自变量块和一个内部处理用块。在存储器上装载有数组b、c、d,但将数组e用作自变量。因此,需要为了内部处理用而空出1个块。若考虑到清除优先度,则由于数组c和d将立即被使用,所以清除数组b。
图27表示设定块指定变量的状态(状态9)。在子程序内使用的内部处理用的数组通过块指定变量block_nol可以使用任意的块。由此,将分配给内部处理用的数组变量的块序号设定成指定变量。
图28表示执行子程序的状态(状态10)。通过子程序调用时设定的块指定变量来决定要使用的块。即,块1被分配给内部处理用的数组y,块3被分配给自变量用的数组x。在子程序中使用所指定的块来进行子程序的处理。
图29表示子程序的执行结束时的状态(状态11)。若子程序的处理结束,则内部处理用的块为NULL。自变量用块返回到作为自变量而收到的原来的数组。
图30表示变换成模板数组的状态(状态12)。与状态3(图21)和状态5(图23)所示的状态相同,将想要装载到局部存储器中来使用的数组变换成新定义了的模板数组。
图31表示确保子程序处理用的块的状态(状态13)。由于子程序内的解析已经结束、已经知道在子程序中所需要的块数,所以在子程序调用时空出所需数量的块,来确保子程序处理用的块。在没有空出所需数量的块的情况下,清除已经装载的数据。按照清除优先度来决定要清除的数据。
具体而言,在下一宏任务(子程序调用)中,为了子程序的内部处理用而需要空出一个块。在装载到局部存储器中的数组d、a、c和e中,数组a被用作子程序的自变量。由于数组d、c和e的清除优先度相同,所以清除块序号最小的块0中存储的数组d。此外,由于已经知道接下来的宏任务中需要数组a,所以通过数据转发单元将数组a转发到局部存储器的空闲的块1中。
图32表示设定块指定变量的状态(状态14)。在子程序内使用的内部处理用的数组通过块指定变量block_nol可以使用任意的块。由此,在子程序调用时,将分配给内部处理用的数组变量的块序号设定成指定变量。能够设定与前面的子程序调用时(图27所示的状态9)不同的块序号。
图33表示执行子程序的状态(状态15)。通过子程序调用时设定的块指定变量来决定要使用的块。即,块0被分配给内部处理用的数组y,块1被分配给自变量用的数组x。在子程序中使用所指定的块来进行子程序的处理。在与前面的子程序调用时(图28所示的状态10)不同的区域进行处理。
图34表示子程序的执行结束时的状态(状态16)。图34所示的编码是编译结束时的编码。若子程序的处理结束,则内部处理用的块为NULL。自变量用的块返回到作为自变量而接收到的原来的数组。
产业上的可利用性
本发明可以应用于由处理器使用的存储器存储区域的管理中,尤其是适用于由多任务处理器使用的存储器存储区域的管理中。

Claims (12)

1.一种存储器管理方法,用于管理由处理器使用的存储器的存储区域,其特征在于,
所述处理器与保存任务执行时访问的数据的存储器连接,
将所述存储器的存储区域分割成根据解析包含所述任务的程序所获取的信息而确定的、与所述程序所使用的数据的大小相适合的第一大小的多个块,
将所述第一大小的块中的至少一部分进一步分割成第二大小的多个块,所述第二大小是所述第一大小的整数分之一,由此生成第二大小的多个块,以便将所述第二大小的块分配给连续的区域,
选择与所述任务执行时访问的数据相适合的所述第一或者第二大小的块,
在所述选择的块中,保存所述任务执行时访问的数据。
2.根据权利要求1所述的存储器管理方法,其特征在于,
在确定了将所述数据分配给所述选择的块之后,通过数据转发单元将所述数据保存在所述选择的块中,
在所述块被释放以前,通过所述数据转发单元来读出在所述选择的块中保存的数据,并保存到其他储器中。
3.根据权利要求1或2所述的存储器管理方法,其特征在于,
根据解析所述程序获得的信息,将根据程序所使用的数组变量的形状以及大小而确定的形状和大小的数组模板分配给合适大小的所述块,
将形状和大小与所述分配的数组模板相适合的数据保存到所述数组模板中。
4.根据权利要求3所述的存储器管理方法,其特征在于,
在所述任务中访问的数据中含有n维的数组数据的情况下,从能够分配给各块的多种模板中,分配如下的模板:该模板具有在所述任务执行时访问的数组数据的维数n上加上1而得的维数n+1,并且相加而得的第n+1维以外的各维的大小为所述任务执行时访问的数组数据的各维的大小以上,
根据所述相加而得到的维数的值,将维数不同或相同、且各维的大小不同的多种所述模板中的一个模板分配给所述各块,以使访问的块不同。
5.一种程序的生成方法,是生成能够通过处理器执行的程序的生成方法,其特征在于,
所述处理器与存储器连接,该存储器存储执行构成所述程序的任务时访问的数据,
在计算机执行所述方法,
所述计算机,
由编译器解析原程序的信息,
根据所述编译器解析的程序的信息的解析结果,将所述存储器的存储区域分割成第一大小的多个块,
将所述第一大小的块中的至少一部分进一步分割成第二大小的多个块,所述第二大小是所述第一大小的整数分之一,由此生成第二大小的多个块,以便将所述第二大小的块分配给连续的区域,
确定执行所述原程序中包含的各任务所需要的数据,
根据解析包含所述任务的程序所获取的信息而确定执行所述生成的程序的处理器的存储器的存储区域,并追加分割为与在所述生成的程序中使用的数据的大小相适合的多个不同大小的块的命令、选择与在所述任务执行时访问的数据相适合的大小的块的命令、和在所述选择的块中存储所述任务执行时访问的数据的命令,由此生成所述处理器能够执行的程序。
6.根据权利要求5所述的程序的生成方法,其特征在于,
所述计算机,
根据由所述编译器解析所述原程序而获得的信息来确定释放的所述区域以及释放所述区域的定时,
为了释放所述分配的区域,追加所述确定的定时以前读出写入在所述存储器中的数据的命令,由此生成所述处理器能够执行的程序。
7.根据权利要求6所述的程序的生成方法,其特征在于,
所述计算机,
根据由所述编译器解析所述原程序而获得的信息,将下述两个命令追加到所述处理器能够执行的程序来生成所述处理器能够执行的程序,该两个命令分别如下:在分配所述第一以及第二大小的块之后,通过数据转发单元将所述数据保存到所述分配后的块中的命令;以及在所述分配后的块被释放以前,通过所述数据转发单元读出保存在所述分配后的块中的数据并保存到其他分配后的块中的命令。
8.根据权利要求5所述的程序的生成方法,其特征在于,
所述编译器解析所述原程序而获得的信息包括通过所述原程序访问的数据的信息、所述数据下一次被访问的定时的信息、以及访问所述数据的处理器的信息中的至少一个。
9.根据权利要求5所述的程序的生成方法,其特征在于,
执行所述生成的程序的所述处理器是具有多个处理器核心的多处理器,
在所述方法中,所述计算机确定使哪个处理器何时执行所述任务,并追加向所述确定的处理器分配所述任务的命令,由此生成所述处理器能够执行的程序。
10.根据权利要求5所述的程序的生成方法,其特征在于,
所述计算机,
根据由所述编译器解析所述原程序而获得的信息,对包含在所述处理器能够执行的程序中的任务进行分割来生成所述处理器能够执行的程序,以便把执行所述处理器能够执行的程序时访问的数据收纳到所述第一大小的块或所述第二大小的块中的一个块中。
11.根据权利要求10所述的程序的生成方法,其特征在于,
所述原程序包含多重循环,
所述计算机,
根据由所述编译器解析所述原程序而获得的信息,判断执行通过外侧循环的分割而生成的任务时访问的数据是否收纳在所述块内,
如果通过分割所述外侧的循环而生成的任务中访问的数据没有收纳在所述块内,则通过进一步分割内侧的循环来变更所述数据的大小来生成所述处理器能够执行的程序。
12.根据权利要求5所述的程序的生成方法,其特征在于,
所述计算机,
根据由所述编译器解析所述原程序而获得的信息,通过追加如下的两个命令来生成所述处理器能够执行的程序,其中该两个命令如下:在所述任务访问的数据中含有n维的数组数据的情况下,从能够分配给各块的多种模板中,分配具有在所述任务访问的数组数据的维数n上加上1而得的维数n+1,并且相加而得的第n+1维以外的各维的大小为所述任务所访问的数组数据的各维的大小以上的模板;以及
根据所述相加而得到的维数的值,将维数不同或相同、且各维的大小不同的多种所述模板中的一个模板分配给所述各块,以指定被访问的区域。
CN2008800037808A 2007-02-28 2008-02-27 存储器管理方法以及程序的生成方法 Active CN101601017B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2007050269A JP5224498B2 (ja) 2007-02-28 2007-02-28 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
JP050269/2007 2007-02-28
PCT/JP2008/053891 WO2008105558A1 (ja) 2007-02-28 2008-02-27 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム

Publications (2)

Publication Number Publication Date
CN101601017A CN101601017A (zh) 2009-12-09
CN101601017B true CN101601017B (zh) 2013-10-09

Family

ID=39721378

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008800037808A Active CN101601017B (zh) 2007-02-28 2008-02-27 存储器管理方法以及程序的生成方法

Country Status (6)

Country Link
US (1) US8438359B2 (zh)
JP (1) JP5224498B2 (zh)
KR (1) KR101186174B1 (zh)
CN (1) CN101601017B (zh)
GB (2) GB2459802B (zh)
WO (1) WO2008105558A1 (zh)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8219740B2 (en) * 2008-06-25 2012-07-10 International Business Machines Corporation Flash sector seeding to reduce program times
CN101499034A (zh) * 2009-03-05 2009-08-05 北京中星微电子有限公司 内存管理方法
US8335897B2 (en) * 2009-12-15 2012-12-18 Seagate Technology Llc Data storage management in heterogeneous memory systems
WO2011078162A1 (ja) * 2009-12-24 2011-06-30 日本電気株式会社 スケジューリング装置、スケジューリング方法及びプログラム
US8723877B2 (en) 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
KR101754998B1 (ko) 2011-01-27 2017-07-06 삼성전자주식회사 멀티 코어 시스템 및 멀티 코어 시스템에서의 데이터 병렬 처리 방법
CN102622206A (zh) * 2011-01-28 2012-08-01 中兴通讯股份有限公司 一种处理器及其处理数据的方法
JP2012173870A (ja) * 2011-02-18 2012-09-10 Toshiba Corp 半導体装置及びメモリ保護方法
US9354988B2 (en) * 2011-03-28 2016-05-31 Sap Se Allocation strategies for data storage applications
JP5708216B2 (ja) * 2011-05-09 2015-04-30 ソニー株式会社 フラッシュメモリ装置、メモリ制御装置、メモリ制御方法、ストレージシステム
JPWO2013001614A1 (ja) * 2011-06-28 2015-02-23 富士通株式会社 データ処理方法およびデータ処理システム
WO2013001614A1 (ja) * 2011-06-28 2013-01-03 富士通株式会社 データ処理方法およびデータ処理システム
US9830133B1 (en) * 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
WO2013095605A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for sliding window data gather
WO2013130548A2 (en) * 2012-02-27 2013-09-06 University Of Virginia Patent Foundation Method of instruction location randomization (ilr) and related system
CN104169832B (zh) 2012-03-13 2017-04-19 英特尔公司 提供处理器的能源高效的超频操作
US9436245B2 (en) 2012-03-13 2016-09-06 Intel Corporation Dynamically computing an electrical design point (EDP) for a multicore processor
WO2013137862A1 (en) 2012-03-13 2013-09-19 Intel Corporation Dynamically controlling interconnect frequency in a processor
US8984313B2 (en) 2012-08-31 2015-03-17 Intel Corporation Configuring power management functionality in a processor including a plurality of cores by utilizing a register to store a power domain indicator
US8510531B1 (en) * 2012-09-20 2013-08-13 Google Inc. Fast, dynamic cache packing
KR101537725B1 (ko) * 2013-01-18 2015-07-20 서울대학교산학협력단 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체
JP6161396B2 (ja) * 2013-05-15 2017-07-12 オリンパス株式会社 演算装置
JP6161395B2 (ja) * 2013-05-15 2017-07-12 オリンパス株式会社 演算装置
JP6018022B2 (ja) 2013-06-14 2016-11-02 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
JP5915624B2 (ja) * 2013-11-14 2016-05-11 株式会社デンソー 電子制御装置
JP6201788B2 (ja) * 2014-01-29 2017-09-27 富士通株式会社 ループ分割検出プログラム及びループ分割検出方法
JP6200824B2 (ja) * 2014-02-10 2017-09-20 ルネサスエレクトロニクス株式会社 演算制御装置及び演算制御方法並びにプログラム、OpenCLデバイス
KR101771289B1 (ko) * 2014-05-19 2017-08-24 엘에스산전 주식회사 Plc 프로그램 관리 장치
CN104168079B (zh) * 2014-09-03 2017-02-01 成都朗锐芯科技发展有限公司 一种多通道分组定时器
JP6488739B2 (ja) 2015-02-05 2019-03-27 株式会社デンソー 並列化コンパイル方法、及び、並列化コンパイラ
JP6488738B2 (ja) 2015-02-05 2019-03-27 株式会社デンソー 並列化コンパイル方法、及び、並列化コンパイラ
US10491667B1 (en) * 2015-03-16 2019-11-26 Amazon Technologies, Inc. Customized memory modules in multi-tenant service provider systems
JP6427054B2 (ja) 2015-03-31 2018-11-21 株式会社デンソー 並列化コンパイル方法、及び並列化コンパイラ
JP6427053B2 (ja) 2015-03-31 2018-11-21 株式会社デンソー 並列化コンパイル方法、及び並列化コンパイラ
EP3113026B1 (en) 2015-06-29 2019-07-24 aicas GmbH Automatic memory management using a memory management unit
CN106325967B (zh) 2015-06-30 2019-10-25 华为技术有限公司 一种硬件加速方法、编译器以及设备
DE102017209697A1 (de) * 2016-06-13 2017-12-14 Denso Corporation Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung
DE102016211386A1 (de) * 2016-06-14 2017-12-14 Robert Bosch Gmbh Verfahren zum Betreiben einer Recheneinheit
JP2017228029A (ja) * 2016-06-21 2017-12-28 株式会社デンソー 並列化方法、並列化ツール、車載装置
US10289309B2 (en) 2016-09-12 2019-05-14 Toshiba Memory Corporation Automatic detection of multiple streams
US10073640B1 (en) 2017-03-10 2018-09-11 Toshiba Memory Corporation Large scale implementation of a plurality of open channel solid state drives
US10542089B2 (en) 2017-03-10 2020-01-21 Toshiba Memory Corporation Large scale implementation of a plurality of open channel solid state drives
US10339983B1 (en) * 2017-12-29 2019-07-02 Micron Technology, Inc. Temperature-based memory operations
US11461631B2 (en) * 2018-03-22 2022-10-04 Amazon Technologies, Inc. Scheduling neural network computations based on memory capacity
US11475306B2 (en) 2018-03-22 2022-10-18 Amazon Technologies, Inc. Processing for multiple input data sets
JP7060803B2 (ja) 2018-06-20 2022-04-27 富士通株式会社 情報処理装置、コンパイラプログラム及びコンパイル方法
CN109634518A (zh) * 2018-10-29 2019-04-16 成都华为技术有限公司 一种存储资源配置方法及装置
CN110704362B (zh) * 2019-09-12 2021-03-12 无锡江南计算技术研究所 一种处理器阵列局部存储混合管理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784699A (en) * 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
WO2005081113A2 (en) * 2004-02-13 2005-09-01 Jaluna Sa Memory allocation
CN1679005A (zh) * 2002-08-30 2005-10-05 皇家飞利浦电子股份有限公司 动态存储器管理

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088777A (en) * 1997-11-12 2000-07-11 Ericsson Messaging Systems, Inc. Memory system and method for dynamically allocating a memory divided into plural classes with different block sizes to store variable length messages
JP4784792B2 (ja) 1999-12-22 2011-10-05 学校法人早稲田大学 マルチプロセッサ
JP3757825B2 (ja) * 2001-06-29 2006-03-22 日本電気株式会社 プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム
DE10228103A1 (de) 2002-06-24 2004-01-15 Bayer Cropscience Ag Fungizide Wirkstoffkombinationen
US7563748B2 (en) 2003-06-23 2009-07-21 Cognis Ip Management Gmbh Alcohol alkoxylate carriers for pesticide active ingredients

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5784699A (en) * 1996-05-24 1998-07-21 Oracle Corporation Dynamic memory allocation in a computer using a bit map index
CN1679005A (zh) * 2002-08-30 2005-10-05 皇家飞利浦电子股份有限公司 动态存储器管理
WO2005081113A2 (en) * 2004-02-13 2005-09-01 Jaluna Sa Memory allocation

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
第8页第2-5段.

Also Published As

Publication number Publication date
KR20090106613A (ko) 2009-10-09
JP2008217134A (ja) 2008-09-18
GB2459802B (en) 2012-01-04
GB2478874B (en) 2011-12-28
CN101601017A (zh) 2009-12-09
GB201109237D0 (en) 2011-07-13
GB0914592D0 (en) 2009-09-30
WO2008105558A1 (ja) 2008-09-04
US20100174876A1 (en) 2010-07-08
US8438359B2 (en) 2013-05-07
JP5224498B2 (ja) 2013-07-03
GB2478874A (en) 2011-09-21
GB2459802A (en) 2009-11-11
KR101186174B1 (ko) 2012-10-02

Similar Documents

Publication Publication Date Title
CN101601017B (zh) 存储器管理方法以及程序的生成方法
Gómez-Luna et al. Benchmarking a new paradigm: An experimental analysis of a real processing-in-memory architecture
Bauer et al. Singe: Leveraging warp specialization for high performance on gpus
Ding et al. Improving effective bandwidth through compiler enhancement of global cache reuse
KR101559090B1 (ko) 이종 코어를 위한 자동 커널 마이그레이션
US5442760A (en) Decoded instruction cache architecture with each instruction field in multiple-instruction cache line directly connected to specific functional unit
CN101978350B (zh) 用于实现高效同步和并行归约操作的向量指令
CN102696023B (zh) 用于访问并行存储器空间的统一寻址和指令
Panda et al. Local memory exploration and optimization in embedded systems
US20100115233A1 (en) Dynamically-selectable vector register partitioning
CN103635875A (zh) 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
CN103562866A (zh) 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
WO2013184380A2 (en) Systems and methods for efficient scheduling of concurrent applications in multithreaded processors
CN103547993A (zh) 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
CN103425533A (zh) 用于管理嵌套执行流的方法和系统
KR20180021165A (ko) 프로세서 명령어 창에 대한 명령어 블록의 대량 할당
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
Beri et al. The unicorn runtime: efficient distributed shared memory programming for hybrid cpu-gpu clusters
Heldens et al. Lightning: Scaling the GPU programming model beyond a single GPU
CN116802605A (zh) 用于根据触发条件执行指令的电路和方法
Bellas et al. GPU processing of theta‐joins
Hurson et al. Cache memories for dataflow systems
Yang et al. Fei teng 64 stream processing system: architecture, compiler, and programming
Peng et al. Static cost estimation for data layout selection on GPUs
Tyson Evaluation of a Scalable Decoupled Microprocessor Design

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20091209

Assignee: Oscar Technology Ltd

Assignor: Waseda Univ.

Contract record no.: 2016990000211

Denomination of invention: Memory management method, program creation method

Granted publication date: 20131009

License type: Exclusive License

Record date: 20160525

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model
EC01 Cancellation of recordation of patent licensing contract

Assignee: Oscar Technology Ltd

Assignor: WASEDA University

Contract record no.: 2016990000211

Date of cancellation: 20211125

EC01 Cancellation of recordation of patent licensing contract