处理器可执行的代码的生成方法、存储区域管理方法以及保存代码生成程序的存储介质的制作方法

文档序号:6351493阅读:183来源:国知局
专利名称:处理器可执行的代码的生成方法、存储区域管理方法以及保存代码生成程序的存储介质的制作方法
技术领域
本发明涉及由多个处理元件构成的多处理器中的存储器的管理方法,特别涉及基于由编译器取得的信息进行控制,以保证共享存储器所保存的数据的一贯性(一致性)的方法。
背景技术
将多个处理元件集成而成的多处理器不断被各微处理器厂家发布。除了超级计算机、服务器、台式计算机和PC服务器领域之外,在信息家电及装置组装领域(例如,便携电话机、游戏机、车辆导航系统、数字电视机、HDD/DVD记录器 播放器等)中,也看到了微处 理器的多核化的趋势。多处理器具备多个处理元件、内部结合网以及集中共享存储器,各处理元件具备处理器和高速缓冲存储器,独立地进行运算处理。这种结构的多处理器将集中共享存储器用作主存储,将多个处理元件用作对集中共享存储器所保存的同一数据进行访问的主存储共享型处理器。这时,为了保证共享数据间的一致性,在某处理器正在访问高速缓冲存储器上的共享数据时,需要进行禁止其他处理器从集中共享存储器向高速缓冲存储器访问该共享数据的一致性控制。在此,所述一致性是一种控制,用于保证在某时刻全部处理器能够将存储器的某个地址上所保存的值作为同一值进行访问,并且在主存储共享型多处理器中被各处理器访问的存储器内容相同。用于保证一致性的功能中有通过硬件来控制存储器访问的一致性高速缓冲存储器(coherent cache)。在一致性控制中必须要解决的第一问题是数据的过期化(Stale Data),第二问题是伪共享(False Sharing)。图22是说明一致性控制中的第一问题点(过期数据)的图。首先,声明全局变量a、b、c (2200),在共享存储器中保存了变量a = 0、b = 0、c =1 (2201)。然后,在某处理元件(PEO)的高速缓冲存储器中保存有共享数据(a = O、b = O、c = I) (2202),在其他处理元件(PEl)的高速缓冲存储器中也保存有共享数据(2203)的情况下,即使PEO中该共享数据(a = 0 — I)被更新,PEl的高速缓冲存储器上的共享数据也还是未被更新的旧数据(a = 0) (2205)。若在该状态下PEl中该共享数据被更新(c = a),则变量c就会被更新为0,而不反映正确的a的值(2206)。因此,如果进行了一致性控制,贝u应该是a = I、b = O、c = I的变量成为a = O、b = 0、c = O。因此,PEO的高速缓冲存储器中保存的数据与PEl的高速缓冲存储器中保存的数据就会不一致。因此,PEl会做出错误的动作。图23是说明一致性控制中的第二问题点(伪共享)的图。
首先,声明全局变量a、b (2300),在共享存储器中保存变量a = O、b = 0(2301)。该变量a和b被保存在共享存储器的相同的高速缓冲存储线上。此外,以线单位访问共享存储器。然后,某处理元件(PEO)的高速缓冲存储器中保存的共享数据被更新(a = 0 — I)
(2302),其他处理元件(PEl)的高速缓冲存储器中保存的共享数据被更新(b= 0 — 2)
(2303)。即,各处理元件更新了同一线上所保存的不同变量。该情况下,若PEO先向共享存储器写回数据,则之后写回数据的PEl的数据保存在共享存储器中(2304)。另一方面,若PEl先向共享存储器写回数据,则之后写回数据的PEO的数据保存在共享存储器中(2305)。在进行了一致性控制的情况下,会在共享存储器中保存a = l、b = 2,但在不进行一致性控制的情况下,不能确定最终哪个数据会保存在共享存储器中。即,存储器的内容根据线降级(destage)定时而不同,无论哪种情况,处理元件都会进行错误的动作。为了解决这种在共享存储器与高速缓冲存储器之间会产生不一致的问题,通过在各处理元件和共享资源(内部结合网络、共享存储器等)中设置一致性控制部,来保持存储器中所保存的数据的一致性。具体而言,在某处理元件(PEO)从共享存储器读出了数据X之后,不许可其他处理元件(PEl)向共享存储器写入数据X,直到PEO从共享存储器读出数据X并将其更新后,撤销对数据X的所有权。利用这样的所有权控制,能够解决数据的过期化(Stale Data)和伪共享(FalseSharing)的一致性控制的问题。现有技术文献专利文献专利文献I :日本特开2004-30362号公报专利文献2 :日本特开平9-44403号公报
发明概要发明要解决的问题但是,在通过硬件对存储器访问进行所有权控制的一致性高速缓冲存储器中,因为硬件的成本,在处理器数量增加时多处理器的成本会上升。此外,因为通过硬件来控制存储器访问,因此存储器访问会变慢。另外,在基于硬件的一致性控制中,由于按每个事件都向全部处理器、存储器和总线控制机构发送信号,因此会产生执行时的开销。该开销与多处理器中包含的处理器数量相应地增加。因此,在处理器数量增加了的情况下,用于一致性控制的通信会占满总线,从而阻碍处理器的工作。

发明内容
因此,要求一种利用更简单的硬件结构的一致性控制,特别是利用软件的一致性控制。用于解决问题的手段本申请中公开的发明的一个代表例如下。即,一种由编译器生成代码的方法,所述代码可以由多处理器系统所具备的处理器来执行,所述方法的特征在于,所述多处理器系统具备多个处理元件以及能够从所述各处理元件进行访问的主存储装置,所述各处理元件具备进行运算处理的处理器以及暂时保存由所述处理器使用的数据的高速缓冲存储器,所述处理元件从所述主存储装置读入的数据暂时保存在所述高速缓冲存储器中,所述处理元件结束使用的数据从所述高速缓冲存储器写回到所述主存储装置中,在所述主存储装置与所述高速缓冲存储器之间,按照所述高速缓冲存储器的管理单位转送数据,所述方法中,对由所述处理器执行的程序进行解析,对所述程序中包含的执行各任务所需要的数据进行解析,基于所述解析结果,在分割了所述各任务的情况下判定所述分割后的任务所使用的数据的边界与存储器的管理单位是否匹配,在判定为所述任务所使用数据的边界与存储器的管理单位不匹配的情况下,生成设置不可高速缓冲存储区域的代码,所述不可高速缓冲存储区域是应该保存在包含该边界的管理单位中的数据不暂时保存在所述高速缓冲存储器中的区域;以及将包含该边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中的代码。发明效果根据本发明的代表实施方式,能够简化硬件。因此,能够实现低成本且低功耗的多 处理器。


图I是本发明实施方式的多处理器的结构图。图2是说明本发明实施方式的多处理器的高速缓冲存储器的各线所能取的状态的图。图3A是说明本发明实施方式的避免消耗过期数据的方法的图。图3B是说明本发明实施方式的避免消耗过期数据的方法的图。图4是说明本发明实施方式的避免发生伪共享的方法的概要的图。图5A是说明在使用一维数组的情况下,在数组变量的要素之间发生伪共享的例子的图。图5B是说明在使用一维数组的情况下,在数组变量的要素之间发生伪共享的例子的图。图6A是说明本发明第一实施方式的避免发生伪共享的方法的图。图6B是说明本发明第一实施方式的避免发生伪共享的方法的图。图7A是说明本发明第二实施方式的避免发生伪共享的方法的图。图7B是说明本发明第二实施方式的避免发生伪共享的方法的图。图8A是说明本发明第三实施方式的避免发生伪共享的方法的图。图SB是说明本发明第三实施方式的避免发生伪共享的方法的图。图SC示出本发明第三实施方式中的将不可高速缓冲存储区域设置在集中共享存储器中的情况下的例子。图8D示出本发明第三实施方式中的将不可高速缓冲存储区域设置在分散共享存储器中的情况下的例子。图9A是说明本发明第三实施方式的避免发生伪共享的方法的变形例的图。图9B示出图9A所示的变形例中的将不可高速缓冲存储区域设置在集中共享存储器中的情况下的例子。图9C示出图9A所示的变形例中的将不可高速缓冲存储区域设置在分散共享存储器中的情况下的例子。图IOA是说明本发明第三实施方式的避免发生伪共享的方法的变形例的图。图IOB是说明本发明第三实施方式的避免发生伪共享的方法的变形例的图。图11是说明本发明第四实施方式的避免发生伪共享的方法的变形例的图。图12A是说明在使用多维数组的情况下,在数组变量的要素之间发生伪共享的例子的图。图12B是说明在使用多维数组的情况下,在数组变量的要素之间发生伪共享的例子的图。图13A是说明将第一实施方式适用于二维数组变量的例子的图。图13B是说明将第一实施方式适用于二维数组变量的例子的图。图14A是说明将第二实施方式适用于二维数组变量的例子的图。图14B是说明将第二实施方式适用于二维数组变量的例子的图。图15A是说明将第三实施方式适用于二维数组变量式的例子的图。图15B是说明将第三实施方式适用于二维数组变量的例子的图。图16是说明将第四实施方式适用于二维数组变量的例子的图。图17A是不出本发明实施方式的循环分割前处理的宏任务图表。图17B是不出本发明实施方式的循环分割前处理的宏任务图表。图17C是说明本发明实施方式的用于检测伪共享的代码的例子的图。图18是说明本发明实施方式的并行化编译器生成软件一致性控制代码的处理的概要的图。图19是本发明实施方式的由编译器执行的处理的流程图。图20A是本发明实施方式的伪共享避免处理的流程图。图20B是本发明实施方式的伪共享避免处理的流程图。
图21是本发明实施方式的高速缓冲存储操作指示的插入处理的流程图。图22是说明一致性控制中的第一问题点(过期数据)的图。图23是说明一致性控制中的第二问题点(伪共享)的图。
具体实施例方式图I是本发明实施方式的多处理器的结构图。本发明实施方式的多处理器具备多个处理元件(PEO、PE1、……、PEn)100、110、120、内部结合网150和集中共享存储器160。处理元件100具备进行运算处理的处理器101、暂时保存数据的高速缓冲存储器102、分散共享存储器(DSM) 103和数据转送控制器,独立地进行动作。处理器101只要能够进行整数运算和浮动小数点运算即可,其功能不受特别限定。例如,可以使用数据的装载(load)以及存放(store)的体系结构为单纯的单发(single-issue) RISC体系结构的CPU。此外,也可以使用超标量处理器、VLIW处理器等。高速缓冲存储器102是暂时保存由处理器101从集中共享存储器160读入的数据的存储器。处理器101使用保存在高速缓冲存储器102中的数据进行运算处理。若处理器101的运算处理结束,则保存在高速缓冲存储器102中的数据写回到集中共享存储器160中。在该高速缓冲存储器102和集中共享存储器160之间,按每个线读写数据。该线是高速缓冲存储器102所保存的数据的管理单位。另外,处理元件100也可以将高速缓冲存储器102用作二级高速缓冲存储器,除高速缓冲存储器102以外,还具备一级高速缓冲存储器。该情况下,所述一级高速缓冲存储器和二级高速缓冲存储器(高速缓冲存储器102)也可以被进行一致性控制。即,本发明实施方式的多处理器中不具有在发挥主存储作用的集中共享存储器160和最外侧的高速缓冲存储器102之间保证数据的一致的一致性功能。分散共享存储器103是能够从其他处理元件直接读写所保存的数据的存储器。另夕卜,若分散共享存储器103由双口存储器构成,则处理器101与数据转送控制器能够没有竞争地对分散共享存储器进行访问。另外,分散共享存储器103对本实施方式的多处理器来说不是必须的结构。 数据转送控制器在处理元件之间转送处理元件所具备的存储器中保存的数据。另外,处理元件100除了图示的结构以外,还可以具备局部程序存储器、局部数据存储器、网络接口和功率控制寄存器。另外,处理元件110、120也具有与处理元件100相同的结构。内部结合网150由已有的连接技术(纵横开关、总线、多级式网络等)来实现,连接多个处理元件100等以及集中共享存储器160。集中共享存储器160 (CSM)发挥主存储功能,保存由系统中的全部处理元件100等共享的数据,是可以从各处理元件100等进行访问的存储器。另外,本实施方式的多处理器不具有用于在高速缓冲存储器102等与集中共享存储器160之间保证数据的一致的基于硬件实现的一致性功能。〈过期数据的解决〉首先,关于避免发生第一问题即过期数据的方法进行说明。本发明实施方式的多处理器如上所述,不具有用于在高速缓冲存储器102等与集中共享存储器160之间保证数据的一致的基于硬件实现的一致性功能。因此,在某处理元件在高速缓冲存储器上更新了数据的情况下,该数据更新不会被通知到其他处理元件。此夕卜,直到写回已更新的数据为止,更新后的数据也不被反映到集中共享存储器160。因此,本发明实施方式的编译器基于对程序的解析结果(数据控制流、数据依赖关系),生成基于软件的明确的高速缓冲存储操作代码。生成的高速缓冲存储操作代码只是对保存在执行该命令的处理元件的高速缓冲存储器中的数据进行操作的命令,并不是像由硬件实现的一致性协议中的高速缓冲存储操作请求那样的、对保存在其他处理元件的高速缓冲存储器中的数据的状态进行操作的命令。生成的高速缓冲存储操作代码有回写、自无效、清除三种。回写(writeback)是用于将保存在高速缓冲存储器102中的数据写回到集中共享存储器160中的命令。在高速缓冲存储器102上数据被更新、与集中共享存储器160上的对应的地址中保存的数据不同的情况下,线的状态成为脏(dirty),需要将高速缓冲存储器102中保存的数据写回到集中共享存储器160中。
另外,通过随着高速缓冲存储器102的线更换(line Replace)的数据的写回(auto-writeback),数据也会写回到集中共享存储器160。自无效(self-invalidate)是用于使高速缓冲存储器102的线无效化的命令。被自无效后成为无效状态的数据即使保存在高速缓冲存储器中,在从集中共享存储器160读入为止也不能使用。清除(purge)是用于在将高速缓冲存储器102的线中保存的数据写回(回写)之后执行自无效的命令。此外,在各处理元件所执行的任务之间发生通信之处插入高速缓冲存储操作代 码。另外,在不同的处理元件保持着同一线的数据的情况下,编译器控制为不同时更新保存在不同的处理元件中的同一线的数据。图2是说明本发明实施方式的多处理器的高速缓冲存储器102的各线所能取的状态的图。高速缓冲存储器102按每个线取修改(Modified)、有效(Valid)、过期(Stale)、无效(Invalid)四种状态。修改(Modified)是指高速缓冲存储器102所保存的数据为被更新后的脏数据,与集中共享存储器160上的对应的地址中保存的数据不同的状态。该情况下,需要通过回写来将高速缓冲存储器102中保存的数据写回到集中共享存储器160中。有效(Valid)是高速缓冲存储器102中保存的数据与集中共享存储器160上的对应的地址中保存的数据相一致的干净(clean)状态。过期(Stale)是由其他处理元件重写了应该与高速缓冲存储器102中保存的数据同步的数据、但是该更新数据还未被写回到集中共享存储器160中、因此该高速缓冲存储数据与集中共享存储器160上的对应的地址中保存的数据相一致的干净状态。无效(Invalid)是有可能是与高速缓冲存储器102中保存的数据不一致的数据的状态。上述四种状态通过对高速缓冲存储器102的访问以及高速缓冲存储操作来迁移。对高速缓冲存储器102的访问中有由处理器101从集中共享存储器160读入数据的读入(read)和由处理器101向高速缓冲存储器102写入数据的写入(write)。本发明实施方式的编译器进行控制,以使保存在多个处理元件的高速缓冲存储器中的同一线的数据不同时为修改(Modified)。此外,本实施方式的编译器还控制成不读写过期数据。图3A和图3B是说明本发明实施方式的避免消耗过期数据的方法的图。本发明实施方式的编译器在存在跨处理元件的数据依赖的情况下,在数据依赖的边缘使数据同步。例如,编译器应该通过程序的解析而检测出的数据依赖的边缘,是根据流依赖而产生的定义-使用(def-use)关系。例如,如图3A所示,当PEO在任务块I(SBl)中定义变量A(300)后PEl在任务块3 (SB3)中使用变量A的情况下,如图3B所示,随着PEO对变量A的更新,PEl将保存有变量A的线的状态变更为无效(302)。此外,在PEO将变量A写回到集中共享存储器(301)后,PEl使用变量A。
更具体而言,编译器在其他处理元件(PEl)中使用PEO更新的变量A之前,插入回写命令(301)。该情况下,在接下来自身处理元件(PEO)使用变量A时不插入回写命令,就在其他处理元件(PEl)使用变量A之前插入回写命令即可。进而,为了进行使用标志变量的处理元件间的数据同步,编译器在同步的发送侧(PEO)插入向同步标志变量(sync_flg)中写入表示同步的值的命令(302)、和将保存有该同步标志变量的高速缓冲存储器的线写回到集中共享存储器的命令(303)。另一方面,关于PE1,编译器在使用由其他处理元件(PEO)更新后的变量A之前,插入自无效命令(304)。另外,插入自无效命令(403)的位置(自无效的定时)优选为使用变量A的紧前。进而,编译器反复进行同步标志变量(sync_flg)的无效和读入,并且插入直到同步标志变量的值被更新为表示同步的值为止在忙碌等待状态下待机的命令(305)。 PEl由于变量A被无效而不能够使用高速缓冲存储器上的变量A,因此,从集中共享存储器160向高速缓冲存储器装载变量A,取得PEO中更新后的变量A。以上关于定义-使用(def-use)的关系进行了说明,但在根据输出依赖而产生的定义-定义(def-def)关系、使用-定义(use_def)的反依赖关系、使用-使用(use_use)的输入依赖关系中也可能发生同样的情况。这样,本实施方式的编译器按照对任务之间的流依赖和输出依赖进行解析的结果来插入高速缓冲存储操作命令,因此,不用进行一致性控制,而不消耗过期数据。〈伪共享的解决〉下面,关于避免发生第二问题即伪共享的方法进行说明。图4是说明本发明实施方式的避免发生伪共享的方法的概要的图。在本实施方式中,各变量以由各处理元件使用的变量不放置到相同的高速缓冲存储器线上的方式配置(定位)在高速缓冲存储器的线的开头。另外,变量的定位既可以在数组变量的声明中指定,也可以另行在设定文件等中进行描述。首先,与图23中所述同样,声明全局变量a、b (400),变量a = O、b = 0保存在集中共享存储器160中。但是,在本发明的实施方式中与图23中所述不同的是,声明后的全局变量a、b配置在集中共享存储器160的高速缓冲存储器的线的开头,因此,保存在不同的线上。然后,某处理元件(PEO)的高速缓冲存储器上的共享数据被更新(a = 0— I)(401),其他处理元件(PEl)的高速缓冲存储器上的共享数据被更新(b = 0 — 2) (402)。但是,由于各处理元件更新了不同线上所保存的不同的变量,因此,不管各处理元件在哪个定时将高速缓冲存储器中保存的数据写回到集中共享存储器160(404、405),集中共享存储器160中都是保存正确的数据(a = l、b = 2)。下面,关于使用一维数组的情况进行说明。图5A和图5B是说明在使用一维数组的情况下,在数组变量的要素之间发生伪共享的例子的图。首先,如图5B所示,声明全局变量a,变量a配置在集中共享存储器线的开头(高速缓冲存储器的线的开头)(500)。本实施方式中考虑高速缓冲存储器的I个线是16字节,能够在I个线上保存4个变量的情况。因此,如图5A所示,在高速缓冲存储器的第一线511保存有a
至a [3],在第二线512保存有a [4]至a [7],在第五线511保存有a [16]至a[19]。然后,处理元件(PEO) 100在高速缓冲存储器102上处理变量a[i] (0彡i < 18)(501),处理元件(PEl) 110在高速缓冲存储器112上处理变量a[i] (18彡i < 36) (502),PEO和PEl将处理结果从高速缓冲存储器102和112写回到集中共享存储器160中。从高速缓冲存储器102和112向集中共享存储器160的数据写回以线单位进行。由于在第五线515上存在由PEO处理的a[16]和a[17]以及由PEl处理的a[18]和a[19],因此,在该线上,PEO所进行的访问和PEl所进行的访问相竞争而发生伪共享。图6A和图6B是说明本发明第一实施方式的避免发生伪共享的方法的图。在第一实施方式的方法中,如图6A所示,通过将全局变量a的各要素配置在集中共享存储器的线开头(高速缓冲存储器的线的开头),来将各要素配置在不同的线上。因 此,处理被高速缓冲存储器的边界分割。首先,如图6B所示,声明全局变量a,变量a中包含的36个数组变量的各要素配置在集中共享存储器线的开头(高速缓冲存储器的线的开头)(600)。然后,处理元件(PEO) 100处理变量a[i] (0彡i < 18) (601),处理元件(PEl) 110处理变量a [i] (18彡i < 36) (602),PEO和PEl将处理结果写回到集中共享存储器160中。但是,与使用图5A所述的情况不同,如图6B所示,PEO和PEl不对集中共享存储器160的相同的线进行访问。因此,多个处理元件不向相同的线写回数据,不会发生伪共享。另外,在本实施方式中,I个线具有能够保存4个变量的容量,但由于I个线仅保存了 I个变量,因此,高速缓冲存储器的利用效率下降。因此,本实施方式在数组变量的要素数量少的情况下有效。此外,在同一处理元件进行对数组变量的下标不同的要素(a(i)、a (i+1))进行访问的这种间接存储器访问的情况下也有效。图7A和图7B是说明本发明第二实施方式的避免发生伪共享的方法的图。如使用图5A所述,伪共享是因在高速缓冲存储器的I个线上保存由不同的处理元件所处理的数据而发生的。因此,在本实施方式中,如图7A所示,在高速缓冲存储器的线的边界分开由各处理元件处理的数据,以使由多个处理元件处理的数据不保存在高速缓冲存储器的I个线上。首先,如图7B所示,声明全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)(700)。然后,处理元件(PEO) 100处理变量a[i] (0彡i < 16) (701),处理元件(PEl) 110处理变量a[i] (16 ^ i < 36) (702)。然后,PEO将处理结果从高速缓冲存储器102写回到集中共享存储器160中,PEl将处理结果从高速缓冲存储器112写回到集中共享存储器160中。在本实施方式中,I个线具有能够保存4个变量的容量,因此,使各处理元件处理高速缓冲存储器线尺寸4的倍数个的数组变量的要素。因此,如图7A所示,所述PEO的访问范围和PEl的访问范围在高速缓冲存储器的线的边界被分开,所述PEO和PEl不对高速缓冲存储器的相同的线进行访问。因此,多个处理元件不向相同的线写回数据,不会发生伪共享。另外,在本实施方式中,对PEO分配了 16个数组变量的处理,对PEl分配了 20个数组变量的处理,但如果以成为高速缓冲存储器线尺寸(I个线所能保存的数组变量的要素数)的倍数的方式划分,则也可以对PEO分配20个数组变量的处理,对PEl分配16个数组变量的处理。此外,也可以按照各处理元件的处理能力比来分配适当数量的数组变量的处理。另外,在本实施方式中,根据高速缓冲存储器线尺寸、数组变量的要素的数量和处理元件的数量,分配给各处理元件的数组变量的要素的数量不相等,有时会产生处理元件的处理负荷不均衡。因此,本实施方式在数组尺寸足够大、并且与数组尺寸相比不均衡小到可以忽略的程度的情况下有效。图8A和图SB是说明本发明第三实施方式的避免发生伪共享的方法的图。在第三实施方式中,通过在处理的边界上使用不可高速缓冲存储区域 (non-cacheable area)来避免伪共享的发生。首先,如图8B所示,声明全局变量a和变量ncbuf,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头),4个数组变量尺寸的变量ncbuf设置在不可高速缓冲存储区域中(800)。所述不可高速缓冲存储区域,是在处理元件从存储器读入了该区域中保存的数据时,将该读入的数据不装载到各处理元件的高速缓冲存储器中地使用的区域。通过将存储器的区域(地址)或者规定的变量指定给不可高速缓冲存储区域,来将不可高速缓冲存储区域与通常的可高速缓冲存储区域相区别。该不可高速缓冲存储区域的指定可以由规定的设定文件预先设定,也可以由声明变量的命令来设定。然后,处理元件(PEO) 100在高速缓冲存储器上处理变量a [i] (0^ i< 18) (801),处理元件(PEl) 110使用ncbuf [i] (i = 2、3),在不可高速缓冲存储区域上处理变量a[i](18、19) (802),PEl在高速缓冲存储器上处理变量a[i] (20彡i < 36) (803)。PEO在之后或者与处理803并行地从不可高速缓冲存储区域中读出已由PEl处理后的变量ncbuf[i] (i = 2、3),并写入到PEO的高速缓冲存储器的变量a[i] (i = 18,19)中(804)。利用该数据依赖,由PEl处理的变量a[i] (i = 18、19)转送到PEO0然后,PEO将变量a[i] (0彡i < 20)写回到集中共享存储器160中,PEl将变量a[i] (20彡i < 36)写回到集中共享存储器160中。这样,第三实施方式中,如图8A所示,PEl将使用不可高速缓冲存储的缓冲器运算出的结果反映到PEO的高速缓冲存储器的变量。即,在多个处理元件对相同的线上的数据进行访问的情况下,一方处理元件(PEl)在设置在高速缓冲存储器内的不可高速缓冲存储区域中保存该线上的数据,另一方处理元件(PEO)将不可高速缓冲存储区域的数据保存在集中共享存储器中,因此,多个处理元件不向相同的线写回数据,不会发生伪共享。另外,保存在线811 814中的数据仅被PEO使用,保存在线811 814中的数据仅被PEO使用,因此,也可以将线811 814和线816 819在高速缓冲存储器上局部化。局部化后的数据不被写回到主存储中,而是保持在高速缓冲存储器上,直到下一次PEO使用。同样,也可以将应该保存在线811 814中的数据和应该保存在线816 819中的数据保存在局部存储器中。S卩,仅是第五线815处于高速缓冲存储器上(可高速缓冲存储区域上)即可,除此以外的区域(线811 814、线816 819)也可以不存在于可高速缓冲存储区域上。
另外,本实施方式中需要在存储器上设置不可高速缓冲存储区域,但不可高速缓冲存储区域也可以设置在集中共享存储器、分散共享存储器等中的任意存储器中。此外,本实施方式中会产生从不可高速缓冲存储区域向高速缓冲存储器复制数据的处理的开销。但是,通过利用分散共享存储器来作为不可高速缓冲存储的缓冲器,能够以低开销实现数据的转送。该第三实施方式的方法在通过上述第二实施方式的方法不能分割的情况下、数组不能扩展的情况下有效。图SC表示在本发明第三实施方式中不可高速缓冲存储区域设置在集中共享存储器160中的情况的例子。在图SC所示的例子中,集中共享存储器160的一部分区域被指定为不可高速缓冲存储区域。PEO在高速缓冲存储器上处理变量a [i] (0彡i < 18) (801),处理元件(PEl)IlO使用ncbuf [i] (i = 2、3),在设置在集中共享存储器160中的不可高速缓冲存储区域上处理 变量a[i] (18、19) (802),PEl在高速缓冲存储器上处理变量a[i] (20彡i < 36) (803)。然后,从集中共享存储器160的不可高速缓冲存储区域中读出由PEl处理后的变量ncbuf[i] (i = 2、3),并写入到?£0的高速缓冲存储器的变量&[1] (i = 18,19)中(804)。由此,由PEl处理后的变量a[i](i = 18、19)转送到PE0。因此,即使PEO将变量a[i](0彡i < 20)写回到集中共享存储器160中、且PEl将变量a[i] (20 ^ i < 36)写回到集中共享存储器160中,也不会发生伪共享。图8D表示本发明第三实施方式的方法中的不可高速缓冲存储区域设置在分散共享存储器103中的情况的例子。在图8D所示的例子中,分散共享存储器103的一部分区域被指定为不可高速缓冲存储区域。PEO在高速缓冲存储器上处理变量a [i] (0彡i < 18) (801),处理元件(PEl)IlO使用ncbuf[i] (i = 2、3),在设置在PEO的分散共享存储器103中的不可高速缓冲存储区域上处理变量a [i] (i = 18、19) (802),PEl在高速缓冲存储器上处理变量a [i] (20 ^ i < 36)(803)。然后,从分散共享存储器103的不可高速缓冲存储区域中读出由PEl处理后的变量ncbuf[i] (i = 2、3),并写入到?£0的高速缓冲存储器的变量&[1] (i = 18,19)中(804)。由此,由PEl处理后的变量a[i](i = 18、19)转送到PE0。因此,即使PEO将变量a[i] (0彡i < 20)写回到集中共享存储器160中且PEl将变量a[i] (20 ^ i < 36)写回到集中共享存储器160中,也不会发生伪共享。图9A是说明本发明第三实施方式的避免发生伪共享的方法的变形例的图。图9A中说明的变形例与上述的例子不同,各处理元件在自己的存储器上进行运算,并将其运算结果转送到不可高速缓冲存储区域,由此避免伪共享的发生。因此,能够减少对其他存储器和处理元件等的访问,使处理高速化。首先,如图9A所示,声明全局变量a和变量ncbuf及localbuf_pel,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)。此外,数组变量4个的尺寸的变量ncbuf设置在不可高速缓冲存储区域中,将数组变量4个的尺寸的变量localbuf_pel设置在不可高速缓冲存储区域中(900)。另外,变量localbuf_pel仅在处理元件(PEl)IlO中被使用,因此是局部变量即可。
然后,处理元件(PEO) 100在高速缓冲存储器上处理变量a[i] (0 ≤ i < 18)(901),PEl 使用 localbuf_pel[i] (i = 2、3)处理变量 a[i] (18、19) (902),并将处理结果(localbuf_pel [i] (i = 2、3))写入到 ncbuf[i] (i = 2、3)中(903)。然后,PEl 在高速缓冲存储器上处理变量a[i] (20≤i < 36) (904)。PEO在之后或者与处理904并行地从不可高速缓冲存储区域中读出由PEl处理后的变量ncbuf[i] (i = 2、3),并写入到PEO的高速缓冲存储器的变量a[i] (i = 18、19)中(905)。通过该数据依赖,由PEl处理后的变量a[i] (i = 18、19)转送到PE0。然后,PEO将变量a[i] (0 ^ i < 20)写回到集中共享存储器160中,PEl将变量a[i] (20≤i < 36)写回到集中共享存储器160中。图9B表示在本发明第三实施方式中不可高速缓冲存储区域设置在集中共享存储器160中、并且运算区域(l0CalbUf_pel)设置在PEl的存储器中的情况的例子。设置该运算区域的PEl的存储器可以是局部存储器,也可以是分散共享存储器,也可以是高速缓冲存储器。PEO在高速缓冲存储器上处理变量a[i] (0≤i < 18) (901),PEl使用设置在PEl的存储器上的localbuf_pel[i] (i = 2、3)来处理变量a[i] (18、19) (902),并将处理结果(localbuf_pel[i] (i = 2,3))写入到设置在集中共享存储器160中的不可高速缓冲存储区域上的ncbuf[i] (i = 2、3)中(903)。然后,PEl在高速缓冲存储器上处理变量a[i] (20 Si
<36)(904)。然后,从集中共享存储器160的不可高速缓冲存储区域读出由PEl处理后的变量ncbuf[i] (i = 2、3),并写入到PEO的高速缓冲存储器的变量a[i] (i = 18、19)中(905)。由此,由PEl处理后的变量a[i](i = 18、19)转送到PE0。因此,即使PEO将变量a[i] (0≤i <20)写回到集中共享存储器160中、并且PEl将变量a[i] (20 ^ i < 36)写回到集中共享存储器160中,也不会发生伪共享。图9C表示本发明第三实施方式的方法中的不可高速缓冲存储区域设置在分散共享存储器103中、并且运算区域(l0Calbuf_pel)设置在PEl的存储器中的情况的例子。在图9C所示的例子中,分散共享存储器103的一部分区域被指定为不可高速缓冲存储区域。此外,设置运算区域的PEl的存储器可以是局部存储器,也可以是分散共享存储器,也可以是高速缓冲存储器。PEO在高速缓冲存储器上处理变量a[i] (0≤i < 18) (901),PEl使用设置在PEl的存储器上的localbuf_pel[i] (i = 2、3)处理变量a[i] (18,19) (902),并将处理结果(localbuf_pel[i] (i = 2,3))写入到设置在PEO的分散共享存储器103中的不可高速缓冲存储区域上的ncbuf[i] (i = 2、3)中(903)。然后,PEl在高速缓冲存储器上处理变量a[i](20 ≤ i < 36) (904)。然后,从分散共享存储器103的不可高速缓冲存储区域读出由PEl处理后的变量ncbuf[i] (i = 2、3),并写入到PEO的高速缓冲存储器的变量a[i] (i = 18、19)中(905)。由此,由PEl处理后的变量a[i](i = 18、19)转送到PE0。因此,即使PEO将变量a[i] (0≤i <20)写回到集中共享存储器160中、并且PEl将变量a[i] (20 ^ i < 36)写回到集中共享存储器160中,也不会发生伪共享。根据图9A 图9C记载的变形例,由于在自身处理元件上的存储器中运算边界部分的变量,因此,能够减少经由总线的向其他处理元件或存储器的数据的转送,使处理高速化。图IOA和图IOB是说明本发明第三实施方式的避免发生伪共享的方法的变形例的图。首先,如图IOB所示,声明全局变量a、ncbuf_peO和ncbuf_pel,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头),4个数组变量的尺寸的变量ncbuf_peO和变量ncbuf_pel设置在不可高速缓冲存储区域中(1000)。该变量ncbuf_pe0配置在PEO的分散共享存储器中,变量ncbuf_pel配置在PEl的分散共享存储器中。在本实施方式中,处理元件(PEO) 100处理i = 0至i = 17的变量a,处理元件(PEl) 110处理i = 18至i = 35的变量a。
具体而言,处理元件(PEO) 100在高速缓冲存储器上处理了变量a[i] (0 ^ i < 16)(1001)。此外,PEO在分散共享存储器上的ncbuf_pe0中处理变量a[i] (16、17),并将处理结果写入到PEl的分散共享存储器的ncbuf_pel中(1002)。与此并行或者在其前后,处理元件(PEl) 110在分散共享存储器上的ncbuf_pel中处理变量a[i] (i = 18、19),并将处理结果写入到PEO的分散共享存储器的ncbuf_pe0中(1004)。此外,PEl在高速缓冲存储器上处理变量a[i] (20彡i < 36) (1005)。此外,PEO从不可高速缓冲存储区域读出变量ncbuf_peO[i] (0 ^ i < 4),并写入到PEO的高速缓冲存储器的变量a[i] (16彡i < 20)中(1003)。另外,根据从处理结果的向ncbuf_pe0的写入(1004)到向ncbuf_pe0的a[i]的写入(1003)的数据依赖,由PEl处理后的变量a[i](i = 18,19)保存在ncbuf_peO[i]中。因此,在步骤1003中,由PEO处理后的变量a[i] (i = 16,17)和由PEl处理后的变量a[i] (i = 18,19)写入到PEO的高速缓冲存储器上。然后,PEO和PEl将处理结果写回到集中共享存储器160中。但是,与使用图5A所述的情况不同,在PEO与PEl的边界区域的变量a [i] (16^ i < 20)中保存有相同的数据,因此,不管哪个处理元件写回数据,集中共享存储器160中保存的数据都不变。S卩,在第三实施方式中,各处理元件针对PEO所访问的集中共享存储器的区域与PEl所访问的集中共享存储器的区域的边界部分,使用分散共享存储器上的数据进行计算。另外,PEO的ncbuf_pe0和PEl的ncbuf_pel通过相互被写入而保存有相同的值。因此,在PEO向集中共享存储器写入了变量ncbuf_pe0的情况下,变量ncbuf_pel的i = 2、3也被写入到了集中共享存储器中,通过将ncbuf_pe0或者ncbuf_pel的某个写入到集中共享存储器中,另一方数据也被写入到集中共享存储器中。这样,在第三实施方式中,如图IOA所示,在多个处理元件对相同的线上的数据进行访问的情况下,在双方处理元件的分散共享存储器内设置的不可高速缓冲存储区域中保存该线上的数据,通过复制双方不可高速缓冲存储区域的数据,两个不可高速缓冲存储区域的数据一致,不管写回哪个数据,都不会发生伪共享。另外,本实施方式中需要在分散共享存储器上设置不可高速缓冲存储区域,产生在分散共享存储器之间复制数据的处理的开销。图11是说明本发明第四实施方式的避免发生伪共享的方法的变形例的图。在第四实施方式中,通过使用局部变量来避免伪共享的发生。
首先,如图11所示,声明全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)(1100)。然后,处理元件O(PEO) 100声明局部变量local_a(1101),在局部变量中处理变量a[i] (0 ≤ i < 18) (1102),向全局变量 a[i] (0 ≤ i < 18)写入局部变量 local_a[i] (0 ( i
<18) (1103)。与此并行或者在其前后,处理元件I (PEl) 110声明局部变量lOcal_a(1104),在局部变量中处理变量a[i] (18≤i < 36) (1105),向全局变量a[i] (18≤i < 36)中写入i =18 至 i = 35 的局部变量 local_a[i] (18 ≤ i < 36) (1106)。在步骤1106中,由于来自步骤1103的数据依赖已被设定,因此,在向a[i]中写入步骤1106的local_a[i]之前,从集中共享存储器160装载a[i] (i = 16、17)。因此,在步骤1006中,将由PEO更新后的a[16]和a[17]与a[18]和a[19] —起写回到集中共享存储器中。这样,在第四实施方式中,如图11所示,多个处理元件使用局部变量更新数据,各处理元件将局部变量写回到全局变量中。因此,第四实施方式中不会发生伪共享。另外,本实施方式中产生在处理元件之间复制数据的处理的开销。下面,关于使用多维数组的情况进行说明。图12A和图12B是说明在使用多维数组的情况下,在数组变量的要素之间发生伪共享的例子的图。首先,如图12B所示,声明6X6的二维数组的全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)(1200)。在高速缓冲存储器的I个线上能够保存4个变量。因此,如图12A所示,在高速缓冲存储器的第一线1211上存在a

至a
[3],在第二线1212上存在a
[4]至a[l] [I],在第五线1215上存在a[2] [4]、a[2]、a[3]
、a[3] [I]。然后,处理元件(PEO) 100在高速缓冲存储器102上处理变量a [i][j] (0<i <3、0≤j < 6) (1201),处理元件(PEl) 110在高速缓冲存储器112上处理变量a [i] [j] (3 ( i
<6、0 ≤ j < 6) (1202),PEO和PEl将处理结果从高速缓冲存储器102和112写回到集中共享存储器160中。从高速缓冲存储器102和112向集中共享存储器160的数据的写回以线单位进行。此外,若如上所述能够由高速缓冲存储器线的边界来分割循环,则不发生伪共享。但是,由于在第五线1215上存在由PEO处理的a [2] [4]和a [2] [5]、以及由PEl处理的a [3]
和a[3] [I],因此,在该线上,PEO进行的访问和PEl进行的访问相互竞争而发生伪共享。图13A和图13B是说明将第一实施方式适用于二维数组变量的例子的图。在第一实施方式中,为了由高速缓冲存储器线的边界来分割循环,将数组变量的各要素配置在按外侧循环的各参数而不同的线上。首先,如图13B所示,声明6X10的二维数组的全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)(1300)。该数组的各变量a[i] [j]配置在按外侧循环的各参数而不同的线上。在本实施方式中,在高速缓冲存储器的I个线上能够保存4个变量,需要的变量是6X6的数组,因此设置线尺寸(4个)的额外的变量来定义了 6X10的数组变量。
另外,设置线尺寸-I的额外的变量即可。并且,一般而言,额外的数组变量的数量的最低值由下式成为0以上的S的最低值给定。额外的数组变量的数量的最低值=S (4)的倍数-j maxS :线尺寸j max :与数组变量的外侧循环相比靠内侧一个的循环数量(6)然后,处理元件(PEO) 100在高速缓冲存储器102上处理变量a[i] [j] (0 < i < 3、0彡j < 6) (1301),处理元件(PEl) 110在高速缓冲存储器112上处理变量a [i] [j] (3 ( i
<6、0 ^ j < 6) (1302),PEO和PEl将处理结果从高速缓冲存储器102和112写回到集中共享存储器160中。从高速缓冲存储器102和112向集中共享存储器160的数据的写回以线单位进行。但是,与使用图12所述的情况不同,如图13B所示,所述PEO和PEl不对高速缓冲存储器的相同的线进行访问。因此,多个处理元件不向相同的线写回数据,不会发生伪共享。另外,在本实施方式中确保了额外的变量,因此高速缓冲存储器的利用效率下降。因此,本实施方式在数组变量的要素的数量少的情况下有效。图14A和图14B是说明将第二实施方式适用于二维数组变量的例子的图。在第二实施方式中,通过高速缓冲存储器的线的划分来对由各处理元件处理的数据进行区分,以使由多个处理元件处理后的数据不保存在高速缓冲存储器的I个线上。首先,如图14B所示,声明6X6的二维数组的全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)(1400)。然后,处理元件(PEO) 100在高速缓冲存储器102上处理变量a [i] [j] (OS i < 4、0彡j < 6) (1401),处理元件(PEl) 110在高速缓冲存储器112上处理变量a [i] [j] (4 ( i
<6、0 ^ j < 6) (1402)。然后,PEO将处理结果从高速缓冲存储器102写回到集中共享存储器160中,PEl将处理结果从高速缓冲存储器112写回到集中共享存储器160中。在本实施方式中,如图14A所示,I个线具有能够保存4个变量的容量,但所述a[3] [6]和a[4]
存在于不同的线上。因此,多个处理元件不向相同的线写回数据,不会发生伪共享。另外,在本实施方式中,对PEO分配24个数组变量的处理、对PEl分配12个数组变量的处理,但如果分为成为高速缓冲存储器线尺寸的倍数,则也可以对PEO分配12个数组变量的处理,对PEl分配24个数组变量的处理。此外,也可以按照各处理元件的处理能力比来分配适当数量的数组变量的处理。另外,在本实施方式中,只要对象维数以下的数组变量的要素的尺寸成为线尺寸的倍数则能够进行循环分割。该情况下,根据数组变量的要素的数量和处理元件的数量分配的数组变量的数量不相等,有时产生处理元件的处理负荷的不均衡。因此,本实施方式在数组尺寸足够大、并且与数组尺寸相比不均衡小到可以忽略的程度的情况下有效。图15A和图15B是说明将第三实 施方式适用于二维数组变量的例子的图。在第三实施方式中,使用不可高速缓冲存储区域来避免伪共享的发生。首先,如图15B所示,声明6X6的二维数组的全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)。此外,声明1X6的一维数组变量nc_buf2,并设置变量nc_buf2为6个(内侧循环的数量)变量的尺寸的不可高速缓冲存储区域(1500)。然后,处理元件(PEO) 100在高速缓冲存储器上处理变量a[i] [j] (0^i<3,0^ j<6) (1501),处理元件(卩£1)110使用11(3_131^2
[j] (0彡j<6)在不可高速缓冲存储区域上处理变量a [3] [j] (0彡j < 6) (1502),PEl在高速缓冲存储器上处理变量a [i] [j] (4 ( i
<6、0 彡 j < 6) (1503)。PEO在其之后或者与处理1503并行地从不可高速缓冲存储区域中读出由PEl处理后的变量nc_buf2
[j] (0彡j < 6),并写入至IJ PEO的高速缓冲存储器的变量a[3] [j](0彡j < 6)中(1504)。由此,由PEl使用nc_buf2
[j] (0彡j < 6)处理后的变量a[3][j] (0彡j < 6)转送到PEO中。然后,PEO将变量a[i] [j] (0彡i < 4、0彡j < 6)写回到集中共享存储器160中, PEl将变量a[i] [j] (4彡i < 6、0彡j < 6)写回到集中共享存储器160中。这样,在第三实施方式中,如图15A所示,PEl将使用非高速缓冲存储缓冲器运算出的结果反映到PEO的高速缓冲存储器的变量。即,在多个处理元件对相同的线上的数据进行访问的情况下,一方处理元件(PEl)在不可高速缓冲存储区域中保存该线上的数据,另一方处理元件(PEO)将不可高速缓冲存储区域的数据保存在集中共享存储器的高速缓冲存储区域中,因此,多个处理元件不向相同的线写回数据,不会发生伪共享。另外,在本实施方式中,需要在存储器上设置不可高速缓冲存储区域,但不可高速缓冲存储区域也可以设置在集中共享存储器、分散共享存储器等任何存储器上。此外,本实施方式中产生从不可高速缓冲存储区域向高速缓冲存储器复制数据的处理的开销。但是,通过利用分散共享存储器作为不可高速缓冲存储的缓冲器,能够以低开销实现数据的转送。图16是说明将第四实施方式适用于二维数组变量的例子的图。首先,如图16所示,声明6X6的二维数组的全局变量a,变量a配置在集中共享存储器的线的开头(高速缓冲存储器的线的开头)(1600)。然后,处理元件O(PEO) 100声明6X6的二维数组的局部变量local_a(1601),使用局部变量local_a[i] [j]来处理变量a[i] [j] (0彡i < 3、0彡j < 6) (1602),向全局变量 a[i] [j] (0 彡 i < 3、0 彡 j < 6)写入局部变量 local_a[i] [j] (0 彡 i < 3、0 彡 j < 6)(1603)。与此并行或者在其前后,处理元件I(PEl)IlO声明6X6的二维数组的局部变量local_a (1604),使用局部变量 local_a[i] [j]来处理变量 a[i] [j] (3 彡 i < 6、0 彡 j < 6)(1605),向全局变量 a[i] [j] (3 彡 i < 6、0 彡 j < 6)写入局部变量 local_a[i] [j] (3 ( i
<6、0 彡 j < 6) (1606)。在步骤1606中,由于来自步骤1103的数据依赖已被设定,因此,在向a[i] [j]中写入步骤1606的local_a[i] [j]之前,从集中共享存储器160装载a[2] [4]和a[2] [5]。因此,在步骤1006中,将由PEO更新后的a[2] [4]及a[2] [5]与a[3]
及a[3] [I] —起写回到集中共享存储器中。这样,在第四实施方式中,如图16所示,多个处理元件使用局部变量更新数据,各处理元件将局部变量写回到全局变量中。因此,第四实施方式中不会发生伪共享。
另外,本实施方式中产生在处理元件之间复制数据的处理的开销。以上说明的实施方式和变形例可以在程序的编译时组合I个或者多个来使用。下面,关于为了避免伪共享而选择最优方法的步骤进行说明。图17A是表示本发明实施方式的循环分割前的处理的宏任务图表。步骤1710的任务是将变量i作为控制变量的循环,通过对不同的处理元件分别调度通过循环分割而生成的部分任务来进行并行处理。在以最大分割数对该任务进行循环分割的情况下、即以使i循环的I个迭代量的处理成为一个部分任务的方式进行了循环分割的情况下所生成的各部分任务中,针对二维数组变量A,通过数据访问范围解析来解析出有可能变更第I维的0至99的要素、第2维的i至i的要素。同样,在步骤1720的任务中,针对二维数组变量B,解析出有可能使用第I维的0至99的要素、第2维的i至i的要素,在 步骤1730的任务中,针对二维数组变量B,解析出有可能使用第I维的0至99的要素、第2维的i至i的要素,在步骤1740的任务中,针对二维数组变量B,解析出有可能变更第I维的0至99的要素、第2维的i至i的要素,在步骤1750的任务中,针对二维数组变量B,解析出有可能变更第I维的0至99的要素、第2维的i至i的要素。在此,考虑以最大分割数分割各任务时的访问范围,是为了在以任意分割模式进行了任务分割的情况下,对是否存在发生伪共享的可能性进行分析。根据各任务的各部分任务中的数据的访问范围,对有可能发生伪共享的位置和成为其主要因素的数组变量及其数组维数进行解析。具体而言,在上述部分任务的数据访问范围中,在包含分割源的任务中的循环控制变量的维数之中最下位的维数中,将该下位维数的部分数组尺寸除以高速缓冲存储器的线尺寸时发生余量的情况下,能够判断为有可能发生伪共享。该情况下,有可能在进行该数组的更新的任务的分割后各部分任务之间、或者进行该数组的更新的任务的分割后各部分任务与使用该数组的任务的分割后的各部分任 务之间发生伪共享。另外,由于向存储器保存变量的方法根据程序语言而不同,因此,将哪个下标作为第I维,根据向存储器保存变量的方法而不同。即,在按保存在存储器的连续区域中的数组变量的要素而变化的下标与构成最内环循环的下标不同的情况下,编译器根据需要也可以进行改变计算顺序的相互交换。此外,在数组变量未排列在集中共享存储器160的线的开头的情况下,不论上述条件如何,都解析为有可能发生伪共享。图17B是表示本发明实施方式的循环分割后的处理的宏任务图表。本例中假设各任务的分割数为3,但该分割数可以任意设定。图17B中,实线(I条线)表示程序上的数据依赖,双线表示有可能发生伪共享的地方。另外,图17C表不检测伪共孚的代码的例子。图18是说明本发明实施方式的并行化编译器生成软件一致性控制代码的处理的概要的图。首先,应编译的程序2001输入到并行化编译器2002中。输入的程序2001是用C语言、Fortran语言等描述的逐级程序。并行化编译器2002将输入的顺序程序(sequential program)并行化,生成并行API程序2003,该并行API程序2003被插入了用于在非一致性(non-coherent)高速缓冲存储器中执行的控制代码。生成的并行API程序2003是包含用于使用不具有一致性功能的高速缓冲存储器来执行程序的指示(API)的并行程序形式。所生成的并行API程序2003输入到代码生成编译器2004中。代码生成编译器2004 一边对用于使用不具有一致性功能的高速缓冲存储器来执行程序的指示(API)进行解释,一边将程序变换为机械语言命令(执行形式程序)2005。该执行形式程序2005中也包含用于在非一致性高速缓冲存储器中执行程序的命令。图19是本发明实施方式的编译器执行的处理的流程图。首先,编译器解析要编译的程序的字句,解析程序的句法(2101)。基于句法的解析结果,生成基于层次式任务、即程序的层次式宏任务的表现(2102)。 然后,对生成的任务之间的依赖关系(控制流)进行解析(2103),并解析任务之间的数据依赖(2104),解析由各任务访问的数据的范围(2105)。然后,使用程序的解析结果,对程序能够最早执行的条件进行解析(2106),使用最早执行条件的解析结果,决定并行处理区间、被分配任务的处理器数量,并生成宏任务图表。然后,根据宏任务图表中的数据依赖关系,通过使用图17A、图17B和图17C说明的方法检测伪共享,生成包含检测出伪共享的地方和检测出伪共享的变量在内的伪共享信息(2107)。然后,基于生成的伪共享信息,按检测出伪共享的每个地方决定避免伪共享的方法,按照所决定的方法插入命令,生成避免了伪共享的并行程序(2108)。关于该伪共享避免处理,使用图20A和图20B进行详细叙述。然后,执行决定各任务执行顺序的任务调度(2109),插入用于应对过期数据的高速缓冲存储操作指示(2110)。由此,生成带有一致性控制功能的并行程序。关于该高速缓冲存储操作指示的插入处理,使用图21进行详细叙述。图20A和图20B是本发明实施方式的伪共享避免处理的流程图,从编译处理(图19)的步骤2108开始调用。图20A和图20B所示的伪共享避免处理中,将在步骤2107中检测出的伪共享信息作为输入,关于对相同的数组发生的各伪共享进行以下处理。该伪共享避免处理大致分为数据布局(data layout)变换和重构,图20A表示数据布局变换处理,图20B表不重构处理。首先,判定成为处理对象的数组变量是否能够变换(2121)。例如,该数组变量在编译的程序中已关闭的情况下,具体而言,在所编译的程序中已声明,并且不成为在该程序以外定义的函数的自变量的情况下,由于数据布局的变换,程序有可能进行预期不到的动作,因此,判定为数组变量能够变换。其结果,在判定为数组不能够变换的情况下,数组的扩展或者装填等的数据布局的变换困难,因此前进到步骤2131 (图20B)进行重构。另一方面,在判定为数组能够变换的情况下,判定在数组的最快变化维数的要素之间是否发生伪共享(2122)。具体而言,在N维数组中,将最快变化维数定义为第I维,将最慢变化维数定义为第N维。所述最快变化维数是下标连续变化的数组的维数。例如,在通过循环来处理N维数组的情况下,循环的最内环成为最快变化维数,循环的最外环成为最慢变化维数。即,将最快变化维数的数据配置在存储器上的连续的区域中。其结果,在判定为在最快变化维数的要素之间发生伪共享的情况下,判定是否能够扩展数组(2123)。在步骤2123中判定是否即使扩展数组,由高速缓冲存储器利用效率下降引起的性能下降也还是小。例如,在数组尺寸足够小的情况下,即使如图6A所示地扩展数组,由高速缓冲存储器利用效率下降引起的性能下降也还是小,因此,判定为能够扩展数组。具体而言,在满足下式(I)的情况下,由于数组尺寸足够小,因此能够判定为能够扩展数组。Sal ( SXN......(I)Sal :对象数组的第I维的声明尺寸 S :高速缓冲存储器线尺寸N :所使用的处理器数量其结果,在判定为能够扩展数组的情况下,通过在程序中插入图6B所示的代码,如图6A所示地扩展数组。另一方面,在判定为数组的扩展困难的情况下,前进到步骤2131(图20B)进行重构。另一方面,在步骤2122中判定为在最快变化维数以外的维数的要素之间发生伪共享的情况下,判定是否能够装填数组(2125)。在步骤2125中判定是否即使装填数组,由高速缓冲存储器利用效率下降引起的性能下降也还是小。例如,在数组尺寸足够大的情况下,即使如图13A所示地装填数组,由高速缓冲存储器利用效率下降引起的性能下降也还是小,因此判定为能够装填数组。具体而言,在满足下式(2)的情况下,由于数组尺寸足够小,因此,能够判定为能够装填数组。Sa2 彡 SXN......(2)Sa2 :在对象数组变量中发生伪共享的维数以下的部分数组尺寸S 高速缓冲存储器线尺寸N :所使用的处理器数量其结果,在判定为能够扩展数组的情况下,通过在程序中插入图13B所示的代码,如图13A所示地扩展数组。另一方面,在判定为数组的扩展困难的情况下,前进到步骤2131(图20B)进行重构。在图20B所示的重构处理中,对于检测出的伪共享信息中的、未能用数据布局变换来应对的伪共享进行以下处理。首先,判定是否仅在各处理器的处理的边界区域发生伪共享(2131)。具体而言,判定对处理对象数组的访问是否为连续访问。例如,在并行化后各处理器所访问的区域重复的情况下(PE0对i、i+2、i+4……进行访问,PEl对i+1、i+3、i+5……进行访问的情况),对处理对象数组的访问不是连续访问,因此,在边界区域以外也发生伪共享。其结果,在判定为边界区域以外也发生伪共享的情况下,向步骤2139前进。另一方面,在判定为仅在边界区域发生伪共享的情况下,判定被判定为发生伪共享的地方是否是基于循环的并行处理(2132)。其结果,在判定为在基于循环的并行处理以外发生伪共享的情况下,向步骤2139、产.、rr.
目U进。另一方面,在判定为在基于循环的并行处理中发生伪共享的情况下,判定是否能够在高速缓冲存储器线的边界分割循环(2133)。其结果,在判定为不能在高速缓冲存储器线的边界分割循环的情况下,通过在程序中插入图8B所示的代码,来如图8A所示地使用缓冲器在处理元件之间进行通信(2138)。另一方面,在判定为能够在高速缓冲存储器线的边界分割循环的情况下,判定由循环分割引起的负荷不均衡所导致的性能下降是否小(2134)。例如,在循环回转数足够大的情况下,能够判定为由循环分割引起的负荷不均衡所导致的影响小。具体而言,在满足下式(3)的情况下,由于循环回转数足够大,因此能够判定为负荷的不均衡所导致的影响小。 R ^ SXN......(3)R :循环回转数S 高速缓冲存储器线尺寸N :所使用的处理器数量此外,也可以是,在对各处理器均等地分割了任务的情况下,将分割后的任务所使用的数据量(访问范围)的最大值与最小值之差,与线尺寸进行比较,在该差小于线尺寸的情况下,判定为负荷不均衡所导致的影响小。其结果,在判定为由循环分割引起的负荷不均衡所导致的影响大的情况下,通过在程序中插入图8B所示的代码,来如图8A所示地使用缓冲器在处理元件之间进行通信(2138)。另外,也可以使用图10A、图IOB所示的方法,在多维数组的情况下使用图15A、图15B所示的方法。另一方面,在判定为由循环分割引起的负荷不均衡所导致的影响小的情况下,判定是否能够仅在高速缓冲存储器线的边界分割循环(2135)。例如,在相同的循环内对数组变量的要素a[i]和a[i+l]进行访问的情况下,不能够仅在高速缓冲存储器线的边界分割循环。其结果,在判定为能够仅在高速缓冲存储器线的边界分割循环的情况下,通过在程序中插入图7B所示的代码,来如图7A所示地仅在高速缓冲存储器线的边界分割循环(2136)。另外,在多维数组的情况下,使用图15A、图15B所示的方法。另一方面,在相同的循环内对数组变量a[i]和a[i+l]进行访问时不能够仅在高速缓冲存储器线的边界分割循环的情况下,在能够在高速缓冲存储器线的边界分割循环的地方(例如,分割a[i]的地方),在程序中插入图7B所示的代码。另外,在不能在高速缓冲存储器线的边界分割循环的地方(例如,分割a[i+l]的地方),通过在程序中插入图SB所示的代码,来如图8A所示地使用缓冲器在处理元件之间进行通信(2137)。例如,对于a[i],在高速缓冲存储器线的边界分割循环,对于a[i+l],使用缓冲器在处理元件之间进行通信即可。该情况下,可以对a[i]的访问次数和a[i+l]的访问次数进行比较,对于访问次数多的数组变量的要素的下标,在高速缓冲存储器线的边界分割循环,减少缓冲器中保存的数据的通信的开销。另一方面,在步骤2139中,判定各处理元件中的从用于运算的私有变量向全局变量的复制处理的开销是否小。具体而言,在循环中执行的计算的处理量足够大的情况下,复制处理的开销小到可以忽略的程度。例如,在只是将其他变量的数据代入(复制)到a时,在循环中执行的计算的处理量小,但是在循环中将四则运算或函数的计算结果代入到a中时,在循环中执行的计算的处理量变大。其结果,在判定为变量的复制处理的开销小的情况下,通过在程序中插入图11所示的代码(多维数组的情况下,图16所示的代码),在各处理元件中使用已定义的私有变量进行运算,将运算结果从私有变量复制到全局变量(2140)。另一方面,在判定为变量的复制处理的开销大的情况下,将各处理元件运算出的结果依次写入到集中共享存储器160中(2141)。图21是本发明实施方式的高速缓冲存储操作指示的插入处理的流程图。首先,在并行化阶段中的任务图表的调度结果中,对分配给不同处理器的任务之间的数据依赖进行解析(2151)。 判定解析出的数据依赖关系是否是流依赖或者输出依赖(2152)。其结果,在解析出的数据依赖关系是流依赖或者输出依赖的情况下,插入高速缓冲存储操作指示。具体而言,如使用图3B所述,生成下述高速缓冲存储操作指示产生数据的一侧的处理元件在更新数据后,根据回写命令,向主存储(集中共享存储器160)写回更新后的数据的高速缓冲存储操作指示;和消耗数据的一侧的处理元件在消耗数据之前,根据自无效命令,从主存储读入数据的高速缓冲存储操作指示,并且,将所生成的高速缓冲存储操作指示插入到程序中。这时被控制成,产生侧的处理元件的数据的更新的结束通过标志通知到消耗侧的处理元件,消耗侧的处理元件根据标志的更新而知道数据的更新,从主存储读入更新后的数据。编译器生成基于该标志的控制命令,并将生成的控制命令插入到程序中。另一方面,在解析出的数据的依赖关系既不是流依赖也不是输出依赖的情况下,结束高速缓冲存储操作指示的插入处理。如以上说明,根据本发明的实施方式,通过基于软件的控制,不需要用于一致性控制的硬件,能够简化硬件。因此,能够实现低成本且低功率消耗的多处理器。此外,通过编译器的最优化,能够实现可伸缩的性能提高。作为除权利要求的范围中记载以外的本发明的代表性观点,列举下述方案。(I) 一种多处理器系统,具备多个处理元件以及能够从所述各处理元件进行访问的主存储装置,其特征在于,所述各处理元件具备进行运算处理的处理器以及暂时保存所述处理器所使用的数据的高速缓冲存储器;所述处理元件将从所述主存储装置读入的数据暂时保存在所述高速缓冲存储器中;按照所述高速缓冲存储器的管理单位,将结束使用的数据从所述高速缓冲存储器写回到所述主存储装置;在分割所述程序而生成的各任务所使用的数据的边界与存储器的管理单位不匹配的情况下,设置不可高速缓冲存储区域,将保存在包含该边界的管理单位中的运算结果保存在所述不可高速缓冲存储区域中,所述不可高速缓冲存储区域是应该保存在包含该边界的管理单位中的数据不暂时保存在所述高速缓冲存储器中的区域。(2)如(I)中记载的多处理器系统,其特征在于,所述处理元件至少包含第一处理元件和第二处理元件;
所述第一处理元件在所述高速缓冲存储器中,对在包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算;所述第二处理元件在所述不可高速缓冲存储区域中,对在包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算;将在所述不可高速缓冲存储区域中运算出的结果,转送给所述第一处理元件的高速缓冲存储器中。(3)如(I)中记载的多处理器系统,其特征在于,所述处理元件包含第一处理元件和第二处理元件;所述不可高速缓冲存储区域设置在各个所述处理元件上;
各个所述处理元件在自身处理元件的不可高速缓冲存储区域中,对在包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算;所述第一处理元件将在所述不可高速缓冲存储区域中运算出的结果写入到所述第二处理元件的共享存储器中。(4)如(I)至(3)的任一项中记载的多处理器系统,其特征在于,在由不同的所述处理元件执行的任务之存在数据依赖的情况下,产生所述数据的处理元件将存在所述依赖关系的数据写回到所述主存储装置中;消耗所述数据的处理元件将存在所述依赖关系的数据无效化。(5) 一种程序,在多处理器系统所具备的处理器中执行运算处理,其特征在于,所述多处理器系统具备多个处理元件以及能够从所述各处理元件进行访问的主存储装置;所述各处理元件具备进行运算处理的处理器和暂时保存所述处理器所使用的数据的高速缓冲存储器;所述处理元件从所述主存储装置读入的数据暂时保存在所述高速缓冲存储器中;所述处理元件结束使用的数据从所述高速缓冲存储器写回到所述主存储装置中;
在所述主存储装置与所述高速缓冲存储器之间,按照所述高速缓冲存储器的管理单位转送数据;所述程序在各任务所使用数据的边界与存储器的管理单位不匹配的情况下,设置不可高速缓冲存储区域,将在包含该边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中,所述不可高速缓冲存储区域是应该保存在包含该边界的管理单位中的数据不暂时保存在所述高速缓冲存储器中的区域。(6)如(5)中记载的程序,其特征在于,所述处理元件包含第一处理元件和第二处理元件;使用所述不可高速缓冲存储区域进行运算的步骤包括如下步骤所述第一处理元件在所述高速缓冲存储器中,对在包含所述任务所使用数据的边界的管理单位中保存的数据进行运算;所述第二处理元件将在包含所述任务所使用数据的边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中;以及所述第二处理元件将在所述不可高速缓冲存储区域中保存的运算结果转送到所述第一处理元件的高速缓冲存储器中。(7)如(5)中记载的程序,其特征在于,所述处理元件包含第一处理元件和第二处理元件;所述不可高速缓冲存储区域设置在各个所述处理元件上;使用所述不可高速缓冲存储区域进行运算的步骤包括如下步骤所述各处理元件在自身处理元件的不可高速缓冲存储区域中,对在包含所述任务所使用数据的边界的管理单位中保存的数据进行运算;以及 所述第一处理元件将在所述不可高速缓冲存储区域中运算出的结果写入到所述第二处理元件的共享存储器中。(8)如(5)至(7)的任一项中记载的程序,其特征在于,包括在由不同的所述处理元件执行的任务之间存在数据依赖的情况下,产生所述数据的处理元件将存在所述依赖关系的数据写回到所述主存储装置中;以及消耗所述数据的处理元件将存在所述依赖关系的数据无效化。以上参照附图详细地说明了本发明,但本发明不限定于这样的具体结构,还包含所附的权利要求范围的主旨内的各种变更和同等的结构。
权利要求
1.一种代码生成方法,由编译器生成能够由多处理器系统所具备的处理器执行的代码,其特征在于, 所述多处理器系统具备多个处理元件以及能够从各个所述处理元件进行访问的主存储装置; 各个所述处理元件具备进行运算处理的处理器以及暂时保存所述处理器所使用的数据的高速缓冲存储器; 所述处理元件从所述主存储装置读入的数据暂时保存在所述高速缓冲存储器中; 由所述处理元件结束使用的数据从所述高速缓冲存储器写回到所述主存储装置中;在所述主存储装置与所述高速缓冲存储器之间,按照所述高速缓冲存储器的管理单位转送数据; 所述方法中, 对由所述处理器执行的程序进行解析; 对所述程序所包含的各任务的执行所需的数据进行解析; 基于所述解析的结果,在分割了所述各任务的情况下,判定所述分割后的任务所使用的数据的边界是否与存储器的管理单位匹配; 在判定为所述任务所使用的数据的边界与存储器的管理单位不匹配的情况下,生成如下代码 设置不可高速缓冲存储区域的代码,所述不可高速缓冲存储区域是应该保存在包含该边界的管理单位中的数据不暂时保存在所述高速缓冲存储器中的区域;以及 将包含该边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中的代码。
2.根据权利要求I所述的代码生成方法,其特征在于, 所述处理元件包括第一处理元件和第二处理元件; 在基于所述程序的解析结果判定为由所述第一处理元件执行的任务和由所述第二处理元件执行的任务间的边界与存储器的管理单位不匹配的情况下,生成如下代码 所述第一处理元件在所述高速缓冲存储器中对包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算的代码; 所述第二处理元件将包含所述任务所使用的数据的边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中的代码;以及 将所述不可高速缓冲存储区域中保存的运算结果转送给所述第一处理元件的高速缓冲存储器的代码。
3.根据权利要求I所述的代码生成方法,其特征在于, 所述处理元件包括第一处理元件和第二处理元件; 所述不可高速缓冲存储区域设置在各个所述处理元件上; 在基于所述程序的解析结果判定为由所述第一处理元件执行的任务和由所述第二处理元件执行的任务间的边界与存储器的管理单位不匹配的情况下,生成如下代码 各个所述处理元件在自身处理元件的不可高速缓冲存储区域中对包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算的代码;以及 所述第一处理元件将在所述不可高速缓冲存储区域中运算出的结果写入到所述第二处理元件的共享存储器中的代码。
4.根据权利要求I所述的代码生成方法,其特征在于, 生成将所述不可高速缓冲存储区域设置在所述主存储装置中的命令或者设定语句。
5.根据权利要求I所述的代码生成方法,其特征在于, 各个所述处理元件具备能够从所述各处理元件进行访问的分散共享存储器; 生成将所述不可高速缓冲存储区域设置在所述分散共享存储器中的命令或者设定语句。
6.根据权利要求I所述的代码生成方法,其特征在于, 在基于所述程序的解析结果判定为所述分割后的任务对所述主存储的多个区域进行访问的情况下,对于与任务所使用的数据的边界匹配的所述存储器的管理单位,以与该管理单位匹配的方式分割所述任务,对于与所述任务所使用的数据的边界不匹配的管理单位,生成使用数据不暂时保存在所述高速缓冲存储器中的不可高速缓冲存储区域来对包含所述边界的所述管理单位中保存的数据进行运算的代码。
7.根据权利要求I所述的代码生成方法,其特征在于, 在基于所述程序的解析结果判定为所述任务所使用的数据在该程序中被声明、并且仅在该程序中使用的情况下,生成将数组进行扩展以使该数据的多个要素不配置在各个所述管理单位中的代码。
8.根据权利要求7所述的代码生成方法,其特征在于, 所述任务所使用的数据是数组变量; 基于所述程序的解析结果,判定发生了所述分割后的任务所使用的数据的边界与所述管理单位的不匹配的地方, 在所述数组变量的要素保存在所述主存储装置的连续的区域中的维数的要素之间发生了所述分割后的任务所使用的数据的边界与所述管理单位的不匹配的情况下,生成将所述数组变量进行扩展以使所述数组变量的多个要素不配置在各个所述管理单位中的代码; 在所述数组变量的要素保存在所述主存储装置的连续的区域中的维数的要素之间未发生所述分割后的任务所使用的数据的边界与所述管理单位的不匹配的情况下,生成将所述数组变量进行扩展以使比发生所述不匹配的维数更下位的多个维数的所述数组变量的要素不配置在所述各管理单位中的代码。
9.根据权利要求I所述的代码生成方法,其特征在于, 所述处理元件包括第一处理元件和第二处理元件; 包括 按各个所述处理元件定义在该处理元件中使用的局部变量的代码; 所述各处理元件使用所定义的所述局部变量进行运算的代码; 所述第一处理元件将使用所述局部变量运算出的结果写回到主存储装置中的代码; 所述第二处理元件从所述主存储装置读入所述第一处理元件的运算结果的代码;以及所述第二处理元件将从所述主存储装置读入的数据写入到所述高速缓冲存储器中的代码。
10.根据权利要求I所述的代码生成方法,其特征在于,在由不同的所述处理元件执行的任务之间存在数据依赖的情况下,生成如下代码产生所述数据的处理元件将存在所述依赖关系的数据写回到所述主存储装置中的代码;以及 消耗所述数据的处理元件将存在所述依赖关系的数据无效化的代码。
11.一种存储区域管理方法,在多处理器系统所具备的处理器执行程序时对存储器的存储区域进行管理,其特征在于, 所述多处理器系统具备多个处理元件以及能够从各个所述处理元件进行访问的主存储装置; 各个所述处理元件具备进行运算处理的处理器以及暂时保存所述处理器所使用的数据的高速缓冲存储器; 所述方法包括如下步骤 所述处理元件将从所述主存储装置读入的数据按照所述高速缓冲存储器的管理单位暂时保存在所述高速缓冲存储器中; 将所述处理元件结束使用的数据按照所述高速缓冲存储器的管理单位从所述高速缓冲存储器写回到所述主存储装置中; 在分割所述程序而生成的各任务所使用的数据的边界与存储器的管理单位不匹配的情况下,设置不可高速缓冲存储区域,将包含该边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中,所述不可高速缓冲存储区域是应该保存在包含该边界的管理单位中的数据不暂时保存在所述高速缓冲存储器中的区域。
12.根据权利要求11所述的存储区域管理方法,其特征在于, 所述处理元件包括第一处理元件和第二处理元件; 使用所述不可高速缓冲存储区域进行运算的步骤包括如下步骤 所述第一处理元件在所述高速缓冲存储器中对包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算; 所述第二处理元件将包含所述任务所使用的数据的边界的管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中;以及 所述第二处理元件将所述不可高速缓冲存储区域中保存的运算结果转送给所述第一处理元件的高速缓冲存储器中。
13.根据权利要求11所述的存储区域管理方法,其特征在于, 所述处理元件包括第一处理元件和第二处理元件; 所述不可高速缓冲存储区域设置在各个所述各处理元件中; 使用所述不可高速缓冲存储区域进行运算的步骤包括如下步骤 各个所述处理元件在自身处理元件的不可高速缓冲存储区域中对包含所述任务所使用的数据的边界的管理单位中保存的数据进行运算;以及 所述第一处理元件将在所述不可高速缓冲存储区域中运算出的结果写入到所述第二处理元件的共享存储器。
14.根据权利要求11所述的存储区域管理方法,其特征在于, 在由不同的所述处理元件执行的任务之间存在数据依赖的情况下,产生所述数据的处理元件将存在所述依赖关系的数据写回到所述主存储装置中,消耗所述数据的处理元件将存在所述依赖关系的数据无效化。
15.一种存储介质,保存有生成能够由多处理器系统所具备的处理器执行的代码的程序,其特征在于, 所述多处理器系统具备多个处理元件以及能够从各个所述处理元件进行访问的主存储装置; 各个所述处理元件具备进行运算处理的处理器以及暂时保存所述处理器所使用的数据的高速缓冲存储器; 所述处理元件从所述主存储装置读入的数据暂时保存在所述高速缓冲存储器中; 由所述处理元件结束使用的数据从所述高速缓冲存储器写回到所述主存储装置中;在所述主存储装置与所述高速缓冲存储器之间,按照所述高速缓冲存储器的访问管理单位转送数据; 所述代码生成程序使执行该程序的计算机执行如下步骤 对由所述处理器执行的程序进行解析; 对所述程序所包含的各任务的执行所需的数据进行解析; 基于所述解析的结果,在将所述程序分割为所述各任务的情况下,判定所述分割后的任务所使用的数据的边界是否与存储器的访问管理单位匹配; 在所述任务所使用的数据的边界与存储器的访问管理单位不匹配的情况下,使用设置不可高速缓冲存储区域的代码,来生成将包含该任务所使用的数据的边界的访问管理单位中保存的运算结果保存在所述不可高速缓冲存储区域中的代码,所述不可高速缓冲存储区域是应该保存在包含该边界的管理单位中的数据不暂时保存在所述高速缓冲存储器中的区域。
全文摘要
一种代码生成方法,其特征在于,对由处理器执行的程序进行解析,对所述程序所包含的各任务的执行所需的数据进行解析,在基于所述解析结果将所述程序分割为各个所述任务的情况下,在判定为所述任务所使用数据的边界与存储器的管理单位不匹配的情况下,生成使用数据不暂时保存在所述高速缓冲存储器中的不可高速缓冲存储区域来对在包含该边界的管理单位中保存的数据进行运算的代码。
文档编号G06F9/45GK102713846SQ201080057540
公开日2012年10月3日 申请日期2010年12月14日 优先权日2009年12月16日
发明者木村启二, 笠原博德, 间濑正启 申请人:学校法人早稻田大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1